sqlui 0.1.66 → 0.1.68
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.release-version +1 -1
- data/app/database_metadata.rb +78 -1
- data/app/server.rb +1 -1
- data/app/sql_parser.rb +3 -3
- data/app/views/databases.erb +22 -30
- data/app/views/sqlui.erb +83 -4
- data/client/resources/help.css +30 -0
- data/client/resources/sqlui.css +86 -58
- data/client/resources/sqlui.js +938 -508
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6a167a65032b5a64b37d6e25c6589669151951d75f3964be73d2f8e6ba9f0833
|
4
|
+
data.tar.gz: 0a25e8597d5955c1bd6c04cf31834d8666672662a49a646ee03a3d55d1e268bf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 95d82ede6b694eef5cab00c48aae318dbf9e55ee0a20a1f41a40abc8013a4ea245cf0b530160da10e620e572e60ac1e696bb360d4fd2037a870b2ecf250e1ac4
|
7
|
+
data.tar.gz: d1b720a016ab0ed8716164aefc45b2a9db9c0aac876eda2f9210fda6184d739b6b7b3efd50a01e2d11bcf299906522a17994ffa90ea124c72ac1ca38dd536201
|
data/.release-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.68
|
data/app/database_metadata.rb
CHANGED
@@ -10,6 +10,7 @@ class DatabaseMetadata
|
|
10
10
|
def lookup(client, database_config)
|
11
11
|
result = load_columns(client, database_config)
|
12
12
|
load_stats(result, client, database_config)
|
13
|
+
load_tables(result, client, database_config)
|
13
14
|
|
14
15
|
result
|
15
16
|
end
|
@@ -91,7 +92,7 @@ class DatabaseMetadata
|
|
91
92
|
from information_schema.statistics
|
92
93
|
#{where_clause}
|
93
94
|
order by table_schema, table_name, if(index_name = "PRIMARY", 0, index_name), seq_in_index;
|
94
|
-
|
95
|
+
SQL
|
95
96
|
)
|
96
97
|
stats_result.each do |row|
|
97
98
|
table_schema = row.shift
|
@@ -110,5 +111,81 @@ class DatabaseMetadata
|
|
110
111
|
column[:column_name] = column_name
|
111
112
|
end
|
112
113
|
end
|
114
|
+
|
115
|
+
def load_tables(result, client, _database_config)
|
116
|
+
tables_result = client.query(
|
117
|
+
<<~SQL
|
118
|
+
SELECT
|
119
|
+
TABLE_SCHEMA,
|
120
|
+
TABLE_NAME,
|
121
|
+
CREATE_TIME,
|
122
|
+
UPDATE_TIME,
|
123
|
+
ENGINE,
|
124
|
+
TABLE_ROWS,
|
125
|
+
AVG_ROW_LENGTH,
|
126
|
+
DATA_LENGTH,
|
127
|
+
INDEX_LENGTH,
|
128
|
+
TABLE_COLLATION,
|
129
|
+
AUTO_INCREMENT
|
130
|
+
FROM information_schema.TABLES;
|
131
|
+
SQL
|
132
|
+
)
|
133
|
+
tables_hash = {}
|
134
|
+
tables_result.each do |row|
|
135
|
+
table_schema = row.shift
|
136
|
+
table_name = row.shift
|
137
|
+
tables_hash[table_schema] ||= {}
|
138
|
+
tables_hash[table_schema][table_name] = {
|
139
|
+
created_at: row.shift,
|
140
|
+
updated_at: row.shift,
|
141
|
+
engine: row.shift,
|
142
|
+
rows: add_thousands_separator(row.shift),
|
143
|
+
average_row_size: pretty_data_size(row.shift),
|
144
|
+
data_size: pretty_data_size(row.shift),
|
145
|
+
index_size: pretty_data_size(row.shift),
|
146
|
+
encoding: row.shift,
|
147
|
+
auto_increment: add_thousands_separator(row.shift)
|
148
|
+
}
|
149
|
+
end
|
150
|
+
result.each do |table_schema, schema_hash|
|
151
|
+
schema_hash[:tables].each do |table_name, table|
|
152
|
+
table[:info] = tables_hash[table_schema][table_name]
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
def pretty_data_size(size)
|
158
|
+
if size.nil?
|
159
|
+
return nil
|
160
|
+
elsif size < 1024
|
161
|
+
unit = "byte#{size == 1 ? '' : 's'}"
|
162
|
+
converted = size
|
163
|
+
elsif size < 1024 * 1024
|
164
|
+
unit = 'KiB'
|
165
|
+
converted = (size.to_f / 1024).round(2)
|
166
|
+
elsif size < 1024 * 1024 * 1024
|
167
|
+
unit = 'MiB'
|
168
|
+
converted = (size.to_f / (1024 * 1024)).round(2)
|
169
|
+
elsif size < 1024 * 1024 * 1024 * 1024
|
170
|
+
unit = 'GiB'
|
171
|
+
converted = (size.to_f / (1024 * 1024 * 1024)).round(2)
|
172
|
+
end
|
173
|
+
|
174
|
+
"#{add_thousands_separator(converted)} #{unit}"
|
175
|
+
end
|
176
|
+
|
177
|
+
def add_thousands_separator(value)
|
178
|
+
return nil if value.nil?
|
179
|
+
|
180
|
+
integer = value.round(1).floor
|
181
|
+
fractional = ((value.round(1) - integer) * 10).floor
|
182
|
+
|
183
|
+
with_commas = integer.to_s.reverse.scan(/.{1,3}/).join(',').reverse
|
184
|
+
if fractional.zero?
|
185
|
+
with_commas
|
186
|
+
else
|
187
|
+
"#{with_commas}.#{fractional}"
|
188
|
+
end
|
189
|
+
end
|
113
190
|
end
|
114
191
|
end
|
data/app/server.rb
CHANGED
@@ -255,7 +255,7 @@ class Server < Sinatra::Base
|
|
255
255
|
end
|
256
256
|
end
|
257
257
|
|
258
|
-
get(/#{Regexp.escape("#{config.base_url_path}/#{database.url_path}/")}(query|graph|structure|
|
258
|
+
get(/#{Regexp.escape("#{config.base_url_path}/#{database.url_path}/")}(query|graph|saved|structure|help)/) do
|
259
259
|
status 200
|
260
260
|
headers 'Cache-Control' => 'no-cache'
|
261
261
|
client_config = config.airbrake[:client] || {}
|
data/app/sql_parser.rb
CHANGED
@@ -40,10 +40,10 @@ class SqlParser
|
|
40
40
|
multi_commented = true
|
41
41
|
elsif multi_commented && char == '*' && scanner.peek(1) == '/'
|
42
42
|
multi_commented = false
|
43
|
-
elsif multi_commented
|
43
|
+
elsif multi_commented || (single_commented && char != "\n")
|
44
44
|
next
|
45
45
|
elsif !single_quoted && !double_quoted && !escaped && !multi_commented &&
|
46
|
-
char == '-' && scanner.peek(
|
46
|
+
char == '-' && scanner.peek(2).match?(/-[ \n\t]/)
|
47
47
|
current += scanner.getch
|
48
48
|
single_commented = true
|
49
49
|
elsif !single_quoted && !double_quoted && !escaped && !multi_commented && char == '#'
|
@@ -51,7 +51,7 @@ class SqlParser
|
|
51
51
|
elsif single_commented && char == "\n"
|
52
52
|
single_commented = false
|
53
53
|
elsif single_commented
|
54
|
-
|
54
|
+
single_commented = false if char == "\n"
|
55
55
|
elsif char == '\\'
|
56
56
|
escaped = true
|
57
57
|
elsif char == "'"
|
data/app/views/databases.erb
CHANGED
@@ -11,18 +11,6 @@
|
|
11
11
|
margin: 0;
|
12
12
|
}
|
13
13
|
|
14
|
-
h1 {
|
15
|
-
font-size: 22px;
|
16
|
-
}
|
17
|
-
|
18
|
-
h2 {
|
19
|
-
font-size: 20px;
|
20
|
-
}
|
21
|
-
|
22
|
-
p {
|
23
|
-
font-size: 18px;
|
24
|
-
}
|
25
|
-
|
26
14
|
.header-box {
|
27
15
|
display: flex;
|
28
16
|
flex-direction: row;
|
@@ -37,6 +25,12 @@
|
|
37
25
|
align-items: center;
|
38
26
|
justify-content: start;
|
39
27
|
color: #333;
|
28
|
+
font-size: 22px;
|
29
|
+
}
|
30
|
+
|
31
|
+
.header {
|
32
|
+
font-weight: bold;
|
33
|
+
padding-left: 5px;
|
40
34
|
}
|
41
35
|
|
42
36
|
.server-name {
|
@@ -45,30 +39,28 @@
|
|
45
39
|
font-weight: normal;
|
46
40
|
}
|
47
41
|
|
48
|
-
.
|
42
|
+
.links {
|
49
43
|
display: flex;
|
50
44
|
flex-direction: row;
|
51
45
|
align-items: center;
|
46
|
+
margin-top: 5px;
|
52
47
|
}
|
53
48
|
|
54
|
-
.
|
55
|
-
|
56
|
-
padding-left: 5px;
|
57
|
-
}
|
58
|
-
|
59
|
-
.database a {
|
60
|
-
margin-right: 5px;
|
49
|
+
.link {
|
50
|
+
margin-right: 10px;
|
61
51
|
color: darkblue;
|
62
|
-
font-size:
|
52
|
+
font-size: 17px;
|
63
53
|
text-decoration: none;
|
64
54
|
}
|
65
55
|
|
66
|
-
.
|
67
|
-
margin: 0
|
56
|
+
.name {
|
57
|
+
margin: 0 200px 0 0;
|
58
|
+
font-size: 20px;
|
68
59
|
}
|
69
60
|
|
70
|
-
.
|
71
|
-
margin:
|
61
|
+
.description {
|
62
|
+
margin: 20px 0 0;
|
63
|
+
font-size: 18px;
|
72
64
|
}
|
73
65
|
|
74
66
|
.database {
|
@@ -90,11 +82,11 @@
|
|
90
82
|
</div>
|
91
83
|
<% config.database_configs.each do |database_config| %>
|
92
84
|
<div class="database">
|
93
|
-
<
|
94
|
-
|
95
|
-
<a class='query-link' href="<%= "#{config.base_url_path}/#{database_config.url_path}/query" %>">query</a>
|
96
|
-
<a class='saved-link' href="<%= "#{config.base_url_path}/#{database_config.url_path}/saved" %>">saved</a>
|
97
|
-
<a class='structure-link' href="<%= "#{config.base_url_path}/#{database_config.url_path}/structure" %>">structure</a>
|
85
|
+
<h2 class='name'><%= database_config.display_name %></h2>
|
86
|
+
<div class="links">
|
87
|
+
<a class='link query-link' href="<%= "#{config.base_url_path}/#{database_config.url_path}/query" %>">query</a>
|
88
|
+
<a class='link saved-link' href="<%= "#{config.base_url_path}/#{database_config.url_path}/saved" %>">saved</a>
|
89
|
+
<a class='link structure-link' href="<%= "#{config.base_url_path}/#{database_config.url_path}/structure" %>">structure</a>
|
98
90
|
</div>
|
99
91
|
<p class='description'>
|
100
92
|
<%= database_config.description %>
|
data/app/views/sqlui.erb
CHANGED
@@ -22,6 +22,7 @@
|
|
22
22
|
<script type="text/javascript" src="<%= resource_path_map['sqlui.js'] %>"></script>
|
23
23
|
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
|
24
24
|
<link rel="stylesheet" href="<%= resource_path_map['sqlui.css'] %>">
|
25
|
+
<link rel="stylesheet" href="<%= resource_path_map['help.css'] %>">
|
25
26
|
</head>
|
26
27
|
|
27
28
|
<body>
|
@@ -36,6 +37,7 @@
|
|
36
37
|
<a id="graph-tab-button" class="tab-button">Graph</a>
|
37
38
|
<a id="saved-tab-button" class="tab-button">Saved</a>
|
38
39
|
<a id="structure-tab-button" class="tab-button">Structure</a>
|
40
|
+
<a id="help-tab-button" class="tab-button">Help</a>
|
39
41
|
</div>
|
40
42
|
|
41
43
|
<div id="query-box" class="tab-content-element graph-element query-element" style="display: none;">
|
@@ -84,10 +86,16 @@
|
|
84
86
|
|
85
87
|
<div id="structure-box" class="tab-content-element structure-element" style="display: none;">
|
86
88
|
<div class="structure-wrapper">
|
87
|
-
<
|
88
|
-
|
89
|
-
|
90
|
-
|
89
|
+
<div id="schemas-tables-and-stats">
|
90
|
+
<div id="schemas-and-tables">
|
91
|
+
<select id="schemas" size="4">
|
92
|
+
</select>
|
93
|
+
<select id="tables" size="4">
|
94
|
+
</select>
|
95
|
+
</div>
|
96
|
+
<div id="stats">
|
97
|
+
</div>
|
98
|
+
</div>
|
91
99
|
<div id="table-info">
|
92
100
|
<div id="columns">
|
93
101
|
</div>
|
@@ -97,6 +105,77 @@
|
|
97
105
|
</div>
|
98
106
|
</div>
|
99
107
|
|
108
|
+
<div id="help-box" class="tab-content-element" style="display: none;">
|
109
|
+
<h2>Keyboard Shortcuts</h2>
|
110
|
+
<table id="keyboard-shortcuts">
|
111
|
+
<tbody>
|
112
|
+
<tr class="keyboard-shortcut-section"><td colspan="3">App Shortcuts</td></tr>
|
113
|
+
<tr class="keyboard-shortcut-header"><td> Mac</td><td>Windows</td><td>Action</td></tr>
|
114
|
+
<tr><td>Escape</td><td>Escape</td><td>Focus editor, Close popup</td></tr>
|
115
|
+
|
116
|
+
<tr class="keyboard-shortcut-section"><td colspan="3">Editor Submit Shortcuts</td></tr>
|
117
|
+
<tr class="keyboard-shortcut-header"><td> Mac</td><td>Windows</td><td>Action</td></tr>
|
118
|
+
<tr><td>Cmd+Enter</td><td>Ctrl+Enter</td><td>Execute query at cursor / selection</td></tr>
|
119
|
+
<tr><td>Cmd+Shift+Enter</td><td>Ctrl+Shift+Enter</td><td>Execute entire editor</td></tr>
|
120
|
+
|
121
|
+
<tr class="keyboard-shortcut-section"><td colspan="3">Editor Standard Shortcuts</td></tr>
|
122
|
+
<tr class="keyboard-shortcut-header"><td> Mac</td><td>Windows</td><td>Action</td></tr>
|
123
|
+
<tr><td>ArrowLeft</td><td>ArrowLeft</td><td>Move cursor left one character</td></tr>
|
124
|
+
<tr><td>ArrowRight</td><td>ArrowRight</td><td>Move cursor right one character</td></tr>
|
125
|
+
<tr><td>Alt+ArrowLeft</td><td>Ctrl+ArrowLeft</td><td>Move cursor one group left</td></tr>
|
126
|
+
<tr><td>Alt+ArrowRight</td><td>Ctrl+ArrowRight</td><td>Move cursor one group right</td></tr>
|
127
|
+
<tr><td>Cmd+ArrowLeft</td><td></td><td>Move cursor to start of line</td></tr>
|
128
|
+
<tr><td>Cmd+ArrowRight</td><td></td><td>Move cursor to end of line</td></tr>
|
129
|
+
<tr><td>ArrowUp</td><td>ArrowUp</td><td>Move cursor up one line</td></tr>
|
130
|
+
<tr><td>ArrowDown</td><td>ArrowDown</td><td>Move cursor down one line</td></tr>
|
131
|
+
<tr><td>Cmd+ArrowUp</td><td></td><td>Move cursor to start of document</td></tr>
|
132
|
+
<tr><td>Cmd+ArrowDown</td><td></td><td>Move cursor to end of document</td></tr>
|
133
|
+
<tr><td>Cmd+End</td><td>Ctrl+End</td><td>Move cursor to start of document</td></tr>
|
134
|
+
<tr><td>Cmd+Home</td><td>Ctrl+Home</td><td>Move cursor to end of document</td></tr>
|
135
|
+
<tr><td>PageUp</td><td>PageUp</td><td>Move cursor one page up</td></tr>
|
136
|
+
<tr><td>PageDown</td><td>PageDown</td><td>Move cursor one page down</td></tr>
|
137
|
+
<tr><td>Home</td><td>Home</td><td>Move cursor to previous line boundary</td></tr>
|
138
|
+
<tr><td>End</td><td>End</td><td>Move cursor to next line boundary</td></tr>
|
139
|
+
<tr><td>Enter</td><td>Enter</td><td>Insert new line and indent</td></tr>
|
140
|
+
<tr><td>Cmd+a</td><td>Ctrl+a</td><td>Select all</td></tr>
|
141
|
+
<tr><td>Backspace</td><td>Backspace</td><td>Delete previous character</td></tr>
|
142
|
+
<tr><td>Delete</td><td>Delete</td><td>Delete next character</td></tr>
|
143
|
+
<tr><td>Alt+Backspace</td><td>Ctrl+Backspace</td><td>Delete previous group</td></tr>
|
144
|
+
<tr><td>Alt+Delete</td><td>Ctrl+Delete</td><td>Delete next group</td></tr>
|
145
|
+
<tr><td>Cmd+Backspace</td><td></td><td>Delete to start of line</td></tr>
|
146
|
+
<tr><td>Cmd+Delete</td><td></td><td>Delete to end of line</td></tr>
|
147
|
+
|
148
|
+
<tr class="keyboard-shortcut-section"><td colspan="3">Editor Default Shortcuts</td></tr>
|
149
|
+
<tr class="keyboard-shortcut-header"><td> Mac</td><td>Windows</td><td>Action</td></tr>
|
150
|
+
<tr><td>Alt+ArrowUp</td><td>Alt+ArrowUp</td><td>Move line up</td></tr>
|
151
|
+
<tr><td>Alt+ArrowDown</td><td>Alt+ArrowDown</td><td>Move line down</td></tr>
|
152
|
+
<tr><td>Shift+Alt+ArrowUp</td><td>Shift+Alt+ArrowUp</td><td>Copy line up</td></tr>
|
153
|
+
<tr><td>Shift+Alt+ArrowDown</td><td>Shift+Alt+ArrowDown</td><td>Copy line down</td></tr>
|
154
|
+
<tr><td>Escape</td><td>Escape</td><td>Simplify selection</td></tr>
|
155
|
+
<tr><td>Shift+Enter</td><td>Shift+Enter</td><td>Insert blank line</td></tr>
|
156
|
+
<tr><td>Ctrl+l</td><td>Alt+l</td><td>Select line</td></tr>
|
157
|
+
<tr><td>Cmd+i</td><td>Ctrl+i</td><td>Expand current selection</td></tr>
|
158
|
+
<tr><td>Cmd+[</td><td>Ctrl+[</td><td>Decrease indent</td></tr>
|
159
|
+
<tr><td>Cmd+]</td><td>Ctrl+]</td><td>Increase indent</td></tr>
|
160
|
+
<tr><td>Cmd+Alt+\</td><td>Ctrl+Alt+\</td><td>Indent selection</td></tr>
|
161
|
+
<tr><td>Shift+Cmd+k</td><td>Shift+Ctrl+k</td><td>Delete line</td></tr>
|
162
|
+
<tr><td>Shift+Cmd+\</td><td>Shift+Ctrl+\</td><td>cursorMatchingBracket</td></tr>
|
163
|
+
<tr><td>Cmd+/</td><td>Ctrl+/</td><td>Toggle comment</td></tr>
|
164
|
+
<tr><td>Shift+Alt+a</td><td>Shift+Alt+a</td><td>Toggle comment</td></tr>
|
165
|
+
|
166
|
+
<tr class="keyboard-shortcut-section"><td colspan="3">Editor Completion Shortcuts</td></tr>
|
167
|
+
<tr class="keyboard-shortcut-header"><td> Mac</td><td>Windows</td><td>Action</td></tr>
|
168
|
+
<tr><td>Ctrl+Space</td><td>Ctrl+Space</td><td>Start completion</td></tr>
|
169
|
+
<tr><td>Escape</td><td>Escape</td><td>Close completion</td></tr>
|
170
|
+
<tr><td>ArrowUp</td><td>ArrowUp</td><td>Move selection up</td></tr>
|
171
|
+
<tr><td>ArrowDown</td><td>ArrowDown</td><td>Move selection down</td></tr>
|
172
|
+
<tr><td>PageUp</td><td>PageUp</td><td>Move selection page up</td></tr>
|
173
|
+
<tr><td>PageDown</td><td>PageDown</td><td>Move selection page down</td></tr>
|
174
|
+
<tr><td>Enter</td><td>Enter</td><td>Accept completion</td></tr>
|
175
|
+
</tbody>
|
176
|
+
</table>
|
177
|
+
</div>
|
178
|
+
|
100
179
|
<div id="status-box">
|
101
180
|
<div id="status-message"></div>
|
102
181
|
<div style="flex: 1;"></div>
|
@@ -0,0 +1,30 @@
|
|
1
|
+
#help-box h2 {
|
2
|
+
font-size: 22px;
|
3
|
+
margin: 10px 0 20px 0;
|
4
|
+
}
|
5
|
+
#help-box table#keyboard-shortcuts {
|
6
|
+
border-collapse: collapse;
|
7
|
+
}
|
8
|
+
|
9
|
+
#help-box table#keyboard-shortcuts tr.keyboard-shortcut-header {
|
10
|
+
font-weight: bold;
|
11
|
+
background: #efefef;
|
12
|
+
}
|
13
|
+
|
14
|
+
#help-box table#keyboard-shortcuts td, #help-box table#keyboard-shortcuts tr.keyboard-shortcut-header {
|
15
|
+
text-align: left;
|
16
|
+
border: 1px solid #ddd;
|
17
|
+
padding: 10px;
|
18
|
+
font-size: 14px;
|
19
|
+
}
|
20
|
+
|
21
|
+
#help-box table#keyboard-shortcuts .keyboard-shortcut-section td {
|
22
|
+
border: none;
|
23
|
+
font-weight: bold;
|
24
|
+
padding: 20px 5px 5px 0;
|
25
|
+
font-size: 16px;
|
26
|
+
}
|
27
|
+
|
28
|
+
#help-box table#keyboard-shortcuts tr.keyboard-shortcut-section:first-child td {
|
29
|
+
padding-top: 0;
|
30
|
+
}
|
data/client/resources/sqlui.css
CHANGED
@@ -8,18 +8,6 @@ body {
|
|
8
8
|
overflow: hidden;
|
9
9
|
}
|
10
10
|
|
11
|
-
h1 {
|
12
|
-
font-size: 22px;
|
13
|
-
}
|
14
|
-
|
15
|
-
h2 {
|
16
|
-
font-size: 20px;
|
17
|
-
}
|
18
|
-
|
19
|
-
p {
|
20
|
-
font-size: 18px;
|
21
|
-
}
|
22
|
-
|
23
11
|
#loading-box {
|
24
12
|
font-family: monospace;
|
25
13
|
display: flex;
|
@@ -48,6 +36,7 @@ p {
|
|
48
36
|
align-items: center;
|
49
37
|
justify-content: start;
|
50
38
|
color: #333;
|
39
|
+
font-size: 22px;
|
51
40
|
}
|
52
41
|
|
53
42
|
#header {
|
@@ -126,6 +115,7 @@ p {
|
|
126
115
|
cursor: row-resize;
|
127
116
|
flex-direction: column;
|
128
117
|
align-items: center;
|
118
|
+
padding-left: 220px; /* To center the resizer icon. Ok, it's a hack. Get over it. */
|
129
119
|
}
|
130
120
|
|
131
121
|
#cancel-button {
|
@@ -135,7 +125,7 @@ p {
|
|
135
125
|
border: 1px solid #888;
|
136
126
|
height: 32px;
|
137
127
|
font-size: 18px;
|
138
|
-
margin: 0
|
128
|
+
margin: 0;
|
139
129
|
}
|
140
130
|
|
141
131
|
#cancel-button-spacer {
|
@@ -252,17 +242,18 @@ p {
|
|
252
242
|
text-overflow: ellipsis;
|
253
243
|
}
|
254
244
|
|
255
|
-
#result-box, #fetch-sql-box, #
|
245
|
+
#result-box, #fetch-sql-box, #graph-box, #saved-box, #structure-box, #help-box {
|
256
246
|
flex: 1;
|
257
247
|
overflow: auto;
|
258
248
|
display: flex;
|
259
249
|
flex-direction: column;
|
260
250
|
}
|
261
|
-
|
251
|
+
|
252
|
+
.resize-table tbody tr td {
|
262
253
|
height: 21px;
|
263
254
|
}
|
264
255
|
|
265
|
-
|
256
|
+
.resize-table tbody tr td abbr a {
|
266
257
|
color: #555;
|
267
258
|
cursor: pointer;
|
268
259
|
text-decoration: none;
|
@@ -274,7 +265,7 @@ table tbody tr td {
|
|
274
265
|
user-select: none;
|
275
266
|
}
|
276
267
|
|
277
|
-
|
268
|
+
.resize-table tbody tr td abbr {
|
278
269
|
margin: 0 5px 0 0;
|
279
270
|
text-decoration: none;
|
280
271
|
position: relative;
|
@@ -290,53 +281,50 @@ table tbody tr td {
|
|
290
281
|
padding: 20px;
|
291
282
|
}
|
292
283
|
|
293
|
-
table {
|
284
|
+
.resize-table {
|
294
285
|
font-family: monospace;
|
295
286
|
border-spacing: 0;
|
296
287
|
color: #333;
|
297
288
|
font-size: 18px;
|
298
289
|
}
|
299
290
|
|
300
|
-
table td:last-child, table th:last-child {
|
291
|
+
.resize-table td:last-child, .resize-table th:last-child {
|
301
292
|
border-right: none !important;
|
293
|
+
max-width: none;
|
302
294
|
}
|
303
295
|
|
304
|
-
td, th {
|
296
|
+
.resize-table td, .resize-table th {
|
305
297
|
font-weight: normal;
|
306
298
|
white-space: nowrap;
|
307
299
|
max-width: 500px;
|
308
300
|
}
|
309
301
|
|
310
|
-
|
311
|
-
max-width: none;
|
312
|
-
}
|
313
|
-
|
314
|
-
td {
|
302
|
+
.resize-table td {
|
315
303
|
overflow: hidden;
|
316
304
|
text-overflow: ellipsis;
|
317
305
|
padding: 5px 10px;
|
318
306
|
text-align: right;
|
319
307
|
}
|
320
308
|
|
321
|
-
|
309
|
+
.resize-table tbody tr td .cell-content-wrapper {
|
322
310
|
display: flex;
|
323
311
|
}
|
324
312
|
|
325
|
-
|
313
|
+
.resize-table tbody tr td .cell-value {
|
326
314
|
flex: 1;
|
327
315
|
}
|
328
316
|
|
329
|
-
th {
|
317
|
+
.resize-table th {
|
330
318
|
font-weight: bold;
|
331
319
|
border-bottom: 1px solid #ddd;
|
332
320
|
border-right: 1px solid #ddd;
|
333
321
|
}
|
334
322
|
|
335
|
-
th div.col-content-wrapper {
|
323
|
+
.resize-table th div.col-content-wrapper {
|
336
324
|
display: flex;
|
337
325
|
}
|
338
326
|
|
339
|
-
th div.col-name {
|
327
|
+
.resize-table th div.col-name {
|
340
328
|
overflow: hidden;
|
341
329
|
text-overflow: ellipsis;
|
342
330
|
flex: 1;
|
@@ -345,14 +333,14 @@ th div.col-name {
|
|
345
333
|
padding: 5px 10px;
|
346
334
|
}
|
347
335
|
|
348
|
-
th div.col-resizer {
|
336
|
+
.resize-table th div.col-resizer {
|
349
337
|
width: 7px;
|
350
338
|
position: relative;
|
351
339
|
left: 5px; /* center over the right border */
|
352
340
|
cursor: col-resize;
|
353
341
|
}
|
354
342
|
|
355
|
-
thead {
|
343
|
+
.resize-table thead {
|
356
344
|
padding: 0;
|
357
345
|
background-color: #fff;
|
358
346
|
position: -webkit-sticky;
|
@@ -384,16 +372,28 @@ thead {
|
|
384
372
|
font-family: Helvetica, sans-serif;
|
385
373
|
}
|
386
374
|
|
387
|
-
|
388
|
-
|
375
|
+
.links {
|
376
|
+
display: flex;
|
377
|
+
flex-direction: row;
|
378
|
+
align-items: center;
|
379
|
+
margin-top: 5px;
|
389
380
|
}
|
390
381
|
|
391
|
-
.
|
392
|
-
|
382
|
+
.link {
|
383
|
+
margin-right: 10px;
|
384
|
+
color: darkblue;
|
385
|
+
font-size: 17px;
|
386
|
+
text-decoration: none;
|
393
387
|
}
|
394
388
|
|
395
|
-
|
396
|
-
margin: 0;
|
389
|
+
.name {
|
390
|
+
margin: 0 200px 0 0;
|
391
|
+
font-size: 20px;
|
392
|
+
}
|
393
|
+
|
394
|
+
.description {
|
395
|
+
margin: 20px 0 0;
|
396
|
+
font-size: 18px;
|
397
397
|
}
|
398
398
|
|
399
399
|
.saved-list-item {
|
@@ -402,25 +402,8 @@ thead {
|
|
402
402
|
padding: 10px;
|
403
403
|
}
|
404
404
|
|
405
|
-
.saved-list-item
|
406
|
-
|
407
|
-
}
|
408
|
-
|
409
|
-
.saved-list-item p {
|
410
|
-
margin: 10px 0 0;
|
411
|
-
}
|
412
|
-
|
413
|
-
.name-and-links {
|
414
|
-
display: flex;
|
415
|
-
flex-direction: row;
|
416
|
-
align-items: center;
|
417
|
-
}
|
418
|
-
|
419
|
-
.name-and-links a {
|
420
|
-
margin-right: 5px;
|
421
|
-
color: darkblue;
|
422
|
-
font-size: 16px;
|
423
|
-
text-decoration: none;
|
405
|
+
.saved-list-item:last-child {
|
406
|
+
border-bottom: none;
|
424
407
|
}
|
425
408
|
|
426
409
|
.cm-editor.cm-focused {
|
@@ -435,10 +418,49 @@ thead {
|
|
435
418
|
height: 100%;
|
436
419
|
}
|
437
420
|
|
421
|
+
#schemas-and-tables {
|
422
|
+
display: flex;
|
423
|
+
flex-direction: row;
|
424
|
+
flex: 1;
|
425
|
+
}
|
426
|
+
|
427
|
+
#schemas-tables-and-stats {
|
428
|
+
display: flex;
|
429
|
+
flex-direction: column;
|
430
|
+
border-right: 1px solid #ddd;
|
431
|
+
min-width: 400px;
|
432
|
+
}
|
433
|
+
|
434
|
+
#stats {
|
435
|
+
border-top: 1px solid #ddd;
|
436
|
+
padding: 5px 0;
|
437
|
+
}
|
438
|
+
|
439
|
+
#stats table {
|
440
|
+
width: 100%;
|
441
|
+
}
|
442
|
+
|
443
|
+
#stats table td {
|
444
|
+
padding: 2px 5px;
|
445
|
+
font-size: 18px;
|
446
|
+
color: #333;
|
447
|
+
}
|
448
|
+
|
449
|
+
#stats table td:nth-child(1) {
|
450
|
+
text-align: left;
|
451
|
+
font-family: Helvetica, sans-serif;
|
452
|
+
}
|
453
|
+
|
454
|
+
#stats table td:nth-child(2) {
|
455
|
+
text-align: right;
|
456
|
+
font-family: monospace;
|
457
|
+
}
|
458
|
+
|
438
459
|
#schemas, #tables {
|
439
460
|
border: none;
|
440
461
|
display: flex;
|
441
|
-
|
462
|
+
flex: 1;
|
463
|
+
padding: 5px
|
442
464
|
}
|
443
465
|
|
444
466
|
#table-info {
|
@@ -531,3 +553,9 @@ select {
|
|
531
553
|
.jump-button {
|
532
554
|
font-size: 12px;
|
533
555
|
}
|
556
|
+
|
557
|
+
#help-box {
|
558
|
+
font-family: Helvetica, sans-serif;
|
559
|
+
padding: 10px;
|
560
|
+
width: 100%;
|
561
|
+
}
|