marty 2.6.6 → 2.6.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/models/marty/data_grid.rb +4 -4
- data/db/migrate/504_remove_plv8_extension.rb +13 -0
- data/lib/marty/version.rb +1 -1
- metadata +3 -6
- data/db/js/errinfo_v1.js +0 -16
- data/db/js/lookup_grid_distinct_v1.js +0 -64
- data/db/js/query_grid_dir_v1.js +0 -61
- data/db/migrate/400_create_dg_plv8_v1_fns.rb +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4617855bbed5e317b7983641b7f6565ec24a85a0690b8494cc17d1ac5b1372ed
|
4
|
+
data.tar.gz: 3155a823f0c5d0add5c361256c75f8c7c3851a9cf4fc257c9490bf76cedd9a01
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d95e2defaa45dcc3a3fce8fd087654ea205591b7eaca786bfd9536f523f0de392e2917c410aa404accb038f17a1f8663dae06cf3d9ef4175f4eca914b3a33432
|
7
|
+
data.tar.gz: a4a8300480ea3cc8bd69c2cad1a2f162c9edc0cbfdd812f2acd98c686507d93d6083a682211f6085371c464c360d521dfe7adcb5c03fe32ab845dd83d8bf7ba2
|
@@ -165,8 +165,8 @@ class Marty::DataGrid < Marty::Base
|
|
165
165
|
|
166
166
|
PLV_DT_FMT = '%Y-%m-%d %H:%M:%S.%N6'
|
167
167
|
|
168
|
-
def self.
|
169
|
-
|
168
|
+
def self.plpg_lookup_grid_distinct(h_passed, dgh, ret_grid_data = false,
|
169
|
+
distinct = true)
|
170
170
|
cd = dgh['created_dt']
|
171
171
|
@@dtcache ||= {}
|
172
172
|
@@dtcache[cd] ||= cd.strftime(PLV_DT_FMT)
|
@@ -199,7 +199,7 @@ class Marty::DataGrid < Marty::Base
|
|
199
199
|
parms, sqls, ress, dg = res['error_extra'].values_at(
|
200
200
|
'params', 'sql', 'results', 'dg')
|
201
201
|
|
202
|
-
raise "DG #{name}: Error in
|
202
|
+
raise "DG #{name}: Error in PLPG call: #{msg}\n"\
|
203
203
|
"params: #{parms}\n"\
|
204
204
|
"sqls: #{sqls}\n"\
|
205
205
|
"results: #{ress}\n"\
|
@@ -251,7 +251,7 @@ class Marty::DataGrid < Marty::Base
|
|
251
251
|
# "name" => <grid name>
|
252
252
|
# "data" => <grid's data array>
|
253
253
|
# "metadata" => <grid's metadata (array of hashes)>
|
254
|
-
vhash =
|
254
|
+
vhash = plpg_lookup_grid_distinct(h, dgh, return_grid_data, distinct)
|
255
255
|
|
256
256
|
return vhash if vhash['result'].nil? || !dgh['data_type']
|
257
257
|
|
data/lib/marty/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: marty
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.6.
|
4
|
+
version: 2.6.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arman Bostani
|
@@ -14,7 +14,7 @@ authors:
|
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
|
-
date: 2019-05-
|
17
|
+
date: 2019-05-13 00:00:00.000000000 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
name: pg
|
@@ -343,9 +343,6 @@ files:
|
|
343
343
|
- config/database.yml.travis
|
344
344
|
- config/locales/en.yml
|
345
345
|
- config/routes.rb
|
346
|
-
- db/js/errinfo_v1.js
|
347
|
-
- db/js/lookup_grid_distinct_v1.js
|
348
|
-
- db/js/query_grid_dir_v1.js
|
349
346
|
- db/migrate/001_create_marty_scripts.rb
|
350
347
|
- db/migrate/003_create_marty_users.rb
|
351
348
|
- db/migrate/004_create_marty_roles.rb
|
@@ -381,13 +378,13 @@ files:
|
|
381
378
|
- db/migrate/302_add_api_configs_validate_result.rb
|
382
379
|
- db/migrate/303_create_marty_logs.rb
|
383
380
|
- db/migrate/304_drop_marty_api_logs.rb
|
384
|
-
- db/migrate/400_create_dg_plv8_v1_fns.rb
|
385
381
|
- db/migrate/410_jsonb_promise_result.rb
|
386
382
|
- db/migrate/411_create_vw_promises.rb
|
387
383
|
- db/migrate/500_add_api_class_to_marty_api_config.rb
|
388
384
|
- db/migrate/501_create_dg_plpgsql_v1_fns.rb
|
389
385
|
- db/migrate/502_add_promise_type_enum.rb
|
390
386
|
- db/migrate/503_add_promise_type_to_promises.rb
|
387
|
+
- db/migrate/504_remove_plv8_extension.rb
|
391
388
|
- db/seeds.rb
|
392
389
|
- db/sql/lookup_grid_distinct_v1.sql
|
393
390
|
- db/sql/query_grid_dir_v1.sql
|
data/db/js/errinfo_v1.js
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
// PARAM: err JSONB
|
2
|
-
// RETURN: JSONB
|
3
|
-
var locre = /at.*[ (]([a-z][a-z0-9_]*[:][0-9]+)[:][0-9]+/i;
|
4
|
-
var stack = err.stack;
|
5
|
-
var res = '';
|
6
|
-
if (stack) {
|
7
|
-
var lines = stack.split('\\n');
|
8
|
-
for (i=0, len=lines.length; i<len; ++i) {
|
9
|
-
m = locre.exec(lines[i]);
|
10
|
-
if (m) {
|
11
|
-
res += m[1];
|
12
|
-
}
|
13
|
-
}
|
14
|
-
return { "error": res + " " + err.message };
|
15
|
-
}
|
16
|
-
else return { "error": err };
|
@@ -1,64 +0,0 @@
|
|
1
|
-
// PARAM: h JSONB
|
2
|
-
// PARAM: row_info JSONB
|
3
|
-
// PARAM: return_grid_data boolean default false
|
4
|
-
// PARAM: dis boolean default false
|
5
|
-
// RETURN: JSONB
|
6
|
-
var sqls = []
|
7
|
-
var ress = []
|
8
|
-
try {
|
9
|
-
var query_dir = plv8.find_function('query_grid_dir');
|
10
|
-
var errinfo = plv8.find_function('errinfo');
|
11
|
-
var ih = {};
|
12
|
-
var sql = 'SELECT metadata, lenient, name, group_id, data FROM marty_data_grids WHERE id = $1'
|
13
|
-
var dg = plv8.execute(sql, [row_info['id']])[0];
|
14
|
-
var res;
|
15
|
-
['h','v'].forEach(function(dir) {
|
16
|
-
var infos = dg["metadata"].filter(function(md) { return md["dir"] == dir; });
|
17
|
-
if (infos.length == 0)
|
18
|
-
{
|
19
|
-
ih[dir] = [0]
|
20
|
-
return
|
21
|
-
}
|
22
|
-
a = query_dir(h, infos, row_info);
|
23
|
-
sqls.push(a);
|
24
|
-
ih[dir] = []
|
25
|
-
if (a) {
|
26
|
-
res = plv8.execute(a[0], a[1]);
|
27
|
-
ress.push(res);
|
28
|
-
for (var j = 0; j < res.length; j++)
|
29
|
-
{
|
30
|
-
ih[dir].push(res[j]["index"])
|
31
|
-
}
|
32
|
-
}
|
33
|
-
if (dis && ih[dir].length > 1) {
|
34
|
-
throw Error("matches > 1");
|
35
|
-
}
|
36
|
-
});
|
37
|
-
if ((ih["v"].length == 0 || ih["h"].length == 0) &&
|
38
|
-
!dg['lenient'] && !return_grid_data) {
|
39
|
-
throw Error("Data Grid lookup failed");
|
40
|
-
}
|
41
|
-
|
42
|
-
vi = ih["v"].length > 0 ? Math.min.apply(9999, ih["v"]) : null
|
43
|
-
hi = ih["h"].length > 0 ? Math.min.apply(9999, ih["h"]) : null
|
44
|
-
|
45
|
-
var result = null;
|
46
|
-
if (vi!==null && hi!==null) {
|
47
|
-
result = dg["data"][vi][hi];
|
48
|
-
}
|
49
|
-
return { "result" : result,
|
50
|
-
"name" : dg["name"],
|
51
|
-
"data" : return_grid_data ? dg["data"] : null,
|
52
|
-
"metadata" : return_grid_data ? dg["metadata"] : null
|
53
|
-
};
|
54
|
-
} catch (err) {
|
55
|
-
ei = errinfo(err);
|
56
|
-
|
57
|
-
ei["error_extra"] = {}
|
58
|
-
ei["error_extra"]["sql"] = sqls;
|
59
|
-
ei["error_extra"]["results"] = ress;
|
60
|
-
ei["error_extra"]["params"] = h;
|
61
|
-
ei["error_extra"]["dg"] = dg;
|
62
|
-
|
63
|
-
return ei;
|
64
|
-
}
|
data/db/js/query_grid_dir_v1.js
DELETED
@@ -1,61 +0,0 @@
|
|
1
|
-
// PARAM: h JSONB
|
2
|
-
// PARAM: infos JSONB[]
|
3
|
-
// PARAM: row_info JSONB
|
4
|
-
// RETURN: JSONB
|
5
|
-
var getfilter = function(type, idx) {
|
6
|
-
switch(type) {
|
7
|
-
case "boolean":
|
8
|
-
return "key = $" + idx + " OR ";
|
9
|
-
case "numrange":
|
10
|
-
return "key @> $" + idx + "::numeric OR ";
|
11
|
-
case "int4range":
|
12
|
-
return "key @> $" + idx + "::integer OR ";
|
13
|
-
case "integer":
|
14
|
-
return "key @> ARRAY[$" + idx + "::integer] OR ";
|
15
|
-
default:
|
16
|
-
return "key @> ARRAY[$" + idx + "::text] OR ";
|
17
|
-
}
|
18
|
-
}
|
19
|
-
|
20
|
-
var temp = [];
|
21
|
-
var args = [];
|
22
|
-
|
23
|
-
var sql;
|
24
|
-
for (var sqlidx=1, i = 0; i < infos.length; i++) {
|
25
|
-
var type = infos[i]["type"];
|
26
|
-
var attr = infos[i]["attr"];
|
27
|
-
var v = h[attr];
|
28
|
-
if (!h.hasOwnProperty(attr)) {
|
29
|
-
//throw Error("missing attr " + attr)
|
30
|
-
continue;
|
31
|
-
}
|
32
|
-
switch (type) {
|
33
|
-
case 'boolean':
|
34
|
-
case "numrange":
|
35
|
-
case "int4range":
|
36
|
-
case "integer":
|
37
|
-
tab = "marty_grid_index_" + type + "s";
|
38
|
-
break;
|
39
|
-
default:
|
40
|
-
tab = 'marty_grid_index_strings';
|
41
|
-
};
|
42
|
-
|
43
|
-
sql = "SELECT DISTINCT index from " + tab +
|
44
|
-
" WHERE data_grid_id = $" + sqlidx++ +
|
45
|
-
" AND created_dt = $" + sqlidx++ +
|
46
|
-
" AND attr = $" + sqlidx++ + ' ';
|
47
|
-
|
48
|
-
args.push(row_info["group_id"]);
|
49
|
-
args.push(row_info["created_dt"]);
|
50
|
-
args.push(attr);
|
51
|
-
|
52
|
-
if (v!==null) {
|
53
|
-
filt = getfilter(type, sqlidx++);
|
54
|
-
args.push(v);
|
55
|
-
} else filt = ''
|
56
|
-
sql += ' AND (' + filt + "key is NULL) ";
|
57
|
-
|
58
|
-
temp.push(sql);
|
59
|
-
}
|
60
|
-
if (temp ==[]) return null;
|
61
|
-
return [temp.join(" INTERSECT "), args];
|
@@ -1,12 +0,0 @@
|
|
1
|
-
class CreateDgPlv8V1Fns < ActiveRecord::Migration[4.2]
|
2
|
-
def change
|
3
|
-
connection.execute <<-SQL
|
4
|
-
-- required to utilize plv8 extension
|
5
|
-
CREATE EXTENSION IF NOT EXISTS plv8;
|
6
|
-
SQL
|
7
|
-
marty_path = Gem.loaded_specs["marty"].full_gem_path
|
8
|
-
Dir.glob("#{marty_path}/db/js/*_v1.js") do |f|
|
9
|
-
connection.execute(Marty::Migrations.get_plv8_migration(f))
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|