visual_db 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +31 -0
- data/LICENSE.txt +22 -0
- data/bin/visual_db +6 -0
- data/lib/visual_db/version.rb +3 -0
- data/lib/visual_db.rb +309 -0
- data/public/css/.DS_Store +0 -0
- data/public/css/bootstrap.min.css +7 -0
- data/public/css/main.css +153 -0
- data/public/css/starter-template.css +7 -0
- data/public/js/sorttable.js +495 -0
- data/views/about.erb +71 -0
- data/views/databases.erb +97 -0
- data/views/index.erb +77 -0
- data/views/query.erb +68 -0
- data/views/tables.erb +308 -0
- data/visual_db.gemspec +27 -0
- metadata +151 -0
data/views/about.erb
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8">
|
5
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
7
|
+
<link rel="shortcut icon" href="../../assets/ico/favicon.ico">
|
8
|
+
|
9
|
+
<title>About ~ Visual DB</title>
|
10
|
+
<link href="/css/bootstrap.min.css" rel="stylesheet">
|
11
|
+
<link href="/css/starter-template.css" rel="stylesheet">
|
12
|
+
<link href="/css/main.css" rel="stylesheet">
|
13
|
+
</head>
|
14
|
+
<body>
|
15
|
+
|
16
|
+
<div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
|
17
|
+
<div class="container">
|
18
|
+
<div class="navbar-header">
|
19
|
+
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
|
20
|
+
<span class="sr-only">Toggle navigation</span>
|
21
|
+
<span class="icon-bar"></span>
|
22
|
+
<span class="icon-bar"></span>
|
23
|
+
<span class="icon-bar"></span>
|
24
|
+
</button>
|
25
|
+
<a class="navbar-brand active" href="about">Visual DB</a>
|
26
|
+
</div>
|
27
|
+
<div class="collapse navbar-collapse">
|
28
|
+
<ul class="nav navbar-nav">
|
29
|
+
<li><a href="/">
|
30
|
+
Connect
|
31
|
+
</a></li>
|
32
|
+
<li><a href="databases">
|
33
|
+
Databases<% if $db_name %> :: <%= $db_name %><% end %>
|
34
|
+
</a></li>
|
35
|
+
<li><a href="tables">Tables
|
36
|
+
<% if $table_name %> :: <%= $table_name %><% end %>
|
37
|
+
</a></li>
|
38
|
+
<li><a href="query">
|
39
|
+
Query
|
40
|
+
</a></li>
|
41
|
+
</ul>
|
42
|
+
</div><!--/.nav-collapse -->
|
43
|
+
</div>
|
44
|
+
</div>
|
45
|
+
|
46
|
+
<div class="container">
|
47
|
+
|
48
|
+
<div class="starter-template">
|
49
|
+
<div class="well about_well">
|
50
|
+
<p style="text-align:center">
|
51
|
+
<b>Visual DB </b>is a web utility written in Ruby to view and modify mySQL
|
52
|
+
databases on local or remotely hosted systems
|
53
|
+
</p>
|
54
|
+
|
55
|
+
<hr>
|
56
|
+
|
57
|
+
<p>
|
58
|
+
<b>Homepage : </b><a href="https://github.com/at1as/visual_db">Github</a>
|
59
|
+
</p>
|
60
|
+
<p>
|
61
|
+
<b>Created by : </b> <a href="http://www.jasonwillems.com">Jason Willems</a>
|
62
|
+
</p>
|
63
|
+
<p>
|
64
|
+
<b>License :</b> Distributed under an M.I.T. license
|
65
|
+
</p>
|
66
|
+
</div>
|
67
|
+
</div>
|
68
|
+
</div><!-- /.container -->
|
69
|
+
|
70
|
+
</body>
|
71
|
+
</html>
|
data/views/databases.erb
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8">
|
5
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
7
|
+
<link rel="shortcut icon" href="../../assets/ico/favicon.ico">
|
8
|
+
|
9
|
+
<title>Connect ~ Visual DB</title>
|
10
|
+
<link href="/css/bootstrap.min.css" rel="stylesheet">
|
11
|
+
<link href="/css/starter-template.css" rel="stylesheet">
|
12
|
+
<link href="/css/main.css" rel="stylesheet">
|
13
|
+
</head>
|
14
|
+
<body>
|
15
|
+
|
16
|
+
<div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
|
17
|
+
<div class="container">
|
18
|
+
<div class="navbar-header">
|
19
|
+
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
|
20
|
+
<span class="sr-only">Toggle navigation</span>
|
21
|
+
<span class="icon-bar"></span>
|
22
|
+
<span class="icon-bar"></span>
|
23
|
+
<span class="icon-bar"></span>
|
24
|
+
</button>
|
25
|
+
<a class="navbar-brand" href="about">Visual DB</a>
|
26
|
+
</div>
|
27
|
+
<div class="collapse navbar-collapse">
|
28
|
+
<ul class="nav navbar-nav">
|
29
|
+
<li><a href="/">Connect</a></li>
|
30
|
+
<li class="active">
|
31
|
+
<a href="databases">Databases<% if $db_name %> :: <span style="color:green"><%= $db_name %></span><% end %></a>
|
32
|
+
</li>
|
33
|
+
<li><a href="tables">Tables<% if $table_name %> :: <%= $table_name %><% end %></a></li>
|
34
|
+
<li><a href="query">Query</a></li>
|
35
|
+
</ul>
|
36
|
+
</div><!--/.nav-collapse -->
|
37
|
+
</div>
|
38
|
+
</div>
|
39
|
+
|
40
|
+
<div class="container">
|
41
|
+
|
42
|
+
<div class="starter-template">
|
43
|
+
|
44
|
+
<% if $db_name %>
|
45
|
+
<h3>Using <span style="color:green"><%= $db_name %></span> Database</h3>
|
46
|
+
<% else %>
|
47
|
+
<h3>Please select Database</h3>
|
48
|
+
<% end %>
|
49
|
+
<% unless $db_error.nil? %>
|
50
|
+
<div class="db_err"><%= $db_error %></div>
|
51
|
+
<% end %>
|
52
|
+
<% unless $db_success.nil? %>
|
53
|
+
<div class="db_update">Query OK: <%= $db_success %> Rows Affected</div>
|
54
|
+
<% end %>
|
55
|
+
|
56
|
+
<div class="well db_well">
|
57
|
+
|
58
|
+
<form method="post" action="/databases" style="margin-top:20px;">
|
59
|
+
<select class="form-control" name="select_database" id="select_database">
|
60
|
+
<% $db_list.each do |database| %>
|
61
|
+
<% if database == $db_name %>
|
62
|
+
<option selected><%= database %></option>
|
63
|
+
<% else %>
|
64
|
+
<option><%= database %></option>
|
65
|
+
<% end %>
|
66
|
+
<% end %>
|
67
|
+
</select>
|
68
|
+
<% if $db_list.length > 0 %>
|
69
|
+
<input class="btn btn-block btn-primary db_btn" type="submit" value="Use Database">
|
70
|
+
<% end %>
|
71
|
+
</form>
|
72
|
+
|
73
|
+
<hr>
|
74
|
+
|
75
|
+
<form style="" method="post" action="/database">
|
76
|
+
<input class="form-control" name="database" value="" placeholder="Database Name">
|
77
|
+
<input type="hidden" name="action" value="create">
|
78
|
+
<input class="btn btn-block db_btn" type="submit" value="Create Database">
|
79
|
+
</form>
|
80
|
+
|
81
|
+
<form method="post" action="/database" style="margin-top:30px">
|
82
|
+
<input type="hidden" name="action" value="delete">
|
83
|
+
<select class="form-control" name="database" id="database">
|
84
|
+
<% $db_list.each do |database| %>
|
85
|
+
<option><%= database %></option>
|
86
|
+
<% end %>
|
87
|
+
</select>
|
88
|
+
<input class="btn btn-block db_btn" type="submit" value="Delete Database">
|
89
|
+
</form>
|
90
|
+
</div><!--/.well -->
|
91
|
+
</div><!-- /.starter-template -->
|
92
|
+
</div><!-- /.container -->
|
93
|
+
|
94
|
+
<script type="javascript">
|
95
|
+
</script>
|
96
|
+
</body>
|
97
|
+
</html>
|
data/views/index.erb
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8">
|
5
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
7
|
+
<link rel="shortcut icon" href="../../assets/ico/favicon.ico">
|
8
|
+
|
9
|
+
<title>Connect ~ Visual DB</title>
|
10
|
+
<link href="css/bootstrap.min.css" rel="stylesheet">
|
11
|
+
<link href="css/starter-template.css" rel="stylesheet">
|
12
|
+
<link href="css/main.css" rel="stylesheet">
|
13
|
+
</head>
|
14
|
+
<body>
|
15
|
+
|
16
|
+
<div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
|
17
|
+
<div class="container">
|
18
|
+
<div class="navbar-header">
|
19
|
+
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
|
20
|
+
<span class="sr-only">Toggle navigation</span>
|
21
|
+
<span class="icon-bar"></span>
|
22
|
+
<span class="icon-bar"></span>
|
23
|
+
<span class="icon-bar"></span>
|
24
|
+
</button>
|
25
|
+
<a class="navbar-brand" href="about">Visual DB</a>
|
26
|
+
</div>
|
27
|
+
<div class="collapse navbar-collapse">
|
28
|
+
<ul class="nav navbar-nav">
|
29
|
+
<li class="active"><a href="/">Connect</a></li>
|
30
|
+
<li><a href="databases">Databases<% if $db_name %> :: <%= $db_name %><% end %></a></li>
|
31
|
+
<li><a href="tables">Tables<% if $table_name %> :: <%= $table_name %><% end %></a></li>
|
32
|
+
<li><a href="query">Query</a></li>
|
33
|
+
</ul>
|
34
|
+
</div><!--/.nav-collapse -->
|
35
|
+
</div>
|
36
|
+
</div>
|
37
|
+
|
38
|
+
<div class="container">
|
39
|
+
|
40
|
+
<div class="starter-template">
|
41
|
+
|
42
|
+
<% if $sql_conn %>
|
43
|
+
<h3 style="color:green">Successfully Connected</h3>
|
44
|
+
<% else %>
|
45
|
+
<h3>Please enter your MySQL credentials</h3>
|
46
|
+
<% end %>
|
47
|
+
<% if $db_error %>
|
48
|
+
<span class="db_err"><%= $db_error %></span>
|
49
|
+
<% end %>
|
50
|
+
<div class="well login_well">
|
51
|
+
<form method="post" action="/connect">
|
52
|
+
<b>Host</b>
|
53
|
+
<input class="form-control" name="hostname" id="hostname" value="localhost" >
|
54
|
+
<b>Port</b>
|
55
|
+
<input class="form-control" name="port" id="port" value="3306" >
|
56
|
+
<b>Username</b>
|
57
|
+
<input class="form-control" name="username" id="username" value="root" autofocus >
|
58
|
+
<b>Password</b>
|
59
|
+
<input class="form-control" name="password" id="password" placeholder="" >
|
60
|
+
<% if !$sql_conn %>
|
61
|
+
<input class="btn btn-block btn-primary login_btn" type="submit" value="Connect">
|
62
|
+
<% end %>
|
63
|
+
</form>
|
64
|
+
|
65
|
+
<% if $sql_conn %>
|
66
|
+
<form method="post" action="/disconnect">
|
67
|
+
<input class="btn btn-block btn-primary login_btn" type="submit" value="Disconnect">
|
68
|
+
</form>
|
69
|
+
<% end %>
|
70
|
+
|
71
|
+
</div><!-- /.well -->
|
72
|
+
</div><!-- /.starter-template -->
|
73
|
+
|
74
|
+
</div><!-- /.container -->
|
75
|
+
|
76
|
+
</body>
|
77
|
+
</html>
|
data/views/query.erb
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8">
|
5
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
7
|
+
<link rel="shortcut icon" href="../../assets/ico/favicon.ico">
|
8
|
+
|
9
|
+
<title>About ~ Visual DB</title>
|
10
|
+
<link href="/css/bootstrap.min.css" rel="stylesheet">
|
11
|
+
<link href="/css/starter-template.css" rel="stylesheet">
|
12
|
+
<link href="/css/main.css" rel="stylesheet">
|
13
|
+
</head>
|
14
|
+
<body>
|
15
|
+
|
16
|
+
<div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
|
17
|
+
<div class="container">
|
18
|
+
<div class="navbar-header">
|
19
|
+
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
|
20
|
+
<span class="sr-only">Toggle navigation</span>
|
21
|
+
<span class="icon-bar"></span>
|
22
|
+
<span class="icon-bar"></span>
|
23
|
+
<span class="icon-bar"></span>
|
24
|
+
</button>
|
25
|
+
<a class="navbar-brand active" href="about">Visual DB</a>
|
26
|
+
</div>
|
27
|
+
<div class="collapse navbar-collapse">
|
28
|
+
<ul class="nav navbar-nav">
|
29
|
+
<li>
|
30
|
+
<a href="/">Connect</a>
|
31
|
+
</li>
|
32
|
+
<li>
|
33
|
+
<a href="databases">Databases<% if $db_name %> :: <%= $db_name %><% end %></a>
|
34
|
+
</li>
|
35
|
+
<li>
|
36
|
+
<a href="tables">Tables<% if $table_name %> :: <%= $table_name %><% end %></a>
|
37
|
+
</li>
|
38
|
+
<li class="active">
|
39
|
+
<a href="query">Query</a>
|
40
|
+
</li>
|
41
|
+
</ul>
|
42
|
+
</div><!--/.nav-collapse -->
|
43
|
+
</div>
|
44
|
+
</div>
|
45
|
+
|
46
|
+
<div class="container">
|
47
|
+
|
48
|
+
<div class="starter-template">
|
49
|
+
<h2>Enter an SQL query</h2>
|
50
|
+
<% unless $db_error.nil? %>
|
51
|
+
<div class="db_err"><%= $db_error %></div>
|
52
|
+
<% end %>
|
53
|
+
<% unless $db_success.nil? %>
|
54
|
+
<div class="db_update">Query OK: <%= $db_success %> Rows Affected</div>
|
55
|
+
<% end %>
|
56
|
+
<div class="well query_well">
|
57
|
+
<div>
|
58
|
+
<form method="post" action="/query">
|
59
|
+
<input class="form-control" name="query" id="query" placeholder="SQL Query">
|
60
|
+
<input class="btn btn-block btn-primary query_btn" type="submit" value="Submit">
|
61
|
+
</form>
|
62
|
+
</div>
|
63
|
+
</div>
|
64
|
+
</div>
|
65
|
+
|
66
|
+
</div><!-- /.container -->
|
67
|
+
</body>
|
68
|
+
</html>
|
data/views/tables.erb
ADDED
@@ -0,0 +1,308 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8">
|
5
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
7
|
+
<link rel="shortcut icon" href="../../assets/ico/favicon.ico">
|
8
|
+
|
9
|
+
<title>Connect ~ Visual DB</title>
|
10
|
+
<link href="/css/bootstrap.min.css" rel="stylesheet">
|
11
|
+
<link href="/css/starter-template.css" rel="stylesheet">
|
12
|
+
<link href="/css/main.css" rel="stylesheet">
|
13
|
+
|
14
|
+
<!-- Table Sorting -->
|
15
|
+
<script src="/js/sorttable.js"></script>
|
16
|
+
</head>
|
17
|
+
<body>
|
18
|
+
|
19
|
+
<div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
|
20
|
+
<div class="container">
|
21
|
+
<div class="navbar-header">
|
22
|
+
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
|
23
|
+
<span class="sr-only">Toggle navigation</span>
|
24
|
+
<span class="icon-bar"></span>
|
25
|
+
<span class="icon-bar"></span>
|
26
|
+
<span class="icon-bar"></span>
|
27
|
+
</button>
|
28
|
+
<a class="navbar-brand" href="/about">Visual DB</a>
|
29
|
+
</div>
|
30
|
+
<div class="collapse navbar-collapse">
|
31
|
+
<ul class="nav navbar-nav">
|
32
|
+
<li>
|
33
|
+
<a href="/">Connect</a>
|
34
|
+
</li>
|
35
|
+
<li>
|
36
|
+
<a href="/databases">Databases<% if $db_name %> :: <%= $db_name %><% end %></a>
|
37
|
+
</li>
|
38
|
+
<li class="active">
|
39
|
+
<a href="/tables">Tables<% if $table_name %> :: <span class="head_active"><%= $table_name %></span><% end %></a>
|
40
|
+
</li>
|
41
|
+
<li>
|
42
|
+
<a href="/query">Query</a>
|
43
|
+
</li>
|
44
|
+
</ul>
|
45
|
+
</div><!--/.nav-collapse -->
|
46
|
+
</div>
|
47
|
+
</div>
|
48
|
+
|
49
|
+
<div class="container">
|
50
|
+
<div class="starter-template">
|
51
|
+
<% unless $db_error.nil? %>
|
52
|
+
<div class="db_err"><%= $db_error %></div>
|
53
|
+
<% end %>
|
54
|
+
<% unless $db_success.nil? %>
|
55
|
+
<div class="db_update">Query OK: <%= $db_success %> Rows Affected</div>
|
56
|
+
<% end %>
|
57
|
+
|
58
|
+
<div style="margin-left:auto; margin-right:auto">
|
59
|
+
<div class="well table_well">
|
60
|
+
|
61
|
+
<h4>Database :: <span id="db_name" style="color:green"><%= $db_name %></span></h4>
|
62
|
+
<div class="tbl_info">Tables : <%= $db_tables.length %></div>
|
63
|
+
|
64
|
+
<!-- START SELECT TABLE -->
|
65
|
+
<form method="post" action="/tables" style="display:inline-block">
|
66
|
+
<span style="display:inline-block">
|
67
|
+
<% if $db_tables.length > 0 %>
|
68
|
+
<select class="form-control inline_input" name="select_table" id="select_table">
|
69
|
+
<% $db_tables.each do |table_name| %>
|
70
|
+
<% if table_name == $table_name %>
|
71
|
+
<option selected><%=table_name%></option>
|
72
|
+
<% else %>
|
73
|
+
<option><%=table_name%></option>
|
74
|
+
<% end %>
|
75
|
+
<% end %>
|
76
|
+
</select>
|
77
|
+
<% end %>
|
78
|
+
</span>
|
79
|
+
<span class="inline_btn_container">
|
80
|
+
<% if $db_tables.length > 0 %>
|
81
|
+
<input class="btn btn-block btn-primary inline_btn" type="submit" value="Select Table">
|
82
|
+
<% end %>
|
83
|
+
</span>
|
84
|
+
</form>
|
85
|
+
|
86
|
+
<!-- START CREATE TABLE -->
|
87
|
+
<form method="post" action="/table" style="margin-top:10px;">
|
88
|
+
<input type="hidden" name="action" value="create">
|
89
|
+
<span style="display:inline-block;">
|
90
|
+
<input class="form-control inline_input" name="new_table" value="" placeholder="Name (fields)">
|
91
|
+
</span>
|
92
|
+
<span class="inline_btn_container">
|
93
|
+
<input class="btn btn-block inline_btn" type="submit" value="Create New Table">
|
94
|
+
</span>
|
95
|
+
</form>
|
96
|
+
|
97
|
+
<!-- START DELETE TABLE -->
|
98
|
+
<% if $db_tables.length > 0 %>
|
99
|
+
<form method="post" action="/table" style="margin-top:10px">
|
100
|
+
<input type="hidden" name="action" value="delete">
|
101
|
+
<span style="display:inline-block">
|
102
|
+
<select class="form-control inline_input" name="table" id="table">
|
103
|
+
<% $db_tables.each do |table_name| %>
|
104
|
+
<option><%=table_name%></option>
|
105
|
+
<% end %>
|
106
|
+
</select>
|
107
|
+
</span>
|
108
|
+
<span class="inline_btn_container">
|
109
|
+
<input class="btn btn-block inline_btn" type="submit" value="Delete Table">
|
110
|
+
</span>
|
111
|
+
</form>
|
112
|
+
<% end %>
|
113
|
+
</div>
|
114
|
+
|
115
|
+
<!-- START FILTER FROM TABLE -->
|
116
|
+
<% if $table_name %>
|
117
|
+
<div class="well table_well">
|
118
|
+
|
119
|
+
<% if $table_name %>
|
120
|
+
<h4>Table :: <span id="table_name" style="color:green"><%= $table_name %></span></h4>
|
121
|
+
<% end %>
|
122
|
+
|
123
|
+
<div class="tbl_info">
|
124
|
+
<span class="tbl_info_entry">Rows : <%= $full_table.num_rows %></span>
|
125
|
+
<span class="tbl_info_entry">Columns : <%= $full_table.num_fields %></span>
|
126
|
+
<span class="tbl_info_entry">Cells : <%= $full_table.num_rows * $full_table.num_fields %></span>
|
127
|
+
</div>
|
128
|
+
|
129
|
+
<!-- START FILTER FROM TABLE -->
|
130
|
+
<form method="post" action="/table/query">
|
131
|
+
|
132
|
+
<div class="form-row">
|
133
|
+
<label class="form-label tbl_form_label">Action</label>
|
134
|
+
<select class="form-control tbl_action_input" name="query_action" id="query_action" onchange="update_query()">
|
135
|
+
<option value="filter">Filter</option>
|
136
|
+
<option value="insert">Insert</option>
|
137
|
+
<option value="update">Update</option>
|
138
|
+
<option value="delete">Delete</option>
|
139
|
+
<option value="alter">Alter</option>
|
140
|
+
<option value="showcols">Show Columns</option>
|
141
|
+
</select>
|
142
|
+
</div>
|
143
|
+
|
144
|
+
<div class="form-row" id="set_params_container" style="display:none">
|
145
|
+
<label id="set_form_label" class="form-label tbl_form_label">Set Params</label>
|
146
|
+
<span style="display:inline-block;">
|
147
|
+
<input class="form-control tbl_action_input" name="set_params" id="set_params" value="" placeholder="field1=new-value1, field2=new-value2">
|
148
|
+
</span>
|
149
|
+
</div>
|
150
|
+
|
151
|
+
<div class="form-row" id="params_container">
|
152
|
+
<label id="query_form_label" class="form-label tbl_form_label">Params</label>
|
153
|
+
<span style="display:inline-block;">
|
154
|
+
<input class="form-control tbl_action_input" name="query_params" id="query_params" value="" placeholder="SELECT * FROM TABLENAME WHERE <query>">
|
155
|
+
</span>
|
156
|
+
</div>
|
157
|
+
|
158
|
+
<div>
|
159
|
+
<span>
|
160
|
+
<label class="form-control tbl_sql_label" word-wrap name="full_query" id="full_query">SELECT * FROM TABLE WHERE</label>
|
161
|
+
</span>
|
162
|
+
<div>
|
163
|
+
<input class="btn btn-block btn-primary tbl_action_btn" id="table_action_btn"; type="submit" value="Filter Table">
|
164
|
+
</div>
|
165
|
+
</div>
|
166
|
+
</form>
|
167
|
+
|
168
|
+
</div>
|
169
|
+
<% end %>
|
170
|
+
|
171
|
+
<!-- START COLUMNS DISPLAY -->
|
172
|
+
|
173
|
+
<% if $table_cols %>
|
174
|
+
<div style="display:table; margin: 0 auto;">
|
175
|
+
<table class="table table-striped sortable" data-sortable>
|
176
|
+
<tr><!--HEADERS-->
|
177
|
+
<% ["field", "type", "null", "key", "default", "extra"].each do |heading| %>
|
178
|
+
<td class="header_cell">
|
179
|
+
<%= heading %>
|
180
|
+
</td>
|
181
|
+
<% end %>
|
182
|
+
</tr>
|
183
|
+
<!-- BODY -->
|
184
|
+
<% $table_cols.each do |row| %>
|
185
|
+
<tr>
|
186
|
+
<% row.each do |cell| %>
|
187
|
+
<td><%= cell rescue "ERR" %> </td>
|
188
|
+
<% end %>
|
189
|
+
</tr>
|
190
|
+
<% end %>
|
191
|
+
</table>
|
192
|
+
</div>
|
193
|
+
<% end %>
|
194
|
+
|
195
|
+
<!-- START TABLE DISPLAY -->
|
196
|
+
<% if $full_table && $table_cols.nil? %>
|
197
|
+
<div style="display:table; margin: 0 auto;">
|
198
|
+
<table class="table table-striped sortable" data-sortable>
|
199
|
+
<tr><!--HEADERS-->
|
200
|
+
<% $full_table.num_fields.times do |i| %>
|
201
|
+
<td class="header_cell">
|
202
|
+
<%= $full_table.fetch_field_direct(i).name %>
|
203
|
+
<% if $full_table.fetch_field_direct(i).is_pri_key? %>*<% end %>
|
204
|
+
</td>
|
205
|
+
<% end %>
|
206
|
+
</tr>
|
207
|
+
|
208
|
+
<!--BODY-->
|
209
|
+
<% $full_table.num_rows.times do %>
|
210
|
+
<tr>
|
211
|
+
<% row_contents = $full_table.fetch_row %>
|
212
|
+
<% $full_table.num_fields.times do |i| %>
|
213
|
+
<td >
|
214
|
+
<%= row_contents[i] rescue "ERR" %>
|
215
|
+
</td>
|
216
|
+
<% end %>
|
217
|
+
</tr>
|
218
|
+
<% end %>
|
219
|
+
</table>
|
220
|
+
</div>
|
221
|
+
<% end %>
|
222
|
+
<!-- END TABLE DISPLAY -->
|
223
|
+
</div>
|
224
|
+
|
225
|
+
<!-- START CSV DOWNLOAD -->
|
226
|
+
<% if $full_table && $table_cols.nil? %>
|
227
|
+
<form method="post" action="/csv">
|
228
|
+
<div class="well csv_well">
|
229
|
+
<input class="btn btn-block csv_btn" type="submit" value="Download Table as CSV">
|
230
|
+
</div>
|
231
|
+
</form>
|
232
|
+
<% end %>
|
233
|
+
|
234
|
+
</div><!-- /.container -->
|
235
|
+
|
236
|
+
<script type="text/javascript">
|
237
|
+
|
238
|
+
var query_params = document.getElementById("query_params");
|
239
|
+
|
240
|
+
function update_query() {
|
241
|
+
|
242
|
+
// TODO: Exceptions when elements not present
|
243
|
+
var action = document.getElementById("query_action").value;
|
244
|
+
var params_view = document.getElementById("params_container");
|
245
|
+
var params = document.getElementById("query_params");
|
246
|
+
var set_params_view = document.getElementById("set_params_container");
|
247
|
+
var set_params = document.getElementById("set_params");
|
248
|
+
var table_name = document.getElementById("table_name").innerHTML;
|
249
|
+
var db_name = document.getElementById("db_name").innerHTML;
|
250
|
+
var db_table = " " + db_name + "." + table_name + " ";
|
251
|
+
var full_query = document.getElementById("full_query");
|
252
|
+
var field_label = document.getElementById("query_form_label");
|
253
|
+
var query_btn = document.getElementById("table_action_btn");
|
254
|
+
var clause = "";
|
255
|
+
var setter = "";
|
256
|
+
|
257
|
+
(action === "update" || action ==="insert" || action ==="alter" ? set_params_view.style.display = "" : set_params_view.style.display = "none");
|
258
|
+
(action === "insert" || action ==="alter" || action==="showcols" ? params_view.style.display = "none" : params_view.style.display = "");
|
259
|
+
|
260
|
+
if (action === "insert") {
|
261
|
+
field_label.innerHTML = "Params";
|
262
|
+
set_params.placeholder = "(field1, field2) VALUES (\"value1\", \"value2\")";
|
263
|
+
(params.value === "" ? clause = set_params.placeholder : clause = set_params.value);
|
264
|
+
full_query.innerHTML = "INSERT INTO" + db_table + clause;
|
265
|
+
}
|
266
|
+
else if (action === "update") {
|
267
|
+
field_label.innerHTML = "Clause";
|
268
|
+
params.placeholder = "(field1, field2)=(\"value1\", \"value2\")";
|
269
|
+
(params.value === "" ? clause = params.placeholder : clause = params.value);
|
270
|
+
(set_params.value === "" ? setter = set_params.placeholder : setter = set_params.value);
|
271
|
+
full_query.innerHTML = "UPDATE" + db_table + "SET " + setter + " WHERE " + clause;
|
272
|
+
}
|
273
|
+
else if (action === "filter") {
|
274
|
+
field_label.innerHTML = "Clause";
|
275
|
+
params.placeholder = "(field1, field2)=(\"value1\", \"value2\")";
|
276
|
+
(params.value === "" ? clause = params.placeholder : clause = params.value);
|
277
|
+
full_query.innerHTML = "SELECT * FROM" + db_table + "WHERE " + clause;
|
278
|
+
}
|
279
|
+
else if (action === "delete") {
|
280
|
+
field_label.innerHTML = "Clause";
|
281
|
+
params.placeholder = "(field1, field2)=(\"value1\", \"value2\")";
|
282
|
+
(params.value === "" ? clause = params.placeholder : clause = params.value);
|
283
|
+
full_query.innerHTML = "DELETE FROM" + db_table + "WHERE " + clause;
|
284
|
+
}
|
285
|
+
else if (action === "alter") {
|
286
|
+
field_label.innerHTML = "Command";
|
287
|
+
set_params.placeholder = "action column args";
|
288
|
+
(params.value === "" ? clause = set_params.placeholder : clause = set_params.value);
|
289
|
+
full_query.innerHTML = "ALTER TABLE" + db_table + clause;
|
290
|
+
}
|
291
|
+
else if (action === "showcols") {
|
292
|
+
full_query.innerHTML = "SHOW COLUMNS FROM" + db_table;
|
293
|
+
}
|
294
|
+
|
295
|
+
query_btn.value = action.substring(0,1).toUpperCase() + action.substring(1);
|
296
|
+
};
|
297
|
+
|
298
|
+
if (document.getElementById("query_params")) {
|
299
|
+
document.getElementById("query_params").addEventListener("input", function(){
|
300
|
+
update_query();
|
301
|
+
});
|
302
|
+
}
|
303
|
+
|
304
|
+
update_query();
|
305
|
+
|
306
|
+
</script>
|
307
|
+
</body>
|
308
|
+
</html>
|
data/visual_db.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'visual_db/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "visual_db"
|
8
|
+
spec.date = "2015-02-13"
|
9
|
+
spec.version = VisualDb::VERSION
|
10
|
+
spec.authors = ["Jason Willems"]
|
11
|
+
spec.email = ["jason@willems.ca"]
|
12
|
+
spec.summary = "Visual SQL"
|
13
|
+
spec.description = "Browser front-end for navigating and modifying mySQL databases"
|
14
|
+
spec.homepage = "https://github.com/at1as/visual_db"
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0")
|
18
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_runtime_dependency "sinatra", "~>1.4", ">= 1.4.5"
|
22
|
+
spec.add_runtime_dependency "mysql", "~> 2.9", ">= 2.9.1"
|
23
|
+
spec.add_runtime_dependency "vegas", "~> 0.1", ">= 0.1.11"
|
24
|
+
spec.add_development_dependency "bundler", "~> 1.7"
|
25
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
26
|
+
end
|
27
|
+
|