sqlui 0.1.29 → 0.1.30

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9257bcf43bc98bcd5ed8a52d3b2643db1189d0d3b8c2c1444c5d949ff37ed03c
4
- data.tar.gz: 6a96de39b01459a5b222a2781158523707fbd3e585400dd18a1b4469c55b4c9c
3
+ metadata.gz: a936a2e2476462ad9d92ed315bc02bee65b7c84171d5934e9728241f7a28ba1c
4
+ data.tar.gz: 2cf060fb96f672ebaf6b7fd9be602652e1a30841ded45c28415d7cc3dabc03e1
5
5
  SHA512:
6
- metadata.gz: 32eb854b16a9b345456902379ec7cc8ba5e091562a62de90451f63d28146815a880315b0921303770233d036187d8b26f6164bf04e8dd935232bf3a6ef82e646
7
- data.tar.gz: 0da14c2be2b04171df6ccef8dc4e4fb1c512440371d2394ae788ecc88994e032bf69633e683bab61e0cc4bc54ae367cb0ce6565cfc4b3f67559b90061ddbdaf9
6
+ metadata.gz: addfac3cd62b75320dfcd2a437dac79db358b69391782f008e49be816241c1dad40d641accd078735c46de1d855eaf162956cc2a16370c297a72175e8b0bb7a2
7
+ data.tar.gz: 2a215084e23ac9b7c11d44f325fc27c77a597d3c9ed6f5e1ded238aa7223d82936f6d475674cb777406d491f4699f2a782cafabaf7c36d24be83d72e3eb998e8
data/.version CHANGED
@@ -1 +1 @@
1
- 0.1.29
1
+ 0.1.30
data/app/server.rb CHANGED
@@ -86,6 +86,7 @@ class Server < Sinatra::Base
86
86
 
87
87
  full_sql = params[:sql]
88
88
  sql = params[:sql]
89
+ variables = params[:variables] || {}
89
90
  if params[:selection]
90
91
  selection = params[:selection]
91
92
  if selection.include?('-')
@@ -106,6 +107,9 @@ class Server < Sinatra::Base
106
107
  end
107
108
 
108
109
  result = database.with_client do |client|
110
+ variables.each do |name, value|
111
+ client.query("SET @#{name} = #{value};")
112
+ end
109
113
  execute_query(client, sql)
110
114
  end
111
115
 
@@ -138,7 +138,7 @@ p {
138
138
  font-family: Helvetica, sans-serif;
139
139
  white-space: nowrap;
140
140
  overflow: hidden;
141
- font-size: 18px;
141
+ font-size: 16px;
142
142
  color: #333;
143
143
  }
144
144
 
@@ -24369,7 +24369,8 @@
24369
24369
  method: 'POST',
24370
24370
  body: JSON.stringify({
24371
24371
  sql: sqlFetch.sql,
24372
- selection: sqlFetch.selection
24372
+ selection: sqlFetch.selection,
24373
+ variables: sqlFetch.variables
24373
24374
  }),
24374
24375
  signal: sqlFetch.fetchController.signal
24375
24376
  })
@@ -24413,6 +24414,16 @@
24413
24414
  });
24414
24415
  }
24415
24416
 
