sqlui 0.1.52 → 0.1.54

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 67496893776f87c67e14c32003e03f5ad2efa2dede7afc7efb6b7d69a6489fcc
4
- data.tar.gz: c7b0678eada7efa6b22666950b16157e5dfd06bebee46b978e2a8c2339a456e0
3
+ metadata.gz: 62f95d3843d478f8bec0c3b78beb490f731fc00608126c6ac6a6093235912ec7
4
+ data.tar.gz: 756c530843ef0f7f684f40f919d7e71c8284bb0910082758ea05dc4c9358d20c
5
5
  SHA512:
6
- metadata.gz: 23df6f8e5acdff2a680e933db3730f989d8e4f6cc51829f091c7aa12651a27ab3179eac4a31eae3d6f4dbd314000628dc0deca94c553f359f599e2a44d25bfbe
7
- data.tar.gz: 3389a5572cddc8ebe39b7d12eb7fef3d1548aae2a2957b0eeea96fa18e622acc204eb85bc1aec68556757058ac3142b5471e1001a61678a124a7fd55c36a2154
6
+ metadata.gz: a4abb367d1945feda08acf76583501baf457dd15ef3b8b7a76c39160e6171628a89dff645116c845ecd8e01cb9b150378f4e052f68686479ae2fd5c4ea0e1f39
7
+ data.tar.gz: 6327b8f5e755c37b5399f10a16187b61fd975c42c48a83f282861dee6a6e0cf44702acd34ae30a3b681db9a2f4e4c2622162d99d77101fe429fcd4e485314d8f
data/.release-version ADDED
@@ -0,0 +1 @@
1
+ 0.1.54
data/app/server.rb CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'base64'
4
4
  require 'csv'
5
+ require 'digest/md5'
5
6
  require 'erb'
6
7
  require 'json'
7
8
  require 'prometheus/middleware/collector'
@@ -13,6 +14,7 @@ require_relative 'database_metadata'
13
14
  require_relative 'mysql_types'
14
15
  require_relative 'sql_parser'
15
16
  require_relative 'sqlui'
17
+ require_relative 'version'
16
18
 
17
19
  # SQLUI Sinatra server.
18
20
  class Server < Sinatra::Base
@@ -21,13 +23,14 @@ class Server < Sinatra::Base
21
23
  end
22
24
 
23
25
  def self.init_and_run(config, resources_dir)
26
+ logger.info("Starting SQLUI v#{Version::SQLUI}")
24
27
  logger.info("Airbrake enabled: #{config.airbrake[:server]&.[](:enabled) || false}")
25
28
  if config.airbrake[:server]&.[](:enabled)
26
29
  require 'airbrake'
27
30
  require 'airbrake/rack'
28
31
 
29
32
  Airbrake.configure do |c|
30
- c.app_version = File.read('.version').strip
33
+ c.app_version = Version::SQLUI
31
34
  c.environment = config.environment
32
35
  c.logger.level = Logger::DEBUG if config.environment != :production?
33
36
  config.airbrake[:server].each do |key, value|
@@ -56,6 +59,10 @@ class Server < Sinatra::Base
56
59
  set :raise_errors, false
57
60
  set :show_exceptions, false
58
61
 
62
+ favicon_hash = Digest::MD5.hexdigest(File.read(File.join(resources_dir, 'favicon.svg')))
63
+ css_hash = Digest::MD5.hexdigest(File.read(File.join(resources_dir, 'sqlui.css')))
64
+ js_hash = Digest::MD5.hexdigest(File.read(File.join(resources_dir, 'sqlui.js')))
65
+
59
66
  get '/-/health' do
60
67
  status 200
61
68
  body 'OK'
@@ -66,10 +73,12 @@ class Server < Sinatra::Base
66
73
  end
67
74
 
68
75
  get '/favicon.svg' do
76
+ headers 'Cache-Control' => 'max-age=31536000'
69
77
  send_file File.join(resources_dir, 'favicon.svg')
70
78
  end
71
79
 
72
80
  get "#{config.list_url_path}/?" do
81
+ headers 'Cache-Control' => 'no-cache'
73
82
  erb :databases, locals: { config: config }
74
83
  end
75
84
 
@@ -80,11 +89,13 @@ class Server < Sinatra::Base
80
89
 
