@cubejs-backend/druid-driver 1.7.46 → 1.7.47
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DruidQuery.d.ts","sourceRoot":"","sources":["../../src/DruidQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAaxE,cAAM,WAAY,SAAQ,UAAU;
|
|
1
|
+
{"version":3,"file":"DruidQuery.d.ts","sourceRoot":"","sources":["../../src/DruidQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAaxE,cAAM,WAAY,SAAQ,UAAU;IAI3B,cAAc,CAAC,MAAM,KAAA,EAAE,GAAG,KAAA,EAAE,KAAK,KAAA,EAAE,IAAI,EAAE,MAAM;CAKvD;AAED,qBAAa,UAAW,SAAQ,SAAS;IAChC,SAAS,CAAC,MAAM,KAAA;IAIhB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAIxD,SAAS,CAAC,KAAK,EAAE,MAAM;IAIvB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAI/C,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAI1C,aAAa,CAAC,KAAK,EAAE,MAAM;IAI3B,cAAc;IAId,eAAe,IAAI,MAAM;IAIzB,YAAY;CA4BpB"}
|
package/dist/src/DruidQuery.js
CHANGED
|
@@ -13,10 +13,13 @@ const GRANULARITY_TO_INTERVAL = {
|
|
|
13
13
|
year: date => `DATE_TRUNC('year', ${date})`
|
|
14
14
|
};
|
|
15
15
|
class DruidFilter extends schema_compiler_1.BaseFilter {
|
|
16
|
+
// Druid's LIKE has no default escape character, so the clause is what makes
|
|
17
|
+
// the wildcard escaping applied to the value mean anything. It honours the
|
|
18
|
+
// clause on a CONCAT(...) pattern, which druid-driver.test.ts checks by values.
|
|
16
19
|
likeIgnoreCase(column, not, param, type) {
|
|
17
20
|
const p = (!type || type === 'contains' || type === 'ends') ? '%' : '';
|
|
18
21
|
const s = (!type || type === 'contains' || type === 'starts') ? '%' : '';
|
|
19
|
-
return `LOWER(${column})${not ? ' NOT' : ''} LIKE CONCAT('${p}', LOWER(${this.allocateParam(param)}), '${s}')`;
|
|
22
|
+
return `LOWER(${column})${not ? ' NOT' : ''} LIKE CONCAT('${p}', LOWER(${this.allocateParam(param)}), '${s}') ESCAPE '\\'`;
|
|
20
23
|
}
|
|
21
24
|
}
|
|
22
25
|
class DruidQuery extends schema_compiler_1.BaseQuery {
|
|
@@ -47,15 +50,19 @@ class DruidQuery extends schema_compiler_1.BaseQuery {
|
|
|
47
50
|
sqlTemplates() {
|
|
48
51
|
const templates = super.sqlTemplates();
|
|
49
52
|
// Druid doesn't support ILIKE, so case-insensitive matching is emulated with LOWER(...) LIKE CONCAT(...)
|
|
50
|
-
|
|
53
|
+
// `default_escape` means the pushed-down LIKE carried no ESCAPE of its own, so it keeps
|
|
54
|
+
// Postgres' backslash - which Druid does not default to and has to be told.
|
|
55
|
+
templates.expressions.like = '{{ expr }} {% if negated %}NOT {% endif %}LIKE {{ pattern }}{% if default_escape %} ESCAPE \'\\\'{% endif %}';
|
|
56
|
+
templates.expressions.ilike = 'LOWER({{ expr }}) {% if negated %}NOT {% endif %}LIKE LOWER({{ pattern }}){% if default_escape %} ESCAPE \'\\\'{% endif %}';
|
|
51
57
|
// Timestamp constants arrive as ISO-8601 UTC strings ('2021-01-01T00:00:00.000Z');
|
|
52
58
|
// TIME_PARSE without a pattern parses ISO-8601, which is also Druid's native
|
|
53
59
|
// timestamp format. The base template renders the value bare, which is invalid
|
|
54
60
|
// syntax
|
|
55
61
|
templates.expressions.timestamp_literal = 'TIME_PARSE(\'{{ value }}\')';
|
|
56
|
-
delete templates.expressions.like_escape;
|
|
57
62
|
templates.filters.like_pattern = 'CONCAT({% if start_wild %}\'%\'{% else %}\'\'{% endif %}, LOWER({{ value }}), {% if end_wild %}\'%\'{% else %}\'\'{% endif %})';
|
|
58
|
-
|
|
63
|
+
// Same escape clause as DruidFilter.likeIgnoreCase; it cannot go inside
|
|
64
|
+
// `like_pattern`, whose pattern is wrapped in CONCAT(...).
|
|
65
|
+
templates.tesseract.ilike = 'LOWER({{ expr }}) {% if negated %}NOT {% endif %}LIKE {{ pattern }} ESCAPE \'\\\'';
|
|
59
66
|
// Druid evaluates CURRENT_TIMESTAMP in the sqlTimeZone query context, which
|
|
60
67
|
// defaults to UTC — assumes the connection does not override sqlTimeZone
|
|
61
68
|
templates.functions.UTCTIMESTAMP = 'CURRENT_TIMESTAMP';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DruidQuery.js","sourceRoot":"","sources":["../../src/DruidQuery.ts"],"names":[],"mappings":";;;AAAA,qEAAwE;AAExE,MAAM,uBAAuB,GAA6C;IACxE,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,qBAAqB,IAAI,GAAG;IACzC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,sBAAsB,IAAI,GAAG;IAC3C,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,sBAAsB,IAAI,GAAG;IAC3C,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,wBAAwB,IAAI,GAAG;IAC/C,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,wBAAwB,IAAI,GAAG;IAC/C,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,uBAAuB,IAAI,GAAG;IAC7C,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,yBAAyB,IAAI,GAAG;IACjD,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,sBAAsB,IAAI,GAAG;CAC5C,CAAC;AAEF,MAAM,WAAY,SAAQ,4BAAU;
|
|
1
|
+
{"version":3,"file":"DruidQuery.js","sourceRoot":"","sources":["../../src/DruidQuery.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@cubejs-backend/druid-driver",
|
|
3
3
|
"description": "Cube Druid database driver",
|
|
4
4
|
"author": "Cube Dev, Inc.",
|
|
5
|
-
"version": "1.7.
|
|
5
|
+
"version": "1.7.47",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
"build": "rm -rf dist && npm run tsc",
|
|
19
19
|
"tsc": "tsc",
|
|
20
20
|
"watch": "tsc -w",
|
|
21
|
+
"unit": "jest --verbose dist/test/unit",
|
|
21
22
|
"integration": "NODE_OPTIONS=--experimental-vm-modules jest dist/test/*.js",
|
|
22
23
|
"integration:druid": "NODE_OPTIONS=--experimental-vm-modules jest dist/test/*.js"
|
|
23
24
|
},
|
|
@@ -26,13 +27,13 @@
|
|
|
26
27
|
"dist/src/*"
|
|
27
28
|
],
|
|
28
29
|
"dependencies": {
|
|
29
|
-
"@cubejs-backend/base-driver": "1.7.
|
|
30
|
-
"@cubejs-backend/schema-compiler": "1.7.
|
|
31
|
-
"@cubejs-backend/shared": "1.7.
|
|
30
|
+
"@cubejs-backend/base-driver": "1.7.47",
|
|
31
|
+
"@cubejs-backend/schema-compiler": "1.7.47",
|
|
32
|
+
"@cubejs-backend/shared": "1.7.47",
|
|
32
33
|
"axios": "^1.8.3"
|
|
33
34
|
},
|
|
34
35
|
"devDependencies": {
|
|
35
|
-
"@cubejs-backend/linter": "1.7.
|
|
36
|
+
"@cubejs-backend/linter": "1.7.47",
|
|
36
37
|
"@types/jest": "^29",
|
|
37
38
|
"@types/node": "^22",
|
|
38
39
|
"jest": "^29",
|
|
@@ -42,5 +43,5 @@
|
|
|
42
43
|
"publishConfig": {
|
|
43
44
|
"access": "public"
|
|
44
45
|
},
|
|
45
|
-
"gitHead": "
|
|
46
|
+
"gitHead": "0708ffddcb82f8be56acf65cde4e68b9670042a3"
|
|
46
47
|
}
|