24417
+ function parseSqlVariables (params) {
24418
+ return Object.fromEntries(
24419
+ Array.from(params).filter(([key]) => {
24420
+ return key.match(/^_.+/)
24421
+ }).map(([key, value]) => {
24422
+ return [key.replace(/^_/, ''), value]
24423
+ })
24424
+ )
24425
+ }
24426
+
24416
24427
  function maybeFetchResult (internal) {
24417
24428
  const url = new URL(window.location);
24418
24429
  const params = url.searchParams;
@@ -24420,6 +24431,7 @@
24420
24431
  const file = params.get('file');
24421
24432
  const selection = params.get('selection');
24422
24433
  const hasSqluiReferrer = document.referrer && new URL(document.referrer).origin === url.origin;
24434
+ const variables = parseSqlVariables(params);
24423
24435
 
24424
24436
  // Only allow auto-run if coming from another SQLUI page. The idea here is to let the app link to URLs with run=true
24425
24437
  // but not other apps. This allows meta/shift-clicking to run a query.
@@ -24440,8 +24452,9 @@
24440
24452
  const selectionMatches = selection === existingRequest.selection;
24441
24453
  const sqlMatches = params.has('sql') && sql === existingRequest.sql;
24442
24454
  const fileMatches = params.has('file') && file === existingRequest.file;
24455
+ const variablesMatch = JSON.stringify(variables) === JSON.stringify(existingRequest.variables);
24443
24456
  const queryMatches = sqlMatches || fileMatches;
24444
- if (selectionMatches && queryMatches) {
24457
+ if (selectionMatches && queryMatches && variablesMatch) {
24445
24458
  displaySqlFetch(existingRequest);
24446
24459
  if (params.has('selection')) {
24447
24460
  focus();
@@ -24453,7 +24466,7 @@
24453
24466
 
24454
24467
  clearResult();
24455
24468
 
24456
- const sqlFetch = buildSqlFetch(sql, file, selection);
24469
+ const sqlFetch = buildSqlFetch(sql, file, variables, selection);
24457
24470
  if (params.has('sql') || params.has('file')) {
24458
24471
  setValue(sqlFetch.sql);
24459
24472
  if (run) {
@@ -24466,7 +24479,7 @@
24466
24479
  }
24467
24480
  }
24468
24481
 
24469
- function buildSqlFetch (sql, file, selection) {
24482
+ function buildSqlFetch (sql, file, variables, selection) {
24470
24483
  const sqlFetch = {
24471
24484
  fetchController: new AbortController(),
24472
24485
  state: 'pending',
@@ -24475,7 +24488,8 @@
24475
24488
  finished: null,
24476
24489
  sql,
24477
24490
  file,
24478
- selection
24491
+ selection,
24492
+ variables
24479
24493
  };
24480
24494
 
24481
24495
  if (file) {
@@ -24531,7 +24545,7 @@
24531
24545
  }
24532
24546
 
24533
24547
  clearResultBox();
24534
- displaySqlFetchResultStatus('result-status', fetch.result);
24548
+ displaySqlFetchResultStatus('result-status', fetch);
24535
24549
 
24536
24550
  const tableElement = document.createElement('table');
24537
24551
  tableElement.id = 'result-table';
@@ -24647,7 +24661,7 @@
24647
24661
  throw new Error(`unexpected fetch sql request status: ${fetch.status}`)
24648
24662
  }
24649
24663
  clearGraphBox();
24650
- displaySqlFetchResultStatus('graph-status', fetch.result);
24664
+ displaySqlFetchResultStatus('graph-status', fetch);
24651
24665
 
24652
24666
  if (!fetch.result.rows) {
24653
24667
  return
@@ -24686,13 +24700,15 @@
24686
24700
  chart.draw(dataTable, options);
24687
24701
  }
24688
24702
 
24689
- function displaySqlFetchResultStatus (statusElementId, result) {
24703
+ function displaySqlFetchResultStatus (statusElementId, sqlFetch) {
24704
+ const result = sqlFetch.result;
24690
24705
  const statusElement = document.getElementById(statusElementId);
24706
+ const elapsed = Math.round(100 * (window.performance.now() - sqlFetch.startedAt) / 1000.0) / 100;
24691
24707
 
24692
24708
  if (result.total_rows === 1) {
24693
- statusElement.innerText = `${result.total_rows} row`;
24709
+ statusElement.innerText = `${result.total_rows} row (${elapsed}s)`;
24694
24710
  } else {
24695
- statusElement.innerText = `${result.total_rows} rows`;
24711
+ statusElement.innerText = `${result.total_rows} rows (${elapsed}s)`;
24696
24712
  }
24697
24713
 
24698
24714
  if (result.total_rows > result.rows.length) {
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sqlui
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.29
4
+ version: 0.1.30
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Dower