81
90
  get "#{database.url_path}/sqlui.css" do
82
91
  headers 'Content-Type' => 'text/css; charset=utf-8'
92
+ headers 'Cache-Control' => 'max-age=31536000'
83
93
  send_file File.join(resources_dir, 'sqlui.css')
84
94
  end
85
95
 
86
96
  get "#{database.url_path}/sqlui.js" do
87
97
  headers 'Content-Type' => 'text/javascript; charset=utf-8'
98
+ headers 'Cache-Control' => 'max-age=31536000'
88
99
  send_file File.join(resources_dir, 'sqlui.js')
89
100
  end
90
101
 
@@ -183,6 +194,7 @@ class Server < Sinatra::Base
183
194
  sql = find_selected_query(sql, params[:selection])
184
195
 
185
196
  content_type 'application/csv; charset=utf-8'
197
+ headers 'Cache-Control' => 'no-cache'
186
198
  attachment 'result.csv'
187
199
  status 200
188
200
 
@@ -199,12 +211,16 @@ class Server < Sinatra::Base
199
211
 
200
212
  get(%r{#{Regexp.escape(database.url_path)}/(query|graph|structure|saved)}) do
201
213
  status 200
214
+ headers 'Cache-Control' => 'no-cache'
202
215
  client_config = config.airbrake[:client] || {}
203
216
  erb :sqlui, locals: {
204
217
  environment: config.environment.to_s,
205
218
  airbrake_enabled: client_config[:enabled] || false,
206
219
  airbrake_project_id: client_config[:project_id] || '',
207
- airbrake_project_key: client_config[:project_key] || ''
220
+ airbrake_project_key: client_config[:project_key] || '',
221
+ js_hash: js_hash,
222
+ css_hash: css_hash,
223
+ favicon_hash: favicon_hash
208
224
  }
209
225
  end
210
226
  end
data/app/sqlui.rb CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  require_relative 'sqlui_config'
4
4
  require_relative 'server'
5
+ require_relative 'version'
5
6
 
6
7
  # Main entry point.
7
8
  class Sqlui
@@ -25,7 +26,7 @@ class Sqlui
25
26
 
26
27
  def self.from_command_line(args)
27
28
  if args.include?('-v') || args.include?('--version')
28
- puts File.read('.version')
29
+ puts Version::SQLUI
29
30
  exit
30
31
  end
31
32
 
data/app/version.rb ADDED
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Version
4
+ SQLUI = File.read(File.expand_path(File.join(__dir__, '..', '.release-version'))).strip
5
+ end
data/app/views/sqlui.erb CHANGED
@@ -1,8 +1,9 @@
1
+ <!DOCTYPE html>
1
2
  <html lang="en">
2
3
  <head>
3
4
  <meta charset="utf-8">
4
5
  <title>SQLUI</title>
5
- <link rel="icon" type="image/x-icon" href="/favicon.svg">
6
+ <link rel="icon" type="image/x-icon" href="/favicon.svg?<%= favicon_hash %>">
6
7
  <!-- Initialize Airbrake before loading the main app JS so that we can catch errors as early as possible. -->
7
8
  <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/@airbrake/browser"></script>
8
9
  <script type="text/javascript">
@@ -18,9 +19,9 @@
18
19
  window.airbrake?.notify(error)
19
20
  }
20
21
  </script>
21
- <script type="text/javascript" src="sqlui.js"></script>
22
+ <script type="text/javascript" src="sqlui.js?<%= js_hash %>"></script>
22
23
  <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
23
- <link rel="stylesheet" href="sqlui.css">
24
+ <link rel="stylesheet" href="sqlui.css?<%= css_hash %>">
24
25
  </head>
25
26
 
26
27
  <body>
@@ -1,4 +1,9 @@
1
+ html {
2
+ height: 100%;
3
+ }
4
+
1
5
  body {
6
+ height: 100%;
2
7
  margin: 0;
3
8
  overflow: hidden;
4
9
  }
@@ -245,8 +250,8 @@ p {
245
250
  display: flex;
246
251
  flex-direction: column;
247
252
  }
248
- #result-table tbody tr td{
249
- height: calc(21px + 10px); // 21 for text, 10 for top and bottom padding of 5
253
+ table tbody tr td {
254
+ height: 21px;
250
255
  }
251
256
 
252
257
  #result-table tbody tr td abbr a {
@@ -264,10 +269,7 @@ p {
264
269
  margin: 0 5px 0 0;
265
270
  text-decoration: none;
266
271
  position: relative;
267
- }
268
-
269
- #result-table tbody tr td abbr:last-child {
270
- margin: 0;
272
+ bottom: 2px; /* To make the links look vertically centered. */
271
273
  }
