diff --git a/.github/workflows/claude-code-review.yml b/.github/workflows/claude-code-review.yml
index d0ce2a974e247..790090c8c7483 100644
--- a/.github/workflows/claude-code-review.yml
+++ b/.github/workflows/claude-code-review.yml
@@ -168,7 +168,7 @@ jobs:
# Tools for comprehensive PR review
claude_args: |
--allowedTools "mcp__github_inline_comment__create_inline_comment,mcp__github__get_issue_comments,Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*),Bash(gh list-review-threads:*),Bash(gh resolve-thread:*)"
- --model "claude-opus-4-7"
+ --model "claude-opus-5"
--effort ${{ inputs.effort || 'medium' }}
- name: Write run summary
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 84c7975772c57..decba58229c39 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+### Bug Fixes
+
+- **athena-driver:** Correct SQL parameter escaping ([#11370](https://github.com/cube-js/cube/issues/11370)) ([5ad0041](https://github.com/cube-js/cube/commit/5ad0041a1aa7820d16e2566f7ea50ca2227f21c3))
+- **pinot/dremio/ksql/databriks/hive/jdbc-driver:** Сorrect SQL parameter escaping ([#11374](https://github.com/cube-js/cube/issues/11374)) ([a743790](https://github.com/cube-js/cube/commit/a7437904411cbf268a30bc985c6d5b3b8bbe0e2c))
+- **trino/prestodb-driver:** Сorrect SQL parameter escaping ([#11345](https://github.com/cube-js/cube/issues/11345)) ([463e602](https://github.com/cube-js/cube/commit/463e60284a5a4073eb7b7d2f11c4b315deaa2d94))
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
### Bug Fixes
diff --git a/docs-mintlify/docs/integrations/dbt.mdx b/docs-mintlify/docs/integrations/dbt.mdx
index e7a032c27fd7b..9391d211ae6f6 100644
--- a/docs-mintlify/docs/integrations/dbt.mdx
+++ b/docs-mintlify/docs/integrations/dbt.mdx
@@ -42,10 +42,12 @@ Cube spins up a short-lived, isolated sandbox and:
5. **Commits the generated files** to a branch for review, then tears the sandbox
down.
-**No connection to your data warehouse is made during a pull.** Cube uses
+**By default, no connection to your data warehouse is made during a pull.** Cube uses
`dbt parse`, not `dbt run` or `dbt compile`, so it reads your project's structure
without ever querying your warehouse. dbt pull generates cube definitions; it assumes
-the underlying tables were already built by your own production `dbt run`.
+the underlying tables were already built by your own production `dbt run`. The one
+exception is [Infer column types from dbt catalog](#infer-column-types-from-dbt-catalog),
+an opt-in option that reads real column types from your warehouse.
## Prerequisites
@@ -146,6 +148,33 @@ automated — uses the same configuration:
| **Add default measures** | On | Adds a `count` measure to every cube, and `sum` measures for additive numeric columns. |
| **Include descriptions** | On | Carries dbt model and column descriptions into cubes and dimensions. |
| **Generate joins** | On | Infers joins between cubes from dbt `relationships` tests and foreign-key constraints. |
+| **Infer column types from dbt catalog** | Off | Reads real warehouse column types from dbt's `catalog.json` instead of guessing from column names. See [below](#infer-column-types-from-dbt-catalog). |
+
+### Infer column types from dbt catalog
+
+
+
+This option is currently in preview, and its behavior may still change. Reach out to the
+[Cube support team](/admin/account-billing/support) if you run into issues.
+
+
+
+Without it, a dimension's type comes from a `data_type` declared in your dbt YAML, and —
+when none is declared — from a column-name heuristic (`*_id` → `number`, `created_at` →
+`time`, …). Enable this option and the pull additionally runs `dbt docs generate` to
+produce dbt's `catalog.json`, which carries the **actual warehouse column types**.
+
+Type precedence becomes: **declared `data_type` → catalog type → column-name heuristic**.
+An explicit `data_type` in your dbt YAML still wins; the catalog only fills the gaps.
+
+- **This step connects to your warehouse** (`dbt docs generate` queries the warehouse
+ metadata), unlike the rest of the pull. The models must already be built.
+- **Supported on Snowflake, Amazon Redshift, and PostgreSQL.** It's skipped on Google
+ BigQuery, Databricks, and Amazon Athena, whose sandbox profiles can't open a
+ connection.
+- **Best-effort.** If catalog generation or the catalog read fails — no connectivity,
+ unbuilt models, unreadable file — it's logged and skipped, and the pull completes on
+ declared and name-based types exactly as it would with the option off.
## Pass environment variables to dbt
@@ -302,15 +331,22 @@ For each dbt model in your project:
value of the deployment's `CUBEJS_DB_DATABRICKS_CATALOG` environment variable,
or `hive_metastore` if it isn't set.
- **Each column becomes a dimension.** The dimension type is inferred from the
- column's `data_type` where available, otherwise from the column name:
+ column's `data_type` where available, then — if
+ [Infer column types from dbt catalog](#infer-column-types-from-dbt-catalog) is
+ enabled — from the warehouse type in `catalog.json`, and otherwise from the column
+ name:
- | dbt `data_type` | Cube dimension type |
+ | Column type | Cube dimension type |
| --- | --- |
- | `varchar`, `text`, `string`, `char` | `string` |
- | `integer`, `int`, `bigint`, `smallint`, `decimal`, `numeric`, `float`, `double`, `real` | `number` |
+ | `varchar`, `text`, `string`, `char`, and non-scalar types (`json`, `variant`, `array`, …) | `string` |
+ | `integer`, `int`, `bigint`, `smallint`, `decimal`, `numeric`, `number`, `float`, `double`, `real` | `number` |
| `date`, `datetime`, `timestamp`, `timestamptz`, `time` | `time` |
| `boolean`, `bool` | `boolean` |
+ Vendor spellings and parameters are normalized, so `NUMBER(38,0)`,
+ `character varying(256)`, `TIMESTAMP_NTZ(9)`, `INT64`, and `double precision` all map
+ as expected.
+
- **Model and column descriptions** from your dbt project are carried over to the
cubes and dimensions.
- **A `count` measure** is added to every cube.
@@ -503,7 +539,10 @@ Each push creates exactly two new files:
- **Pull is one-directional** — dbt pull never writes back to your dbt repository.
Promoting cubes into dbt is the [dbt push](#push-cubes-to-dbt) direction (in preview).
- **No warehouse connection** — a pull doesn't trigger a `dbt run`; it assumes your
- tables are already built.
+ tables are already built. The only exception is the opt-in
+ [Infer column types from dbt catalog](#infer-column-types-from-dbt-catalog) option
+ (in preview), which runs `dbt docs generate` on Snowflake, Amazon Redshift, and
+ PostgreSQL.
- **One dbt project per deployment.**
## Troubleshooting
diff --git a/lerna.json b/lerna.json
index ea0bcb65b00bf..f386f0cb57ef8 100644
--- a/lerna.json
+++ b/lerna.json
@@ -1,5 +1,5 @@
{
- "version": "1.7.11",
+ "version": "1.7.12",
"npmClient": "yarn",
"command": {
"bootstrap": {
diff --git a/packages/cubejs-api-gateway/CHANGELOG.md b/packages/cubejs-api-gateway/CHANGELOG.md
index d7a72fe08a754..861e1525e13cc 100644
--- a/packages/cubejs-api-gateway/CHANGELOG.md
+++ b/packages/cubejs-api-gateway/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/api-gateway
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
### Bug Fixes
diff --git a/packages/cubejs-api-gateway/package.json b/packages/cubejs-api-gateway/package.json
index d6742caab3151..d42710554fb91 100644
--- a/packages/cubejs-api-gateway/package.json
+++ b/packages/cubejs-api-gateway/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/api-gateway",
"description": "Cube API Gateway",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -27,9 +27,9 @@
"dist/src/*"
],
"dependencies": {
- "@cubejs-backend/native": "1.7.11",
- "@cubejs-backend/query-orchestrator": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/native": "1.7.12",
+ "@cubejs-backend/query-orchestrator": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
"@ungap/structured-clone": "^0.3.4",
"assert-never": "^1.4.0",
"body-parser": "^1.19.0",
@@ -53,7 +53,7 @@
"zod": "^4.1.13"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
"@types/express": "^4.17.21",
"@types/jest": "^29",
"@types/jsonwebtoken": "^9.0.2",
diff --git a/packages/cubejs-athena-driver/CHANGELOG.md b/packages/cubejs-athena-driver/CHANGELOG.md
index 2484f9ae42583..6195063e0430c 100644
--- a/packages/cubejs-athena-driver/CHANGELOG.md
+++ b/packages/cubejs-athena-driver/CHANGELOG.md
@@ -3,6 +3,12 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+### Bug Fixes
+
+- **athena-driver:** Correct SQL parameter escaping ([#11370](https://github.com/cube-js/cube/issues/11370)) ([5ad0041](https://github.com/cube-js/cube/commit/5ad0041a1aa7820d16e2566f7ea50ca2227f21c3))
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/athena-driver
diff --git a/packages/cubejs-athena-driver/package.json b/packages/cubejs-athena-driver/package.json
index bf0055755756b..8d8aae74856e0 100644
--- a/packages/cubejs-athena-driver/package.json
+++ b/packages/cubejs-athena-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/athena-driver",
"description": "Cube.js Athena database driver",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -31,12 +31,12 @@
"dependencies": {
"@aws-sdk/client-athena": "^3.22.0",
"@aws-sdk/credential-providers": "^3.22.0",
- "@cubejs-backend/base-driver": "1.7.11",
- "@cubejs-backend/shared": "1.7.11"
+ "@cubejs-backend/base-driver": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
- "@cubejs-backend/testing-shared": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
+ "@cubejs-backend/testing-shared": "1.7.12",
"@types/ramda": "^0.27.40",
"typescript": "~5.2.2"
},
diff --git a/packages/cubejs-backend-cloud/CHANGELOG.md b/packages/cubejs-backend-cloud/CHANGELOG.md
index 1df1f9ae53528..4404ad279d4fa 100644
--- a/packages/cubejs-backend-cloud/CHANGELOG.md
+++ b/packages/cubejs-backend-cloud/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/cloud
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/cloud
diff --git a/packages/cubejs-backend-cloud/package.json b/packages/cubejs-backend-cloud/package.json
index 20fcafc714279..3624112d199d5 100644
--- a/packages/cubejs-backend-cloud/package.json
+++ b/packages/cubejs-backend-cloud/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-backend/cloud",
- "version": "1.7.11",
+ "version": "1.7.12",
"description": "Cube Cloud package",
"main": "dist/src/index.js",
"typings": "dist/src/index.d.ts",
@@ -30,7 +30,7 @@
"devDependencies": {
"@babel/core": "^7.24.5",
"@babel/preset-env": "^7.24.5",
- "@cubejs-backend/linter": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
"@types/fs-extra": "^9.0.8",
"@types/jest": "^29",
"jest": "^29",
@@ -38,7 +38,7 @@
},
"dependencies": {
"@cubejs-backend/dotenv": "^9.0.2",
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/shared": "1.7.12",
"chokidar": "^3.5.1",
"env-var": "^6.3.0",
"form-data": "^4.0.0",
diff --git a/packages/cubejs-backend-maven/CHANGELOG.md b/packages/cubejs-backend-maven/CHANGELOG.md
index 7aecc2866723a..4114fdcb8104d 100644
--- a/packages/cubejs-backend-maven/CHANGELOG.md
+++ b/packages/cubejs-backend-maven/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/maven
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/maven
diff --git a/packages/cubejs-backend-maven/package.json b/packages/cubejs-backend-maven/package.json
index 533813cfd955e..21c42cdba3d67 100644
--- a/packages/cubejs-backend-maven/package.json
+++ b/packages/cubejs-backend-maven/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/maven",
"description": "Cube.js Maven Wrapper for java dependencies downloading",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"license": "Apache-2.0",
"repository": {
"type": "git",
@@ -31,12 +31,12 @@
"dist/src/*"
],
"dependencies": {
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/shared": "1.7.12",
"source-map-support": "^0.5.19",
"xmlbuilder2": "^2.4.0"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
"@types/jest": "^29",
"@types/node": "^22",
"jest": "^29",
diff --git a/packages/cubejs-backend-native/CHANGELOG.md b/packages/cubejs-backend-native/CHANGELOG.md
index edc9257a88b2e..916976bda54e1 100644
--- a/packages/cubejs-backend-native/CHANGELOG.md
+++ b/packages/cubejs-backend-native/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/native
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
### Bug Fixes
diff --git a/packages/cubejs-backend-native/Cargo.lock b/packages/cubejs-backend-native/Cargo.lock
index fcd1c702353b5..42e2739068e80 100644
--- a/packages/cubejs-backend-native/Cargo.lock
+++ b/packages/cubejs-backend-native/Cargo.lock
@@ -897,7 +897,7 @@ dependencies = [
[[package]]
name = "cube-ext"
version = "1.0.0"
-source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=d203d8771a9673fb676b44dce1f99e91634b4080#d203d8771a9673fb676b44dce1f99e91634b4080"
+source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=ee20ad38796f4a9966ff58b9ace425c7488459e9#ee20ad38796f4a9966ff58b9ace425c7488459e9"
dependencies = [
"arrow 13.0.0",
"chrono",
@@ -1073,7 +1073,7 @@ checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2"
[[package]]
name = "datafusion"
version = "7.0.0"
-source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=d203d8771a9673fb676b44dce1f99e91634b4080#d203d8771a9673fb676b44dce1f99e91634b4080"
+source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=ee20ad38796f4a9966ff58b9ace425c7488459e9#ee20ad38796f4a9966ff58b9ace425c7488459e9"
dependencies = [
"ahash 0.7.8",
"arrow 13.0.0",
@@ -1106,7 +1106,7 @@ dependencies = [
[[package]]
name = "datafusion-common"
version = "7.0.0"
-source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=d203d8771a9673fb676b44dce1f99e91634b4080#d203d8771a9673fb676b44dce1f99e91634b4080"
+source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=ee20ad38796f4a9966ff58b9ace425c7488459e9#ee20ad38796f4a9966ff58b9ace425c7488459e9"
dependencies = [
"arrow 13.0.0",
"ordered-float 2.10.1",
@@ -1117,7 +1117,7 @@ dependencies = [
[[package]]
name = "datafusion-data-access"
version = "1.0.0"
-source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=d203d8771a9673fb676b44dce1f99e91634b4080#d203d8771a9673fb676b44dce1f99e91634b4080"
+source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=ee20ad38796f4a9966ff58b9ace425c7488459e9#ee20ad38796f4a9966ff58b9ace425c7488459e9"
dependencies = [
"async-trait",
"chrono",
@@ -1130,7 +1130,7 @@ dependencies = [
[[package]]
name = "datafusion-expr"
version = "7.0.0"
-source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=d203d8771a9673fb676b44dce1f99e91634b4080#d203d8771a9673fb676b44dce1f99e91634b4080"
+source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=ee20ad38796f4a9966ff58b9ace425c7488459e9#ee20ad38796f4a9966ff58b9ace425c7488459e9"
dependencies = [
"ahash 0.7.8",
"arrow 13.0.0",
@@ -1141,7 +1141,7 @@ dependencies = [
[[package]]
name = "datafusion-physical-expr"
version = "7.0.0"
-source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=d203d8771a9673fb676b44dce1f99e91634b4080#d203d8771a9673fb676b44dce1f99e91634b4080"
+source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=ee20ad38796f4a9966ff58b9ace425c7488459e9#ee20ad38796f4a9966ff58b9ace425c7488459e9"
dependencies = [
"ahash 0.7.8",
"arrow 13.0.0",
diff --git a/packages/cubejs-backend-native/package.json b/packages/cubejs-backend-native/package.json
index 771cf257169ed..9b5d6a9078ecd 100644
--- a/packages/cubejs-backend-native/package.json
+++ b/packages/cubejs-backend-native/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-backend/native",
- "version": "1.7.11",
+ "version": "1.7.12",
"author": "Cube Dev, Inc.",
"description": "Native module for Cube.js (binding to Rust codebase)",
"main": "dist/js/index.js",
@@ -39,7 +39,7 @@
"dist/js"
],
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
"@types/jest": "^29",
"@types/node": "^22",
"cargo-cp-artifact": "^0.1.9",
@@ -50,8 +50,8 @@
"uuid": "^8.3.2"
},
"dependencies": {
- "@cubejs-backend/cubesql": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/cubesql": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
"@cubejs-infra/post-installer": "^0.0.7"
},
"resources": {
diff --git a/packages/cubejs-backend-shared/CHANGELOG.md b/packages/cubejs-backend-shared/CHANGELOG.md
index 486046ff3b094..adf4bc3d12c5d 100644
--- a/packages/cubejs-backend-shared/CHANGELOG.md
+++ b/packages/cubejs-backend-shared/CHANGELOG.md
@@ -3,6 +3,13 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+### Bug Fixes
+
+- **pinot/dremio/ksql/databriks/hive/jdbc-driver:** Сorrect SQL parameter escaping ([#11374](https://github.com/cube-js/cube/issues/11374)) ([a743790](https://github.com/cube-js/cube/commit/a7437904411cbf268a30bc985c6d5b3b8bbe0e2c))
+- **trino/prestodb-driver:** Сorrect SQL parameter escaping ([#11345](https://github.com/cube-js/cube/issues/11345)) ([463e602](https://github.com/cube-js/cube/commit/463e60284a5a4073eb7b7d2f11c4b315deaa2d94))
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/shared
diff --git a/packages/cubejs-backend-shared/package.json b/packages/cubejs-backend-shared/package.json
index 8f7ac451b71b8..bbc78a2dd50e7 100644
--- a/packages/cubejs-backend-shared/package.json
+++ b/packages/cubejs-backend-shared/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-backend/shared",
- "version": "1.7.11",
+ "version": "1.7.12",
"description": "Shared code for Cube.js backend packages",
"main": "dist/src/index.js",
"typings": "dist/src/index.d.ts",
@@ -27,7 +27,7 @@
},
"license": "Apache-2.0",
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
"@types/bytes": "^3.1.5",
"@types/cli-progress": "^3.9.1",
"@types/decompress": "^4.2.7",
diff --git a/packages/cubejs-backend-shared/src/sql-escape.ts b/packages/cubejs-backend-shared/src/sql-escape.ts
index 83aa18704aa59..6a6f30b5294c4 100644
--- a/packages/cubejs-backend-shared/src/sql-escape.ts
+++ b/packages/cubejs-backend-shared/src/sql-escape.ts
@@ -30,6 +30,19 @@ const MySqlDialect: SqlDialectEscapeRules = {
identifierQuoteChar: '`',
};
+/**
+ * Spark SQL / Hive / Databricks. Their lexers know backslash escapes only — a
+ * doubled quote is NOT an escape, it closes the literal and opens the next one.
+ * Because adjacent literals are concatenated, `'O''Brien'` silently evaluates to
+ * `OBrien` instead of raising, so quotes MUST be escaped as `\'` here.
+ */
+const SparkSqlDialect: SqlDialectEscapeRules = {
+ stringQuoteChar: '\'',
+ doubleQuoteToEscape: false,
+ escapeBackslash: true,
+ identifierQuoteChar: '`',
+};
+
class SqlEscaper {
public constructor(public readonly rules: SqlDialectEscapeRules) {}
@@ -46,6 +59,7 @@ class SqlEscaper {
if (escapeBackslash) {
escaped = escaped.split('\\').join('\\\\');
}
+
escaped = doubleQuoteToEscape
? escaped.split(stringQuoteChar).join(stringQuoteChar + stringQuoteChar)
: escaped.split(stringQuoteChar).join(`\\${stringQuoteChar}`);
@@ -164,12 +178,34 @@ class SqlEscaper {
}
}
+/**
+ * Escaping dialect of the target engine:
+ * - `ansi` — standard SQL: Presto, Trino, Athena, Dremio, ksqlDB, Pinot, ...
+ * - `mysql` — MySQL / MariaDB: quotes doubled, backslash is an escape char
+ * - `spark` — Spark SQL / Hive / Databricks: backslash escapes only
+ */
+export type EscapeDialect = 'ansi' | 'mysql' | 'spark';
+
+const Dialects: Record = {
+ ansi: AnsiSqlDialect,
+ mysql: MySqlDialect,
+ spark: SparkSqlDialect,
+};
+
+/**
+ * Format a query for the given engine dialect: `?` -> escaped value,
+ * `??` -> escaped identifier.
+ */
+export function format(dialect: EscapeDialect, sql: string, values?: unknown): string {
+ return new SqlEscaper(Dialects[dialect]).format(sql, values);
+}
+
/**
* Format a query for standard-SQL engines (Presto, Trino, Postgres, ...):
* `?` -> escaped value, `??` -> escaped identifier.
*/
export function formatAnsi(sql: string, values?: unknown): string {
- return new SqlEscaper(AnsiSqlDialect).format(sql, values);
+ return format('ansi', sql, values);
}
/**
@@ -177,5 +213,17 @@ export function formatAnsi(sql: string, values?: unknown): string {
* identifier.
*/
export function formatMySql(sql: string, values?: unknown): string {
- return new SqlEscaper(MySqlDialect).format(sql, values);
+ return format('mysql', sql, values);
+}
+
+/**
+ * Format a query for Spark SQL / Hive / Databricks: `?` -> escaped value,
+ * `??` -> escaped identifier.
+ */
+export function formatSparkSql(sql: string, values?: unknown): string {
+ return format('spark', sql, values);
+}
+
+export function escapeStringLiteral(value: string): string {
+ return new SqlEscaper(AnsiSqlDialect).escapeString(String(value));
}
diff --git a/packages/cubejs-backend-shared/test/sql-escape.test.ts b/packages/cubejs-backend-shared/test/sql-escape.test.ts
index e6218228b5f17..16866e4945e42 100644
--- a/packages/cubejs-backend-shared/test/sql-escape.test.ts
+++ b/packages/cubejs-backend-shared/test/sql-escape.test.ts
@@ -1,7 +1,10 @@
/* eslint-disable quotes */
import {
+ escapeStringLiteral,
+ format,
formatAnsi,
formatMySql,
+ formatSparkSql,
} from '../src/sql-escape';
const injectionPayloads: Array<[string, string]> = [
@@ -65,6 +68,38 @@ function decodeMySqlLiteral(literal: string): string {
return decoded;
}
+/**
+ * Parses the subset of Spark SQL / Hive string-literal syntax emitted by
+ * SqlEscaper. A doubled quote is not an escape there, so any quote in the body
+ * must be backslash-prefixed — an unescaped one means the escaper let the
+ * literal close early (and Spark would concatenate whatever follows).
+ */
+function decodeSparkLiteral(literal: string): string {
+ if (literal.length < 2 || literal[0] !== "'" || literal[literal.length - 1] !== "'") {
+ throw new Error('Not a quoted Spark string literal');
+ }
+
+ const body = literal.slice(1, -1);
+ let decoded = '';
+ for (let i = 0; i < body.length; i++) {
+ const char = body[i];
+ if (char === "'") {
+ throw new Error('Unescaped quote in Spark string literal');
+ }
+ if (char === '\\') {
+ const next = body[i + 1];
+ if (next !== '\\' && next !== "'") {
+ throw new Error('Unescaped backslash in Spark string literal');
+ }
+ decoded += next;
+ i++;
+ } else {
+ decoded += char;
+ }
+ }
+ return decoded;
+}
+
function stringsUpToLength(alphabet: string[], maxLength: number): string[] {
const values = [''];
let current = [''];
@@ -90,6 +125,12 @@ describe('sql-escape', () => {
escapeValue: (value: unknown) => formatMySql('?', [value]),
format: formatMySql,
};
+ const spark = {
+ escapeString: (value: string) => formatSparkSql('?', [value]),
+ escapeIdentifier: (value: string) => formatSparkSql('??', [value]),
+ escapeValue: (value: unknown) => formatSparkSql('?', [value]),
+ format: formatSparkSql,
+ };
describe('escapeString — ANSI/Presto (double quotes, backslash literal)', () => {
it('doubles single quotes', () => {
@@ -193,10 +234,59 @@ describe('sql-escape', () => {
});
});
+ describe('escapeString — Spark SQL/Hive/Databricks (backslash escapes only)', () => {
+ it('escapes quotes with a backslash instead of doubling them', () => {
+ // Verified against apache/spark:3.5.1 — `SELECT 'O''Brien'` returns OBrien
+ // (two adjacent literals, silently concatenated), while `'O\'Brien'`
+ // returns O'Brien. Hive 2.3.5 concatenates the same way by grammar.
+ expect(spark.escapeString("O'Brien")).toBe("'O\\'Brien'");
+ expect(spark.escapeString("O'Brien")).not.toContain("''");
+ });
+
+ it('doubles backslashes', () => {
+ expect(spark.escapeString('a\\b')).toBe("'a\\\\b'");
+ });
+
+ it('neutralizes a trailing backslash + quote payload', () => {
+ expect(spark.escapeString("\\'")).toBe("'\\\\\\''");
+ });
+
+ it.each(injectionPayloads)('keeps the %s payload inside one literal', (_name, payload) => {
+ expect(decodeSparkLiteral(spark.escapeString(payload))).toBe(payload);
+ });
+
+ it('round-trips every short combination of dangerous characters', () => {
+ const candidates = stringsUpToLength(["'", '\\', '\0', '\n', '\r', 'a'], 4);
+
+ for (const candidate of candidates) {
+ expect(decodeSparkLiteral(spark.escapeString(candidate))).toBe(candidate);
+ }
+ });
+
+ it('escapes alternating backslashes and quote runs without changing their value', () => {
+ const value = "\\''\\\\'''";
+ expect(decodeSparkLiteral(spark.escapeString(value))).toBe(value);
+ });
+
+ it('preserves representative Unicode and invisible characters', () => {
+ const values = [
+ 'Café 日本語 👨👩👧👦',
+ 'cafe\u0301',
+ 'مرحبا بالعالم',
+ 'left\u200Dright',
+ ];
+
+ for (const value of values) {
+ expect(decodeSparkLiteral(spark.escapeString(value))).toBe(value);
+ }
+ });
+ });
+
describe('escapeIdentifier', () => {
it('quotes with the dialect identifier char and doubles it', () => {
expect(presto.escapeIdentifier('my"col')).toBe('"my""col"');
expect(mysql.escapeIdentifier('my`col')).toBe('`my``col`');
+ expect(spark.escapeIdentifier('my`col')).toBe('`my``col`');
});
it('keeps identifier injection payloads within the quoted identifier', () => {
@@ -388,6 +478,30 @@ describe('sql-escape', () => {
});
});
+ describe('format (dialect-driven entry point)', () => {
+ it('escapes according to the requested dialect', () => {
+ const value = "a\\b'c";
+
+ expect(format('ansi', 'WHERE a = ?', [value])).toBe("WHERE a = 'a\\b''c'");
+ expect(format('mysql', 'WHERE a = ?', [value])).toBe("WHERE a = 'a\\\\b''c'");
+ expect(format('spark', 'WHERE a = ?', [value])).toBe("WHERE a = 'a\\\\b\\'c'");
+ });
+
+ it('escapes identifiers according to the requested dialect', () => {
+ expect(format('ansi', 'SELECT ??', ['col'])).toBe('SELECT "col"');
+ expect(format('mysql', 'SELECT ??', ['col'])).toBe('SELECT `col`');
+ expect(format('spark', 'SELECT ??', ['col'])).toBe('SELECT `col`');
+ });
+
+ it('backs the per-dialect convenience helpers', () => {
+ const args: [string, unknown[]] = ['WHERE a = ? AND b = ??', ["it's", 'col']];
+
+ expect(formatAnsi(...args)).toBe(format('ansi', ...args));
+ expect(formatMySql(...args)).toBe(format('mysql', ...args));
+ expect(formatSparkSql(...args)).toBe(format('spark', ...args));
+ });
+ });
+
describe('formatAnsi / formatMySql convenience helpers', () => {
it('formatAnsi escapes as standard SQL (quotes doubled, backslash literal)', () => {
expect(formatAnsi('WHERE a = ? AND b = ?', ["a\\b'c", 5]))
@@ -414,4 +528,32 @@ describe('sql-escape', () => {
expect(formatMySql('SELECT ?', false)).toBe('SELECT FALSE');
});
});
+
+ describe('escapeStringLiteral', () => {
+ it('wraps the value in quotes', () => {
+ expect(escapeStringLiteral('orders_rollup')).toBe("'orders_rollup'");
+ });
+
+ it('doubles an embedded quote so the literal cannot be escaped', () => {
+ expect(escapeStringLiteral("pre_agg_x'; DROP TABLE victim; --"))
+ .toBe("'pre_agg_x''; DROP TABLE victim; --'");
+ });
+
+ it('leaves a backslash as data', () => {
+ expect(escapeStringLiteral('folder\\name')).toBe("'folder\\name'");
+ expect(escapeStringLiteral('trailing\\')).toBe("'trailing\\'");
+ });
+
+ it.each(injectionPayloads)('neutralizes the %s payload', (_name, payload) => {
+ expect(decodeAnsiLiteral(escapeStringLiteral(payload))).toBe(payload);
+ });
+
+ it('round-trips every short combination of dangerous characters', () => {
+ const candidates = stringsUpToLength(["'", '\\', '\0', '\n', '\r', 'a'], 4);
+
+ for (const candidate of candidates) {
+ expect(decodeAnsiLiteral(escapeStringLiteral(candidate))).toBe(candidate);
+ }
+ });
+ });
});
diff --git a/packages/cubejs-base-driver/CHANGELOG.md b/packages/cubejs-base-driver/CHANGELOG.md
index 4b2753870d71f..32b0d21ae330b 100644
--- a/packages/cubejs-base-driver/CHANGELOG.md
+++ b/packages/cubejs-base-driver/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/base-driver
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/base-driver
diff --git a/packages/cubejs-base-driver/package.json b/packages/cubejs-base-driver/package.json
index 911b246257185..b4252aaad162a 100644
--- a/packages/cubejs-base-driver/package.json
+++ b/packages/cubejs-base-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/base-driver",
"description": "Cube.js Base Driver",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -33,11 +33,11 @@
"@aws-sdk/s3-request-presigner": "^3.49.0",
"@azure/identity": "^4.4.1",
"@azure/storage-blob": "^12.9.0",
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/shared": "1.7.12",
"@google-cloud/storage": "^7.13.0"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
"@types/jest": "^29",
"@types/node": "^22",
"jest": "^29",
diff --git a/packages/cubejs-bigquery-driver/CHANGELOG.md b/packages/cubejs-bigquery-driver/CHANGELOG.md
index 38996f52d6791..b210a59c6e983 100644
--- a/packages/cubejs-bigquery-driver/CHANGELOG.md
+++ b/packages/cubejs-bigquery-driver/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/bigquery-driver
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/bigquery-driver
diff --git a/packages/cubejs-bigquery-driver/package.json b/packages/cubejs-bigquery-driver/package.json
index bed873f6c2f39..e025a4c130cf6 100644
--- a/packages/cubejs-bigquery-driver/package.json
+++ b/packages/cubejs-bigquery-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/bigquery-driver",
"description": "Cube.js BigQuery database driver",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -29,15 +29,15 @@
"main": "index.js",
"types": "dist/src/index.d.ts",
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.11",
+ "@cubejs-backend/base-driver": "1.7.12",
"@cubejs-backend/dotenv": "^9.0.2",
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/shared": "1.7.12",
"@google-cloud/bigquery": "^7.7.0",
"@google-cloud/storage": "^7.13.0",
"ramda": "^0.27.2"
},
"devDependencies": {
- "@cubejs-backend/testing-shared": "1.7.11",
+ "@cubejs-backend/testing-shared": "1.7.12",
"@types/big.js": "^6.2.2",
"@types/dedent": "^0.7.0",
"@types/jest": "^29",
diff --git a/packages/cubejs-cli/CHANGELOG.md b/packages/cubejs-cli/CHANGELOG.md
index b9254ce727fb6..dfedfaaaca43f 100644
--- a/packages/cubejs-cli/CHANGELOG.md
+++ b/packages/cubejs-cli/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package cubejs-cli
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package cubejs-cli
diff --git a/packages/cubejs-cli/package.json b/packages/cubejs-cli/package.json
index 13ab25427065f..002ab7ef24048 100644
--- a/packages/cubejs-cli/package.json
+++ b/packages/cubejs-cli/package.json
@@ -2,7 +2,7 @@
"name": "cubejs-cli",
"description": "Cube.js Command Line Interface",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -30,10 +30,10 @@
"LICENSE"
],
"dependencies": {
- "@cubejs-backend/cloud": "1.7.11",
+ "@cubejs-backend/cloud": "1.7.12",
"@cubejs-backend/dotenv": "^9.0.2",
- "@cubejs-backend/schema-compiler": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/schema-compiler": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
"chalk": "^2.4.2",
"cli-progress": "^3.10",
"commander": "^2.19.0",
@@ -50,8 +50,8 @@
"colors": "1.4.0"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
- "@cubejs-backend/server": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
+ "@cubejs-backend/server": "1.7.12",
"@oclif/command": "^1.8.0",
"@types/cli-progress": "^3.8.0",
"@types/cross-spawn": "^6.0.2",
diff --git a/packages/cubejs-clickhouse-driver/CHANGELOG.md b/packages/cubejs-clickhouse-driver/CHANGELOG.md
index c506cd10b5040..75e810798d8a9 100644
--- a/packages/cubejs-clickhouse-driver/CHANGELOG.md
+++ b/packages/cubejs-clickhouse-driver/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/clickhouse-driver
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/clickhouse-driver
diff --git a/packages/cubejs-clickhouse-driver/package.json b/packages/cubejs-clickhouse-driver/package.json
index e0732961054ef..cac265a361d75 100644
--- a/packages/cubejs-clickhouse-driver/package.json
+++ b/packages/cubejs-clickhouse-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/clickhouse-driver",
"description": "Cube.js ClickHouse database driver",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -29,16 +29,16 @@
},
"dependencies": {
"@clickhouse/client": "^1.12.0",
- "@cubejs-backend/base-driver": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/base-driver": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
"moment": "^2.24.0",
"sqlstring": "^2.3.1",
"uuid": "^8.3.2"
},
"license": "Apache-2.0",
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
- "@cubejs-backend/testing-shared": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
+ "@cubejs-backend/testing-shared": "1.7.12",
"@types/jest": "^29",
"jest": "^29",
"typescript": "~5.2.2"
diff --git a/packages/cubejs-client-core/CHANGELOG.md b/packages/cubejs-client-core/CHANGELOG.md
index fe14f3959221d..bbee9735a64b7 100644
--- a/packages/cubejs-client-core/CHANGELOG.md
+++ b/packages/cubejs-client-core/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-client/core
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-client/core
diff --git a/packages/cubejs-client-core/package.json b/packages/cubejs-client-core/package.json
index 6244e8ff9d9e5..ff966b5660b20 100644
--- a/packages/cubejs-client-core/package.json
+++ b/packages/cubejs-client-core/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-client/core",
- "version": "1.7.11",
+ "version": "1.7.12",
"engines": {},
"type": "module",
"repository": {
@@ -57,7 +57,7 @@
],
"license": "MIT",
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
"@types/d3-format": "^3",
"@types/d3-time-format": "^4",
"@types/moment-range": "^4.0.0",
diff --git a/packages/cubejs-client-dx/CHANGELOG.md b/packages/cubejs-client-dx/CHANGELOG.md
index 24e9d6d6c3441..8def13c2a7258 100644
--- a/packages/cubejs-client-dx/CHANGELOG.md
+++ b/packages/cubejs-client-dx/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-client/dx
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-client/dx
diff --git a/packages/cubejs-client-dx/package.json b/packages/cubejs-client-dx/package.json
index ac18b8caae14b..02cae07ef57fd 100644
--- a/packages/cubejs-client-dx/package.json
+++ b/packages/cubejs-client-dx/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-client/dx",
- "version": "1.7.11",
+ "version": "1.7.12",
"engines": {},
"repository": {
"type": "git",
diff --git a/packages/cubejs-client-ngx/CHANGELOG.md b/packages/cubejs-client-ngx/CHANGELOG.md
index 9e832df98638b..58ca35668a6e5 100644
--- a/packages/cubejs-client-ngx/CHANGELOG.md
+++ b/packages/cubejs-client-ngx/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-client/ngx
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-client/ngx
diff --git a/packages/cubejs-client-ngx/package.json b/packages/cubejs-client-ngx/package.json
index 6428213ffdd04..aaa1799da0ffc 100644
--- a/packages/cubejs-client-ngx/package.json
+++ b/packages/cubejs-client-ngx/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-client/ngx",
- "version": "1.7.11",
+ "version": "1.7.12",
"author": "Cube Dev, Inc.",
"engines": {},
"repository": {
diff --git a/packages/cubejs-client-react/CHANGELOG.md b/packages/cubejs-client-react/CHANGELOG.md
index 321406496ef67..e7df10fd6a726 100644
--- a/packages/cubejs-client-react/CHANGELOG.md
+++ b/packages/cubejs-client-react/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-client/react
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-client/react
diff --git a/packages/cubejs-client-react/package.json b/packages/cubejs-client-react/package.json
index 2c3596f16500d..73489b80aa5f6 100644
--- a/packages/cubejs-client-react/package.json
+++ b/packages/cubejs-client-react/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-client/react",
- "version": "1.7.11",
+ "version": "1.7.12",
"author": "Cube Dev, Inc.",
"license": "MIT",
"engines": {},
@@ -24,7 +24,7 @@
],
"dependencies": {
"@babel/runtime": "^7.1.2",
- "@cubejs-client/core": "1.7.11",
+ "@cubejs-client/core": "1.7.12",
"core-js": "^3.6.5",
"ramda": "^0.27.2"
},
diff --git a/packages/cubejs-client-vue3/CHANGELOG.md b/packages/cubejs-client-vue3/CHANGELOG.md
index a04b37d0bb72f..35d7306b084be 100644
--- a/packages/cubejs-client-vue3/CHANGELOG.md
+++ b/packages/cubejs-client-vue3/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-client/vue3
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-client/vue3
diff --git a/packages/cubejs-client-vue3/package.json b/packages/cubejs-client-vue3/package.json
index 09ebb252a44b1..9246fcafc4a8d 100644
--- a/packages/cubejs-client-vue3/package.json
+++ b/packages/cubejs-client-vue3/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-client/vue3",
- "version": "1.7.11",
+ "version": "1.7.12",
"engines": {},
"repository": {
"type": "git",
@@ -27,7 +27,7 @@
"src"
],
"dependencies": {
- "@cubejs-client/core": "1.7.11",
+ "@cubejs-client/core": "1.7.12",
"ramda": "^0.27.0"
},
"devDependencies": {
diff --git a/packages/cubejs-client-ws-transport/CHANGELOG.md b/packages/cubejs-client-ws-transport/CHANGELOG.md
index d82444255833a..96f5d3d1f8b34 100644
--- a/packages/cubejs-client-ws-transport/CHANGELOG.md
+++ b/packages/cubejs-client-ws-transport/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-client/ws-transport
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-client/ws-transport
diff --git a/packages/cubejs-client-ws-transport/package.json b/packages/cubejs-client-ws-transport/package.json
index 65a22da33482c..5d2cb7fdff214 100644
--- a/packages/cubejs-client-ws-transport/package.json
+++ b/packages/cubejs-client-ws-transport/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-client/ws-transport",
- "version": "1.7.11",
+ "version": "1.7.12",
"engines": {},
"repository": {
"type": "git",
@@ -20,7 +20,7 @@
},
"dependencies": {
"@babel/runtime": "^7.1.2",
- "@cubejs-client/core": "1.7.11",
+ "@cubejs-client/core": "1.7.12",
"core-js": "^3.6.5",
"isomorphic-ws": "^4.0.1",
"ws": "^7.3.1"
@@ -33,7 +33,7 @@
"@babel/core": "^7.3.3",
"@babel/preset-env": "^7.3.1",
"@babel/preset-typescript": "^7.12.1",
- "@cubejs-backend/linter": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
"@types/ws": "^7.2.9",
"typescript": "~5.2.2"
},
diff --git a/packages/cubejs-crate-driver/CHANGELOG.md b/packages/cubejs-crate-driver/CHANGELOG.md
index f919c34eb140e..c7fdc184c0fe5 100644
--- a/packages/cubejs-crate-driver/CHANGELOG.md
+++ b/packages/cubejs-crate-driver/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/crate-driver
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/crate-driver
diff --git a/packages/cubejs-crate-driver/package.json b/packages/cubejs-crate-driver/package.json
index c7c670ab940f5..fc778e3efc585 100644
--- a/packages/cubejs-crate-driver/package.json
+++ b/packages/cubejs-crate-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/crate-driver",
"description": "Cube.js Crate database driver",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -29,13 +29,13 @@
"lint:fix": "eslint --fix src/* --ext .ts"
},
"dependencies": {
- "@cubejs-backend/postgres-driver": "1.7.11",
- "@cubejs-backend/shared": "1.7.11"
+ "@cubejs-backend/postgres-driver": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12"
},
"license": "Apache-2.0",
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
- "@cubejs-backend/testing-shared": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
+ "@cubejs-backend/testing-shared": "1.7.12",
"testcontainers": "^10.28.0",
"typescript": "~5.2.2"
},
diff --git a/packages/cubejs-cubestore-driver/CHANGELOG.md b/packages/cubejs-cubestore-driver/CHANGELOG.md
index 380975987a496..cd3eaec838ec9 100644
--- a/packages/cubejs-cubestore-driver/CHANGELOG.md
+++ b/packages/cubejs-cubestore-driver/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/cubestore-driver
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/cubestore-driver
diff --git a/packages/cubejs-cubestore-driver/package.json b/packages/cubejs-cubestore-driver/package.json
index 6d55a9b2d90ad..581fcb8db2bf3 100644
--- a/packages/cubejs-cubestore-driver/package.json
+++ b/packages/cubejs-cubestore-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/cubestore-driver",
"description": "Cube Store driver",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -26,10 +26,10 @@
"lint:fix": "eslint --fix src/*.ts"
},
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.11",
- "@cubejs-backend/cubestore": "1.7.11",
- "@cubejs-backend/native": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/base-driver": "1.7.12",
+ "@cubejs-backend/cubestore": "1.7.12",
+ "@cubejs-backend/native": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
"csv-write-stream": "^2.0.0",
"flatbuffers": "25.9.23",
"fs-extra": "^9.1.0",
@@ -40,7 +40,7 @@
"ws": "^7.4.3"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
"@types/csv-write-stream": "^2.0.0",
"@types/jest": "^29",
"@types/node": "^22",
diff --git a/packages/cubejs-databricks-jdbc-driver/CHANGELOG.md b/packages/cubejs-databricks-jdbc-driver/CHANGELOG.md
index dee2e1eaf30db..de060e2168679 100644
--- a/packages/cubejs-databricks-jdbc-driver/CHANGELOG.md
+++ b/packages/cubejs-databricks-jdbc-driver/CHANGELOG.md
@@ -3,6 +3,12 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+### Bug Fixes
+
+- **pinot/dremio/ksql/databriks/hive/jdbc-driver:** Сorrect SQL parameter escaping ([#11374](https://github.com/cube-js/cube/issues/11374)) ([a743790](https://github.com/cube-js/cube/commit/a7437904411cbf268a30bc985c6d5b3b8bbe0e2c))
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
### Bug Fixes
diff --git a/packages/cubejs-databricks-jdbc-driver/package.json b/packages/cubejs-databricks-jdbc-driver/package.json
index 66b0eae4271b3..6571c22b0dd4a 100644
--- a/packages/cubejs-databricks-jdbc-driver/package.json
+++ b/packages/cubejs-databricks-jdbc-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/databricks-jdbc-driver",
"description": "Cube.js Databricks database driver",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"license": "Apache-2.0",
"repository": {
"type": "git",
@@ -30,17 +30,17 @@
"bin"
],
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.11",
- "@cubejs-backend/jdbc-driver": "1.7.11",
- "@cubejs-backend/schema-compiler": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/base-driver": "1.7.12",
+ "@cubejs-backend/jdbc-driver": "1.7.12",
+ "@cubejs-backend/schema-compiler": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
"node-fetch": "^2.6.1",
"ramda": "^0.27.2",
"source-map-support": "^0.5.19",
"uuid": "^8.3.2"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
"@types/jest": "^29",
"@types/node": "^22",
"@types/ramda": "^0.27.34",
diff --git a/packages/cubejs-databricks-jdbc-driver/src/DatabricksDriver.ts b/packages/cubejs-databricks-jdbc-driver/src/DatabricksDriver.ts
index c40d6c08d3136..95a5f4b452099 100644
--- a/packages/cubejs-databricks-jdbc-driver/src/DatabricksDriver.ts
+++ b/packages/cubejs-databricks-jdbc-driver/src/DatabricksDriver.ts
@@ -17,7 +17,7 @@ import {
TableColumn,
UnloadOptions,
} from '@cubejs-backend/base-driver';
-import { JDBCDriver, JDBCDriverConfiguration, } from '@cubejs-backend/jdbc-driver';
+import { EscapeDialect, JDBCDriver, JDBCDriverConfiguration, } from '@cubejs-backend/jdbc-driver';
import { DatabricksQuery } from './DatabricksQuery';
import {
extractAndRemoveUidPwdFromJdbcUrl,
@@ -687,6 +687,10 @@ export class DatabricksDriver extends JDBCDriver {
return result;
}
+ protected escapeDialect(): EscapeDialect {
+ return 'spark';
+ }
+
/**
* Returns query columns types.
*/
diff --git a/packages/cubejs-dbt-schema-extension/CHANGELOG.md b/packages/cubejs-dbt-schema-extension/CHANGELOG.md
index 66db41fbff272..74f3eb2fd5694 100644
--- a/packages/cubejs-dbt-schema-extension/CHANGELOG.md
+++ b/packages/cubejs-dbt-schema-extension/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/dbt-schema-extension
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/dbt-schema-extension
diff --git a/packages/cubejs-dbt-schema-extension/package.json b/packages/cubejs-dbt-schema-extension/package.json
index 47609c75a02b4..e372d1002c5a7 100644
--- a/packages/cubejs-dbt-schema-extension/package.json
+++ b/packages/cubejs-dbt-schema-extension/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/dbt-schema-extension",
"description": "Cube.js dbt Schema Extension",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -25,14 +25,14 @@
"lint:fix": "eslint --fix src/* --ext .ts,.js"
},
"dependencies": {
- "@cubejs-backend/schema-compiler": "1.7.11",
+ "@cubejs-backend/schema-compiler": "1.7.12",
"fs-extra": "^9.1.0",
"inflection": "^1.12.0",
"node-fetch": "^2.6.1"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
- "@cubejs-backend/testing": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
+ "@cubejs-backend/testing": "1.7.12",
"@types/jest": "^29",
"jest": "^29",
"stream-to-array": "^2.3.0",
diff --git a/packages/cubejs-docker/CHANGELOG.md b/packages/cubejs-docker/CHANGELOG.md
index 63be9cadfac1b..9e0e6102d3c2a 100644
--- a/packages/cubejs-docker/CHANGELOG.md
+++ b/packages/cubejs-docker/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/docker
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/docker
diff --git a/packages/cubejs-docker/package.json b/packages/cubejs-docker/package.json
index 1e314cf6a409f..6c081cbc7210c 100644
--- a/packages/cubejs-docker/package.json
+++ b/packages/cubejs-docker/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-backend/docker",
- "version": "1.7.11",
+ "version": "1.7.12",
"description": "Cube.js In Docker (virtual package)",
"author": "Cube Dev, Inc.",
"license": "Apache-2.0",
@@ -9,34 +9,34 @@
"node": ">=20.0.0"
},
"dependencies": {
- "@cubejs-backend/athena-driver": "1.7.11",
- "@cubejs-backend/bigquery-driver": "1.7.11",
- "@cubejs-backend/clickhouse-driver": "1.7.11",
- "@cubejs-backend/crate-driver": "1.7.11",
- "@cubejs-backend/databricks-jdbc-driver": "1.7.11",
- "@cubejs-backend/dbt-schema-extension": "1.7.11",
- "@cubejs-backend/dremio-driver": "1.7.11",
- "@cubejs-backend/druid-driver": "1.7.11",
- "@cubejs-backend/duckdb-driver": "1.7.11",
- "@cubejs-backend/firebolt-driver": "1.7.11",
- "@cubejs-backend/hive-driver": "1.7.11",
- "@cubejs-backend/ksql-driver": "1.7.11",
- "@cubejs-backend/materialize-driver": "1.7.11",
- "@cubejs-backend/mongobi-driver": "1.7.11",
- "@cubejs-backend/mssql-driver": "1.7.11",
- "@cubejs-backend/mysql-driver": "1.7.11",
- "@cubejs-backend/oracle-driver": "1.7.11",
- "@cubejs-backend/pinot-driver": "1.7.11",
- "@cubejs-backend/postgres-driver": "1.7.11",
- "@cubejs-backend/prestodb-driver": "1.7.11",
- "@cubejs-backend/questdb-driver": "1.7.11",
- "@cubejs-backend/redshift-driver": "1.7.11",
- "@cubejs-backend/server": "1.7.11",
- "@cubejs-backend/snowflake-driver": "1.7.11",
- "@cubejs-backend/sqlite-driver": "1.7.11",
- "@cubejs-backend/trino-driver": "1.7.11",
- "@cubejs-backend/vertica-driver": "1.7.11",
- "cubejs-cli": "1.7.11",
+ "@cubejs-backend/athena-driver": "1.7.12",
+ "@cubejs-backend/bigquery-driver": "1.7.12",
+ "@cubejs-backend/clickhouse-driver": "1.7.12",
+ "@cubejs-backend/crate-driver": "1.7.12",
+ "@cubejs-backend/databricks-jdbc-driver": "1.7.12",
+ "@cubejs-backend/dbt-schema-extension": "1.7.12",
+ "@cubejs-backend/dremio-driver": "1.7.12",
+ "@cubejs-backend/druid-driver": "1.7.12",
+ "@cubejs-backend/duckdb-driver": "1.7.12",
+ "@cubejs-backend/firebolt-driver": "1.7.12",
+ "@cubejs-backend/hive-driver": "1.7.12",
+ "@cubejs-backend/ksql-driver": "1.7.12",
+ "@cubejs-backend/materialize-driver": "1.7.12",
+ "@cubejs-backend/mongobi-driver": "1.7.12",
+ "@cubejs-backend/mssql-driver": "1.7.12",
+ "@cubejs-backend/mysql-driver": "1.7.12",
+ "@cubejs-backend/oracle-driver": "1.7.12",
+ "@cubejs-backend/pinot-driver": "1.7.12",
+ "@cubejs-backend/postgres-driver": "1.7.12",
+ "@cubejs-backend/prestodb-driver": "1.7.12",
+ "@cubejs-backend/questdb-driver": "1.7.12",
+ "@cubejs-backend/redshift-driver": "1.7.12",
+ "@cubejs-backend/server": "1.7.12",
+ "@cubejs-backend/snowflake-driver": "1.7.12",
+ "@cubejs-backend/sqlite-driver": "1.7.12",
+ "@cubejs-backend/trino-driver": "1.7.12",
+ "@cubejs-backend/vertica-driver": "1.7.12",
+ "cubejs-cli": "1.7.12",
"typescript": "~5.2.2"
},
"resolutions": {
diff --git a/packages/cubejs-dremio-driver/CHANGELOG.md b/packages/cubejs-dremio-driver/CHANGELOG.md
index a59b0cb1917e8..ad671f2dfef42 100644
--- a/packages/cubejs-dremio-driver/CHANGELOG.md
+++ b/packages/cubejs-dremio-driver/CHANGELOG.md
@@ -3,6 +3,12 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+### Bug Fixes
+
+- **pinot/dremio/ksql/databriks/hive/jdbc-driver:** Сorrect SQL parameter escaping ([#11374](https://github.com/cube-js/cube/issues/11374)) ([a743790](https://github.com/cube-js/cube/commit/a7437904411cbf268a30bc985c6d5b3b8bbe0e2c))
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/dremio-driver
diff --git a/packages/cubejs-dremio-driver/driver/DremioDriver.js b/packages/cubejs-dremio-driver/driver/DremioDriver.js
index 2db10384dd684..b973687d4114d 100644
--- a/packages/cubejs-dremio-driver/driver/DremioDriver.js
+++ b/packages/cubejs-dremio-driver/driver/DremioDriver.js
@@ -7,10 +7,10 @@
const {
getEnv,
assertDataSource,
+ formatAnsi,
pausePromise,
} = require('@cubejs-backend/shared');
const axios = require('axios');
-const SqlString = require('sqlstring');
const { BaseDriver } = require('@cubejs-backend/base-driver');
const DremioQuery = require('./DremioQuery');
@@ -18,7 +18,7 @@ const DremioQuery = require('./DremioQuery');
// @see https://docs.dremio.com/rest-api/jobs/get-job.html
const DREMIO_JOB_LIMIT = 500;
-const applyParams = (query, params) => SqlString.format(query, params);
+const applyParams = (query, params) => formatAnsi(query, params);
/**
* Dremio driver class.
@@ -208,12 +208,7 @@ class DremioDriver extends BaseDriver {
}
async query(query, values) {
- const queryString = applyParams(
- query,
- (values || []).map(s => (typeof s === 'string' ? {
- toSqlString: () => SqlString.escape(s).replace(/\\\\([_%])/g, '\\$1').replace(/\\'/g, '\'\'')
- } : s))
- );
+ const queryString = applyParams(query, values || []);
await this.getToken();
const jobId = await this.executeQuery(queryString);
@@ -281,3 +276,4 @@ class DremioDriver extends BaseDriver {
}
module.exports = DremioDriver;
+module.exports.applyParams = applyParams;
diff --git a/packages/cubejs-dremio-driver/package.json b/packages/cubejs-dremio-driver/package.json
index 050570ea5ca54..70bff5e181b14 100644
--- a/packages/cubejs-dremio-driver/package.json
+++ b/packages/cubejs-dremio-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/dremio-driver",
"description": "Cube.js Dremio driver",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -16,21 +16,21 @@
"tsc": "tsc",
"watch": "tsc -w",
"test": "yarn integration",
+ "unit": "jest --verbose dist/test/unit",
"integration": "npm run integration:dremio",
"integration:dremio": "jest --verbose dist/test",
"lint": "eslint driver/*.js",
"lint:fix": "eslint driver/*.js"
},
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.11",
- "@cubejs-backend/schema-compiler": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
- "axios": "^1.8.3",
- "sqlstring": "^2.3.1"
+ "@cubejs-backend/base-driver": "1.7.12",
+ "@cubejs-backend/schema-compiler": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
+ "axios": "^1.8.3"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
- "@cubejs-backend/testing-shared": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
+ "@cubejs-backend/testing-shared": "1.7.12",
"jest": "^29"
},
"license": "Apache-2.0",
diff --git a/packages/cubejs-dremio-driver/test/unit/params-escaping.test.ts b/packages/cubejs-dremio-driver/test/unit/params-escaping.test.ts
new file mode 100644
index 0000000000000..14584509596a9
--- /dev/null
+++ b/packages/cubejs-dremio-driver/test/unit/params-escaping.test.ts
@@ -0,0 +1,88 @@
+/* eslint-disable quotes */
+const { applyParams } = require('../../../driver/DremioDriver');
+
+// Dremio is a Calcite-based, standard-SQL engine: a quote inside a string
+// literal is escaped by doubling it and a backslash is plain data.
+describe('DremioDriver SQL parameter escaping', () => {
+ it('preserves LIKE escape sequences emitted by the schema compiler', () => {
+ const sql = applyParams(
+ `SELECT * FROM orders WHERE LOWER(name) LIKE '%' || LOWER(?) || '%' ESCAPE '\\'`,
+ ['new\\_order\\%'],
+ );
+
+ expect(sql).toBe(
+ `SELECT * FROM orders WHERE LOWER(name) LIKE '%' || LOWER('new\\_order\\%') || '%' ESCAPE '\\'`
+ );
+ });
+
+ it('does not double literal backslashes in LIKE parameters', () => {
+ const sql = applyParams(
+ `SELECT * FROM orders WHERE LOWER(name) LIKE '%' || LOWER(?) || '%' ESCAPE '\\'`,
+ ['folder\\\\name'],
+ );
+
+ expect(sql).toBe(
+ `SELECT * FROM orders WHERE LOWER(name) LIKE '%' || LOWER('folder\\\\name') || '%' ESCAPE '\\'`
+ );
+ });
+
+ it('doubles quotes so a value cannot break out of the literal', () => {
+ const sql = applyParams(
+ 'SELECT * FROM orders WHERE name = ?',
+ [`o'reilly'); DROP TABLE orders; --`],
+ );
+
+ expect(sql).toBe(
+ `SELECT * FROM orders WHERE name = 'o''reilly''); DROP TABLE orders; --'`
+ );
+ });
+
+ it('keeps the literal closed for a backslash-then-quote payload', () => {
+ // In a backslash-escaping dialect `\'` would smuggle a quote through; on
+ // Dremio the backslash is data and only the quote needs doubling.
+ const sql = applyParams(
+ 'SELECT * FROM orders WHERE name = ?',
+ [`foo\\' OR 1=1 --`],
+ );
+
+ expect(sql).toBe(`SELECT * FROM orders WHERE name = 'foo\\'' OR 1=1 --'`);
+ });
+
+ it('keeps the literal closed for a value ending in a backslash', () => {
+ const sql = applyParams(
+ 'SELECT * FROM orders WHERE name = ? AND status = ?',
+ ['payload\\', 'new'],
+ );
+
+ expect(sql).toBe(`SELECT * FROM orders WHERE name = 'payload\\' AND status = 'new'`);
+ });
+
+ it('keeps a literal percent sign in an equality parameter verbatim', () => {
+ const sql = applyParams(
+ 'SELECT * FROM orders WHERE discount_label = ?',
+ ['100% cotton'],
+ );
+
+ expect(sql).toBe(`SELECT * FROM orders WHERE discount_label = '100% cotton'`);
+ });
+
+ it('escapes every element of an array parameter', () => {
+ const sql = applyParams(
+ 'SELECT * FROM orders WHERE status IN (?)',
+ [[`it's`, 'b']],
+ );
+
+ expect(sql).toBe(`SELECT * FROM orders WHERE status IN ('it''s', 'b')`);
+ });
+
+ it('substitutes multiple placeholders in order', () => {
+ const sql = applyParams(
+ `SELECT * FROM orders WHERE LOWER(name) LIKE '%' || LOWER(?) || '%' ESCAPE '\\' AND status = ? AND amount > ?`,
+ ['pending\\_review', 'new', 100],
+ );
+
+ expect(sql).toBe(
+ `SELECT * FROM orders WHERE LOWER(name) LIKE '%' || LOWER('pending\\_review') || '%' ESCAPE '\\' AND status = 'new' AND amount > 100`
+ );
+ });
+});
diff --git a/packages/cubejs-druid-driver/CHANGELOG.md b/packages/cubejs-druid-driver/CHANGELOG.md
index 34471651a634c..a6d8e3f72f59a 100644
--- a/packages/cubejs-druid-driver/CHANGELOG.md
+++ b/packages/cubejs-druid-driver/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/druid-driver
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
### Features
diff --git a/packages/cubejs-druid-driver/package.json b/packages/cubejs-druid-driver/package.json
index 2f348ab55a0b0..2e2144bc30e6d 100644
--- a/packages/cubejs-druid-driver/package.json
+++ b/packages/cubejs-druid-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/druid-driver",
"description": "Cube.js Druid database driver",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"license": "Apache-2.0",
"repository": {
"type": "git",
@@ -28,13 +28,13 @@
"dist/src/*"
],
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.11",
- "@cubejs-backend/schema-compiler": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/base-driver": "1.7.12",
+ "@cubejs-backend/schema-compiler": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
"axios": "^1.8.3"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
"@types/jest": "^29",
"@types/node": "^22",
"jest": "^29",
diff --git a/packages/cubejs-duckdb-driver/CHANGELOG.md b/packages/cubejs-duckdb-driver/CHANGELOG.md
index 73a634fb3b857..ebbb5d2f9aa0f 100644
--- a/packages/cubejs-duckdb-driver/CHANGELOG.md
+++ b/packages/cubejs-duckdb-driver/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/duckdb-driver
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
### Bug Fixes
diff --git a/packages/cubejs-duckdb-driver/package.json b/packages/cubejs-duckdb-driver/package.json
index f0377e747506b..ef3c304763e95 100644
--- a/packages/cubejs-duckdb-driver/package.json
+++ b/packages/cubejs-duckdb-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/duckdb-driver",
"description": "Cube DuckDB database driver",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -27,15 +27,15 @@
"lint:fix": "eslint --fix src/* --ext .ts"
},
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.11",
- "@cubejs-backend/schema-compiler": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/base-driver": "1.7.12",
+ "@cubejs-backend/schema-compiler": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
"duckdb": "^1.4.1"
},
"license": "Apache-2.0",
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
- "@cubejs-backend/testing-shared": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
+ "@cubejs-backend/testing-shared": "1.7.12",
"@types/jest": "^29",
"@types/node": "^22",
"jest": "^29",
diff --git a/packages/cubejs-firebolt-driver/CHANGELOG.md b/packages/cubejs-firebolt-driver/CHANGELOG.md
index 1cf19e9dbcbac..06453c6a09742 100644
--- a/packages/cubejs-firebolt-driver/CHANGELOG.md
+++ b/packages/cubejs-firebolt-driver/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/firebolt-driver
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
### Features
diff --git a/packages/cubejs-firebolt-driver/package.json b/packages/cubejs-firebolt-driver/package.json
index b7ace7d955d76..4c98661f27048 100644
--- a/packages/cubejs-firebolt-driver/package.json
+++ b/packages/cubejs-firebolt-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/firebolt-driver",
"description": "Cube.js Firebolt database driver",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -28,15 +28,15 @@
"lint:fix": "eslint --fix src/* --ext .ts"
},
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.11",
- "@cubejs-backend/schema-compiler": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/base-driver": "1.7.12",
+ "@cubejs-backend/schema-compiler": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
"firebolt-sdk": "1.10.0"
},
"license": "Apache-2.0",
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
- "@cubejs-backend/testing-shared": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
+ "@cubejs-backend/testing-shared": "1.7.12",
"typescript": "~5.2.2"
},
"publishConfig": {
diff --git a/packages/cubejs-hive-driver/CHANGELOG.md b/packages/cubejs-hive-driver/CHANGELOG.md
index 17547cd81a895..a315d18eae23d 100644
--- a/packages/cubejs-hive-driver/CHANGELOG.md
+++ b/packages/cubejs-hive-driver/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/hive-driver
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/hive-driver
diff --git a/packages/cubejs-hive-driver/package.json b/packages/cubejs-hive-driver/package.json
index 7505978c1178b..7f0c46f2757e2 100644
--- a/packages/cubejs-hive-driver/package.json
+++ b/packages/cubejs-hive-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/hive-driver",
"description": "Cube.js Hive database driver",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -17,8 +17,8 @@
"lint:fix": "eslint --fix src/* --ext .ts"
},
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/base-driver": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
"jshs2": "^0.4.4",
"sasl-plain": "^0.1.0",
"saslmechanisms": "^0.1.1",
@@ -27,7 +27,7 @@
},
"license": "Apache-2.0",
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11"
+ "@cubejs-backend/linter": "1.7.12"
},
"publishConfig": {
"access": "public"
diff --git a/packages/cubejs-jdbc-driver/CHANGELOG.md b/packages/cubejs-jdbc-driver/CHANGELOG.md
index aaee5ef2a588d..a8026dea99e38 100644
--- a/packages/cubejs-jdbc-driver/CHANGELOG.md
+++ b/packages/cubejs-jdbc-driver/CHANGELOG.md
@@ -3,6 +3,12 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+### Bug Fixes
+
+- **pinot/dremio/ksql/databriks/hive/jdbc-driver:** Сorrect SQL parameter escaping ([#11374](https://github.com/cube-js/cube/issues/11374)) ([a743790](https://github.com/cube-js/cube/commit/a7437904411cbf268a30bc985c6d5b3b8bbe0e2c))
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/jdbc-driver
diff --git a/packages/cubejs-jdbc-driver/package.json b/packages/cubejs-jdbc-driver/package.json
index b9f6fe7c4ce27..50f067b305153 100644
--- a/packages/cubejs-jdbc-driver/package.json
+++ b/packages/cubejs-jdbc-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/jdbc-driver",
"description": "Cube.js JDBC database driver",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -17,6 +17,7 @@
"build": "rm -rf dist && npm run tsc",
"tsc": "tsc",
"watch": "tsc -w",
+ "unit": "jest --verbose dist/test/unit",
"lint": "eslint src/* --ext .ts",
"lint:fix": "eslint --fix src/* --ext .ts"
},
@@ -25,10 +26,9 @@
"index.js"
],
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.11",
+ "@cubejs-backend/base-driver": "1.7.12",
"@cubejs-backend/node-java-maven": "^0.1.3",
- "@cubejs-backend/shared": "1.7.11",
- "sqlstring": "^2.3.0"
+ "@cubejs-backend/shared": "1.7.12"
},
"optionalDependencies": {
"@cubejs-backend/jdbc": "^0.9.0",
@@ -42,9 +42,8 @@
"testEnvironment": "node"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
"@types/node": "^22",
- "@types/sqlstring": "^2.3.0",
"typescript": "~5.2.2"
}
}
diff --git a/packages/cubejs-jdbc-driver/src/JDBCDriver.ts b/packages/cubejs-jdbc-driver/src/JDBCDriver.ts
index 5b6ea4ac1d095..3b4736e7c523a 100644
--- a/packages/cubejs-jdbc-driver/src/JDBCDriver.ts
+++ b/packages/cubejs-jdbc-driver/src/JDBCDriver.ts
@@ -8,6 +8,7 @@ import {
getEnv,
assertDataSource,
CancelablePromise,
+ format,
Pool,
} from '@cubejs-backend/shared';
import {
@@ -17,12 +18,11 @@ import {
DownloadQueryResultsResult,
StreamOptions,
} from '@cubejs-backend/base-driver';
-import * as SqlString from 'sqlstring';
import { promisify } from 'util';
import path from 'path';
import { SupportedDrivers } from './supported-drivers';
-import type { DriverOptionsInterface } from './supported-drivers';
+import type { DriverOptionsInterface, EscapeDialect } from './supported-drivers';
import type { JDBCDriverConfiguration } from './types';
import { QueryStream, transformRow } from './QueryStream';
import type { nextFn } from './QueryStream';
@@ -65,8 +65,6 @@ const initMvn = (customClassPath: any) => {
return mvnPromise;
};
-const applyParams = (query: string, params: object | any[]) => SqlString.format(query, params);
-
// promisify Connection methods
Connection.prototype.getMetaDataAsync = promisify(Connection.prototype.getMetaData);
// promisify DatabaseMetaData methods
@@ -237,8 +235,23 @@ export class JDBCDriver extends BaseDriver {
[];
}
+ protected escapeDialect(): EscapeDialect {
+ const dbTypeDescription = JDBCDriver.dbTypeDescription(this.config.dbType);
+ if (dbTypeDescription?.escapeDialect) {
+ return dbTypeDescription.escapeDialect;
+ }
+
+ throw new Error(
+ `Unable to detect SQL escaping rules for db type "${this.config.dbType}"`
+ );
+ }
+
+ protected prepareQueryWithParams(query: string, values: unknown[]): string {
+ return format(this.escapeDialect(), query, values || []);
+ }
+
public async query(query: string, values: unknown[]): Promise {
- const queryWithParams = applyParams(query, values);
+ const queryWithParams = this.prepareQueryWithParams(query, values);
const cancelObj: {cancel?: Function} = {};
const promise = this.queryPromised(queryWithParams, cancelObj, this.prepareConnectionQueries());
(promise as CancelablePromise).cancel =
@@ -282,9 +295,11 @@ export class JDBCDriver extends BaseDriver {
public async stream(sql: string, values: unknown[], { highWaterMark }: StreamOptions): Promise {
const conn = await this.pool.acquire();
- const query = applyParams(sql, values);
- const cancelObj: {cancel?: Function} = {};
+
try {
+ const query = this.prepareQueryWithParams(sql, values);
+ const cancelObj: {cancel?: Function} = {};
+
const createStatement = promisify(conn.createStatement.bind(conn));
const statement = await createStatement();
@@ -325,6 +340,7 @@ export class JDBCDriver extends BaseDriver {
}));
} catch (ex: any) {
await this.pool.release(conn);
+
if (ex.cause) {
throw new Error(ex.cause.getMessageSync());
} else {
diff --git a/packages/cubejs-jdbc-driver/src/index.ts b/packages/cubejs-jdbc-driver/src/index.ts
index d857170a7dd99..fa5b11fabf17e 100644
--- a/packages/cubejs-jdbc-driver/src/index.ts
+++ b/packages/cubejs-jdbc-driver/src/index.ts
@@ -1,2 +1,3 @@
export * from './JDBCDriver';
+export * from './supported-drivers';
export * from './types';
diff --git a/packages/cubejs-jdbc-driver/src/supported-drivers.ts b/packages/cubejs-jdbc-driver/src/supported-drivers.ts
index 3dbf6a2a87ca3..b789124bdf03b 100644
--- a/packages/cubejs-jdbc-driver/src/supported-drivers.ts
+++ b/packages/cubejs-jdbc-driver/src/supported-drivers.ts
@@ -1,13 +1,19 @@
+import type { EscapeDialect } from '@cubejs-backend/shared';
+
+export type { EscapeDialect };
+
export interface DriverOptionsInterface {
driverClass: string;
prepareConnectionQueries: string[];
mavenDependency: Record;
properties: Record;
jdbcUrl: () => string;
+ escapeDialect: EscapeDialect;
}
export const SupportedDrivers: Record = {
mysql: {
+ escapeDialect: 'mysql',
driverClass: 'com.mysql.jdbc.Driver',
prepareConnectionQueries: ['SET time_zone = \'+00:00\''],
mavenDependency: {
@@ -22,6 +28,7 @@ export const SupportedDrivers: Record = {
jdbcUrl: () => `jdbc:mysql://${process.env.CUBEJS_DB_HOST}:3306/${process.env.CUBEJS_DB_NAME}`
},
athena: {
+ escapeDialect: 'ansi',
driverClass: 'com.qubole.jdbc.jdbc41.core.QDriver',
prepareConnectionQueries: [],
mavenDependency: {
@@ -37,6 +44,7 @@ export const SupportedDrivers: Record = {
}
},
sparksql: {
+ escapeDialect: 'spark',
driverClass: 'org.apache.hive.jdbc.HiveDriver',
prepareConnectionQueries: [],
mavenDependency: {
@@ -51,6 +59,7 @@ export const SupportedDrivers: Record = {
}
},
hive: {
+ escapeDialect: 'spark',
driverClass: 'org.apache.hive.jdbc.HiveDriver',
prepareConnectionQueries: [],
mavenDependency: {
diff --git a/packages/cubejs-jdbc-driver/test/unit/escape-dialect.test.ts b/packages/cubejs-jdbc-driver/test/unit/escape-dialect.test.ts
new file mode 100644
index 0000000000000..24d77afc6e4a6
--- /dev/null
+++ b/packages/cubejs-jdbc-driver/test/unit/escape-dialect.test.ts
@@ -0,0 +1,46 @@
+import { SupportedDrivers } from '../../src/supported-drivers';
+
+// Keep the JVM out of the unit test: escaping rules are pure logic.
+jest.mock('@cubejs-backend/jdbc/lib/drivermanager', () => ({
+ getConnection: () => { /* stub */ },
+}), { virtual: true });
+jest.mock('@cubejs-backend/jdbc/lib/connection', () => class Connection {
+ public getMetaData() { /* stub */ }
+}, { virtual: true });
+jest.mock('@cubejs-backend/jdbc/lib/databasemetadata', () => class DatabaseMetaData {
+ public getSchemas() { /* stub */ }
+
+ public getTables() { /* stub */ }
+}, { virtual: true });
+jest.mock('@cubejs-backend/jdbc/lib/jinst', () => ({ isJvmCreated: () => true }), { virtual: true });
+jest.mock('@cubejs-backend/node-java-maven', () => () => { /* stub */ }, { virtual: true });
+
+// eslint-disable-next-line import/first
+import { JDBCDriver } from '../../src/JDBCDriver';
+
+// The constructor requires a JVM-backed pool, while the escaping rules only
+// depend on the configured db type.
+const driverFor = (dbType: string): any => {
+ const driver = Object.create(JDBCDriver.prototype);
+ driver.config = { dbType };
+ return driver;
+};
+
+describe('JDBC escape dialect', () => {
+ it('declares a dialect for every supported engine', () => {
+ for (const [name, options] of Object.entries(SupportedDrivers)) {
+ expect([name, options.escapeDialect]).toEqual([name, expect.stringMatching(/^(ansi|mysql|spark)$/)]);
+ }
+ });
+
+ it('escapes params with the dialect of the configured engine', () => {
+ expect(driverFor('mysql').prepareQueryWithParams('SELECT ?', ['a\\b'])).toEqual('SELECT \'a\\\\b\'');
+ expect(driverFor('athena').prepareQueryWithParams('SELECT ?', ['a\\b'])).toEqual('SELECT \'a\\b\'');
+ expect(driverFor('sparksql').prepareQueryWithParams('SELECT ?', ['a\\b'])).toEqual('SELECT \'a\\\\b\'');
+ });
+
+ it('throws for an unknown engine instead of guessing the dialect', () => {
+ expect(() => driverFor('kekdb').prepareQueryWithParams('SELECT ?', ['a\'b']))
+ .toThrow(/Unable to detect SQL escaping rules/);
+ });
+});
diff --git a/packages/cubejs-ksql-driver/CHANGELOG.md b/packages/cubejs-ksql-driver/CHANGELOG.md
index 0eb53e414da81..637bc9d9a6690 100644
--- a/packages/cubejs-ksql-driver/CHANGELOG.md
+++ b/packages/cubejs-ksql-driver/CHANGELOG.md
@@ -3,6 +3,12 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+### Bug Fixes
+
+- **pinot/dremio/ksql/databriks/hive/jdbc-driver:** Сorrect SQL parameter escaping ([#11374](https://github.com/cube-js/cube/issues/11374)) ([a743790](https://github.com/cube-js/cube/commit/a7437904411cbf268a30bc985c6d5b3b8bbe0e2c))
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
### Features
diff --git a/packages/cubejs-ksql-driver/package.json b/packages/cubejs-ksql-driver/package.json
index 392e7c9d04c0e..42c6f5cc4acf5 100644
--- a/packages/cubejs-ksql-driver/package.json
+++ b/packages/cubejs-ksql-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/ksql-driver",
"description": "Cube.js ksql database driver",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -21,17 +21,17 @@
"build": "rm -rf dist && npm run tsc",
"tsc": "tsc",
"watch": "tsc -w",
+ "unit": "jest --verbose dist/test/unit",
"lint": "eslint src/* --ext .ts",
"lint:fix": "eslint --fix src/* --ext .ts"
},
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.11",
- "@cubejs-backend/schema-compiler": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/base-driver": "1.7.12",
+ "@cubejs-backend/schema-compiler": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
"async-mutex": "0.3.2",
"axios": "^1.8.3",
- "kafkajs": "^2.2.3",
- "sqlstring": "^2.3.1"
+ "kafkajs": "^2.2.3"
},
"license": "Apache-2.0",
"publishConfig": {
@@ -41,7 +41,7 @@
"extends": "../cubejs-linter"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
"typescript": "~5.2.2"
}
}
diff --git a/packages/cubejs-ksql-driver/src/KsqlDriver.ts b/packages/cubejs-ksql-driver/src/KsqlDriver.ts
index f4feab1a8a63c..bd8d15e080018 100644
--- a/packages/cubejs-ksql-driver/src/KsqlDriver.ts
+++ b/packages/cubejs-ksql-driver/src/KsqlDriver.ts
@@ -7,13 +7,13 @@
import {
getEnv,
assertDataSource,
+ formatAnsi,
} from '@cubejs-backend/shared';
import {
BaseDriver, DriverCapabilities,
DriverInterface, TableColumn,
} from '@cubejs-backend/base-driver';
import { Kafka } from 'kafkajs';
-import sqlstring, { format as formatSql } from 'sqlstring';
import axios, { AxiosResponse } from 'axios';
import { Mutex } from 'async-mutex';
import { KsqlQuery } from './KsqlQuery';
@@ -70,13 +70,7 @@ type KsqlQueryOptions = {
selectStatement?: string,
};
-/**
- * KSQL driver class.
- */
export class KsqlDriver extends BaseDriver implements DriverInterface {
- /**
- * Returns default concurrency value.
- */
public static getDefaultConcurrency(): number {
return 1;
}
@@ -87,9 +81,6 @@ export class KsqlDriver extends BaseDriver implements DriverInterface {
private readonly kafkaClient?: Kafka;
- /**
- * Class constructor.
- */
public constructor(
config: Partial & {
/**
@@ -175,12 +166,17 @@ export class KsqlDriver extends BaseDriver implements DriverInterface {
}
}
+ protected prepareQueryWithParams(query: string, values?: unknown[]): string {
+ return formatAnsi(query, values || []);
+ }
+
public async query(query: string, values?: unknown[], options: KsqlQueryOptions = {}): Promise {
if (query.toLowerCase().startsWith('select')) {
throw new Error('Select queries for ksql allowed only from Cube Store. In order to query ksql create pre-aggregation first.');
}
+
const { data } = await this.apiQuery('/ksql', {
- ksql: `${formatSql(query, values)};`,
+ ksql: `${this.prepareQueryWithParams(query, values)};`,
...(options.streamOffset ? {
streamsProperties: {
'ksql.streams.auto.offset.reset': options.streamOffset
@@ -199,8 +195,7 @@ export class KsqlDriver extends BaseDriver implements DriverInterface {
}
}
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
- public async createSchemaIfNotExists(schemaName: string): Promise {
+ public async createSchemaIfNotExists(_schemaName: string): Promise {
// do nothing as there are no schemas in ksql
}
@@ -293,7 +288,7 @@ export class KsqlDriver extends BaseDriver implements DriverInterface {
throw new Error('Unable to detect a source table for ksql download query. In order to query ksql use "SELECT * FROM "');
}
- const selectStatement = sqlstring.format(query, params);
+ const selectStatement = this.prepareQueryWithParams(query, params);
const { streamOffset, outputColumnTypes } = options || {};
return this.getStreamingTableData(table, { selectStatement, streamOffset, outputColumnTypes });
}
diff --git a/packages/cubejs-ksql-driver/test/unit/params-escaping.test.ts b/packages/cubejs-ksql-driver/test/unit/params-escaping.test.ts
new file mode 100644
index 0000000000000..e6491659b0a33
--- /dev/null
+++ b/packages/cubejs-ksql-driver/test/unit/params-escaping.test.ts
@@ -0,0 +1,88 @@
+/* eslint-disable quotes */
+import { KsqlDriver } from '../../src/KsqlDriver';
+
+class TestKsqlDriver extends KsqlDriver {
+ public override prepareQueryWithParams(query: string, values?: unknown[]): string {
+ return super.prepareQueryWithParams(query, values);
+ }
+}
+
+// ksqlDB's grammar descends from Presto's: a quote inside a string literal is
+// escaped by doubling it and a backslash is plain data.
+describe('KsqlDriver SQL parameter escaping', () => {
+ let driver: TestKsqlDriver;
+
+ beforeAll(() => {
+ driver = new TestKsqlDriver({ url: 'http://localhost:8088' });
+ });
+
+ it('doubles quotes so a value cannot break out of the literal', () => {
+ const sql = driver.prepareQueryWithParams(
+ 'CREATE TABLE t AS SELECT * FROM s WHERE status = ?',
+ [`a' OR 1=1 --`],
+ );
+
+ expect(sql).toBe(
+ `CREATE TABLE t AS SELECT * FROM s WHERE status = 'a'' OR 1=1 --'`
+ );
+ });
+
+ it('keeps the literal closed for a value ending in a backslash', () => {
+ const sql = driver.prepareQueryWithParams(
+ 'CREATE TABLE t AS SELECT * FROM s WHERE name = ? AND status = ?',
+ ['payload\\', 'new'],
+ );
+
+ expect(sql).toBe(
+ `CREATE TABLE t AS SELECT * FROM s WHERE name = 'payload\\' AND status = 'new'`
+ );
+ });
+
+ it('keeps the literal closed for a backslash-then-quote payload', () => {
+ const sql = driver.prepareQueryWithParams(
+ 'CREATE TABLE t AS SELECT * FROM s WHERE name = ?',
+ [`foo\\' OR 1=1 --`],
+ );
+
+ expect(sql).toBe(
+ `CREATE TABLE t AS SELECT * FROM s WHERE name = 'foo\\'' OR 1=1 --'`
+ );
+ });
+
+ it('does not double literal backslashes', () => {
+ const sql = driver.prepareQueryWithParams(
+ 'CREATE TABLE t AS SELECT * FROM s WHERE path = ?',
+ ['folder\\\\name'],
+ );
+
+ expect(sql).toBe(
+ `CREATE TABLE t AS SELECT * FROM s WHERE path = 'folder\\\\name'`
+ );
+ });
+
+ it('escapes every element of an array parameter', () => {
+ const sql = driver.prepareQueryWithParams(
+ 'CREATE TABLE t AS SELECT * FROM s WHERE status IN (?)',
+ [[`it's`, 'b']],
+ );
+
+ expect(sql).toBe(
+ `CREATE TABLE t AS SELECT * FROM s WHERE status IN ('it''s', 'b')`
+ );
+ });
+
+ it('substitutes multiple placeholders in order', () => {
+ const sql = driver.prepareQueryWithParams(
+ 'CREATE TABLE t AS SELECT * FROM s WHERE status = ? AND amount > ?',
+ ['new', 100],
+ );
+
+ expect(sql).toBe(
+ `CREATE TABLE t AS SELECT * FROM s WHERE status = 'new' AND amount > 100`
+ );
+ });
+
+ it('leaves a query without parameters untouched', () => {
+ expect(driver.prepareQueryWithParams('SHOW VARIABLES', [])).toBe('SHOW VARIABLES');
+ });
+});
diff --git a/packages/cubejs-linter/CHANGELOG.md b/packages/cubejs-linter/CHANGELOG.md
index d5f9e6f808837..312f0f000f8b7 100644
--- a/packages/cubejs-linter/CHANGELOG.md
+++ b/packages/cubejs-linter/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/linter
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/linter
diff --git a/packages/cubejs-linter/package.json b/packages/cubejs-linter/package.json
index 16dd18ca2a97b..2d2ef42d0639a 100644
--- a/packages/cubejs-linter/package.json
+++ b/packages/cubejs-linter/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/linter",
"description": "Cube.js ESLint (virtual package) for linting code",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
diff --git a/packages/cubejs-materialize-driver/CHANGELOG.md b/packages/cubejs-materialize-driver/CHANGELOG.md
index c2b47f5ba3aa6..7d23909dd5e16 100644
--- a/packages/cubejs-materialize-driver/CHANGELOG.md
+++ b/packages/cubejs-materialize-driver/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/materialize-driver
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/materialize-driver
diff --git a/packages/cubejs-materialize-driver/package.json b/packages/cubejs-materialize-driver/package.json
index 19ad7c5653acb..1e1baa11012f6 100644
--- a/packages/cubejs-materialize-driver/package.json
+++ b/packages/cubejs-materialize-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/materialize-driver",
"description": "Cube.js Materialize database driver",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -27,15 +27,15 @@
"lint:fix": "eslint --fix src/* --ext .ts"
},
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.11",
- "@cubejs-backend/postgres-driver": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/base-driver": "1.7.12",
+ "@cubejs-backend/postgres-driver": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
"semver": "^7.6.3"
},
"license": "Apache-2.0",
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
- "@cubejs-backend/testing": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
+ "@cubejs-backend/testing": "1.7.12",
"typescript": "~5.2.2"
},
"publishConfig": {
diff --git a/packages/cubejs-mongobi-driver/CHANGELOG.md b/packages/cubejs-mongobi-driver/CHANGELOG.md
index d5d8a2afc69f9..aa32c6786beec 100644
--- a/packages/cubejs-mongobi-driver/CHANGELOG.md
+++ b/packages/cubejs-mongobi-driver/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/mongobi-driver
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/mongobi-driver
diff --git a/packages/cubejs-mongobi-driver/package.json b/packages/cubejs-mongobi-driver/package.json
index 4e9fe98563e3f..3b29d500e0b98 100644
--- a/packages/cubejs-mongobi-driver/package.json
+++ b/packages/cubejs-mongobi-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/mongobi-driver",
"description": "Cube.js MongoBI driver",
"author": "krunalsabnis@gmail.com",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -27,8 +27,8 @@
"integration:mongobi": "jest dist/test"
},
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/base-driver": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
"@types/node": "^22",
"moment": "^2.29.1",
"mysql2": "^3.11.5"
@@ -38,7 +38,7 @@
"access": "public"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
"testcontainers": "^10.28.0",
"typescript": "~5.2.2"
},
diff --git a/packages/cubejs-mssql-driver/CHANGELOG.md b/packages/cubejs-mssql-driver/CHANGELOG.md
index 16d00a8e55f10..c470260648aae 100644
--- a/packages/cubejs-mssql-driver/CHANGELOG.md
+++ b/packages/cubejs-mssql-driver/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/mssql-driver
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/mssql-driver
diff --git a/packages/cubejs-mssql-driver/package.json b/packages/cubejs-mssql-driver/package.json
index 726cd75493a93..e8a2ce2b8aa5e 100644
--- a/packages/cubejs-mssql-driver/package.json
+++ b/packages/cubejs-mssql-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/mssql-driver",
"description": "Cube.js MS SQL database driver",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -25,8 +25,8 @@
"lint:fix": "eslint --fix src/* --ext .ts,.js"
},
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/base-driver": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
"mssql": "^11.0.1"
},
"devDependencies": {
diff --git a/packages/cubejs-mysql-aurora-serverless-driver/CHANGELOG.md b/packages/cubejs-mysql-aurora-serverless-driver/CHANGELOG.md
index 6b6ce44114859..6e71e8bc258f2 100644
--- a/packages/cubejs-mysql-aurora-serverless-driver/CHANGELOG.md
+++ b/packages/cubejs-mysql-aurora-serverless-driver/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/mysql-aurora-serverless-driver
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/mysql-aurora-serverless-driver
diff --git a/packages/cubejs-mysql-aurora-serverless-driver/package.json b/packages/cubejs-mysql-aurora-serverless-driver/package.json
index 73a3582fb2b20..9285ce4f3e954 100644
--- a/packages/cubejs-mysql-aurora-serverless-driver/package.json
+++ b/packages/cubejs-mysql-aurora-serverless-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/mysql-aurora-serverless-driver",
"description": "Cube.js Aurora Serverless Mysql database driver",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -21,14 +21,14 @@
"lint": "eslint driver/*.js test/*.js"
},
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/base-driver": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
"@types/mysql": "^2.15.15",
"aws-sdk": "^2.787.0",
"data-api-client": "^1.1.0"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
"@types/data-api-client": "^1.2.1",
"@types/jest": "^29",
"jest": "^29",
diff --git a/packages/cubejs-mysql-driver/CHANGELOG.md b/packages/cubejs-mysql-driver/CHANGELOG.md
index bd187f8b85959..650a7bcda531a 100644
--- a/packages/cubejs-mysql-driver/CHANGELOG.md
+++ b/packages/cubejs-mysql-driver/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/mysql-driver
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/mysql-driver
diff --git a/packages/cubejs-mysql-driver/package.json b/packages/cubejs-mysql-driver/package.json
index 3c2810f9ccd55..3d9c58e296c18 100644
--- a/packages/cubejs-mysql-driver/package.json
+++ b/packages/cubejs-mysql-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/mysql-driver",
"description": "Cube.js Mysql database driver",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -27,13 +27,13 @@
"lint:fix": "eslint --fix src/* test/* --ext .ts,.js"
},
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/base-driver": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
"mysql2": "^3.16.1"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
- "@cubejs-backend/testing-shared": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
+ "@cubejs-backend/testing-shared": "1.7.12",
"@types/jest": "^29",
"jest": "^29",
"stream-to-array": "^2.3.0",
diff --git a/packages/cubejs-oracle-driver/CHANGELOG.md b/packages/cubejs-oracle-driver/CHANGELOG.md
index 969d1b402923a..fc4b2e5496184 100644
--- a/packages/cubejs-oracle-driver/CHANGELOG.md
+++ b/packages/cubejs-oracle-driver/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/oracle-driver
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/oracle-driver
diff --git a/packages/cubejs-oracle-driver/package.json b/packages/cubejs-oracle-driver/package.json
index 82d4af080ce87..5a8108af9d659 100644
--- a/packages/cubejs-oracle-driver/package.json
+++ b/packages/cubejs-oracle-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/oracle-driver",
"description": "Cube.js oracle database driver",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -13,8 +13,8 @@
},
"main": "driver/OracleDriver.js",
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/base-driver": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
"ramda": "^0.27.0"
},
"devDependencies": {
diff --git a/packages/cubejs-pinot-driver/CHANGELOG.md b/packages/cubejs-pinot-driver/CHANGELOG.md
index 67eb655ed6188..a106da841bd12 100644
--- a/packages/cubejs-pinot-driver/CHANGELOG.md
+++ b/packages/cubejs-pinot-driver/CHANGELOG.md
@@ -3,6 +3,12 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+### Bug Fixes
+
+- **pinot/dremio/ksql/databriks/hive/jdbc-driver:** Сorrect SQL parameter escaping ([#11374](https://github.com/cube-js/cube/issues/11374)) ([a743790](https://github.com/cube-js/cube/commit/a7437904411cbf268a30bc985c6d5b3b8bbe0e2c))
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
### Bug Fixes
diff --git a/packages/cubejs-pinot-driver/package.json b/packages/cubejs-pinot-driver/package.json
index 17ea66ac14fc2..7836ea21ca949 100644
--- a/packages/cubejs-pinot-driver/package.json
+++ b/packages/cubejs-pinot-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/pinot-driver",
"description": "Cube.js Pinot database driver",
"author": "Julian Ronsse, InTheMemory, Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -21,25 +21,25 @@
"build": "rm -rf dist && npm run tsc",
"tsc": "tsc",
"watch": "tsc -w",
+ "unit": "jest --verbose dist/test/unit",
"integration": "npm run integration:pinot",
"integration:pinot": "jest --verbose dist/test",
"lint": "eslint src/* --ext .ts",
"lint:fix": "eslint --fix src/* --ext .ts"
},
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.11",
- "@cubejs-backend/schema-compiler": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/base-driver": "1.7.12",
+ "@cubejs-backend/schema-compiler": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
"node-fetch": "^2.6.1",
- "ramda": "^0.27.2",
- "sqlstring": "^2.3.3"
+ "ramda": "^0.27.2"
},
"license": "Apache-2.0",
"publishConfig": {
"access": "public"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
"@types/jest": "^29",
"jest": "^29",
"should": "^13.2.3",
diff --git a/packages/cubejs-pinot-driver/src/PinotDriver.ts b/packages/cubejs-pinot-driver/src/PinotDriver.ts
index 432cba778d7ca..38bdd5fb39038 100644
--- a/packages/cubejs-pinot-driver/src/PinotDriver.ts
+++ b/packages/cubejs-pinot-driver/src/PinotDriver.ts
@@ -8,6 +8,7 @@ import {
import {
getEnv,
assertDataSource,
+ formatAnsi,
Required,
} from '@cubejs-backend/shared';
@@ -16,7 +17,6 @@ import type { ConnectionOptions as TLSConnectionOptions } from 'tls';
import {
map, zipObj
} from 'ramda';
-import SqlString from 'sqlstring';
import fetch, { Headers, Request, Response } from 'node-fetch';
import { PinotQuery } from './PinotQuery';
@@ -133,9 +133,7 @@ export class PinotDriver extends BaseDriver implements DriverInterface {
}
public testConnection() {
- const query = SqlString.format('select 1');
-
- return (> this.queryPromised(query))
+ return (> this.queryPromised('select 1'))
.then(response => {
if (response.length === 0) {
throw new Error('Unable to connect to your Pinot instance');
@@ -147,10 +145,8 @@ export class PinotDriver extends BaseDriver implements DriverInterface {
return > this.queryPromised(this.prepareQueryWithParams(query, values));
}
- public prepareQueryWithParams(query: string, values: unknown[]) {
- return SqlString.format(query, (values || []).map(value => (typeof value === 'string' ? {
- toSqlString: () => SqlString.escape(value).replace(/\\\\([_%])/g, '\\$1'),
- } : value)));
+ protected prepareQueryWithParams(query: string, values: unknown[]) {
+ return formatAnsi(query, values || []);
}
public authorizationHeaders(): AuthorizationHeaders | {} {
diff --git a/packages/cubejs-pinot-driver/test/unit/params-escaping.test.ts b/packages/cubejs-pinot-driver/test/unit/params-escaping.test.ts
new file mode 100644
index 0000000000000..ae60914a31051
--- /dev/null
+++ b/packages/cubejs-pinot-driver/test/unit/params-escaping.test.ts
@@ -0,0 +1,105 @@
+/* eslint-disable quotes */
+import { PinotDriver } from '../../src/PinotDriver';
+
+class TestPinotDriver extends PinotDriver {
+ public override prepareQueryWithParams(query: string, values: unknown[]) {
+ return super.prepareQueryWithParams(query, values);
+ }
+}
+
+// Apache Pinot parses SQL with Calcite: a quote inside a string literal is
+// escaped by doubling it and a backslash is plain data.
+describe('PinotDriver SQL parameter escaping', () => {
+ let driver: TestPinotDriver;
+
+ beforeAll(() => {
+ driver = new TestPinotDriver({
+ host: 'localhost',
+ port: '8099',
+ dataSource: 'default',
+ });
+ });
+
+ it('preserves LIKE escape sequences emitted by the schema compiler', () => {
+ const sql = driver.prepareQueryWithParams(
+ `SELECT * FROM orders WHERE LOWER(name) LIKE CONCAT('%', LOWER(?), '%') ESCAPE '\\'`,
+ ['new\\_order\\%'],
+ );
+
+ expect(sql).toBe(
+ `SELECT * FROM orders WHERE LOWER(name) LIKE CONCAT('%', LOWER('new\\_order\\%'), '%') ESCAPE '\\'`
+ );
+ });
+
+ it('does not double literal backslashes in LIKE parameters', () => {
+ const sql = driver.prepareQueryWithParams(
+ `SELECT * FROM orders WHERE LOWER(name) LIKE CONCAT('%', LOWER(?), '%') ESCAPE '\\'`,
+ ['folder\\\\name'],
+ );
+
+ expect(sql).toBe(
+ `SELECT * FROM orders WHERE LOWER(name) LIKE CONCAT('%', LOWER('folder\\\\name'), '%') ESCAPE '\\'`
+ );
+ });
+
+ it('doubles quotes so a value cannot break out of the literal', () => {
+ const sql = driver.prepareQueryWithParams(
+ 'SELECT * FROM orders WHERE name = ?',
+ [`o'reilly'); DROP TABLE orders; --`],
+ );
+
+ expect(sql).toBe(
+ `SELECT * FROM orders WHERE name = 'o''reilly''); DROP TABLE orders; --'`
+ );
+ });
+
+ it('keeps the literal closed for a quote payload', () => {
+ // sqlstring rendered this as 'a\'' — Calcite reads the backslash as data,
+ // so the doubled quote became an escaped quote and the literal ran on,
+ // swallowing the rest of the statement.
+ const sql = driver.prepareQueryWithParams(
+ 'SELECT * FROM orders WHERE name = ? AND status = ?',
+ [`a'`, 'new'],
+ );
+
+ expect(sql).toBe(`SELECT * FROM orders WHERE name = 'a''' AND status = 'new'`);
+ });
+
+ it('keeps the literal closed for a value ending in a backslash', () => {
+ const sql = driver.prepareQueryWithParams(
+ 'SELECT * FROM orders WHERE name = ? AND status = ?',
+ ['payload\\', 'new'],
+ );
+
+ expect(sql).toBe(`SELECT * FROM orders WHERE name = 'payload\\' AND status = 'new'`);
+ });
+
+ it('keeps a literal percent sign in an equality parameter verbatim', () => {
+ const sql = driver.prepareQueryWithParams(
+ 'SELECT * FROM orders WHERE discount_label = ?',
+ ['100% cotton'],
+ );
+
+ expect(sql).toBe(`SELECT * FROM orders WHERE discount_label = '100% cotton'`);
+ });
+
+ it('escapes every element of an array parameter', () => {
+ const sql = driver.prepareQueryWithParams(
+ 'SELECT * FROM orders WHERE status IN (?)',
+ [[`it's`, 'b']],
+ );
+
+ expect(sql).toBe(`SELECT * FROM orders WHERE status IN ('it''s', 'b')`);
+ });
+
+ it('substitutes multiple placeholders in order', () => {
+ const sql = driver.prepareQueryWithParams(
+ `SELECT * FROM orders WHERE LOWER(name) LIKE CONCAT('%', LOWER(?), '%') ESCAPE '\\' AND status = ? AND amount > ?`,
+ ['pending\\_review', 'new', 100],
+ );
+
+ expect(sql).toBe(
+ `SELECT * FROM orders WHERE LOWER(name) LIKE CONCAT('%', LOWER('pending\\_review'), '%') ESCAPE '\\' AND status = 'new' AND amount > 100`
+ );
+ });
+});
diff --git a/packages/cubejs-playground/CHANGELOG.md b/packages/cubejs-playground/CHANGELOG.md
index a0382a22034dc..d2077f08ee8d9 100644
--- a/packages/cubejs-playground/CHANGELOG.md
+++ b/packages/cubejs-playground/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-client/playground
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-client/playground
diff --git a/packages/cubejs-playground/package.json b/packages/cubejs-playground/package.json
index 2dd598406c3cb..213258f5c41c2 100644
--- a/packages/cubejs-playground/package.json
+++ b/packages/cubejs-playground/package.json
@@ -1,7 +1,7 @@
{
"name": "@cubejs-client/playground",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"engines": {},
"repository": {
"type": "git",
@@ -68,8 +68,8 @@
"@ant-design/compatible": "^1.0.1",
"@ant-design/icons": "^5.3.5",
"@cube-dev/ui-kit": "0.52.3",
- "@cubejs-client/core": "1.7.11",
- "@cubejs-client/react": "1.7.11",
+ "@cubejs-client/core": "1.7.12",
+ "@cubejs-client/react": "1.7.12",
"@types/flexsearch": "^0.7.3",
"@types/node": "^22",
"@types/react": "^18.3.4",
diff --git a/packages/cubejs-postgres-driver/CHANGELOG.md b/packages/cubejs-postgres-driver/CHANGELOG.md
index 5cd120fff1ce2..d368183fd083e 100644
--- a/packages/cubejs-postgres-driver/CHANGELOG.md
+++ b/packages/cubejs-postgres-driver/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/postgres-driver
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/postgres-driver
diff --git a/packages/cubejs-postgres-driver/package.json b/packages/cubejs-postgres-driver/package.json
index 173731069e370..34ac56d84879f 100644
--- a/packages/cubejs-postgres-driver/package.json
+++ b/packages/cubejs-postgres-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/postgres-driver",
"description": "Cube.js Postgres database driver",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -27,8 +27,8 @@
"lint:fix": "eslint --fix src/* --ext .ts"
},
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/base-driver": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
"@types/pg": "^8.16.0",
"@types/pg-query-stream": "^1.0.3",
"pg": "^8.18.0",
@@ -36,8 +36,8 @@
},
"license": "Apache-2.0",
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
- "@cubejs-backend/testing-shared": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
+ "@cubejs-backend/testing-shared": "1.7.12",
"testcontainers": "^10.28.0",
"typescript": "~5.2.2"
},
diff --git a/packages/cubejs-prestodb-driver/CHANGELOG.md b/packages/cubejs-prestodb-driver/CHANGELOG.md
index 6cd10fcb65fc8..0bc8f34ac7ec9 100644
--- a/packages/cubejs-prestodb-driver/CHANGELOG.md
+++ b/packages/cubejs-prestodb-driver/CHANGELOG.md
@@ -3,6 +3,13 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+### Bug Fixes
+
+- **pinot/dremio/ksql/databriks/hive/jdbc-driver:** Сorrect SQL parameter escaping ([#11374](https://github.com/cube-js/cube/issues/11374)) ([a743790](https://github.com/cube-js/cube/commit/a7437904411cbf268a30bc985c6d5b3b8bbe0e2c))
+- **trino/prestodb-driver:** Сorrect SQL parameter escaping ([#11345](https://github.com/cube-js/cube/issues/11345)) ([463e602](https://github.com/cube-js/cube/commit/463e60284a5a4073eb7b7d2f11c4b315deaa2d94))
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/prestodb-driver
diff --git a/packages/cubejs-prestodb-driver/package.json b/packages/cubejs-prestodb-driver/package.json
index c3c08214300a3..ce3b86fa77e71 100644
--- a/packages/cubejs-prestodb-driver/package.json
+++ b/packages/cubejs-prestodb-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/prestodb-driver",
"description": "Cube.js Presto database driver",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -28,8 +28,8 @@
"lint:fix": "eslint --fix src/* --ext .ts"
},
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/base-driver": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
"presto-client": "1.2.0",
"ramda": "^0.27.0"
},
@@ -38,7 +38,7 @@
"access": "public"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
"@types/jest": "^29",
"jest": "^29",
"should": "^13.2.3",
diff --git a/packages/cubejs-prestodb-driver/src/PrestoDriver.ts b/packages/cubejs-prestodb-driver/src/PrestoDriver.ts
index 7eea140606536..3fb05c790d479 100644
--- a/packages/cubejs-prestodb-driver/src/PrestoDriver.ts
+++ b/packages/cubejs-prestodb-driver/src/PrestoDriver.ts
@@ -215,7 +215,7 @@ export class PrestoDriver extends BaseDriver implements DriverInterface {
return > this.queryPromised(this.prepareQueryWithParams(query, values), false);
}
- public prepareQueryWithParams(query: string, values: unknown[]) {
+ protected prepareQueryWithParams(query: string, values: unknown[]) {
return formatAnsi(query, values || []);
}
diff --git a/packages/cubejs-prestodb-driver/test/unit/params-escaping.test.ts b/packages/cubejs-prestodb-driver/test/unit/params-escaping.test.ts
index ff7578f8701e3..198aeab5a0343 100644
--- a/packages/cubejs-prestodb-driver/test/unit/params-escaping.test.ts
+++ b/packages/cubejs-prestodb-driver/test/unit/params-escaping.test.ts
@@ -1,11 +1,17 @@
/* eslint-disable quotes */
import { PrestoDriver } from '../../src/PrestoDriver';
+class TestPrestoDriver extends PrestoDriver {
+ public override prepareQueryWithParams(query: string, values: unknown[]) {
+ return super.prepareQueryWithParams(query, values);
+ }
+}
+
describe('PrestoDriver SQL parameter escaping', () => {
- let driver: PrestoDriver;
+ let driver: TestPrestoDriver;
beforeAll(() => {
- driver = new PrestoDriver({
+ driver = new TestPrestoDriver({
host: 'localhost',
port: '8080',
catalog: 'test',
diff --git a/packages/cubejs-query-orchestrator/CHANGELOG.md b/packages/cubejs-query-orchestrator/CHANGELOG.md
index 7d52b36bc1727..88aadaf09ae2d 100644
--- a/packages/cubejs-query-orchestrator/CHANGELOG.md
+++ b/packages/cubejs-query-orchestrator/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/query-orchestrator
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/query-orchestrator
diff --git a/packages/cubejs-query-orchestrator/package.json b/packages/cubejs-query-orchestrator/package.json
index 81183b9b9cec1..80b4f2ba999b8 100644
--- a/packages/cubejs-query-orchestrator/package.json
+++ b/packages/cubejs-query-orchestrator/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/query-orchestrator",
"description": "Cube.js Query Orchestrator and Cache",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -29,15 +29,15 @@
"dist/src/*"
],
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.11",
- "@cubejs-backend/cubestore-driver": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/base-driver": "1.7.12",
+ "@cubejs-backend/cubestore-driver": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
"csv-write-stream": "^2.0.0",
"lru-cache": "^11.1.0",
"ramda": "^0.27.2"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
"@types/jest": "^29",
"@types/node": "^22",
"@types/ramda": "^0.27.32",
diff --git a/packages/cubejs-questdb-driver/CHANGELOG.md b/packages/cubejs-questdb-driver/CHANGELOG.md
index fdea7643a0fcb..2c6493d10b6ba 100644
--- a/packages/cubejs-questdb-driver/CHANGELOG.md
+++ b/packages/cubejs-questdb-driver/CHANGELOG.md
@@ -3,6 +3,12 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+### Bug Fixes
+
+- **pinot/dremio/ksql/databriks/hive/jdbc-driver:** Сorrect SQL parameter escaping ([#11374](https://github.com/cube-js/cube/issues/11374)) ([a743790](https://github.com/cube-js/cube/commit/a7437904411cbf268a30bc985c6d5b3b8bbe0e2c))
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/questdb-driver
diff --git a/packages/cubejs-questdb-driver/package.json b/packages/cubejs-questdb-driver/package.json
index a9e6170193051..35786b3038d61 100644
--- a/packages/cubejs-questdb-driver/package.json
+++ b/packages/cubejs-questdb-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/questdb-driver",
"description": "Cube.js QuestDB database driver",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -27,9 +27,9 @@
"lint:fix": "eslint --fix src/* --ext .ts"
},
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.11",
- "@cubejs-backend/schema-compiler": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/base-driver": "1.7.12",
+ "@cubejs-backend/schema-compiler": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
"@types/pg": "^8.6.0",
"moment": "^2.24.0",
"pg": "^8.7.0",
@@ -37,8 +37,8 @@
},
"license": "Apache-2.0",
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
- "@cubejs-backend/testing-shared": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
+ "@cubejs-backend/testing-shared": "1.7.12",
"testcontainers": "^10.28.0",
"typescript": "~5.2.2"
},
diff --git a/packages/cubejs-questdb-driver/src/QuestDriver.ts b/packages/cubejs-questdb-driver/src/QuestDriver.ts
index 3117b2fbf256c..d0f43f04e72af 100644
--- a/packages/cubejs-questdb-driver/src/QuestDriver.ts
+++ b/packages/cubejs-questdb-driver/src/QuestDriver.ts
@@ -7,6 +7,7 @@
import {
getEnv,
assertDataSource,
+ escapeStringLiteral,
} from '@cubejs-backend/shared';
import { types, Pool, PoolConfig, FieldDef } from 'pg';
// eslint-disable-next-line import/no-extraneous-dependencies
@@ -217,7 +218,7 @@ export class QuestDriver {
- const response: any[] = await this.query(`SHOW COLUMNS FROM '${table}'`, []);
+ const response: any[] = await this.query(`SHOW COLUMNS FROM ${escapeStringLiteral(table)}`, []);
return response.map((row) => ({ name: row.column, type: this.toGenericType(row.type) }));
}
@@ -237,7 +238,7 @@ export class QuestDriver this.quoteIdentifier(c.name)).join(', ')})
VALUES (${columns.map((c, paramIndex) => this.param(paramIndex)).join(', ')})`,
columns.map(c => this.toColumnValue(tableData.rows[i][c.name] as string, c.type))
diff --git a/packages/cubejs-redshift-driver/CHANGELOG.md b/packages/cubejs-redshift-driver/CHANGELOG.md
index 1aecfaad10353..45ac6b3521801 100644
--- a/packages/cubejs-redshift-driver/CHANGELOG.md
+++ b/packages/cubejs-redshift-driver/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/redshift-driver
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/redshift-driver
diff --git a/packages/cubejs-redshift-driver/package.json b/packages/cubejs-redshift-driver/package.json
index 7eba03872532f..756a9e35b249c 100644
--- a/packages/cubejs-redshift-driver/package.json
+++ b/packages/cubejs-redshift-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/redshift-driver",
"description": "Cube.js Redshift database driver",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -27,13 +27,13 @@
"dependencies": {
"@aws-sdk/client-redshift": "^3.22.0",
"@aws-sdk/credential-providers": "^3.22.0",
- "@cubejs-backend/base-driver": "1.7.11",
- "@cubejs-backend/postgres-driver": "1.7.11",
- "@cubejs-backend/shared": "1.7.11"
+ "@cubejs-backend/base-driver": "1.7.12",
+ "@cubejs-backend/postgres-driver": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12"
},
"license": "Apache-2.0",
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
"typescript": "~5.2.2"
},
"publishConfig": {
diff --git a/packages/cubejs-schema-compiler/CHANGELOG.md b/packages/cubejs-schema-compiler/CHANGELOG.md
index 79e2a1026e658..70b5474877b44 100644
--- a/packages/cubejs-schema-compiler/CHANGELOG.md
+++ b/packages/cubejs-schema-compiler/CHANGELOG.md
@@ -3,6 +3,12 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+### Bug Fixes
+
+- **trino/prestodb-driver:** Сorrect SQL parameter escaping ([#11345](https://github.com/cube-js/cube/issues/11345)) ([463e602](https://github.com/cube-js/cube/commit/463e60284a5a4073eb7b7d2f11c4b315deaa2d94))
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
### Bug Fixes
diff --git a/packages/cubejs-schema-compiler/package.json b/packages/cubejs-schema-compiler/package.json
index 79e5fc119d019..8d2e372af116b 100644
--- a/packages/cubejs-schema-compiler/package.json
+++ b/packages/cubejs-schema-compiler/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/schema-compiler",
"description": "Cube schema compiler",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -40,8 +40,8 @@
"@babel/standalone": "^7.24",
"@babel/traverse": "^7.24",
"@babel/types": "^7.24",
- "@cubejs-backend/native": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/native": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
"antlr4": "^4.13.2",
"camelcase": "^6.2.0",
"cron-parser": "^4.9.0",
@@ -60,9 +60,9 @@
},
"devDependencies": {
"@clickhouse/client": "^1.12.0",
- "@cubejs-backend/linter": "1.7.11",
- "@cubejs-backend/mssql-driver": "1.7.11",
- "@cubejs-backend/query-orchestrator": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
+ "@cubejs-backend/mssql-driver": "1.7.12",
+ "@cubejs-backend/query-orchestrator": "1.7.12",
"@types/babel__code-frame": "^7.0.6",
"@types/babel__generator": "^7.6.8",
"@types/babel__traverse": "^7.20.5",
diff --git a/packages/cubejs-server-core/CHANGELOG.md b/packages/cubejs-server-core/CHANGELOG.md
index f6572a276eb8c..958d0901a03fe 100644
--- a/packages/cubejs-server-core/CHANGELOG.md
+++ b/packages/cubejs-server-core/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/server-core
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
### Bug Fixes
diff --git a/packages/cubejs-server-core/package.json b/packages/cubejs-server-core/package.json
index 59eb07defabc3..58f5d01d18f82 100644
--- a/packages/cubejs-server-core/package.json
+++ b/packages/cubejs-server-core/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/server-core",
"description": "Cube.js base component to wire all backend components together",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -29,16 +29,16 @@
"unit": "jest --runInBand --forceExit --coverage dist/test"
},
"dependencies": {
- "@cubejs-backend/api-gateway": "1.7.11",
- "@cubejs-backend/base-driver": "1.7.11",
- "@cubejs-backend/cloud": "1.7.11",
- "@cubejs-backend/cubestore-driver": "1.7.11",
+ "@cubejs-backend/api-gateway": "1.7.12",
+ "@cubejs-backend/base-driver": "1.7.12",
+ "@cubejs-backend/cloud": "1.7.12",
+ "@cubejs-backend/cubestore-driver": "1.7.12",
"@cubejs-backend/dotenv": "^9.0.2",
- "@cubejs-backend/native": "1.7.11",
- "@cubejs-backend/query-orchestrator": "1.7.11",
- "@cubejs-backend/schema-compiler": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
- "@cubejs-backend/templates": "1.7.11",
+ "@cubejs-backend/native": "1.7.12",
+ "@cubejs-backend/query-orchestrator": "1.7.12",
+ "@cubejs-backend/schema-compiler": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
+ "@cubejs-backend/templates": "1.7.12",
"codesandbox-import-utils": "^2.1.12",
"cross-spawn": "^7.0.1",
"fs-extra": "^8.1.0",
@@ -62,8 +62,8 @@
"ws": "^7.5.3"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
- "@cubejs-client/playground": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
+ "@cubejs-client/playground": "1.7.12",
"@types/cross-spawn": "^6.0.2",
"@types/express": "^4.17.21",
"@types/fs-extra": "^9.0.8",
diff --git a/packages/cubejs-server/CHANGELOG.md b/packages/cubejs-server/CHANGELOG.md
index a0115a0512a5f..96e618fd7c75f 100644
--- a/packages/cubejs-server/CHANGELOG.md
+++ b/packages/cubejs-server/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/server
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/server
diff --git a/packages/cubejs-server/package.json b/packages/cubejs-server/package.json
index df83f109f8327..a0ff6b19500ad 100644
--- a/packages/cubejs-server/package.json
+++ b/packages/cubejs-server/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/server",
"description": "Cube.js all-in-one server",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"types": "index.d.ts",
"repository": {
"type": "git",
@@ -40,11 +40,11 @@
"jest:shapshot": "jest --updateSnapshot test"
},
"dependencies": {
- "@cubejs-backend/cubestore-driver": "1.7.11",
+ "@cubejs-backend/cubestore-driver": "1.7.12",
"@cubejs-backend/dotenv": "^9.0.2",
- "@cubejs-backend/native": "1.7.11",
- "@cubejs-backend/server-core": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/native": "1.7.12",
+ "@cubejs-backend/server-core": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
"@oclif/color": "^1.0.0",
"@oclif/command": "^1.8.13",
"@oclif/config": "^1.18.2",
@@ -61,8 +61,8 @@
"ws": "^7.1.2"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
- "@cubejs-backend/query-orchestrator": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
+ "@cubejs-backend/query-orchestrator": "1.7.12",
"@oclif/dev-cli": "^1.23.1",
"@types/body-parser": "^1.19.0",
"@types/cors": "^2.8.8",
diff --git a/packages/cubejs-snowflake-driver/CHANGELOG.md b/packages/cubejs-snowflake-driver/CHANGELOG.md
index 77c5319ce8e00..c8c703889a9f7 100644
--- a/packages/cubejs-snowflake-driver/CHANGELOG.md
+++ b/packages/cubejs-snowflake-driver/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/snowflake-driver
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/snowflake-driver
diff --git a/packages/cubejs-snowflake-driver/package.json b/packages/cubejs-snowflake-driver/package.json
index 48e9399229d46..9ea2206e10202 100644
--- a/packages/cubejs-snowflake-driver/package.json
+++ b/packages/cubejs-snowflake-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/snowflake-driver",
"description": "Cube.js Snowflake database driver",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -28,8 +28,8 @@
},
"dependencies": {
"@aws-sdk/client-s3": "^3.726.0",
- "@cubejs-backend/base-driver": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/base-driver": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
"snowflake-sdk": "^2.4.0"
},
"license": "Apache-2.0",
@@ -40,7 +40,7 @@
"extends": "../cubejs-linter"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
"typescript": "~5.2.2",
"vitest": "^4"
}
diff --git a/packages/cubejs-sqlite-driver/CHANGELOG.md b/packages/cubejs-sqlite-driver/CHANGELOG.md
index 999008bb105c1..bd6fe5baa2c8d 100644
--- a/packages/cubejs-sqlite-driver/CHANGELOG.md
+++ b/packages/cubejs-sqlite-driver/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/sqlite-driver
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/sqlite-driver
diff --git a/packages/cubejs-sqlite-driver/package.json b/packages/cubejs-sqlite-driver/package.json
index f30de7b3214fc..10f241ffb34b9 100644
--- a/packages/cubejs-sqlite-driver/package.json
+++ b/packages/cubejs-sqlite-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/sqlite-driver",
"description": "Cube.js Sqlite database driver",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -18,13 +18,13 @@
"unit": "jest"
},
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/base-driver": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
"sqlite3": "^5.1.7"
},
"license": "Apache-2.0",
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
"jest": "^29"
},
"publishConfig": {
diff --git a/packages/cubejs-templates/CHANGELOG.md b/packages/cubejs-templates/CHANGELOG.md
index 2da03fcea45c9..29727fa77ea90 100644
--- a/packages/cubejs-templates/CHANGELOG.md
+++ b/packages/cubejs-templates/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/templates
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/templates
diff --git a/packages/cubejs-templates/package.json b/packages/cubejs-templates/package.json
index b9e9575df190d..41f0eb6a4c61e 100644
--- a/packages/cubejs-templates/package.json
+++ b/packages/cubejs-templates/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-backend/templates",
- "version": "1.7.11",
+ "version": "1.7.12",
"description": "Cube.js Templates helpers",
"author": "Cube Dev, Inc.",
"repository": {
@@ -31,7 +31,7 @@
"extends": "../cubejs-linter"
},
"dependencies": {
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/shared": "1.7.12",
"cross-spawn": "^7.0.3",
"decompress": "^4.2.1",
"decompress-targz": "^4.1.1",
@@ -41,7 +41,7 @@
"source-map-support": "^0.5.19"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
"typescript": "~5.2.2"
}
}
diff --git a/packages/cubejs-testing-drivers/CHANGELOG.md b/packages/cubejs-testing-drivers/CHANGELOG.md
index f4bc6007d5a2c..34df77f6478f7 100644
--- a/packages/cubejs-testing-drivers/CHANGELOG.md
+++ b/packages/cubejs-testing-drivers/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/testing-drivers
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/testing-drivers
diff --git a/packages/cubejs-testing-drivers/package.json b/packages/cubejs-testing-drivers/package.json
index 434d89b49ac2b..7c7e399060d88 100644
--- a/packages/cubejs-testing-drivers/package.json
+++ b/packages/cubejs-testing-drivers/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-backend/testing-drivers",
- "version": "1.7.11",
+ "version": "1.7.12",
"description": "Cube.js drivers test suite",
"author": "Cube Dev, Inc.",
"repository": {
@@ -86,28 +86,28 @@
"dist/src"
],
"dependencies": {
- "@cubejs-backend/athena-driver": "1.7.11",
- "@cubejs-backend/base-driver": "1.7.11",
- "@cubejs-backend/bigquery-driver": "1.7.11",
- "@cubejs-backend/clickhouse-driver": "1.7.11",
- "@cubejs-backend/crate-driver": "1.7.11",
- "@cubejs-backend/cubestore-driver": "1.7.11",
- "@cubejs-backend/databricks-jdbc-driver": "1.7.11",
+ "@cubejs-backend/athena-driver": "1.7.12",
+ "@cubejs-backend/base-driver": "1.7.12",
+ "@cubejs-backend/bigquery-driver": "1.7.12",
+ "@cubejs-backend/clickhouse-driver": "1.7.12",
+ "@cubejs-backend/crate-driver": "1.7.12",
+ "@cubejs-backend/cubestore-driver": "1.7.12",
+ "@cubejs-backend/databricks-jdbc-driver": "1.7.12",
"@cubejs-backend/dotenv": "^9.0.2",
- "@cubejs-backend/linter": "1.7.11",
- "@cubejs-backend/mssql-driver": "1.7.11",
- "@cubejs-backend/mysql-driver": "1.7.11",
- "@cubejs-backend/oracle-driver": "1.7.11",
- "@cubejs-backend/pinot-driver": "1.7.11",
- "@cubejs-backend/postgres-driver": "1.7.11",
- "@cubejs-backend/query-orchestrator": "1.7.11",
- "@cubejs-backend/questdb-driver": "1.7.11",
- "@cubejs-backend/server-core": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
- "@cubejs-backend/snowflake-driver": "1.7.11",
- "@cubejs-backend/testing-shared": "1.7.11",
- "@cubejs-client/core": "1.7.11",
- "@cubejs-client/ws-transport": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
+ "@cubejs-backend/mssql-driver": "1.7.12",
+ "@cubejs-backend/mysql-driver": "1.7.12",
+ "@cubejs-backend/oracle-driver": "1.7.12",
+ "@cubejs-backend/pinot-driver": "1.7.12",
+ "@cubejs-backend/postgres-driver": "1.7.12",
+ "@cubejs-backend/query-orchestrator": "1.7.12",
+ "@cubejs-backend/questdb-driver": "1.7.12",
+ "@cubejs-backend/server-core": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
+ "@cubejs-backend/snowflake-driver": "1.7.12",
+ "@cubejs-backend/testing-shared": "1.7.12",
+ "@cubejs-client/core": "1.7.12",
+ "@cubejs-client/ws-transport": "1.7.12",
"@jest/globals": "^29",
"@types/jest": "^29",
"@types/node": "^22",
diff --git a/packages/cubejs-testing-shared/CHANGELOG.md b/packages/cubejs-testing-shared/CHANGELOG.md
index c4f000d1d4ce3..4a3c9f443bd82 100644
--- a/packages/cubejs-testing-shared/CHANGELOG.md
+++ b/packages/cubejs-testing-shared/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/testing-shared
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/testing-shared
diff --git a/packages/cubejs-testing-shared/package.json b/packages/cubejs-testing-shared/package.json
index 89a55892f5bdb..77bd8352e76c5 100644
--- a/packages/cubejs-testing-shared/package.json
+++ b/packages/cubejs-testing-shared/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-backend/testing-shared",
- "version": "1.7.11",
+ "version": "1.7.12",
"description": "Cube.js Testing Helpers",
"author": "Cube Dev, Inc.",
"repository": {
@@ -26,16 +26,16 @@
],
"dependencies": {
"@cubejs-backend/dotenv": "^9.0.2",
- "@cubejs-backend/query-orchestrator": "1.7.11",
- "@cubejs-backend/schema-compiler": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/query-orchestrator": "1.7.12",
+ "@cubejs-backend/schema-compiler": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
"@testcontainers/kafka": "~10.28.0",
"dedent": "^0.7.0",
"node-fetch": "^2.6.7",
"testcontainers": "^10.28.0"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
"@jest/globals": "^29",
"@types/dedent": "^0.7.0",
"@types/jest": "^29",
diff --git a/packages/cubejs-testing/CHANGELOG.md b/packages/cubejs-testing/CHANGELOG.md
index b3ec6644fc6c2..91992eb484415 100644
--- a/packages/cubejs-testing/CHANGELOG.md
+++ b/packages/cubejs-testing/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/testing
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
### Features
diff --git a/packages/cubejs-testing/package.json b/packages/cubejs-testing/package.json
index 79963135abf4a..f4496b434566d 100644
--- a/packages/cubejs-testing/package.json
+++ b/packages/cubejs-testing/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-backend/testing",
- "version": "1.7.11",
+ "version": "1.7.12",
"description": "Cube.js e2e tests",
"author": "Cube Dev, Inc.",
"repository": {
@@ -91,15 +91,15 @@
"birdbox-fixtures"
],
"dependencies": {
- "@cubejs-backend/cubestore-driver": "1.7.11",
+ "@cubejs-backend/cubestore-driver": "1.7.12",
"@cubejs-backend/dotenv": "^9.0.2",
- "@cubejs-backend/ksql-driver": "1.7.11",
- "@cubejs-backend/postgres-driver": "1.7.11",
- "@cubejs-backend/query-orchestrator": "1.7.11",
- "@cubejs-backend/schema-compiler": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
- "@cubejs-backend/testing-shared": "1.7.11",
- "@cubejs-client/ws-transport": "1.7.11",
+ "@cubejs-backend/ksql-driver": "1.7.12",
+ "@cubejs-backend/postgres-driver": "1.7.12",
+ "@cubejs-backend/query-orchestrator": "1.7.12",
+ "@cubejs-backend/schema-compiler": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
+ "@cubejs-backend/testing-shared": "1.7.12",
+ "@cubejs-client/ws-transport": "1.7.12",
"dedent": "^0.7.0",
"fs-extra": "^8.1.0",
"http-proxy": "^1.18.1",
@@ -110,8 +110,8 @@
},
"devDependencies": {
"@4tw/cypress-drag-drop": "^1.6.0",
- "@cubejs-backend/linter": "1.7.11",
- "@cubejs-client/core": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
+ "@cubejs-client/core": "1.7.12",
"@jest/globals": "^29",
"@types/dedent": "^0.7.0",
"@types/http-proxy": "^1.17.5",
diff --git a/packages/cubejs-trino-driver/CHANGELOG.md b/packages/cubejs-trino-driver/CHANGELOG.md
index 0b62fcf72ddb5..f74083da36b8e 100644
--- a/packages/cubejs-trino-driver/CHANGELOG.md
+++ b/packages/cubejs-trino-driver/CHANGELOG.md
@@ -3,6 +3,12 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+### Bug Fixes
+
+- **pinot/dremio/ksql/databriks/hive/jdbc-driver:** Сorrect SQL parameter escaping ([#11374](https://github.com/cube-js/cube/issues/11374)) ([a743790](https://github.com/cube-js/cube/commit/a7437904411cbf268a30bc985c6d5b3b8bbe0e2c))
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/trino-driver
diff --git a/packages/cubejs-trino-driver/package.json b/packages/cubejs-trino-driver/package.json
index 208a05fe3d5fb..7b56e49abb317 100644
--- a/packages/cubejs-trino-driver/package.json
+++ b/packages/cubejs-trino-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/trino-driver",
"description": "Cube.js Trino database driver",
"author": "Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -28,20 +28,19 @@
"lint:fix": "eslint --fix src/* --ext .ts"
},
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.11",
- "@cubejs-backend/prestodb-driver": "1.7.11",
- "@cubejs-backend/schema-compiler": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/base-driver": "1.7.12",
+ "@cubejs-backend/prestodb-driver": "1.7.12",
+ "@cubejs-backend/schema-compiler": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
"node-fetch": "^2.6.1",
- "presto-client": "^1.2.0",
- "sqlstring": "^2.3.1"
+ "presto-client": "^1.2.0"
},
"license": "Apache-2.0",
"publishConfig": {
"access": "public"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
"@types/jest": "^29",
"jest": "^29",
"testcontainers": "^10.28.0",
diff --git a/packages/cubejs-vertica-driver/CHANGELOG.md b/packages/cubejs-vertica-driver/CHANGELOG.md
index aeb1d8541760e..3163e6585fe45 100644
--- a/packages/cubejs-vertica-driver/CHANGELOG.md
+++ b/packages/cubejs-vertica-driver/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/vertica-driver
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/vertica-driver
diff --git a/packages/cubejs-vertica-driver/package.json b/packages/cubejs-vertica-driver/package.json
index d9a3fdd50aae9..590fc1cdb8b68 100644
--- a/packages/cubejs-vertica-driver/package.json
+++ b/packages/cubejs-vertica-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/vertica-driver",
"description": "Cube.js Vertica database driver",
"author": "Eduard Karacharov, Tim Brown, Cube Dev, Inc.",
- "version": "1.7.11",
+ "version": "1.7.12",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -19,16 +19,16 @@
"lint:fix": "eslint --fix **/*.js"
},
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.11",
- "@cubejs-backend/query-orchestrator": "1.7.11",
- "@cubejs-backend/schema-compiler": "1.7.11",
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/base-driver": "1.7.12",
+ "@cubejs-backend/query-orchestrator": "1.7.12",
+ "@cubejs-backend/schema-compiler": "1.7.12",
+ "@cubejs-backend/shared": "1.7.12",
"vertica-nodejs": "^1.0.3"
},
"license": "Apache-2.0",
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
- "@cubejs-backend/testing-shared": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
+ "@cubejs-backend/testing-shared": "1.7.12",
"@types/jest": "^29",
"jest": "^29",
"testcontainers": "^10.28.0"
diff --git a/rust/cubesql/CHANGELOG.md b/rust/cubesql/CHANGELOG.md
index 057bde3eee716..53f73ed822619 100644
--- a/rust/cubesql/CHANGELOG.md
+++ b/rust/cubesql/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/cubesql
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
### Bug Fixes
diff --git a/rust/cubesql/Cargo.lock b/rust/cubesql/Cargo.lock
index f703f45b452d7..b2d84e1ef6d7b 100644
--- a/rust/cubesql/Cargo.lock
+++ b/rust/cubesql/Cargo.lock
@@ -698,7 +698,7 @@ dependencies = [
[[package]]
name = "cube-ext"
version = "1.0.0"
-source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=d203d8771a9673fb676b44dce1f99e91634b4080#d203d8771a9673fb676b44dce1f99e91634b4080"
+source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=ee20ad38796f4a9966ff58b9ace425c7488459e9#ee20ad38796f4a9966ff58b9ace425c7488459e9"
dependencies = [
"arrow",
"chrono",
@@ -822,7 +822,7 @@ dependencies = [
[[package]]
name = "datafusion"
version = "7.0.0"
-source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=d203d8771a9673fb676b44dce1f99e91634b4080#d203d8771a9673fb676b44dce1f99e91634b4080"
+source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=ee20ad38796f4a9966ff58b9ace425c7488459e9#ee20ad38796f4a9966ff58b9ace425c7488459e9"
dependencies = [
"ahash 0.7.8",
"arrow",
@@ -855,7 +855,7 @@ dependencies = [
[[package]]
name = "datafusion-common"
version = "7.0.0"
-source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=d203d8771a9673fb676b44dce1f99e91634b4080#d203d8771a9673fb676b44dce1f99e91634b4080"
+source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=ee20ad38796f4a9966ff58b9ace425c7488459e9#ee20ad38796f4a9966ff58b9ace425c7488459e9"
dependencies = [
"arrow",
"ordered-float 2.10.0",
@@ -866,7 +866,7 @@ dependencies = [
[[package]]
name = "datafusion-data-access"
version = "1.0.0"
-source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=d203d8771a9673fb676b44dce1f99e91634b4080#d203d8771a9673fb676b44dce1f99e91634b4080"
+source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=ee20ad38796f4a9966ff58b9ace425c7488459e9#ee20ad38796f4a9966ff58b9ace425c7488459e9"
dependencies = [
"async-trait",
"chrono",
@@ -879,7 +879,7 @@ dependencies = [
[[package]]
name = "datafusion-expr"
version = "7.0.0"
-source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=d203d8771a9673fb676b44dce1f99e91634b4080#d203d8771a9673fb676b44dce1f99e91634b4080"
+source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=ee20ad38796f4a9966ff58b9ace425c7488459e9#ee20ad38796f4a9966ff58b9ace425c7488459e9"
dependencies = [
"ahash 0.7.8",
"arrow",
@@ -890,7 +890,7 @@ dependencies = [
[[package]]
name = "datafusion-physical-expr"
version = "7.0.0"
-source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=d203d8771a9673fb676b44dce1f99e91634b4080#d203d8771a9673fb676b44dce1f99e91634b4080"
+source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=ee20ad38796f4a9966ff58b9ace425c7488459e9#ee20ad38796f4a9966ff58b9ace425c7488459e9"
dependencies = [
"ahash 0.7.8",
"arrow",
diff --git a/rust/cubesql/cubesql/Cargo.toml b/rust/cubesql/cubesql/Cargo.toml
index 6dedf834d8ab5..feb7240a25c6b 100644
--- a/rust/cubesql/cubesql/Cargo.toml
+++ b/rust/cubesql/cubesql/Cargo.toml
@@ -10,7 +10,7 @@ homepage = "https://cube.dev"
[dependencies]
arc-swap = "1"
-datafusion = { git = 'https://github.com/cube-js/arrow-datafusion.git', rev = "d203d8771a9673fb676b44dce1f99e91634b4080", default-features = false, features = [
+datafusion = { git = 'https://github.com/cube-js/arrow-datafusion.git', rev = "ee20ad38796f4a9966ff58b9ace425c7488459e9", default-features = false, features = [
"regex_expressions",
"unicode_expressions",
] }
diff --git a/rust/cubesql/cubesql/src/compile/test/test_cube_scan.rs b/rust/cubesql/cubesql/src/compile/test/test_cube_scan.rs
index 0b6143ff0cc1a..c8686e4da883f 100644
--- a/rust/cubesql/cubesql/src/compile/test/test_cube_scan.rs
+++ b/rust/cubesql/cubesql/src/compile/test/test_cube_scan.rs
@@ -1,4 +1,4 @@
-use cubeclient::models::V1LoadRequestQuery;
+use cubeclient::models::{V1LoadRequestQuery, V1LoadRequestQueryFilterItem};
use pretty_assertions::assert_eq;
use crate::compile::{
@@ -224,3 +224,49 @@ async fn cubescan_limit_offset_limit_offset() {
);
}
}
+
+/// GROUP BY () is an empty grouping set, equivalent to aggregation without GROUP BY
+#[tokio::test]
+async fn cubescan_empty_group_by_tuple() {
+ init_testing_logger();
+
+ let query_plan = convert_select_to_query_plan(
+ // language=PostgreSQL
+ r#"
+ SELECT
+ MEASURE(count),
+ MEASURE(maxPrice)
+ FROM
+ KibanaSampleDataEcommerce
+ WHERE customer_gender = 'female'
+ GROUP BY ()
+ LIMIT 100
+ "#
+ .to_string(),
+ DatabaseProtocol::PostgreSQL,
+ )
+ .await;
+
+ let logical_plan = query_plan.as_logical_plan();
+ assert_eq!(
+ logical_plan.find_cube_scan().request,
+ V1LoadRequestQuery {
+ measures: Some(vec![
+ "KibanaSampleDataEcommerce.count".to_string(),
+ "KibanaSampleDataEcommerce.maxPrice".to_string(),
+ ]),
+ dimensions: Some(vec![]),
+ segments: Some(vec![]),
+ order: Some(vec![]),
+ limit: Some(100),
+ filters: Some(vec![V1LoadRequestQueryFilterItem {
+ member: Some("KibanaSampleDataEcommerce.customer_gender".to_string()),
+ operator: Some("equals".to_string()),
+ values: Some(vec!["female".to_string()]),
+ or: None,
+ and: None,
+ }]),
+ ..Default::default()
+ }
+ );
+}
diff --git a/rust/cubesql/package.json b/rust/cubesql/package.json
index 75a58b08f3215..264b789a86f4b 100644
--- a/rust/cubesql/package.json
+++ b/rust/cubesql/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-backend/cubesql",
- "version": "1.7.11",
+ "version": "1.7.12",
"description": "SQL API for Cube as proxy over MySQL protocol.",
"engines": {
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
diff --git a/rust/cubestore/CHANGELOG.md b/rust/cubestore/CHANGELOG.md
index 6211c581eeb65..d97efb9fc1440 100644
--- a/rust/cubestore/CHANGELOG.md
+++ b/rust/cubestore/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.12](https://github.com/cube-js/cube/compare/v1.7.11...v1.7.12) (2026-07-27)
+
+**Note:** Version bump only for package @cubejs-backend/cubestore
+
## [1.7.11](https://github.com/cube-js/cube/compare/v1.7.8...v1.7.11) (2026-07-26)
**Note:** Version bump only for package @cubejs-backend/cubestore
diff --git a/rust/cubestore/Cargo.lock b/rust/cubestore/Cargo.lock
index dbb438ce6a2de..4163a1842ac6c 100644
--- a/rust/cubestore/Cargo.lock
+++ b/rust/cubestore/Cargo.lock
@@ -1558,7 +1558,7 @@ dependencies = [
[[package]]
name = "cubestore"
-version = "1.7.11"
+version = "1.7.12"
dependencies = [
"actix-rt",
"anyhow",
diff --git a/rust/cubestore/cubestore/Cargo.toml b/rust/cubestore/cubestore/Cargo.toml
index 3ec0fd73354e1..cad9367d17506 100644
--- a/rust/cubestore/cubestore/Cargo.toml
+++ b/rust/cubestore/cubestore/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "cubestore"
-version = "1.7.11"
+version = "1.7.12"
authors = ["Cube Dev, Inc."]
edition = "2021"
license = "Apache-2.0"
diff --git a/rust/cubestore/package.json b/rust/cubestore/package.json
index 40fa730f9cd38..4dba3800651d9 100644
--- a/rust/cubestore/package.json
+++ b/rust/cubestore/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-backend/cubestore",
- "version": "1.7.11",
+ "version": "1.7.12",
"description": "Cube.js pre-aggregation storage layer.",
"main": "dist/src/index.js",
"typings": "dist/src/index.d.ts",
@@ -33,7 +33,7 @@
},
"license": "Apache-2.0",
"devDependencies": {
- "@cubejs-backend/linter": "1.7.11",
+ "@cubejs-backend/linter": "1.7.12",
"@types/jest": "^29",
"@types/node": "^18",
"jest": "^29",
@@ -43,7 +43,7 @@
"access": "public"
},
"dependencies": {
- "@cubejs-backend/shared": "1.7.11",
+ "@cubejs-backend/shared": "1.7.12",
"@octokit/core": "^3.2.5",
"source-map-support": "^0.5.19"
},
diff --git a/yarn.lock b/yarn.lock
index 1a31bd19d08bc..b79cf7d85d62c 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -22567,7 +22567,7 @@ sqlstring@2.3.1:
resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.1.tgz#475393ff9e91479aea62dcaf0ca3d14983a7fb40"
integrity sha512-ooAzh/7dxIG5+uDik1z/Rd1vli0+38izZhGzSa34FwR7IbelPWCCKSNIl8jlL/F7ERvy8CB2jNeM1E9i9mXMAQ==
-sqlstring@^2.3.0, sqlstring@^2.3.1, sqlstring@^2.3.2, sqlstring@^2.3.3:
+sqlstring@^2.3.1, sqlstring@^2.3.2, sqlstring@^2.3.3:
version "2.3.3"
resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.3.tgz#2ddc21f03bce2c387ed60680e739922c65751d0c"
integrity sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==