@cubejs-backend/druid-driver 1.7.46 → 1.7.48

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;IAC3B,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;CAwBpB"}
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"}
@@ -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
- templates.expressions.ilike = 'LOWER({{ expr }}) {% if negated %}NOT {% endif %}LIKE LOWER({{ pattern }})';
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
- templates.tesseract.ilike = 'LOWER({{ expr }}) {% if negated %}NOT {% endif %}LIKE {{ pattern }}';
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":"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"}
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.46",
5
+ "version": "1.7.48",
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.46",
30
- "@cubejs-backend/schema-compiler": "1.7.46",
31
- "@cubejs-backend/shared": "1.7.46",
30
+ "@cubejs-backend/base-driver": "1.7.48",
31
+ "@cubejs-backend/schema-compiler": "1.7.48",
32
+ "@cubejs-backend/shared": "1.7.48",
32
33
  "axios": "^1.8.3"
33
34
  },
34
35
  "devDependencies": {
35
- "@cubejs-backend/linter": "1.7.46",
36
+ "@cubejs-backend/linter": "1.7.48",
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": "727e8b0ef3dd7f5b024f9d0b62b1c720539c0aa5"
46
+ "gitHead": "09f527d29226e9d817d2ac9c46d81ff5427e870a"
46
47
  }