272
274
 
273
275
  .fetch-sql-box {
@@ -281,41 +283,62 @@ p {
281
283
 
282
284
  table {
283
285
  font-family: monospace;
284
- flex: 1;
285
286
  border-spacing: 0;
286
- display: flex;
287
- width: 100%;
288
287
  color: #333;
289
288
  font-size: 18px;
289
+ width: 100%;
290
+ table-layout: auto; /* Will be overridden if a column is resized. */
290
291
  }
291
292
 
292
293
  table td:last-child, table th:last-child {
293
- width: 100%;
294
294
  border-right: none !important;
295
295
  }
296
296
 
297
297
  td, th {
298
- padding: 5px 10px;
299
298
  font-weight: normal;
300
299
  white-space: nowrap;
301
300
  max-width: 500px;
302
- overflow: hidden;
303
- text-overflow: ellipsis;
304
301
  }
305
302
 
306
303
  td {
304
+ overflow: hidden;
305
+ text-overflow: ellipsis;
306
+ padding: 5px 10px;
307
307
  text-align: right;
308
308
  }
309
309
 
310
+ #result-table tbody tr td .cell-content-wrapper {
311
+ display: flex;
312
+ }
313
+
314
+ #result-table tbody tr td .cell-value {
315
+ flex: 1;
316
+ }
317
+
310
318
  th {
311
- text-align: left;
312
319
  font-weight: bold;
313
320
  border-bottom: 1px solid #ddd;
314
321
  border-right: 1px solid #ddd;
315
322
  }
316
323
 
317
- table {
318
- display: block;
324
+ th div.col-content-wrapper {
325
+ display: flex;
326
+ }
327
+
328
+ th div.col-name {
329
+ overflow: hidden;
330
+ text-overflow: ellipsis;
331
+ flex: 1;
332
+ height: 21px;
333
+ text-align: left;
334
+ padding: 5px 10px;
335
+ }
336
+
337
+ th div.col-resizer {
338
+ width: 7px;
339
+ position: relative;
340
+ left: 5px; /* center over the right border */
341
+ cursor: col-resize;
319
342
  }
320
343
 
321
344
  thead {
@@ -325,7 +348,6 @@ thead {
325
348
  position: sticky;
326
349
  top: 0;
327
350
  z-index: 1;
328
- table-layout: fixed;
329
351
  }
330
352
 
331
353
  .highlighted-row {
@@ -24182,27 +24182,152 @@
24182
24182
  return match ? match[1] : identifier
24183
24183
  }
24184
24184
 
24185
- function createTable (columns, rows, id, headerRenderer, cellRenderer) {
24185
+ const drag = {
24186
+ containerElement: null,
24187
+ tableElement: null,
24188
+ thElement: null,
24189
+ colElement: null,
24190
+ otherColWidths: null,
24191
+ lastColElement: null
24192
+ };
24193
+
24194
+ document.addEventListener('mousedown', (event) => {
24195
+ if (event.target.classList.contains('col-resizer')) {
24196
+ event.preventDefault();
24197
+ const thElement = event.target.parentElement.parentElement;
24198
+ if (thElement.tagName.toLowerCase() !== 'th') {
24199
+ throw new Error(`expected th element, found: ${thElement}`)
24200
+ }
24201
+ const trElement = thElement.parentElement;
24202
+ const theadElement = trElement.parentElement;
24203
+ drag.tableElement = theadElement.parentElement;
24204
+ drag.containerElement = drag.tableElement.parentElement;
24205
+ drag.thElement = thElement;
24206
+ drag.colElement = document.getElementById(event.target.dataset.colId);
24207
+
24208
+ const colElements = Array.from(drag.colElement.parentElement.childNodes);
24209
+ drag.lastColElement = colElements[colElements.length - 1];
24210
+ drag.otherColWidths = [];
24211
+ for (let i = 0; i < colElements.length - 1; i++) {
24212
+ if (colElements[i] !== drag.colElement) {
24213
+ drag.otherColWidths.push(colElements[i].getBoundingClientRect().width);
24214
+ }
24215
+ }
24216
+ colElements.forEach((element) => {
24217
+ element.style.width = `${element.getBoundingClientRect().width}px`;
24218
+ });
24219
+ drag.tableElement.style.tableLayout = 'fixed';
24220
+ }
24221
+ });
24222
+
24223
+ document.addEventListener('mouseup', (event) => {
24224
+ drag.containerElement = null;
24225
+ drag.tableElement = null;
24226
+ drag.thElement = null;
24227
+ drag.colElement = null;
24228
+ drag.otherColWidths = null;
24229
+ drag.lastColElement = null;
24230
+ });
24231
+
24232
+ document.addEventListener('mousemove', (event) => {
24233
+ if (drag.colElement) {
24234
+ const scrollOffset = drag.containerElement.scrollLeft;
24235
+ const scrolled = scrollOffset > 0;
24236
+ const containerOffset = drag.containerElement.offsetLeft;
24237
+ const newColumnWidth = Math.max(0, scrollOffset + (event.clientX - containerOffset) - drag.thElement.offsetLeft);
24238
+ if (newColumnWidth < drag.colElement.getBoundingClientRect().width && newColumnWidth < 30) return
24239
+
24240
+ drag.colElement.style.width = `${newColumnWidth}px`;
24241
+ let runningWidth = newColumnWidth;
24242
+ drag.otherColWidths.forEach((width) => {
24243
+ runningWidth += width;
24244
+ });
24245
+ let remainingWidth;
24246
+ if (scrolled) {
24247
+ remainingWidth = (scrollOffset + drag.containerElement.getBoundingClientRect().width) - runningWidth;
24248
+ } else {
24249
+ remainingWidth = Math.max(10, drag.containerElement.getBoundingClientRect().width - runningWidth);
24250
+ }
24251
+ drag.lastColElement.style.width = `${remainingWidth}px`;
24252
+ runningWidth += remainingWidth;
24253
+ drag.tableElement.style.width = `${runningWidth}px`;
24254
+ }
24255
+ });
24256
+
24257
+ function createTable (containerElement, columns, rows, id, cellRenderer) {
24258
+ if (!containerElement) throw new Error('missing table containerElement')
24259
+ if (!columns) throw new Error('missing table columns')
24260
+ if (!rows) throw new Error('missing table rows')
24261
+ if (!id) throw new Error('missing table id')
24262
+
24186
24263
  const tableElement = document.createElement('table');
24187
24264
  if (id) tableElement.id = id;
24265
+
24266
+ const colgroupElement = document.createElement('colgroup');
24267
+ tableElement.appendChild(colgroupElement);
24268
+
24188
24269
  const theadElement = document.createElement('thead');
24189
- const headerTrElement = document.createElement('tr');
24190
- const tbodyElement = document.createElement('tbody');
24191
- theadElement.appendChild(headerTrElement);
24192
24270
  tableElement.appendChild(theadElement);
24271
+
24272
+ const tbodyElement = document.createElement('tbody');
24193
24273
  tableElement.appendChild(tbodyElement);
24194
24274
 
24195
- columns.forEach(function (columnName) {
24196
- if (headerRenderer) {
24197
- headerRenderer(headerTrElement, columnName);
24198
- } else {
24199
- const headerElement = document.createElement('th');
24200
- headerElement.innerText = columnName;
24201
- headerTrElement.appendChild(headerElement);
24202
- }
24275
+ const headerTrElement = document.createElement('tr');
24276
+ theadElement.appendChild(headerTrElement);
24277
+
24278
+ const nonLastColElements = [];
24279
+ columns.forEach(function (column, index) {
24280
+ const headerElement = document.createElement('th');
24281
+ headerTrElement.appendChild(headerElement);
24282
+
24283
+ const contentWrapperElement = document.createElement('div');
24284
+ contentWrapperElement.classList.add('col-content-wrapper');
24285
+ headerElement.appendChild(contentWrapperElement);
24286
+
24287
+ const nameElement = document.createElement('div');
24288
+ nameElement.classList.add('col-name');
24289
+ contentWrapperElement.appendChild(nameElement);
24290
+
24291
+ const colElement = document.createElement('col');
24292
+ colElement.id = `${id}-col-${index}`;
24293
+ colgroupElement.appendChild(colElement);
24294
+ nonLastColElements.push(colElement);
24295
+
24296
+ const resizerElement = document.createElement('div');
24297
+ resizerElement.classList.add('col-resizer');
24298
+ resizerElement.dataset.colId = colElement.id;
24299
+ contentWrapperElement.appendChild(resizerElement);
24300
+
24301
+ nameElement.innerText = column;
24203
24302
  });
24204
24303
  if (columns.length > 0) {
24205
24304
  headerTrElement.appendChild(document.createElement('th'));
24305
+ const lastColElement = document.createElement('col');
24306
+ lastColElement.style.width = '100%';
24307
+ function resize () {
24308
+ let runningWidth = 0;
24309
+ const colElements = Array.from(tableElement.getElementsByTagName('col'));
24310
+ nonLastColElements.forEach((element, index) => {
24311
+ runningWidth += element.getBoundingClientRect().width;
24312
+ });
24313
+ const remainingWidth = Math.max(10, containerElement.getBoundingClientRect().width - runningWidth);
24314
+ colElements[colElements.length - 1].style.width = `${remainingWidth}px`;
24315
+ runningWidth += remainingWidth;
24316
+ tableElement.style.width = `${runningWidth}px`;
24317
+ }
24318
+
24319
+ const resizeObserver = new ResizeObserver(resize);
24320
+ resizeObserver.observe(containerElement);
24321
+
24322
+ const mutationObserver = new MutationObserver((mutationList, observer) => {
24323
+ if (!tableElement.parentElement) {
24324
+ resizeObserver.unobserve(containerElement);
24325
+ resizeObserver.unobserve(containerElement);
24326
+ observer.disconnect();
24327
+ }
24328
+ });
24329
+ mutationObserver.observe(containerElement, { childList: true });
24330
+ colgroupElement.appendChild(lastColElement);
24206
24331
  }
24207
24332
  let highlight = false;
24208
24333
  rows.forEach(function (row) {
@@ -24212,9 +24337,9 @@
24212
24337
  }
24213
24338
  highlight = !highlight;
24214
24339
  tbodyElement.appendChild(rowElement);
24215
- row.forEach(function (value, i) {
24340
+ row.forEach(function (value, index) {
24216
24341
  if (cellRenderer) {
24217
- cellRenderer(rowElement, columns[i], value);
24342
+ cellRenderer(rowElement, index, value);
24218
24343
  } else {
24219
24344
  const cellElement = document.createElement('td');
24220
24345
  cellElement.innerText = value;
@@ -24223,7 +24348,7 @@
24223
24348
  });
24224
24349
  rowElement.appendChild(document.createElement('td'));
24225
24350
  });
24226
- return tableElement
24351
+ containerElement.appendChild(tableElement);
24227
24352
  }
24228
24353
 
24229
24354
  /* global google */
@@ -24540,7 +24665,13 @@
24540
24665
  }
24541
24666
  rows.push(row);
24542
24667
  }
24543
- columnsElement.appendChild(createTable(columns, rows, null));
24668
+ const cellRenderer = function (rowElement, _columnIndex, value) {
24669
+ const cellElement = document.createElement('td');
24670
+ cellElement.style.textAlign = (typeof value) === 'string' ? 'left' : 'right';
24671
+ cellElement.innerText = value;
24672
+ rowElement.appendChild(cellElement);
24673
+ };
24674
+ createTable(columnsElement, columns, rows, 'columns-table', cellRenderer);
24544
24675
  }
24545
24676
 
24546
24677
  const indexEntries = Object.entries(table.indexes);
@@ -24560,7 +24691,13 @@
24560
24691
  rows.push(row);
24561
24692
  }
24562
24693
  }
24563
- indexesElement.appendChild(createTable(columns, rows, null));
24694
+ const cellRenderer = function (rowElement, _columnIndex, value) {
24695
+ const cellElement = document.createElement('td');
24696
+ cellElement.style.textAlign = (typeof value) === 'string' ? 'left' : 'right';
24697
+ cellElement.innerText = value;
24698
+ rowElement.appendChild(cellElement);
24699
+ };
24700
+ createTable(indexesElement, columns, rows, 'tables-table', cellRenderer);
24564
24701
  }
24565
24702
  });
24566
24703
  window.structureLoaded = true;
@@ -24970,35 +25107,37 @@
24970
25107
  return abbrElement
24971
25108
  };
24972
25109
 
24973
- const headerRenderer = function (rowElement, column) {
24974
- const headerElement = document.createElement('th');
24975
- headerElement.innerText = column;
24976
- if (window.metadata.columns[column]) {
24977
- headerElement.colSpan = 2;
24978
- }
24979
- rowElement.appendChild(headerElement);
24980
- };
25110
+ const cellRenderer = function (rowElement, columnIndex, value) {
25111
+ const column = fetch.result.columns[columnIndex];
25112
+ const columnType = fetch.result.column_types[columnIndex];
24981
25113
 
24982
- const cellRenderer = function (rowElement, column, value) {
24983
- if (window.metadata.columns[column]?.links?.length > 0) {
24984
- const linksColumnElement = document.createElement('td');
24985
- if (value) {
24986
- window.metadata.columns[column].links.forEach((link) => {
24987
- linksColumnElement.appendChild(createLink(link, value));
24988
- });
24989
- }
24990
- rowElement.appendChild(linksColumnElement);
24991
- const textColumnElement = document.createElement('td');
24992
- textColumnElement.innerText = value;
24993
- rowElement.appendChild(textColumnElement);
25114
+ if (value && window.metadata.columns[column]?.links?.length > 0) {
25115
+ const linksElement = document.createElement('div');
25116
+ window.metadata.columns[column].links.forEach((link) => {
25117
+ linksElement.appendChild(createLink(link, value));
25118
+ });
25119
+
25120
+ const textElement = document.createElement('div');
25121
+ textElement.classList.add('cell-value');
25122
+ textElement.style.textAlign = columnType === 'string' ? 'left' : 'right';
25123
+ textElement.innerText = value;
25124
+
25125
+ const wrapperElement = document.createElement('div');
25126
+ wrapperElement.classList.add('cell-content-wrapper');
25127
+ wrapperElement.appendChild(linksElement);
25128
+ wrapperElement.appendChild(textElement);
25129
+
25130
+ const columnElement = document.createElement('td');
25131
+ columnElement.appendChild(wrapperElement);
25132
+ rowElement.appendChild(columnElement);
24994
25133
  } else {
24995
25134
  const cellElement = document.createElement('td');
25135
+ cellElement.style.textAlign = columnType === 'string' ? 'left' : 'right';
24996
25136
  cellElement.innerText = value;
24997
25137
  rowElement.appendChild(cellElement);
24998
25138
  }
24999
25139
  };
25000
- document.getElementById('result-box')
25001
- .appendChild(createTable(fetch.result.columns, fetch.result.rows, 'result-table', headerRenderer, cellRenderer));
25140
+ createTable(document.getElementById('result-box'), fetch.result.columns, fetch.result.rows, 'result-table', cellRenderer);
25002
25141
  }
25003
25142
 
25004
25143
  function disableDownloadButtons () {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sqlui
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.52
4
+ version: 0.1.54
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Dower
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-12-01 00:00:00.000000000 Z
11
+ date: 2022-12-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: airbrake
@@ -157,7 +157,7 @@ executables:
157
157
  extensions: []
158
158
  extra_rdoc_files: []
159
159
  files:
160
- - ".version"
160
+ - ".release-version"
161
161
  - app/args.rb
162
162
  - app/database_config.rb
163
163
  - app/database_metadata.rb
@@ -167,6 +167,7 @@ files:
167
167
  - app/sql_parser.rb
168
168
  - app/sqlui.rb
169
169
  - app/sqlui_config.rb
170
+ - app/version.rb
170
171
  - app/views/databases.erb
171
172
  - app/views/error.erb
172
173
  - app/views/sqlui.erb
data/.version DELETED
@@ -1 +0,0 @@
1
- 0.1.52