diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1f12b5335728e..648029896567d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,19 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+### Bug Fixes
+
+- **cubestore:** cast aggregating index aggregation results back to the declared column types ([#11413](https://github.com/cube-js/cube/issues/11413)) ([26c4801](https://github.com/cube-js/cube/commit/26c4801629ef4851e3474e5d0a4ed4cf76c3d4d0))
+- **cubestore:** keep the projection schema when rewriting a rolling window ([#11410](https://github.com/cube-js/cube/issues/11410)) ([1bf2dd8](https://github.com/cube-js/cube/commit/1bf2dd848e9147afa94c19235bd0026899740609))
+- **tesseract:** project the requested grain into rolling-window CTEs ([#11400](https://github.com/cube-js/cube/issues/11400)) ([80d1159](https://github.com/cube-js/cube/commit/80d1159fd0d255f8b3b8799275bc921fabeaad5a)), closes [#11410](https://github.com/cube-js/cube/issues/11410) [#11413](https://github.com/cube-js/cube/issues/11413)
+
+### Features
+
+- **cubesql:** Separate env var for non-streaming query max row limit ([#11418](https://github.com/cube-js/cube/issues/11418)) ([236763a](https://github.com/cube-js/cube/commit/236763ad3936ac2a0df3bdd0bfc784d6df78c690))
+- **cubesql:** Split oversized CubeScan record batches ([#11384](https://github.com/cube-js/cube/issues/11384)) ([51db9c7](https://github.com/cube-js/cube/commit/51db9c7d4cc1cf4d50f7e48d4ec269982f01dff9))
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
### Bug Fixes
diff --git a/docs-mintlify/reference/configuration/environment-variables.mdx b/docs-mintlify/reference/configuration/environment-variables.mdx
index b308ac9401f16..7f31202fe54d4 100644
--- a/docs-mintlify/reference/configuration/environment-variables.mdx
+++ b/docs-mintlify/reference/configuration/environment-variables.mdx
@@ -1079,7 +1079,9 @@ specified in an API query.
The maximum [row limit][ref-row-limit] in the result set. An explicit limit in a
query cannot exceed this value, except for [SQL API][ref-sql-api] queries when
-[streaming mode][ref-sql-api-streaming] is enabled.
+[streaming mode][ref-sql-api-streaming] is enabled. SQL API queries that are not
+streamed can be capped separately, at a lower value, with
+[`CUBESQL_NON_STREAMING_QUERY_MAX_ROW_LIMIT`](#cubesql_non_streaming_query_max_row_limit).
| Possible Values | Default in Development | Default in Production |
| ------------------------- | ---------------------- | --------------------- |
@@ -1506,7 +1508,8 @@ If `true`, enables query pushdown in the [SQL API][ref-sql-api].
If `true`, enables the [streaming mode][ref-sql-api-streaming] in the [SQL API][ref-sql-api].
When enabled, SQL API queries with an explicit `LIMIT` clause can exceed the
maximum row limit set by
-[`CUBEJS_DB_QUERY_LIMIT`](#cubejs_db_query_limit).
+[`CUBESQL_NON_STREAMING_QUERY_MAX_ROW_LIMIT`](#cubesql_non_streaming_query_max_row_limit)
+and are streamed instead.
Queries without an explicit `LIMIT` still use [`CUBEJS_DB_QUERY_DEFAULT_LIMIT`](#cubejs_db_query_default_limit).
| Possible Values | Default in Development | Default in Production |
@@ -1528,6 +1531,31 @@ Set to `0` to disable splitting.
| ------------------------------ | ---------------------- | --------------------- |
| A non-negative integer number | `65536` | `65536` |
+## `CUBESQL_NON_STREAMING_QUERY_MAX_ROW_LIMIT`
+
+The maximum [row limit][ref-row-limit] for [SQL API][ref-sql-api] queries that are
+not streamed. A larger `LIMIT` is reduced to this value, unless
+[streaming mode][ref-sql-api-streaming] is enabled, in which case the query is
+streamed instead.
+
+| Possible Values | Default in Development | Default in Production |
+| ------------------------- | ------------------------------------------------- | ------------------------------------------------- |
+| A positive integer number | [`CUBEJS_DB_QUERY_LIMIT`](#cubejs_db_query_limit) (`50000`) | [`CUBEJS_DB_QUERY_LIMIT`](#cubejs_db_query_limit) (`50000`) |
+
+Set it below `CUBEJS_DB_QUERY_LIMIT` to let other APIs return large result sets
+while keeping SQL API responses small enough to fit in a single batch, or streamed
+if streaming mode is enabled. Buffering very large non-streamed responses can
+exhaust memory and break the client connection.
+
+
+
+This value cannot exceed [`CUBEJS_DB_QUERY_LIMIT`](#cubejs_db_query_limit). If you
+set it higher, Cube logs a warning at startup and falls back to
+`CUBEJS_DB_QUERY_LIMIT`, because non-streamed queries above that limit are rejected
+before they reach the data source.
+
+
+
## `CUBESQL_SQL_NO_IMPLICIT_ORDER`
If `true`, prevents adding implicit [default `ORDER BY`
diff --git a/docs-mintlify/reference/core-data-apis/queries.mdx b/docs-mintlify/reference/core-data-apis/queries.mdx
index ce19120c10541..a67a37f582515 100644
--- a/docs-mintlify/reference/core-data-apis/queries.mdx
+++ b/docs-mintlify/reference/core-data-apis/queries.mdx
@@ -44,7 +44,9 @@ environment variable to override it. You can also implement
If you're using the [SQL API][ref-sql-api], you can enable
[streaming mode][ref-sql-api-streaming] to bypass the maximum row limit for
queries with an explicit `LIMIT` clause. Without an explicit `LIMIT`,
-`CUBEJS_DB_QUERY_DEFAULT_LIMIT` still applies even in streaming mode.
+`CUBEJS_DB_QUERY_DEFAULT_LIMIT` still applies even in streaming mode. SQL API
+queries that are not streamed can also be capped separately with
+[`CUBESQL_NON_STREAMING_QUERY_MAX_ROW_LIMIT`](/reference/configuration/environment-variables#cubesql_non_streaming_query_max_row_limit).
### Time zone
diff --git a/docs-mintlify/reference/core-data-apis/sql-api/index.mdx b/docs-mintlify/reference/core-data-apis/sql-api/index.mdx
index 57637f3542c06..6804b38f89976 100644
--- a/docs-mintlify/reference/core-data-apis/sql-api/index.mdx
+++ b/docs-mintlify/reference/core-data-apis/sql-api/index.mdx
@@ -214,6 +214,11 @@ explicit `LIMIT`, increase `CUBEJS_DB_QUERY_DEFAULT_LIMIT` as needed.
+Queries that are not streamed are capped by
+[`CUBESQL_NON_STREAMING_QUERY_MAX_ROW_LIMIT`](/reference/configuration/environment-variables#cubesql_non_streaming_query_max_row_limit),
+which defaults to the value of `CUBEJS_DB_QUERY_LIMIT`. It also acts as the threshold
+above which a query is streamed rather than loaded in a single batch.
+
### Session limit
Each concurrent connection to the SQL API consumes some resources and attempting
diff --git a/lerna.json b/lerna.json
index 8076e9c789c06..c3fa453dab734 100644
--- a/lerna.json
+++ b/lerna.json
@@ -1,5 +1,5 @@
{
- "version": "1.7.14",
+ "version": "1.7.15",
"npmClient": "yarn",
"command": {
"bootstrap": {
diff --git a/packages/cubejs-api-gateway/CHANGELOG.md b/packages/cubejs-api-gateway/CHANGELOG.md
index 1158b3c352813..88a1a3b4c7402 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/api-gateway
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
### Features
diff --git a/packages/cubejs-api-gateway/package.json b/packages/cubejs-api-gateway/package.json
index 387945ae7e49a..d2ca9d2115045 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.14",
+ "version": "1.7.15",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -27,9 +27,9 @@
"dist/src/*"
],
"dependencies": {
- "@cubejs-backend/native": "1.7.14",
- "@cubejs-backend/query-orchestrator": "1.7.14",
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/native": "1.7.15",
+ "@cubejs-backend/query-orchestrator": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
"@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.14",
+ "@cubejs-backend/linter": "1.7.15",
"@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 799b22d336894..e504122604abf 100644
--- a/packages/cubejs-athena-driver/CHANGELOG.md
+++ b/packages/cubejs-athena-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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/athena-driver
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 b30c83c154eb3..7c66dacf6456d 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.14",
+ "version": "1.7.15",
"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.14",
- "@cubejs-backend/shared": "1.7.14"
+ "@cubejs-backend/base-driver": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.14",
- "@cubejs-backend/testing-shared": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
+ "@cubejs-backend/testing-shared": "1.7.15",
"@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 bf6d0c42487fd..3128bfd0e528e 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/cloud
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 4698e5228cb22..0d1d95e43d445 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.14",
+ "version": "1.7.15",
"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.14",
+ "@cubejs-backend/linter": "1.7.15",
"@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.14",
+ "@cubejs-backend/shared": "1.7.15",
"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 bdc34f1799d70..f40f3b1029c82 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/maven
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 65322459a951b..0f176bf4f5b34 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.14",
+ "version": "1.7.15",
"license": "Apache-2.0",
"repository": {
"type": "git",
@@ -31,12 +31,12 @@
"dist/src/*"
],
"dependencies": {
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/shared": "1.7.15",
"source-map-support": "^0.5.19",
"xmlbuilder2": "^2.4.0"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
"@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 6ff6e2e886404..93ad59ce97672 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/native
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
### Bug Fixes
diff --git a/packages/cubejs-backend-native/package.json b/packages/cubejs-backend-native/package.json
index 4146772cbafc1..21677950a6076 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.14",
+ "version": "1.7.15",
"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.14",
+ "@cubejs-backend/linter": "1.7.15",
"@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.14",
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/cubesql": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
"@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 831a5e264efa7..08f9482c6dbba 100644
--- a/packages/cubejs-backend-shared/CHANGELOG.md
+++ b/packages/cubejs-backend-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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/shared
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 c7cd8f0943507..e5b1e5c8f04b0 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.14",
+ "version": "1.7.15",
"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.14",
+ "@cubejs-backend/linter": "1.7.15",
"@types/bytes": "^3.1.5",
"@types/cli-progress": "^3.9.1",
"@types/decompress": "^4.2.7",
diff --git a/packages/cubejs-base-driver/CHANGELOG.md b/packages/cubejs-base-driver/CHANGELOG.md
index 5c304dd829008..fc002c4863dad 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/base-driver
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 ac48880a7b9a4..e6ff1f172645c 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.14",
+ "version": "1.7.15",
"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.14",
+ "@cubejs-backend/shared": "1.7.15",
"@google-cloud/storage": "^7.13.0"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
"@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 2e8e579a1b72d..0c11246c0ed96 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/bigquery-driver
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 2f1028207074b..a8a43a325350f 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.14",
+ "version": "1.7.15",
"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.14",
+ "@cubejs-backend/base-driver": "1.7.15",
"@cubejs-backend/dotenv": "^9.0.2",
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/shared": "1.7.15",
"@google-cloud/bigquery": "^7.7.0",
"@google-cloud/storage": "^7.13.0",
"ramda": "^0.27.2"
},
"devDependencies": {
- "@cubejs-backend/testing-shared": "1.7.14",
+ "@cubejs-backend/testing-shared": "1.7.15",
"@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 4e8a49f4ddf1c..a09981d5b7595 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package cubejs-cli
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**Note:** Version bump only for package cubejs-cli
diff --git a/packages/cubejs-cli/package.json b/packages/cubejs-cli/package.json
index a8517c3352cd6..c4f579f07e02c 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.14",
+ "version": "1.7.15",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -30,10 +30,10 @@
"LICENSE"
],
"dependencies": {
- "@cubejs-backend/cloud": "1.7.14",
+ "@cubejs-backend/cloud": "1.7.15",
"@cubejs-backend/dotenv": "^9.0.2",
- "@cubejs-backend/schema-compiler": "1.7.14",
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/schema-compiler": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
"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.14",
- "@cubejs-backend/server": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
+ "@cubejs-backend/server": "1.7.15",
"@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 ee3f97321a305..9c5092bcc9838 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/clickhouse-driver
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 d322530cd9f42..3aca3369a1678 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.14",
+ "version": "1.7.15",
"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.14",
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/base-driver": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
"moment": "^2.24.0",
"sqlstring": "^2.3.1",
"uuid": "^8.3.2"
},
"license": "Apache-2.0",
"devDependencies": {
- "@cubejs-backend/linter": "1.7.14",
- "@cubejs-backend/testing-shared": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
+ "@cubejs-backend/testing-shared": "1.7.15",
"@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 6877d3d1bea29..b13eb1890f037 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-client/core
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
### Features
diff --git a/packages/cubejs-client-core/package.json b/packages/cubejs-client-core/package.json
index 62a31b9188387..4afc38b69d70a 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.14",
+ "version": "1.7.15",
"engines": {},
"type": "module",
"repository": {
@@ -58,7 +58,7 @@
],
"license": "MIT",
"devDependencies": {
- "@cubejs-backend/linter": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
"@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 b12d8b7232ec7..f4655604e076d 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-client/dx
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 dc395fca1f020..f2b819ba4fc8e 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.14",
+ "version": "1.7.15",
"engines": {},
"repository": {
"type": "git",
diff --git a/packages/cubejs-client-ngx/CHANGELOG.md b/packages/cubejs-client-ngx/CHANGELOG.md
index 37c8141466889..f80ae9cdde5ff 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-client/ngx
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 f3ec8e4162c5c..6666efae85772 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.14",
+ "version": "1.7.15",
"author": "Cube Dev, Inc.",
"engines": {},
"repository": {
diff --git a/packages/cubejs-client-react/CHANGELOG.md b/packages/cubejs-client-react/CHANGELOG.md
index 6daaac9879fb1..4692663619cd8 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-client/react
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
### Features
diff --git a/packages/cubejs-client-react/package.json b/packages/cubejs-client-react/package.json
index 42a3c0edfa197..e8cb8720d33d5 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.14",
+ "version": "1.7.15",
"author": "Cube Dev, Inc.",
"license": "MIT",
"engines": {},
@@ -26,7 +26,7 @@
],
"dependencies": {
"@babel/runtime": "^7.1.2",
- "@cubejs-client/core": "1.7.14",
+ "@cubejs-client/core": "1.7.15",
"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 66b1823602401..2bb17f280ecb6 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-client/vue3
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 be4e7a147708c..cc939c146872d 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.14",
+ "version": "1.7.15",
"engines": {},
"repository": {
"type": "git",
@@ -27,7 +27,7 @@
"src"
],
"dependencies": {
- "@cubejs-client/core": "1.7.14",
+ "@cubejs-client/core": "1.7.15",
"ramda": "^0.27.0"
},
"devDependencies": {
diff --git a/packages/cubejs-client-ws-transport/CHANGELOG.md b/packages/cubejs-client-ws-transport/CHANGELOG.md
index 098179341a9bb..c6675b40f0bea 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-client/ws-transport
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 80a518099c73f..ea1f79ce8bd71 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.14",
+ "version": "1.7.15",
"engines": {},
"repository": {
"type": "git",
@@ -20,7 +20,7 @@
},
"dependencies": {
"@babel/runtime": "^7.1.2",
- "@cubejs-client/core": "1.7.14",
+ "@cubejs-client/core": "1.7.15",
"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.14",
+ "@cubejs-backend/linter": "1.7.15",
"@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 f38c5deab0b78..c9e81dfbbc18c 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/crate-driver
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 0afc5da8f151d..100a8681c5841 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.14",
+ "version": "1.7.15",
"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.14",
- "@cubejs-backend/shared": "1.7.14"
+ "@cubejs-backend/postgres-driver": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15"
},
"license": "Apache-2.0",
"devDependencies": {
- "@cubejs-backend/linter": "1.7.14",
- "@cubejs-backend/testing-shared": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
+ "@cubejs-backend/testing-shared": "1.7.15",
"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 f849096867777..f7c508f11058d 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/cubestore-driver
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 dbace01404a3c..60597ddaded31 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.14",
+ "version": "1.7.15",
"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.14",
- "@cubejs-backend/cubestore": "1.7.14",
- "@cubejs-backend/native": "1.7.14",
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/base-driver": "1.7.15",
+ "@cubejs-backend/cubestore": "1.7.15",
+ "@cubejs-backend/native": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
"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.14",
+ "@cubejs-backend/linter": "1.7.15",
"@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 6c26a93670258..f95b186dfefed 100644
--- a/packages/cubejs-databricks-jdbc-driver/CHANGELOG.md
+++ b/packages/cubejs-databricks-jdbc-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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/databricks-jdbc-driver
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**Note:** Version bump only for package @cubejs-backend/databricks-jdbc-driver
diff --git a/packages/cubejs-databricks-jdbc-driver/package.json b/packages/cubejs-databricks-jdbc-driver/package.json
index f517837370650..daff4d8092426 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.14",
+ "version": "1.7.15",
"license": "Apache-2.0",
"repository": {
"type": "git",
@@ -30,17 +30,17 @@
"bin"
],
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.14",
- "@cubejs-backend/jdbc-driver": "1.7.14",
- "@cubejs-backend/schema-compiler": "1.7.14",
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/base-driver": "1.7.15",
+ "@cubejs-backend/jdbc-driver": "1.7.15",
+ "@cubejs-backend/schema-compiler": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
"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.14",
+ "@cubejs-backend/linter": "1.7.15",
"@types/jest": "^29",
"@types/node": "^22",
"@types/ramda": "^0.27.34",
diff --git a/packages/cubejs-dbt-schema-extension/CHANGELOG.md b/packages/cubejs-dbt-schema-extension/CHANGELOG.md
index 16ea4fc609646..cbc5a4750ec19 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/dbt-schema-extension
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 f7313521b342c..d48018027c860 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.14",
+ "version": "1.7.15",
"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.14",
+ "@cubejs-backend/schema-compiler": "1.7.15",
"fs-extra": "^9.1.0",
"inflection": "^1.12.0",
"node-fetch": "^2.6.1"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.14",
- "@cubejs-backend/testing": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
+ "@cubejs-backend/testing": "1.7.15",
"@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 4602f0d89dc23..926d5640d67f7 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/docker
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**Note:** Version bump only for package @cubejs-backend/docker
diff --git a/packages/cubejs-docker/package.json b/packages/cubejs-docker/package.json
index 753e85c169143..f8487dc42e935 100644
--- a/packages/cubejs-docker/package.json
+++ b/packages/cubejs-docker/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-backend/docker",
- "version": "1.7.14",
+ "version": "1.7.15",
"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.14",
- "@cubejs-backend/bigquery-driver": "1.7.14",
- "@cubejs-backend/clickhouse-driver": "1.7.14",
- "@cubejs-backend/crate-driver": "1.7.14",
- "@cubejs-backend/databricks-jdbc-driver": "1.7.14",
- "@cubejs-backend/dbt-schema-extension": "1.7.14",
- "@cubejs-backend/dremio-driver": "1.7.14",
- "@cubejs-backend/druid-driver": "1.7.14",
- "@cubejs-backend/duckdb-driver": "1.7.14",
- "@cubejs-backend/firebolt-driver": "1.7.14",
- "@cubejs-backend/hive-driver": "1.7.14",
- "@cubejs-backend/ksql-driver": "1.7.14",
- "@cubejs-backend/materialize-driver": "1.7.14",
- "@cubejs-backend/mongobi-driver": "1.7.14",
- "@cubejs-backend/mssql-driver": "1.7.14",
- "@cubejs-backend/mysql-driver": "1.7.14",
- "@cubejs-backend/oracle-driver": "1.7.14",
- "@cubejs-backend/pinot-driver": "1.7.14",
- "@cubejs-backend/postgres-driver": "1.7.14",
- "@cubejs-backend/prestodb-driver": "1.7.14",
- "@cubejs-backend/questdb-driver": "1.7.14",
- "@cubejs-backend/redshift-driver": "1.7.14",
- "@cubejs-backend/server": "1.7.14",
- "@cubejs-backend/snowflake-driver": "1.7.14",
- "@cubejs-backend/sqlite-driver": "1.7.14",
- "@cubejs-backend/trino-driver": "1.7.14",
- "@cubejs-backend/vertica-driver": "1.7.14",
- "cubejs-cli": "1.7.14",
+ "@cubejs-backend/athena-driver": "1.7.15",
+ "@cubejs-backend/bigquery-driver": "1.7.15",
+ "@cubejs-backend/clickhouse-driver": "1.7.15",
+ "@cubejs-backend/crate-driver": "1.7.15",
+ "@cubejs-backend/databricks-jdbc-driver": "1.7.15",
+ "@cubejs-backend/dbt-schema-extension": "1.7.15",
+ "@cubejs-backend/dremio-driver": "1.7.15",
+ "@cubejs-backend/druid-driver": "1.7.15",
+ "@cubejs-backend/duckdb-driver": "1.7.15",
+ "@cubejs-backend/firebolt-driver": "1.7.15",
+ "@cubejs-backend/hive-driver": "1.7.15",
+ "@cubejs-backend/ksql-driver": "1.7.15",
+ "@cubejs-backend/materialize-driver": "1.7.15",
+ "@cubejs-backend/mongobi-driver": "1.7.15",
+ "@cubejs-backend/mssql-driver": "1.7.15",
+ "@cubejs-backend/mysql-driver": "1.7.15",
+ "@cubejs-backend/oracle-driver": "1.7.15",
+ "@cubejs-backend/pinot-driver": "1.7.15",
+ "@cubejs-backend/postgres-driver": "1.7.15",
+ "@cubejs-backend/prestodb-driver": "1.7.15",
+ "@cubejs-backend/questdb-driver": "1.7.15",
+ "@cubejs-backend/redshift-driver": "1.7.15",
+ "@cubejs-backend/server": "1.7.15",
+ "@cubejs-backend/snowflake-driver": "1.7.15",
+ "@cubejs-backend/sqlite-driver": "1.7.15",
+ "@cubejs-backend/trino-driver": "1.7.15",
+ "@cubejs-backend/vertica-driver": "1.7.15",
+ "cubejs-cli": "1.7.15",
"typescript": "~5.2.2"
},
"resolutions": {
diff --git a/packages/cubejs-dremio-driver/CHANGELOG.md b/packages/cubejs-dremio-driver/CHANGELOG.md
index cf4d2196993a1..a87f8ee7a31cf 100644
--- a/packages/cubejs-dremio-driver/CHANGELOG.md
+++ b/packages/cubejs-dremio-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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/dremio-driver
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**Note:** Version bump only for package @cubejs-backend/dremio-driver
diff --git a/packages/cubejs-dremio-driver/package.json b/packages/cubejs-dremio-driver/package.json
index dd7ba3093456d..5d3d9cf4522fe 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.14",
+ "version": "1.7.15",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -23,14 +23,14 @@
"lint:fix": "eslint driver/*.js"
},
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.14",
- "@cubejs-backend/schema-compiler": "1.7.14",
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/base-driver": "1.7.15",
+ "@cubejs-backend/schema-compiler": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
"axios": "^1.8.3"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.14",
- "@cubejs-backend/testing-shared": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
+ "@cubejs-backend/testing-shared": "1.7.15",
"jest": "^29"
},
"license": "Apache-2.0",
diff --git a/packages/cubejs-druid-driver/CHANGELOG.md b/packages/cubejs-druid-driver/CHANGELOG.md
index 6906ffeb37a48..52961b56d0cfd 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/druid-driver
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**Note:** Version bump only for package @cubejs-backend/druid-driver
diff --git a/packages/cubejs-druid-driver/package.json b/packages/cubejs-druid-driver/package.json
index e3f1602c47d30..c3faa761d2a1a 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.14",
+ "version": "1.7.15",
"license": "Apache-2.0",
"repository": {
"type": "git",
@@ -28,13 +28,13 @@
"dist/src/*"
],
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.14",
- "@cubejs-backend/schema-compiler": "1.7.14",
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/base-driver": "1.7.15",
+ "@cubejs-backend/schema-compiler": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
"axios": "^1.8.3"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
"@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 68c6cc8cb3c8f..44b4a259a37c8 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/duckdb-driver
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**Note:** Version bump only for package @cubejs-backend/duckdb-driver
diff --git a/packages/cubejs-duckdb-driver/package.json b/packages/cubejs-duckdb-driver/package.json
index 79381d64d1d85..08e27afc8a841 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.14",
+ "version": "1.7.15",
"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.14",
- "@cubejs-backend/schema-compiler": "1.7.14",
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/base-driver": "1.7.15",
+ "@cubejs-backend/schema-compiler": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
"duckdb": "^1.4.1"
},
"license": "Apache-2.0",
"devDependencies": {
- "@cubejs-backend/linter": "1.7.14",
- "@cubejs-backend/testing-shared": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
+ "@cubejs-backend/testing-shared": "1.7.15",
"@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 f730ff59c745f..09aec9fd2c7be 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/firebolt-driver
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**Note:** Version bump only for package @cubejs-backend/firebolt-driver
diff --git a/packages/cubejs-firebolt-driver/package.json b/packages/cubejs-firebolt-driver/package.json
index 607f93edf97a4..85cc3069d45c5 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.14",
+ "version": "1.7.15",
"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.14",
- "@cubejs-backend/schema-compiler": "1.7.14",
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/base-driver": "1.7.15",
+ "@cubejs-backend/schema-compiler": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
"firebolt-sdk": "1.10.0"
},
"license": "Apache-2.0",
"devDependencies": {
- "@cubejs-backend/linter": "1.7.14",
- "@cubejs-backend/testing-shared": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
+ "@cubejs-backend/testing-shared": "1.7.15",
"typescript": "~5.2.2"
},
"publishConfig": {
diff --git a/packages/cubejs-hive-driver/CHANGELOG.md b/packages/cubejs-hive-driver/CHANGELOG.md
index 7703a81bba06f..14e99ec8fd156 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/hive-driver
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 a0da4e105b12c..99e9412973a36 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.14",
+ "version": "1.7.15",
"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.14",
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/base-driver": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
"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.14"
+ "@cubejs-backend/linter": "1.7.15"
},
"publishConfig": {
"access": "public"
diff --git a/packages/cubejs-jdbc-driver/CHANGELOG.md b/packages/cubejs-jdbc-driver/CHANGELOG.md
index 16f67ca3a7756..c5b6aeaa3e2a9 100644
--- a/packages/cubejs-jdbc-driver/CHANGELOG.md
+++ b/packages/cubejs-jdbc-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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/jdbc-driver
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 4871ce468fe92..d86a52bfb3292 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.14",
+ "version": "1.7.15",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -26,9 +26,9 @@
"index.js"
],
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.14",
+ "@cubejs-backend/base-driver": "1.7.15",
"@cubejs-backend/node-java-maven": "^0.1.3",
- "@cubejs-backend/shared": "1.7.14"
+ "@cubejs-backend/shared": "1.7.15"
},
"optionalDependencies": {
"@cubejs-backend/jdbc": "^0.9.0",
@@ -42,7 +42,7 @@
"testEnvironment": "node"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
"@types/node": "^22",
"typescript": "~5.2.2"
}
diff --git a/packages/cubejs-ksql-driver/CHANGELOG.md b/packages/cubejs-ksql-driver/CHANGELOG.md
index 740e31fb63b13..05fec0ce23b22 100644
--- a/packages/cubejs-ksql-driver/CHANGELOG.md
+++ b/packages/cubejs-ksql-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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/ksql-driver
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**Note:** Version bump only for package @cubejs-backend/ksql-driver
diff --git a/packages/cubejs-ksql-driver/package.json b/packages/cubejs-ksql-driver/package.json
index 54335b489925d..ee07a24df34aa 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.14",
+ "version": "1.7.15",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -26,9 +26,9 @@
"lint:fix": "eslint --fix src/* --ext .ts"
},
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.14",
- "@cubejs-backend/schema-compiler": "1.7.14",
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/base-driver": "1.7.15",
+ "@cubejs-backend/schema-compiler": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
"async-mutex": "0.3.2",
"axios": "^1.8.3",
"kafkajs": "^2.2.3"
@@ -41,7 +41,7 @@
"extends": "../cubejs-linter"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
"typescript": "~5.2.2"
}
}
diff --git a/packages/cubejs-linter/CHANGELOG.md b/packages/cubejs-linter/CHANGELOG.md
index cd3896a6b0ce4..0128e9bbf3ef2 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/linter
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**Note:** Version bump only for package @cubejs-backend/linter
diff --git a/packages/cubejs-linter/package.json b/packages/cubejs-linter/package.json
index 88535373470bd..012631905c7d7 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.14",
+ "version": "1.7.15",
"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 8905d389e0329..969dfaaaa7320 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/materialize-driver
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 311cfce9dea28..b35cd1b822570 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.14",
+ "version": "1.7.15",
"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.14",
- "@cubejs-backend/postgres-driver": "1.7.14",
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/base-driver": "1.7.15",
+ "@cubejs-backend/postgres-driver": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
"semver": "^7.6.3"
},
"license": "Apache-2.0",
"devDependencies": {
- "@cubejs-backend/linter": "1.7.14",
- "@cubejs-backend/testing": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
+ "@cubejs-backend/testing": "1.7.15",
"typescript": "~5.2.2"
},
"publishConfig": {
diff --git a/packages/cubejs-mongobi-driver/CHANGELOG.md b/packages/cubejs-mongobi-driver/CHANGELOG.md
index 67dc98e6d2551..68b9604d21347 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/mongobi-driver
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 bd8b94fafcea9..28daf7c234082 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.14",
+ "version": "1.7.15",
"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.14",
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/base-driver": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
"@types/node": "^22",
"moment": "^2.29.1",
"mysql2": "^3.11.5"
@@ -38,7 +38,7 @@
"access": "public"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
"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 3e82c5e01d5c7..1d13786d58a9e 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/mssql-driver
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 52fc89cabaeb4..e1c61e455834a 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.14",
+ "version": "1.7.15",
"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.14",
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/base-driver": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
"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 d8bc0422cc018..737690f0d6e72 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/mysql-aurora-serverless-driver
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 11da176b1a4e9..9616737fa57e7 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.14",
+ "version": "1.7.15",
"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.14",
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/base-driver": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
"@types/mysql": "^2.15.15",
"aws-sdk": "^2.787.0",
"data-api-client": "^1.1.0"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
"@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 7f059a870b0ec..cfc562b938e28 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/mysql-driver
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 597a6080b3162..2a6ba16c6703e 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.14",
+ "version": "1.7.15",
"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.14",
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/base-driver": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
"mysql2": "^3.16.1"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.14",
- "@cubejs-backend/testing-shared": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
+ "@cubejs-backend/testing-shared": "1.7.15",
"@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 e07fb3586c5c3..23e025e9feab0 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/oracle-driver
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 52631c236e6bb..f544b7090ef02 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.14",
+ "version": "1.7.15",
"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.14",
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/base-driver": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
"ramda": "^0.27.0"
},
"devDependencies": {
diff --git a/packages/cubejs-pinot-driver/CHANGELOG.md b/packages/cubejs-pinot-driver/CHANGELOG.md
index 8cf110308b259..142e6057ee3c8 100644
--- a/packages/cubejs-pinot-driver/CHANGELOG.md
+++ b/packages/cubejs-pinot-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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/pinot-driver
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**Note:** Version bump only for package @cubejs-backend/pinot-driver
diff --git a/packages/cubejs-pinot-driver/package.json b/packages/cubejs-pinot-driver/package.json
index 6d733d2fe917a..3016fc1217210 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.14",
+ "version": "1.7.15",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -28,9 +28,9 @@
"lint:fix": "eslint --fix src/* --ext .ts"
},
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.14",
- "@cubejs-backend/schema-compiler": "1.7.14",
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/base-driver": "1.7.15",
+ "@cubejs-backend/schema-compiler": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
"node-fetch": "^2.6.1",
"ramda": "^0.27.2"
},
@@ -39,7 +39,7 @@
"access": "public"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
"@types/jest": "^29",
"jest": "^29",
"should": "^13.2.3",
diff --git a/packages/cubejs-playground/CHANGELOG.md b/packages/cubejs-playground/CHANGELOG.md
index bd5cee127a95f..98f2093c8b84d 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-client/playground
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**Note:** Version bump only for package @cubejs-client/playground
diff --git a/packages/cubejs-playground/package.json b/packages/cubejs-playground/package.json
index ac3e9a10cd3a0..a139130411f09 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.14",
+ "version": "1.7.15",
"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.14",
- "@cubejs-client/react": "1.7.14",
+ "@cubejs-client/core": "1.7.15",
+ "@cubejs-client/react": "1.7.15",
"@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 99ed37a735654..cc4b832b57817 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/postgres-driver
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 9b5c21fcbe492..c3bf11e4e42bf 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.14",
+ "version": "1.7.15",
"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.14",
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/base-driver": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
"@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.14",
- "@cubejs-backend/testing-shared": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
+ "@cubejs-backend/testing-shared": "1.7.15",
"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 2b118f6e481df..612db72958dd7 100644
--- a/packages/cubejs-prestodb-driver/CHANGELOG.md
+++ b/packages/cubejs-prestodb-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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/prestodb-driver
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 eee5a3364092f..ee2c66fdf7925 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.14",
+ "version": "1.7.15",
"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.14",
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/base-driver": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
"presto-client": "1.2.0",
"ramda": "^0.27.0"
},
@@ -38,7 +38,7 @@
"access": "public"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
"@types/jest": "^29",
"jest": "^29",
"should": "^13.2.3",
diff --git a/packages/cubejs-query-orchestrator/CHANGELOG.md b/packages/cubejs-query-orchestrator/CHANGELOG.md
index 31cc41eee4d51..7322d8f6a64b6 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/query-orchestrator
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 5a1d9c9116d7f..4134770c23a49 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.14",
+ "version": "1.7.15",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -29,15 +29,15 @@
"dist/src/*"
],
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.14",
- "@cubejs-backend/cubestore-driver": "1.7.14",
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/base-driver": "1.7.15",
+ "@cubejs-backend/cubestore-driver": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
"csv-write-stream": "^2.0.0",
"lru-cache": "^11.1.0",
"ramda": "^0.27.2"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
"@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 b33994a5a9e29..2211cab277b81 100644
--- a/packages/cubejs-questdb-driver/CHANGELOG.md
+++ b/packages/cubejs-questdb-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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/questdb-driver
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 2d37fbc92698b..3b9104d6942f4 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.14",
+ "version": "1.7.15",
"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.14",
- "@cubejs-backend/schema-compiler": "1.7.14",
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/base-driver": "1.7.15",
+ "@cubejs-backend/schema-compiler": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
"@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.14",
- "@cubejs-backend/testing-shared": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
+ "@cubejs-backend/testing-shared": "1.7.15",
"testcontainers": "^10.28.0",
"typescript": "~5.2.2"
},
diff --git a/packages/cubejs-redshift-driver/CHANGELOG.md b/packages/cubejs-redshift-driver/CHANGELOG.md
index 688cdd97ffe75..a30fb8a951322 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/redshift-driver
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 1754e6ff43052..d7b36039b4ded 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.14",
+ "version": "1.7.15",
"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.14",
- "@cubejs-backend/postgres-driver": "1.7.14",
- "@cubejs-backend/shared": "1.7.14"
+ "@cubejs-backend/base-driver": "1.7.15",
+ "@cubejs-backend/postgres-driver": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15"
},
"license": "Apache-2.0",
"devDependencies": {
- "@cubejs-backend/linter": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
"typescript": "~5.2.2"
},
"publishConfig": {
diff --git a/packages/cubejs-schema-compiler/CHANGELOG.md b/packages/cubejs-schema-compiler/CHANGELOG.md
index 6de273d5a7e45..571b61817a78f 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+### Bug Fixes
+
+- **tesseract:** project the requested grain into rolling-window CTEs ([#11400](https://github.com/cube-js/cube/issues/11400)) ([80d1159](https://github.com/cube-js/cube/commit/80d1159fd0d255f8b3b8799275bc921fabeaad5a)), closes [#11410](https://github.com/cube-js/cube/issues/11410) [#11413](https://github.com/cube-js/cube/issues/11413)
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
### Bug Fixes
diff --git a/packages/cubejs-schema-compiler/package.json b/packages/cubejs-schema-compiler/package.json
index 3ebf7068080d4..93973d2d78715 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.14",
+ "version": "1.7.15",
"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.14",
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/native": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
"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.14",
- "@cubejs-backend/mssql-driver": "1.7.14",
- "@cubejs-backend/query-orchestrator": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
+ "@cubejs-backend/mssql-driver": "1.7.15",
+ "@cubejs-backend/query-orchestrator": "1.7.15",
"@types/babel__code-frame": "^7.0.6",
"@types/babel__generator": "^7.6.8",
"@types/babel__traverse": "^7.20.5",
diff --git a/packages/cubejs-schema-compiler/test/integration/postgres/pre-aggregations-shared-calc-group.test.ts b/packages/cubejs-schema-compiler/test/integration/postgres/pre-aggregations-shared-calc-group.test.ts
index a1dd04612b576..7a3696b50b204 100644
--- a/packages/cubejs-schema-compiler/test/integration/postgres/pre-aggregations-shared-calc-group.test.ts
+++ b/packages/cubejs-schema-compiler/test/integration/postgres/pre-aggregations-shared-calc-group.test.ts
@@ -196,7 +196,7 @@ ${includePreAggs ? `
`;
}
-function shareMetricsCube(switchRef: string, rollingWindowPreAggDim: string, extraJoins: string, extraDimensions: string, includePreAggs: boolean = true) {
+function shareMetricsCube(switchRef: string, rollingWindowPreAggDim: string, extraJoins: string, extraDimensions: string, includePreAggs: boolean = true, preAggTimeDimension: string = 'date') {
return `
- name: share_metrics
sql: >${SHARE_METRICS_SQL}
@@ -385,7 +385,7 @@ ${includePreAggs ? `
- sales.account
- sales.product${rollingWindowPreAggDim ? `
- ${rollingWindowPreAggDim}` : ''}
- time_dimension: date
+ time_dimension: ${preAggTimeDimension}
granularity: month
allow_non_strict_date_range_match: true
` : ''}
@@ -434,6 +434,37 @@ views:
- rolling_window
`;
+// Shared calc-group switch, and the share_metrics rollup is keyed on the
+// time dimension the query actually asks for (`sales.date`, exposed as
+// `date` in the view) instead of the cube's own `share_metrics.date`.
+const sharedSwitchModelSharedDateRollups = `
+cubes:
+${ROLLING_WINDOW_DIM_CUBE}
+${salesCube('{rolling_window_dim.rolling_window}', 'rolling_window_dim.rolling_window', SHARED_JOIN, '')}
+${shareMetricsCube('{rolling_window_dim.rolling_window}', 'rolling_window_dim.rolling_window', SHARED_JOIN, '', true, 'sales.date')}
+views:
+ - name: performance_view
+ cubes:
+ - join_path: sales
+ includes:
+ - account
+ - product
+ - date
+ - total
+ - rolling_amount
+ - rolling_amount_change
+
+ - join_path: share_metrics
+ includes:
+ - rolling_share_change
+ - name: date
+ alias: ms_date
+
+ - join_path: rolling_window_dim
+ includes:
+ - rolling_window
+`;
+
// Model where each fact cube declares its OWN switch dimension: the view
// filter pins only the sales switch, the share_metrics one stays
// unresolved and pre-aggregations can't match.
@@ -568,6 +599,71 @@ const REPRO_QUERY = {
cubestoreSupportMultistage: true,
};
+const SALES_ROLLING_MEASURES = [
+ 'performance_view.rolling_amount',
+ 'performance_view.rolling_amount_change',
+];
+
+// A month-granularity time dimension over a bounded date range: the shape a
+// dashboard charting these rolling metrics per month actually sends. Both
+// rollups are built at `granularity: month` on the same date, so the query
+// must be served from them.
+const MONTH_TIME_DIMENSION = [{
+ dimension: 'performance_view.date',
+ granularity: 'month',
+ dateRange: ['2017-04-01', '2017-06-30'],
+}];
+
+const MONTH_QUERY = {
+ ...REPRO_QUERY,
+ timeDimensions: MONTH_TIME_DIMENSION,
+ order: [{ id: 'performance_view.product' }, { id: 'performance_view.date' }],
+};
+
+// Monthly R3 (trailing 3 month) values and their 3-month-prior change for
+// account A1: P1 sells 10/20/30/40/50/60 from January to June, P2 sells 5
+// every month.
+// R3(Apr) = Feb+Mar+Apr, R3(May) = Mar+Apr+May, R3(Jun) = Apr+May+Jun
+// change(m) = R3(m) - R3(m - 3 month)
+const EXPECTED_MONTHLY_SALES_ROWS = [
+ {
+ performance_view__product: 'P1',
+ performance_view__date_month: '2017-04-01T00:00:00.000Z',
+ performance_view__rolling_amount: '90.0',
+ performance_view__rolling_amount_change: '80.0',
+ },
+ {
+ performance_view__product: 'P1',
+ performance_view__date_month: '2017-05-01T00:00:00.000Z',
+ performance_view__rolling_amount: '120.0',
+ performance_view__rolling_amount_change: '90.0',
+ },
+ {
+ performance_view__product: 'P1',
+ performance_view__date_month: '2017-06-01T00:00:00.000Z',
+ performance_view__rolling_amount: '150.0',
+ performance_view__rolling_amount_change: '90.0',
+ },
+ {
+ performance_view__product: 'P2',
+ performance_view__date_month: '2017-04-01T00:00:00.000Z',
+ performance_view__rolling_amount: '15.0',
+ performance_view__rolling_amount_change: '10.0',
+ },
+ {
+ performance_view__product: 'P2',
+ performance_view__date_month: '2017-05-01T00:00:00.000Z',
+ performance_view__rolling_amount: '15.0',
+ performance_view__rolling_amount_change: '5.0',
+ },
+ {
+ performance_view__product: 'P2',
+ performance_view__date_month: '2017-06-01T00:00:00.000Z',
+ performance_view__rolling_amount: '15.0',
+ performance_view__rolling_amount_change: '0.0',
+ },
+];
+
describe('PreAggregationsSharedCalcGroup', () => {
jest.setTimeout(200000);
@@ -593,42 +689,134 @@ describe('PreAggregationsSharedCalcGroup', () => {
});
}));
- // FIXME: with a date-range-only time dimension (no granularity) the
- // rolling windows are anchored to the range end, but the query stops
- // matching the rollups even though allow_non_strict_date_range_match
- // is set and the range is month-aligned. Unskip once matching
- // supports it.
- it.skip('matches rollups with a date-range-only time dimension', () => compiler.compile().then(() => {
+ // Adding a month-granularity time dimension to the same query keeps the
+ // sales rollup: the rollup is built at `granularity: month` on the very
+ // dimension the query groups by.
+ it('matches its own rollup with a month time dimension for single-cube measures', () => compiler.compile().then(() => {
const query = new PostgresQuery({ joinGraph, cubeEvaluator, compiler }, {
- ...REPRO_QUERY,
- timeDimensions: [{
- dimension: 'performance_view.date',
- dateRange: ['2017-01-01', '2017-06-30'],
- }],
+ ...MONTH_QUERY,
+ measures: SALES_ROLLING_MEASURES,
+ });
+
+ const preAggregationsDescription: any = query.preAggregations?.preAggregationsDescription();
+ const sqlAndParams = query.buildSqlAndParams();
+ const tableNames = preAggregationsDescription.map((d: any) => d.tableName);
+ expect(tableNames).toEqual(['sales_perf_rolling']);
+ expect(sqlAndParams[0]).toContain('sales_perf_rolling');
+
+ return dbRunner.evaluateQueryWithPreAggregations(query).then(res => {
+ expect(res).toEqual(EXPECTED_MONTHLY_SALES_ROWS);
});
+ }));
+
+ // Cross-cube with a time dimension is where matching breaks in this
+ // model: `share_metrics.perf_share` is keyed on `share_metrics.date`,
+ // while the view exposes (and the query asks for) `sales.date`. The two
+ // are equal by the join condition, but the matcher only knows stored
+ // members, so the share rollup can't serve the query — and because
+ // matching is all-or-nothing across the multi-cube query, the sales
+ // rollup is dropped as well and everything is recomputed from the raw
+ // source. Results stay correct; only the acceleration is lost.
+ // FIXME: unskip the sibling spec below (rollups keyed on the queried
+ // time dimension) as the reference behaviour and teach the matcher to
+ // resolve join-equal time dimensions.
+ it('loses both rollups for cross-cube measures when the joined rollup is keyed on its own time dimension', () => compiler.compile().then(() => {
+ const query = new PostgresQuery({ joinGraph, cubeEvaluator, compiler }, MONTH_QUERY);
const preAggregationsDescription: any = query.preAggregations?.preAggregationsDescription();
+ const sqlAndParams = query.buildSqlAndParams();
+ expect(preAggregationsDescription.map((d: any) => d.tableName)).toEqual([]);
+ expect(sqlAndParams[0]).not.toContain('sales_perf_rolling');
+ expect(sqlAndParams[0]).not.toContain('share_metrics_perf_share');
+ }));
+ });
+
+ // Same shared calc-group model, but `share_metrics.perf_share` is keyed on
+ // the time dimension the query actually groups by (`sales.date`, exposed
+ // as `date` in the view) instead of the cube's own `share_metrics.date`.
+ describe('shared calc-group switch dimension with rollups keyed on the queried time dimension', () => {
+ const { compiler, joinGraph, cubeEvaluator } = prepareYamlCompiler(sharedSwitchModelSharedDateRollups);
+ const noPreAggs = prepareYamlCompiler(sharedSwitchModelNoPreAggs);
+
+ it('matches both rollups for cross-cube rolling measures with a month time dimension', () => compiler.compile().then(() => {
+ const query = new PostgresQuery({ joinGraph, cubeEvaluator, compiler }, MONTH_QUERY);
+
+ const preAggregationsDescription: any = query.preAggregations?.preAggregationsDescription();
+ const sqlAndParams = query.buildSqlAndParams();
const tableNames = preAggregationsDescription.map((d: any) => d.tableName);
expect(tableNames).toContain('sales_perf_rolling');
expect(tableNames).toContain('share_metrics_perf_share');
+ expect(sqlAndParams[0]).toContain('sales_perf_rolling');
+ expect(sqlAndParams[0]).toContain('share_metrics_perf_share');
+
+ return dbRunner.evaluateQueryWithPreAggregations(query).then(res => {
+ // The sales side is pinned to exact values; the share-of-total side
+ // is compared against the same query over the raw source below.
+ expect(res).toEqual(EXPECTED_MONTHLY_SALES_ROWS.map((row, i) => ({
+ ...row,
+ performance_view__rolling_share_change: i < 3 ? '0.00000000000000000000' : null,
+ })));
+ });
}));
- // FIXME: querying the same measures with a granular time dimension fails
- // inside the Tesseract physical plan builder with "Alias not found for
- // partition_by dimension rolling_window_dim.rolling_window": the
- // calc-group dimension is not projected into the multi-stage window
- // input CTE. Unskip once the planner supports it.
- it.skip('cross-cube rolling measures with a granular time dimension', () => compiler.compile().then(() => {
+ // The rollups must not change the answer: the same query over the same
+ // model without pre-aggregations returns exactly the same rows.
+ it('returns the same rows from the rollups as from the raw source', async () => {
+ await compiler.compile();
+ await noPreAggs.compiler.compile();
+
+ const fromRollups = await dbRunner.evaluateQueryWithPreAggregations(
+ new PostgresQuery({ joinGraph, cubeEvaluator, compiler }, MONTH_QUERY)
+ );
+ const fromSource = await dbRunner.testQuery(
+ new PostgresQuery({
+ joinGraph: noPreAggs.joinGraph,
+ cubeEvaluator: noPreAggs.cubeEvaluator,
+ compiler: noPreAggs.compiler,
+ }, MONTH_QUERY).buildSqlAndParams()
+ );
+
+ expect(fromRollups).toEqual(fromSource);
+ });
+
+ it('matches both rollups with a date-range-only time dimension', () => compiler.compile().then(() => {
const query = new PostgresQuery({ joinGraph, cubeEvaluator, compiler }, {
...REPRO_QUERY,
timeDimensions: [{
dimension: 'performance_view.date',
- granularity: 'month',
- dateRange: ['2017-06-01', '2017-06-30'],
+ dateRange: ['2017-04-01', '2017-06-30'],
}],
});
- query.buildSqlAndParams();
+ const preAggregationsDescription: any = query.preAggregations?.preAggregationsDescription();
+ const sqlAndParams = query.buildSqlAndParams();
+ const tableNames = preAggregationsDescription.map((d: any) => d.tableName);
+ expect(tableNames).toContain('sales_perf_rolling');
+ expect(tableNames).toContain('share_metrics_perf_share');
+ expect(sqlAndParams[0]).toContain('sales_perf_rolling');
+ expect(sqlAndParams[0]).toContain('share_metrics_perf_share');
+ }));
+
+ // FIXME: expressing the same range as an `inDateRange` filter on the
+ // time dimension instead of `timeDimensions[].dateRange` stops every
+ // rollup from matching (even when `dateRange` is also present): the
+ // filter carries a plain dimension symbol, and the matcher looks it up
+ // only among the rollup's stored dimensions, never among its time
+ // dimensions. Unskip once time-dimension filters are matched against
+ // the rollup granularity.
+ it.skip('matches rollups when the range is given as an inDateRange filter', () => compiler.compile().then(() => {
+ const query = new PostgresQuery({ joinGraph, cubeEvaluator, compiler }, {
+ ...MONTH_QUERY,
+ filters: [
+ ...REPRO_QUERY.filters,
+ { member: 'performance_view.date', operator: 'inDateRange', values: ['2017-04-01', '2017-06-30'] },
+ ],
+ });
+
+ const preAggregationsDescription: any = query.preAggregations?.preAggregationsDescription();
+ const tableNames = preAggregationsDescription.map((d: any) => d.tableName);
+ expect(tableNames).toContain('sales_perf_rolling');
+ expect(tableNames).toContain('share_metrics_perf_share');
}));
});
@@ -689,6 +877,18 @@ describe('PreAggregationsSharedCalcGroup', () => {
{ joinGraph, cubeEvaluator, compiler });
});
+ // Same measures with a month-granularity time dimension: one row per
+ // month, each carrying its own trailing-3-month window and the change
+ // against the window 3 months earlier. Pins the arithmetic the rollup
+ // specs above compare against.
+ it('computes deterministic monthly rolling values', async () => {
+ await dbRunner.runQueryTest({
+ ...MONTH_QUERY,
+ measures: SALES_ROLLING_MEASURES,
+ }, EXPECTED_MONTHLY_SALES_ROWS,
+ { joinGraph, cubeEvaluator, compiler });
+ });
+
// The time_shift of the share-of-total measures is declared on
// share_metrics.date, so the anchor date range must be set on that
// dimension (exposed as ms_date) for the prior window to move.
diff --git a/packages/cubejs-server-core/CHANGELOG.md b/packages/cubejs-server-core/CHANGELOG.md
index 27d74dc13a97c..1046c61b749f5 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/server-core
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**Note:** Version bump only for package @cubejs-backend/server-core
diff --git a/packages/cubejs-server-core/package.json b/packages/cubejs-server-core/package.json
index f205a78e137c5..2294b24fab67b 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.14",
+ "version": "1.7.15",
"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.14",
- "@cubejs-backend/base-driver": "1.7.14",
- "@cubejs-backend/cloud": "1.7.14",
- "@cubejs-backend/cubestore-driver": "1.7.14",
+ "@cubejs-backend/api-gateway": "1.7.15",
+ "@cubejs-backend/base-driver": "1.7.15",
+ "@cubejs-backend/cloud": "1.7.15",
+ "@cubejs-backend/cubestore-driver": "1.7.15",
"@cubejs-backend/dotenv": "^9.0.2",
- "@cubejs-backend/native": "1.7.14",
- "@cubejs-backend/query-orchestrator": "1.7.14",
- "@cubejs-backend/schema-compiler": "1.7.14",
- "@cubejs-backend/shared": "1.7.14",
- "@cubejs-backend/templates": "1.7.14",
+ "@cubejs-backend/native": "1.7.15",
+ "@cubejs-backend/query-orchestrator": "1.7.15",
+ "@cubejs-backend/schema-compiler": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
+ "@cubejs-backend/templates": "1.7.15",
"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.14",
- "@cubejs-client/playground": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
+ "@cubejs-client/playground": "1.7.15",
"@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 6944a03299019..c5f4d260cd870 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/server
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**Note:** Version bump only for package @cubejs-backend/server
diff --git a/packages/cubejs-server/package.json b/packages/cubejs-server/package.json
index 2b3fe753db749..4c20043e42496 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.14",
+ "version": "1.7.15",
"types": "index.d.ts",
"repository": {
"type": "git",
@@ -40,11 +40,11 @@
"jest:shapshot": "jest --updateSnapshot test"
},
"dependencies": {
- "@cubejs-backend/cubestore-driver": "1.7.14",
+ "@cubejs-backend/cubestore-driver": "1.7.15",
"@cubejs-backend/dotenv": "^9.0.2",
- "@cubejs-backend/native": "1.7.14",
- "@cubejs-backend/server-core": "1.7.14",
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/native": "1.7.15",
+ "@cubejs-backend/server-core": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
"@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.14",
- "@cubejs-backend/query-orchestrator": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
+ "@cubejs-backend/query-orchestrator": "1.7.15",
"@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 8ec2db22d0cf1..f96522c3f7a17 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/snowflake-driver
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 2b68b2da61251..6ffe30a3eadfb 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.14",
+ "version": "1.7.15",
"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.14",
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/base-driver": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
"snowflake-sdk": "^2.4.0"
},
"license": "Apache-2.0",
@@ -40,7 +40,7 @@
"extends": "../cubejs-linter"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
"typescript": "~5.2.2",
"vitest": "^4"
}
diff --git a/packages/cubejs-sqlite-driver/CHANGELOG.md b/packages/cubejs-sqlite-driver/CHANGELOG.md
index 90fab56afc338..f542a3aa28533 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/sqlite-driver
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 d398a2096534f..d6b208955d4b3 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.14",
+ "version": "1.7.15",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -18,13 +18,13 @@
"unit": "jest"
},
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.14",
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/base-driver": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
"sqlite3": "^5.1.7"
},
"license": "Apache-2.0",
"devDependencies": {
- "@cubejs-backend/linter": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
"jest": "^29"
},
"publishConfig": {
diff --git a/packages/cubejs-templates/CHANGELOG.md b/packages/cubejs-templates/CHANGELOG.md
index a2c8337a92c96..84ae5f34bd6c8 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/templates
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**Note:** Version bump only for package @cubejs-backend/templates
diff --git a/packages/cubejs-templates/package.json b/packages/cubejs-templates/package.json
index 8d9ff9b65b570..5aa27939e6eb5 100644
--- a/packages/cubejs-templates/package.json
+++ b/packages/cubejs-templates/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-backend/templates",
- "version": "1.7.14",
+ "version": "1.7.15",
"description": "Cube.js Templates helpers",
"author": "Cube Dev, Inc.",
"repository": {
@@ -31,7 +31,7 @@
"extends": "../cubejs-linter"
},
"dependencies": {
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/shared": "1.7.15",
"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.14",
+ "@cubejs-backend/linter": "1.7.15",
"typescript": "~5.2.2"
}
}
diff --git a/packages/cubejs-testing-drivers/CHANGELOG.md b/packages/cubejs-testing-drivers/CHANGELOG.md
index 9e0f953f4d6a3..dcb9287a7d879 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/testing-drivers
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 bcb0bbb1ac6b3..56863af139828 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.14",
+ "version": "1.7.15",
"description": "Cube.js drivers test suite",
"author": "Cube Dev, Inc.",
"repository": {
@@ -86,28 +86,28 @@
"dist/src"
],
"dependencies": {
- "@cubejs-backend/athena-driver": "1.7.14",
- "@cubejs-backend/base-driver": "1.7.14",
- "@cubejs-backend/bigquery-driver": "1.7.14",
- "@cubejs-backend/clickhouse-driver": "1.7.14",
- "@cubejs-backend/crate-driver": "1.7.14",
- "@cubejs-backend/cubestore-driver": "1.7.14",
- "@cubejs-backend/databricks-jdbc-driver": "1.7.14",
+ "@cubejs-backend/athena-driver": "1.7.15",
+ "@cubejs-backend/base-driver": "1.7.15",
+ "@cubejs-backend/bigquery-driver": "1.7.15",
+ "@cubejs-backend/clickhouse-driver": "1.7.15",
+ "@cubejs-backend/crate-driver": "1.7.15",
+ "@cubejs-backend/cubestore-driver": "1.7.15",
+ "@cubejs-backend/databricks-jdbc-driver": "1.7.15",
"@cubejs-backend/dotenv": "^9.0.2",
- "@cubejs-backend/linter": "1.7.14",
- "@cubejs-backend/mssql-driver": "1.7.14",
- "@cubejs-backend/mysql-driver": "1.7.14",
- "@cubejs-backend/oracle-driver": "1.7.14",
- "@cubejs-backend/pinot-driver": "1.7.14",
- "@cubejs-backend/postgres-driver": "1.7.14",
- "@cubejs-backend/query-orchestrator": "1.7.14",
- "@cubejs-backend/questdb-driver": "1.7.14",
- "@cubejs-backend/server-core": "1.7.14",
- "@cubejs-backend/shared": "1.7.14",
- "@cubejs-backend/snowflake-driver": "1.7.14",
- "@cubejs-backend/testing-shared": "1.7.14",
- "@cubejs-client/core": "1.7.14",
- "@cubejs-client/ws-transport": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
+ "@cubejs-backend/mssql-driver": "1.7.15",
+ "@cubejs-backend/mysql-driver": "1.7.15",
+ "@cubejs-backend/oracle-driver": "1.7.15",
+ "@cubejs-backend/pinot-driver": "1.7.15",
+ "@cubejs-backend/postgres-driver": "1.7.15",
+ "@cubejs-backend/query-orchestrator": "1.7.15",
+ "@cubejs-backend/questdb-driver": "1.7.15",
+ "@cubejs-backend/server-core": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
+ "@cubejs-backend/snowflake-driver": "1.7.15",
+ "@cubejs-backend/testing-shared": "1.7.15",
+ "@cubejs-client/core": "1.7.15",
+ "@cubejs-client/ws-transport": "1.7.15",
"@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 92f468274381b..28ff2e23aa28a 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/testing-shared
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 2242e7395261e..8462c1084923d 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.14",
+ "version": "1.7.15",
"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.14",
- "@cubejs-backend/schema-compiler": "1.7.14",
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/query-orchestrator": "1.7.15",
+ "@cubejs-backend/schema-compiler": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
"@testcontainers/kafka": "~10.28.0",
"dedent": "^0.7.0",
"node-fetch": "^2.6.7",
"testcontainers": "^10.28.0"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
"@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 8d31b8889545b..221c2a06355da 100644
--- a/packages/cubejs-testing/CHANGELOG.md
+++ b/packages/cubejs-testing/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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+### Bug Fixes
+
+- **tesseract:** project the requested grain into rolling-window CTEs ([#11400](https://github.com/cube-js/cube/issues/11400)) ([80d1159](https://github.com/cube-js/cube/commit/80d1159fd0d255f8b3b8799275bc921fabeaad5a)), closes [#11410](https://github.com/cube-js/cube/issues/11410) [#11413](https://github.com/cube-js/cube/issues/11413)
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**Note:** Version bump only for package @cubejs-backend/testing
diff --git a/packages/cubejs-testing/birdbox-fixtures/shared-calc-group/schema/share_metrics.yml b/packages/cubejs-testing/birdbox-fixtures/shared-calc-group/schema/share_metrics.yml
index 8d71a203cf578..07046840c6355 100644
--- a/packages/cubejs-testing/birdbox-fixtures/shared-calc-group/schema/share_metrics.yml
+++ b/packages/cubejs-testing/birdbox-fixtures/shared-calc-group/schema/share_metrics.yml
@@ -204,7 +204,12 @@ cubes:
- product
- sales.account
- sales.product
- time_dimension: date
+ # Keyed on the time dimension the view exposes (and dashboards group
+ # by), not on the cube's own `date`. The two are equal by the join
+ # condition, but pre-aggregation matching only knows stored members,
+ # so a rollup keyed on `share_metrics.date` cannot serve a query
+ # grouping by `sales.date`.
+ time_dimension: sales.date
granularity: month
allow_non_strict_date_range_match: true
scheduled_refresh: false
diff --git a/packages/cubejs-testing/package.json b/packages/cubejs-testing/package.json
index cf1d492505b79..f85c823318dc0 100644
--- a/packages/cubejs-testing/package.json
+++ b/packages/cubejs-testing/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-backend/testing",
- "version": "1.7.14",
+ "version": "1.7.15",
"description": "Cube.js e2e tests",
"author": "Cube Dev, Inc.",
"repository": {
@@ -91,15 +91,15 @@
"birdbox-fixtures"
],
"dependencies": {
- "@cubejs-backend/cubestore-driver": "1.7.14",
+ "@cubejs-backend/cubestore-driver": "1.7.15",
"@cubejs-backend/dotenv": "^9.0.2",
- "@cubejs-backend/ksql-driver": "1.7.14",
- "@cubejs-backend/postgres-driver": "1.7.14",
- "@cubejs-backend/query-orchestrator": "1.7.14",
- "@cubejs-backend/schema-compiler": "1.7.14",
- "@cubejs-backend/shared": "1.7.14",
- "@cubejs-backend/testing-shared": "1.7.14",
- "@cubejs-client/ws-transport": "1.7.14",
+ "@cubejs-backend/ksql-driver": "1.7.15",
+ "@cubejs-backend/postgres-driver": "1.7.15",
+ "@cubejs-backend/query-orchestrator": "1.7.15",
+ "@cubejs-backend/schema-compiler": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
+ "@cubejs-backend/testing-shared": "1.7.15",
+ "@cubejs-client/ws-transport": "1.7.15",
"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.14",
- "@cubejs-client/core": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
+ "@cubejs-client/core": "1.7.15",
"@jest/globals": "^29",
"@types/dedent": "^0.7.0",
"@types/http-proxy": "^1.17.5",
diff --git a/packages/cubejs-testing/test/smoke-shared-calc-group.test.ts b/packages/cubejs-testing/test/smoke-shared-calc-group.test.ts
index 401f70cc0cc5e..bbbdcb29c8234 100644
--- a/packages/cubejs-testing/test/smoke-shared-calc-group.test.ts
+++ b/packages/cubejs-testing/test/smoke-shared-calc-group.test.ts
@@ -128,6 +128,101 @@ describe('shared calc group pre-aggregations in Cube Store', () => {
expect(result.rawData().map((r: any) => r['performance_view.product'])).toEqual(['P1', 'P2']);
});
+ // A month-granularity time dimension over a bounded range — the shape a
+ // dashboard charting these rolling metrics per month sends. Both rollups
+ // are built at `granularity: month` on the same date and the planner picks
+ // them (verified in the schema-compiler Postgres suite), but Cube Store
+ // cannot execute the resulting plan:
+ //
+ // Internal: Optimizer rule 'optimize_projections' failed
+ // Schema error: No field named fk_aggregate.sales__r3_amount. Valid
+ // fields are fk_aggregate.performance_view__date_month,
+ // fk_aggregate.performance_view__product,
+ // fk_aggregate.rolling_window_dim__rolling_window.
+ //
+ // The rolling-window CTE groups by (date, product, calc group) and its
+ // consumer projects a strict subset of those group-by columns — it drops
+ // the filter-pinned calc-group column but keeps the aggregate — and the
+ // Cube Store projection optimizer then prunes the aggregate out of the
+ // CTE's schema. The same SQL runs correctly on Postgres, and a plain
+ // rolling measure (no `case` entrypoint, so no calc-group column in the
+ // CTE) at month granularity is served from the same rollup by Cube Store
+ // without trouble.
+ //
+ // Cube Store itself was fixed in #11410, and the Rust suite proves the shape
+ // runs: cubesqlplanner tests/integration/cubestore/switch_rolling.rs executes
+ // it against a live Cube Store and snapshots correct rows. What still blocks
+ // these two specs is the image split: birdbox pulls the published
+ // cubejs/cubestore:${BIRDBOX_CUBESTORE_VERSION:-latest}, while the Cube server
+ // is built from this working tree, so the planner fix is under test here but
+ // the Cube Store fix is not.
+ //
+ // FIXME: unskip once a Cube Store release containing #11410 is `latest`.
+ const MONTH_TIME_DIMENSION: Query['timeDimensions'] = [
+ {
+ dimension: 'performance_view.date',
+ granularity: 'month',
+ dateRange: ['2017-04-01', '2017-06-30'],
+ },
+ ];
+
+ const MONTH_ORDER: Query['order'] = {
+ 'performance_view.product': 'asc',
+ 'performance_view.date': 'asc',
+ };
+
+ // R3 (trailing 3 month) per month for account A1: P1 sells
+ // 10/20/30/40/50/60 from January to June, P2 sells 5 every month.
+ const EXPECTED_MONTHLY_AMOUNTS = [
+ ['P1', '2017-04-01T00:00:00.000', 90],
+ ['P1', '2017-05-01T00:00:00.000', 120],
+ ['P1', '2017-06-01T00:00:00.000', 150],
+ ['P2', '2017-04-01T00:00:00.000', 15],
+ ['P2', '2017-05-01T00:00:00.000', 15],
+ ['P2', '2017-06-01T00:00:00.000', 15],
+ ];
+
+ function monthlyAmounts(result: any) {
+ return result.rawData().map((r: any) => [
+ r['performance_view.product'],
+ r['performance_view.date.month'],
+ Number(r['performance_view.rolling_amount']),
+ ]);
+ }
+
+ test.skip('single-cube rolling measures with a month time dimension are served from the rollup', async () => {
+ const query: Query = {
+ measures: [
+ 'performance_view.rolling_amount',
+ 'performance_view.rolling_amount_change',
+ ],
+ dimensions: ['performance_view.product'],
+ timeDimensions: MONTH_TIME_DIMENSION,
+ filters: REPRO_FILTERS,
+ order: MONTH_ORDER,
+ };
+ const result = await client.load(query);
+ expect(usedPreAggregations(result)).toEqual([SALES_ROLLUP]);
+ expect(monthlyAmounts(result)).toEqual(EXPECTED_MONTHLY_AMOUNTS);
+ });
+
+ test.skip('cross-cube rolling measures with a month time dimension are served from both rollups', async () => {
+ const query: Query = {
+ measures: [
+ 'performance_view.rolling_amount',
+ 'performance_view.rolling_amount_change',
+ 'performance_view.rolling_share_change',
+ ],
+ dimensions: ['performance_view.product'],
+ timeDimensions: MONTH_TIME_DIMENSION,
+ filters: REPRO_FILTERS,
+ order: MONTH_ORDER,
+ };
+ const result = await client.load(query);
+ expect(usedPreAggregations(result)).toEqual([SALES_ROLLUP, SHARE_ROLLUP]);
+ expect(monthlyAmounts(result)).toEqual(EXPECTED_MONTHLY_AMOUNTS);
+ });
+
// Mirrors the production query shape: rolling amount + growth percentage
// (an extra multi-stage layer over the same rolling leaves) + cross-cube
// share change. Before the trivial-subquery collapse optimizer in the
diff --git a/packages/cubejs-trino-driver/CHANGELOG.md b/packages/cubejs-trino-driver/CHANGELOG.md
index 01f125406b66e..3f7517d6bf442 100644
--- a/packages/cubejs-trino-driver/CHANGELOG.md
+++ b/packages/cubejs-trino-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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/trino-driver
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 f139ce019ba62..c963239f80192 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.14",
+ "version": "1.7.15",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -28,10 +28,10 @@
"lint:fix": "eslint --fix src/* --ext .ts"
},
"dependencies": {
- "@cubejs-backend/base-driver": "1.7.14",
- "@cubejs-backend/prestodb-driver": "1.7.14",
- "@cubejs-backend/schema-compiler": "1.7.14",
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/base-driver": "1.7.15",
+ "@cubejs-backend/prestodb-driver": "1.7.15",
+ "@cubejs-backend/schema-compiler": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
"node-fetch": "^2.6.1",
"presto-client": "^1.2.0"
},
@@ -40,7 +40,7 @@
"access": "public"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
"@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 439657e4a1f29..3ad57d16f047e 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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+**Note:** Version bump only for package @cubejs-backend/vertica-driver
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**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 c8bef1dbfdb2b..5fe8f3fbc34d2 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.14",
+ "version": "1.7.15",
"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.14",
- "@cubejs-backend/query-orchestrator": "1.7.14",
- "@cubejs-backend/schema-compiler": "1.7.14",
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/base-driver": "1.7.15",
+ "@cubejs-backend/query-orchestrator": "1.7.15",
+ "@cubejs-backend/schema-compiler": "1.7.15",
+ "@cubejs-backend/shared": "1.7.15",
"vertica-nodejs": "^1.0.3"
},
"license": "Apache-2.0",
"devDependencies": {
- "@cubejs-backend/linter": "1.7.14",
- "@cubejs-backend/testing-shared": "1.7.14",
+ "@cubejs-backend/linter": "1.7.15",
+ "@cubejs-backend/testing-shared": "1.7.15",
"@types/jest": "^29",
"jest": "^29",
"testcontainers": "^10.28.0"
diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/planner/planners/multi_stage/member_query_planner.rs b/rust/cube/cubesqlplanner/cubesqlplanner/src/planner/planners/multi_stage/member_query_planner.rs
index cbaee96b768b0..e16859a349567 100644
--- a/rust/cube/cubesqlplanner/cubesqlplanner/src/planner/planners/multi_stage/member_query_planner.rs
+++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/planner/planners/multi_stage/member_query_planner.rs
@@ -170,9 +170,15 @@ impl MultiStageMemberQueryPlanner {
}
};
+ // The CTE must project the dimensions of the state this rolling
+ // window is requested at, not the root query dimensions: a parent
+ // inode can widen the grain (`grain.include`, a `case` switch
+ // dimension) and consumers resolve those dimensions — e.g. as
+ // `partition_by` of the enclosing window function — against this
+ // CTE's schema.
let schema = LogicalSchema::default()
- .set_dimensions(self.query_properties.dimensions().clone())
- .set_time_dimensions(self.query_properties.time_dimensions().clone())
+ .set_dimensions(self.description.state().dimensions().clone())
+ .set_time_dimensions(self.description.state().time_dimensions().clone())
.set_measures(vec![self.description.member().evaluation_node().clone()])
.into_rc();
diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/schemas/yaml_files/common/integration_cubestore_switch_rolling.yaml b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/schemas/yaml_files/common/integration_cubestore_switch_rolling.yaml
new file mode 100644
index 0000000000000..7cd03656e4687
--- /dev/null
+++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/schemas/yaml_files/common/integration_cubestore_switch_rolling.yaml
@@ -0,0 +1,278 @@
+cubes:
+ - name: sales
+ sql: "SELECT * FROM cs_switch_sales"
+ joins:
+ - name: accounts
+ relationship: many_to_one
+ sql: "{sales}.account_id = {accounts.id}"
+ dimensions:
+ - name: id
+ type: number
+ sql: id
+ primary_key: true
+ - name: created_at
+ type: time
+ sql: created_at
+ - name: category
+ type: string
+ sql: category
+
+ # Calc group: carries no stored data, so the rollup below does not list it.
+ - name: window_kind
+ type: switch
+ values:
+ - R3
+ - R12
+ - YTD
+
+ measures:
+ - name: amount
+ type: sum
+ sql: amount
+
+ - name: r3_amount
+ type: sum
+ sql: amount
+ rolling_window:
+ trailing: 3 month
+
+ - name: r12_amount
+ type: sum
+ sql: amount
+ rolling_window:
+ trailing: 12 month
+
+ - name: ytd_amount
+ type: sum
+ sql: amount
+ rolling_window:
+ type: to_date
+ granularity: year
+
+ # Consumer-facing entrypoint: dispatches the switch to the matching
+ # rolling window. Nothing above it needs the switch dimension.
+ - name: rolling_amount
+ type: number
+ multi_stage: true
+ case:
+ switch: "{CUBE.window_kind}"
+ when:
+ - value: R3
+ sql: "{CUBE.r3_amount}"
+ - value: R12
+ sql: "{CUBE.r12_amount}"
+ else:
+ sql: "{CUBE.ytd_amount}"
+
+ - name: prev_r3_amount
+ type: number
+ multi_stage: true
+ sql: "{CUBE.r3_amount}"
+ public: false
+ time_shift:
+ - interval: 3 month
+ type: prior
+
+ - name: prev_r12_amount
+ type: number
+ multi_stage: true
+ sql: "{CUBE.r12_amount}"
+ public: false
+ time_shift:
+ - interval: 12 month
+ type: prior
+
+ - name: prev_ytd_amount
+ type: number
+ multi_stage: true
+ sql: "{CUBE.ytd_amount}"
+ public: false
+ time_shift:
+ - interval: 1 year
+ type: prior
+
+ # Entrypoint dispatching straight onto a time_shift measure, with no
+ # arithmetic layer in between.
+ - name: prev_rolling_amount
+ type: number
+ multi_stage: true
+ case:
+ switch: "{CUBE.window_kind}"
+ when:
+ - value: R3
+ sql: "{CUBE.prev_r3_amount}"
+ - value: R12
+ sql: "{CUBE.prev_r12_amount}"
+ else:
+ sql: "{CUBE.prev_ytd_amount}"
+
+ - name: r3_amount_change
+ type: number
+ multi_stage: true
+ public: false
+ sql: "({CUBE.r3_amount} - {CUBE.prev_r3_amount})"
+
+ - name: r12_amount_change
+ type: number
+ multi_stage: true
+ public: false
+ sql: "({CUBE.r12_amount} - {CUBE.prev_r12_amount})"
+
+ # Ratio over two multi-stage layers, the shape a growth-percentage
+ # entrypoint has: a CASE guarding division by the shifted value.
+ - name: r3_growth
+ type: number
+ multi_stage: true
+ public: false
+ format: percent
+ sql: >
+ CASE WHEN {CUBE.prev_r3_amount} IS NULL OR {CUBE.prev_r3_amount} = 0 THEN NULL
+ ELSE ({CUBE.r3_amount} - {CUBE.prev_r3_amount}) * 1.0 / {CUBE.prev_r3_amount} END
+
+ - name: r12_growth
+ type: number
+ multi_stage: true
+ public: false
+ format: percent
+ sql: >
+ CASE WHEN {CUBE.prev_r12_amount} IS NULL OR {CUBE.prev_r12_amount} = 0 THEN NULL
+ ELSE ({CUBE.r12_amount} - {CUBE.prev_r12_amount}) * 1.0 / {CUBE.prev_r12_amount} END
+
+ - name: ytd_growth
+ type: number
+ multi_stage: true
+ public: false
+ format: percent
+ sql: >
+ CASE WHEN {CUBE.prev_ytd_amount} IS NULL OR {CUBE.prev_ytd_amount} = 0 THEN NULL
+ ELSE ({CUBE.ytd_amount} - {CUBE.prev_ytd_amount}) * 1.0 / {CUBE.prev_ytd_amount} END
+
+ - name: rolling_amount_growth
+ type: number
+ format: percent
+ multi_stage: true
+ case:
+ switch: "{CUBE.window_kind}"
+ when:
+ - value: R3
+ sql: "{CUBE.r3_growth}"
+ - value: R12
+ sql: "{CUBE.r12_growth}"
+ else:
+ sql: "{CUBE.ytd_growth}"
+
+ # Derived entrypoint: the arithmetic layer above the rolling windows
+ # partitions by the switch dimension, so every CTE below it must carry it.
+ - name: rolling_amount_change
+ type: number
+ multi_stage: true
+ case:
+ switch: "{CUBE.window_kind}"
+ when:
+ - value: R3
+ sql: "{CUBE.r3_amount_change}"
+ - value: R12
+ sql: "{CUBE.r12_amount_change}"
+ else:
+ sql: "({CUBE.ytd_amount} - {CUBE.prev_ytd_amount})"
+
+ pre_aggregations:
+ # Stores the rolling measures unrolled to plain monthly sums — the shape
+ # the rolling-window leaf reads. The calc group is deliberately absent.
+ - name: rolling_by_category
+ type: rollup
+ external: true
+ measures:
+ - amount
+ - r3_amount
+ - r12_amount
+ - ytd_amount
+ dimensions:
+ - category
+ time_dimension: created_at
+ granularity: month
+ allow_non_strict_date_range_match: true
+ indexes:
+ - name: category_idx
+ columns:
+ - category
+
+ # Stores the calc group as an ordinary dimension — the shape rollups had
+ # to use before calc groups stopped being required, and which must keep
+ # working.
+ - name: rolling_by_category_stored_switch
+ type: rollup
+ external: true
+ measures:
+ - amount
+ - r3_amount
+ - r12_amount
+ - ytd_amount
+ dimensions:
+ - category
+ - window_kind
+ time_dimension: created_at
+ granularity: month
+ allow_non_strict_date_range_match: true
+ indexes:
+ - name: category_switch_idx
+ columns:
+ - category
+ - window_kind
+
+ # Aggregating index over the same grain.
+ - name: rolling_by_category_agg_idx
+ type: rollup
+ external: true
+ measures:
+ - amount
+ - r3_amount
+ - r12_amount
+ - ytd_amount
+ dimensions:
+ - category
+ time_dimension: created_at
+ granularity: month
+ allow_non_strict_date_range_match: true
+ indexes:
+ - name: category_regular_idx
+ columns:
+ - category
+ - name: category_agg_idx
+ type: aggregate
+ columns:
+ - category
+
+ # Same at the grain of a dimension owned by a joined cube, mirroring a
+ # rollup keyed by an attribute of the joined entity.
+ - name: rolling_by_account
+ type: rollup
+ external: true
+ measures:
+ - amount
+ - r3_amount
+ - r12_amount
+ - ytd_amount
+ dimensions:
+ - accounts.name
+ time_dimension: created_at
+ granularity: month
+ allow_non_strict_date_range_match: true
+ indexes:
+ - name: account_idx
+ columns:
+ - accounts.name
+
+ - name: accounts
+ sql: "SELECT * FROM cs_switch_accounts"
+ dimensions:
+ - name: id
+ type: number
+ sql: id
+ primary_key: true
+ - name: name
+ type: string
+ sql: name
+ measures:
+ - name: count
+ type: count
diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/schemas/yaml_files/common/integration_multi_stage.yaml b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/schemas/yaml_files/common/integration_multi_stage.yaml
index 18097133fac1c..e5d19170fea62 100644
--- a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/schemas/yaml_files/common/integration_multi_stage.yaml
+++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/schemas/yaml_files/common/integration_multi_stage.yaml
@@ -82,6 +82,15 @@ cubes:
else:
label: Other
+ # A calc-group (virtual enumeration) dimension used as the switch of
+ # `rolling_amount_switch`: it selects which rolling window the case
+ # measure dispatches to, and carries no stored data.
+ - name: window_kind
+ type: switch
+ values:
+ - R3
+ - YTD
+
- name: customer_name
type: string
sql: "{customers.name}"
@@ -455,6 +464,82 @@ cubes:
trailing: 7 day
offset: start
+ # Month-based rolling window: whole-month steps are what a rollup
+ # stored at `granularity: month` can serve, so the calc-group case
+ # entrypoints below dispatch between this and the year-to-date
+ # window rather than the 7-day one.
+ - name: rolling_sum_3m
+ type: sum
+ sql: amount
+ rolling_window:
+ trailing: 3 month
+
+ # An Aggregate parent that reduces by the time dimension: the child
+ # rolling-window state ends up NARROWER than the root query (no time
+ # dimension), while the leaf still groups per date.
+ - name: rolling_sum_7d_reduce_time
+ type: sum
+ sql: "{CUBE.rolling_sum_7d}"
+ multi_stage: true
+ reduce_by:
+ - orders.created_at
+
+ # Case entrypoint dispatching between two rolling windows on the
+ # `window_kind` calc group: the switch dimension is added to the
+ # grain of the rolling leaves, so every CTE feeding the case must
+ # project it.
+ - name: rolling_amount_switch
+ type: number
+ multi_stage: true
+ case:
+ switch: "{CUBE.window_kind}"
+ when:
+ - value: R3
+ sql: "{CUBE.rolling_sum_3m}"
+ else:
+ sql: "{CUBE.total_amount_ytd}"
+
+ # Change-over-prior-period on top of each rolling window: the
+ # arithmetic layer consumes two rolling-window CTEs and partitions
+ # by the grain it is requested at — which, under the case
+ # entrypoint below, includes the `window_kind` calc group.
+ - name: rolling_sum_3m_prev
+ type: number
+ multi_stage: true
+ sql: "{CUBE.rolling_sum_3m}"
+ time_shift:
+ - interval: 3 month
+ type: prior
+
+ - name: rolling_sum_3m_change
+ type: number
+ multi_stage: true
+ sql: "({CUBE.rolling_sum_3m} - {CUBE.rolling_sum_3m_prev})"
+
+ - name: total_amount_ytd_prev_year
+ type: number
+ multi_stage: true
+ sql: "{CUBE.total_amount_ytd}"
+ time_shift:
+ - interval: 1 year
+ type: prior
+
+ - name: total_amount_ytd_change
+ type: number
+ multi_stage: true
+ sql: "({CUBE.total_amount_ytd} - {CUBE.total_amount_ytd_prev_year})"
+
+ - name: rolling_change_switch
+ type: number
+ multi_stage: true
+ case:
+ switch: "{CUBE.window_kind}"
+ when:
+ - value: R3
+ sql: "{CUBE.rolling_sum_3m_change}"
+ else:
+ sql: "{CUBE.total_amount_ytd_change}"
+
- name: total_amount_ytd
type: sum
sql: amount
diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/schemas/yaml_files/seeds/integration_cubestore_switch_rolling_tables.sql b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/schemas/yaml_files/seeds/integration_cubestore_switch_rolling_tables.sql
new file mode 100644
index 0000000000000..a30fbd0e34f80
--- /dev/null
+++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/schemas/yaml_files/seeds/integration_cubestore_switch_rolling_tables.sql
@@ -0,0 +1,52 @@
+DROP TABLE IF EXISTS cs_switch_sales CASCADE;
+DROP TABLE IF EXISTS cs_switch_accounts CASCADE;
+
+CREATE TABLE cs_switch_accounts (
+ id INTEGER PRIMARY KEY,
+ name TEXT NOT NULL
+);
+
+CREATE TABLE cs_switch_sales (
+ id INTEGER PRIMARY KEY,
+ account_id INTEGER NOT NULL REFERENCES cs_switch_accounts(id),
+ category TEXT NOT NULL,
+ created_at TIMESTAMP NOT NULL,
+ amount NUMERIC NOT NULL
+);
+
+INSERT INTO cs_switch_accounts (id, name) VALUES
+ (1, 'acme'),
+ (2, 'globex');
+
+-- One row per (account, category, month) with a distinct amount per month, so trailing
+-- windows of different lengths produce distinct sums. The 2023 rows put data
+-- outside the queried year, which is what separates a 12-month trailing window
+-- from year-to-date: without them the two coincide on every query below.
+INSERT INTO cs_switch_sales (id, account_id, category, created_at, amount) VALUES
+ -- Early 2023, so a year-over-year time shift has something to subtract and
+ -- the derived entrypoints are not all NULL on their to-date branch. Only the
+ -- May row falls inside a 12-month trailing window ending in 2024.
+ (19, 1, 'books', '2023-02-15 00:00:00', 20),
+ (20, 1, 'books', '2023-05-15 00:00:00', 30),
+ (21, 2, 'toys', '2023-02-15 00:00:00', 2),
+ (22, 2, 'toys', '2023-05-15 00:00:00', 3),
+ (13, 1, 'books', '2023-11-15 00:00:00', 7),
+ (14, 1, 'books', '2023-12-15 00:00:00', 50),
+ (15, 2, 'toys', '2023-11-15 00:00:00', 3),
+ (16, 2, 'toys', '2023-12-15 00:00:00', 5),
+ (1, 1, 'books', '2024-01-15 00:00:00', 100),
+ (2, 1, 'books', '2024-02-15 00:00:00', 200),
+ (3, 1, 'books', '2024-03-15 00:00:00', 300),
+ (4, 1, 'books', '2024-04-15 00:00:00', 400),
+ (5, 1, 'books', '2024-05-15 00:00:00', 500),
+ (6, 1, 'books', '2024-06-15 00:00:00', 600),
+ (7, 2, 'toys', '2024-01-15 00:00:00', 10),
+ (8, 2, 'toys', '2024-02-15 00:00:00', 20),
+ (9, 2, 'toys', '2024-03-15 00:00:00', 30),
+ (10, 2, 'toys', '2024-04-15 00:00:00', 40),
+ (11, 2, 'toys', '2024-05-15 00:00:00', 50),
+ (12, 2, 'toys', '2024-06-15 00:00:00', 60),
+ -- Each account sells both categories, so grouping by the joined cube's
+ -- dimension is distinguishable from grouping by the local one.
+ (17, 1, 'toys', '2024-05-15 00:00:00', 1),
+ (18, 2, 'books', '2024-05-15 00:00:00', 2);
diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/mod.rs b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/mod.rs
index 1bca5f8cba779..a0311f3bd5211 100644
--- a/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/mod.rs
+++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/mod.rs
@@ -1 +1,2 @@
mod basic;
+mod switch_rolling;
diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_aggregating_index.snap b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_aggregating_index.snap
new file mode 100644
index 0000000000000..79385b331d484
--- /dev/null
+++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_aggregating_index.snap
@@ -0,0 +1,11 @@
+---
+source: cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/switch_rolling.rs
+expression: normalize(result)
+---
+sales__category|sales__created_at_month|sales__rolling_amount
+books|2024-04-01 00:00:00|900.0000000000
+books|2024-05-01 00:00:00|1202.0000000000
+books|2024-06-01 00:00:00|1502.0000000000
+toys|2024-04-01 00:00:00|90.0000000000
+toys|2024-05-01 00:00:00|121.0000000000
+toys|2024-06-01 00:00:00|151.0000000000
diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_case_entrypoint.snap b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_case_entrypoint.snap
new file mode 100644
index 0000000000000..79385b331d484
--- /dev/null
+++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_case_entrypoint.snap
@@ -0,0 +1,11 @@
+---
+source: cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/switch_rolling.rs
+expression: normalize(result)
+---
+sales__category|sales__created_at_month|sales__rolling_amount
+books|2024-04-01 00:00:00|900.0000000000
+books|2024-05-01 00:00:00|1202.0000000000
+books|2024-06-01 00:00:00|1502.0000000000
+toys|2024-04-01 00:00:00|90.0000000000
+toys|2024-05-01 00:00:00|121.0000000000
+toys|2024-06-01 00:00:00|151.0000000000
diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_case_entrypoint_r12.snap b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_case_entrypoint_r12.snap
new file mode 100644
index 0000000000000..2aa5ebc666147
--- /dev/null
+++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_case_entrypoint_r12.snap
@@ -0,0 +1,11 @@
+---
+source: cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/switch_rolling.rs
+expression: normalize(result)
+---
+sales__category|sales__created_at_month|sales__rolling_amount
+books|2024-04-01 00:00:00|1087.0000000000
+books|2024-05-01 00:00:00|1559.0000000000
+books|2024-06-01 00:00:00|2159.0000000000
+toys|2024-04-01 00:00:00|111.0000000000
+toys|2024-05-01 00:00:00|159.0000000000
+toys|2024-06-01 00:00:00|219.0000000000
diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_date_range_only.snap b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_date_range_only.snap
new file mode 100644
index 0000000000000..65fc5aa6a0875
--- /dev/null
+++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_date_range_only.snap
@@ -0,0 +1,7 @@
+---
+source: cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/switch_rolling.rs
+expression: normalize(result)
+---
+sales__category|sales__rolling_amount
+books|1502.0000000000
+toys|151.0000000000
diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_derived_else_branch.snap b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_derived_else_branch.snap
new file mode 100644
index 0000000000000..312698167714f
--- /dev/null
+++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_derived_else_branch.snap
@@ -0,0 +1,11 @@
+---
+source: cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/switch_rolling.rs
+expression: normalize(result)
+---
+sales__category|sales__created_at_month|sales__rolling_amount_change
+books|2024-04-01 00:00:00|980.0000000000
+books|2024-05-01 00:00:00|1452.0000000000
+books|2024-06-01 00:00:00|2052.0000000000
+toys|2024-04-01 00:00:00|98.0000000000
+toys|2024-05-01 00:00:00|146.0000000000
+toys|2024-06-01 00:00:00|206.0000000000
diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_derived_entrypoint.snap b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_derived_entrypoint.snap
new file mode 100644
index 0000000000000..1a30ed1ccbaa6
--- /dev/null
+++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_derived_entrypoint.snap
@@ -0,0 +1,11 @@
+---
+source: cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/switch_rolling.rs
+expression: normalize(result)
+---
+sales__category|sales__created_at_month|sales__rolling_amount_change
+books|2024-04-01 00:00:00|743.0000000000
+books|2024-05-01 00:00:00|852.0000000000
+books|2024-06-01 00:00:00|902.0000000000
+toys|2024-04-01 00:00:00|72.0000000000
+toys|2024-05-01 00:00:00|86.0000000000
+toys|2024-06-01 00:00:00|91.0000000000
diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_direct_measure.snap b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_direct_measure.snap
new file mode 100644
index 0000000000000..eacbff893238a
--- /dev/null
+++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_direct_measure.snap
@@ -0,0 +1,11 @@
+---
+source: cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/switch_rolling.rs
+expression: normalize(result)
+---
+sales__category|sales__created_at_month|sales__r3_amount
+books|2024-04-01 00:00:00|900.0000000000
+books|2024-05-01 00:00:00|1202.0000000000
+books|2024-06-01 00:00:00|1502.0000000000
+toys|2024-04-01 00:00:00|90.0000000000
+toys|2024-05-01 00:00:00|121.0000000000
+toys|2024-06-01 00:00:00|151.0000000000
diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_else_branch.snap b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_else_branch.snap
new file mode 100644
index 0000000000000..9f1b96b444a0f
--- /dev/null
+++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_else_branch.snap
@@ -0,0 +1,11 @@
+---
+source: cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/switch_rolling.rs
+expression: normalize(result)
+---
+sales__category|sales__created_at_month|sales__rolling_amount
+books|2024-04-01 00:00:00|1000.0000000000
+books|2024-05-01 00:00:00|1502.0000000000
+books|2024-06-01 00:00:00|2102.0000000000
+toys|2024-04-01 00:00:00|100.0000000000
+toys|2024-05-01 00:00:00|151.0000000000
+toys|2024-06-01 00:00:00|211.0000000000
diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_grouped_switch.snap b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_grouped_switch.snap
new file mode 100644
index 0000000000000..3b75a231bb848
--- /dev/null
+++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_grouped_switch.snap
@@ -0,0 +1,17 @@
+---
+source: cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/switch_rolling.rs
+expression: normalize(result)
+---
+sales__category|sales__window_kind|sales__created_at_month|sales__rolling_amount
+books|R12|2024-05-01 00:00:00|1559.0000000000
+books|R12|2024-06-01 00:00:00|2159.0000000000
+toys|R12|2024-05-01 00:00:00|159.0000000000
+toys|R12|2024-06-01 00:00:00|219.0000000000
+books|R3|2024-05-01 00:00:00|1202.0000000000
+books|R3|2024-06-01 00:00:00|1502.0000000000
+toys|R3|2024-05-01 00:00:00|121.0000000000
+toys|R3|2024-06-01 00:00:00|151.0000000000
+books|YTD|2024-05-01 00:00:00|1502.0000000000
+books|YTD|2024-06-01 00:00:00|2102.0000000000
+toys|YTD|2024-05-01 00:00:00|151.0000000000
+toys|YTD|2024-06-01 00:00:00|211.0000000000
diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_growth_else_branch.snap b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_growth_else_branch.snap
new file mode 100644
index 0000000000000..cb1790568949d
--- /dev/null
+++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_growth_else_branch.snap
@@ -0,0 +1,11 @@
+---
+source: cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/switch_rolling.rs
+expression: normalize(result)
+---
+sales__category|sales__created_at_month|sales__rolling_amount_growth
+books|2024-04-01 00:00:00|49.0000000000
+books|2024-05-01 00:00:00|29.0400000000
+books|2024-06-01 00:00:00|41.0400000000
+toys|2024-04-01 00:00:00|49.0000000000
+toys|2024-05-01 00:00:00|29.2000000000
+toys|2024-06-01 00:00:00|41.2000000000
diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_growth_entrypoint.snap b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_growth_entrypoint.snap
new file mode 100644
index 0000000000000..1c4c78aeb4cb7
--- /dev/null
+++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_growth_entrypoint.snap
@@ -0,0 +1,11 @@
+---
+source: cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/switch_rolling.rs
+expression: normalize(result)
+---
+sales__category|sales__created_at_month|sales__rolling_amount_growth
+books|2024-04-01 00:00:00|4.7324840764
+books|2024-05-01 00:00:00|2.4342857143
+books|2024-06-01 00:00:00|1.5033333333
+toys|2024-04-01 00:00:00|4.0000000000
+toys|2024-05-01 00:00:00|2.4571428571
+toys|2024-06-01 00:00:00|1.5166666667
diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_joined_dimension.snap b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_joined_dimension.snap
new file mode 100644
index 0000000000000..9d88a3ffa5299
--- /dev/null
+++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_joined_dimension.snap
@@ -0,0 +1,11 @@
+---
+source: cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/switch_rolling.rs
+expression: normalize(result)
+---
+accounts__name|sales__created_at_month|sales__rolling_amount
+acme|2024-04-01 00:00:00|900.0000000000
+acme|2024-05-01 00:00:00|1201.0000000000
+acme|2024-06-01 00:00:00|1501.0000000000
+globex|2024-04-01 00:00:00|90.0000000000
+globex|2024-05-01 00:00:00|122.0000000000
+globex|2024-06-01 00:00:00|152.0000000000
diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_prev_entrypoint.snap b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_prev_entrypoint.snap
new file mode 100644
index 0000000000000..e9201803479f4
--- /dev/null
+++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_prev_entrypoint.snap
@@ -0,0 +1,11 @@
+---
+source: cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/switch_rolling.rs
+expression: normalize(result)
+---
+sales__category|sales__created_at_month|sales__prev_rolling_amount
+books|2024-04-01 00:00:00|157.0000000000
+books|2024-05-01 00:00:00|350.0000000000
+books|2024-06-01 00:00:00|600.0000000000
+toys|2024-04-01 00:00:00|18.0000000000
+toys|2024-05-01 00:00:00|35.0000000000
+toys|2024-06-01 00:00:00|60.0000000000
diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_stored_switch.snap b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_stored_switch.snap
new file mode 100644
index 0000000000000..79385b331d484
--- /dev/null
+++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/snapshots/cubesqlplanner__tests__integration__cubestore__switch_rolling__switch_rolling_stored_switch.snap
@@ -0,0 +1,11 @@
+---
+source: cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/switch_rolling.rs
+expression: normalize(result)
+---
+sales__category|sales__created_at_month|sales__rolling_amount
+books|2024-04-01 00:00:00|900.0000000000
+books|2024-05-01 00:00:00|1202.0000000000
+books|2024-06-01 00:00:00|1502.0000000000
+toys|2024-04-01 00:00:00|90.0000000000
+toys|2024-05-01 00:00:00|121.0000000000
+toys|2024-06-01 00:00:00|151.0000000000
diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/switch_rolling.rs b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/switch_rolling.rs
new file mode 100644
index 0000000000000..1615e28ac9274
--- /dev/null
+++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/cubestore/switch_rolling.rs
@@ -0,0 +1,501 @@
+//! Rolling-window measures reached through a `case` (switch) entrypoint, each
+//! shape run twice: served from an external rollup in CubeStore, and straight
+//! from the source Postgres with pre-aggregations switched off. The two results
+//! must agree — the rollup path is an optimization, not a different answer.
+//!
+//! Requires `--features integration-cubestore` and a `cubestored` binary;
+//! without them both paths return `None` and only matching is asserted.
+//!
+//! One shape is `#[ignore]`d for a CubeStore limitation unrelated to the
+//! calc-group grain — see the note on it; run it with `--ignored` to reproduce.
+//! Two defects these tests were originally written against are fixed: the
+//! rolling-rewrite schema widening in #11410 and the aggregating-index decimal
+//! cast in #11413.
+//! Note that a debug-built `cubestored` overflows its stack on rolling-window
+//! queries, so `CUBESTORED_BIN_PATH` must point at a release build.
+
+use crate::test_fixtures::cube_bridge::MockSchema;
+use crate::test_fixtures::test_utils::TestContext;
+use indoc::indoc;
+
+const YAML: &str = "common/integration_cubestore_switch_rolling.yaml";
+const SEED: &str = "integration_cubestore_switch_rolling_tables.sql";
+
+fn rollup_ctx(pre_aggs: &[&str]) -> TestContext {
+ TestContext::new_with_external_cubestore(
+ MockSchema::from_yaml_file(YAML).only_pre_aggregations(pre_aggs),
+ )
+ .unwrap()
+}
+
+/// The same schema with every pre-aggregation filtered out, so the query runs
+/// against the source tables.
+fn raw_ctx() -> TestContext {
+ TestContext::new(MockSchema::from_yaml_file(YAML).only_pre_aggregations(&[])).unwrap()
+}
+
+/// Query for `measures` with the switch pinned to `window`, at month grain.
+fn query(measures: &[&str], window: &str, dimension: &str) -> String {
+ let measures = measures
+ .iter()
+ .map(|m| format!(" - sales.{m}"))
+ .collect::>()
+ .join("\n");
+ format!(
+ indoc! {r#"
+ measures:
+ {}
+ dimensions:
+ - {}
+ filters:
+ - dimension: sales.window_kind
+ operator: equals
+ values:
+ - {}
+ time_dimensions:
+ - dimension: sales.created_at
+ granularity: month
+ dateRange:
+ - "2024-04-01"
+ - "2024-06-30"
+ order:
+ - id: {}
+ - id: sales.created_at
+ "#},
+ measures, dimension, window, dimension
+ )
+}
+
+/// Same, with the switch left unpinned so it is grouped over instead.
+fn query_grouped_switch(measure: &str) -> String {
+ format!(
+ indoc! {r#"
+ measures:
+ - sales.{}
+ dimensions:
+ - sales.category
+ - sales.window_kind
+ time_dimensions:
+ - dimension: sales.created_at
+ granularity: month
+ dateRange:
+ - "2024-05-01"
+ - "2024-06-30"
+ order:
+ - id: sales.window_kind
+ - id: sales.category
+ - id: sales.created_at
+ "#},
+ measure
+ )
+}
+
+const DIRECT_MEASURE: &str = indoc! {r#"
+ measures:
+ - sales.r3_amount
+ dimensions:
+ - sales.category
+ time_dimensions:
+ - dimension: sales.created_at
+ granularity: month
+ dateRange:
+ - "2024-04-01"
+ - "2024-06-30"
+ order:
+ - id: sales.category
+ - id: sales.created_at
+"#};
+
+fn assert_served_by(ctx: &TestContext, query: &str, expected_rollup: &str) {
+ let (_sql, pre_aggrs) = ctx.build_sql_with_used_pre_aggregations(query).unwrap();
+ assert!(
+ !pre_aggrs.is_empty() && pre_aggrs.iter().all(|u| u.name() == expected_rollup),
+ "expected every usage to be {expected_rollup}, got {:?}",
+ pre_aggrs
+ .iter()
+ .map(|u| u.name().clone())
+ .collect::>()
+ );
+}
+
+/// Engine-independent form of a result table. CubeStore renders timestamps as
+/// `...T00:00:00.000Z` where Postgres uses `... 00:00:00` — matched on that
+/// shape, so a string cell like the `YTD` calc-group value is left alone — and
+/// ratios are
+/// computed in f64 against Postgres' NUMERIC, so the two differ in the last
+/// digit (`2.4285714285714284` vs `...86`); numbers are therefore compared
+/// rounded. Everything else must match cell for cell.
+fn normalize(table: &str) -> String {
+ fn normalize_cell(cell: &str) -> String {
+ let cell = cell.trim();
+ // Only rewrite cells shaped like CubeStore's `2024-05-01T00:00:00.000Z`,
+ // so string values carrying a `T` or `Z` — the `YTD` calc group here —
+ // survive untouched.
+ let cell = match cell.strip_suffix('Z') {
+ Some(timestamp) if timestamp.contains('T') => {
+ timestamp.replacen('T', " ", 1).replace(".000", "")
+ }
+ _ => cell.to_string(),
+ };
+ match cell.parse::() {
+ Ok(value) => format!("{value:.10}"),
+ Err(_) => cell,
+ }
+ }
+
+ table
+ .lines()
+ .filter(|line| {
+ // the `---+---` separator, not a data row whose first cell is negative
+ !line
+ .trim()
+ .chars()
+ .all(|c| matches!(c, '-' | '+' | ' ' | '|'))
+ })
+ .map(|line| {
+ line.split('|')
+ .map(normalize_cell)
+ .collect::>()
+ .join("|")
+ })
+ .collect::>()
+ .join("\n")
+}
+
+/// Runs `query` through the rollup and through the raw source, asserts the two
+/// agree, and snapshots the rollup-backed result.
+async fn run_both(pre_aggs: &[&str], query: &str, expected_rollup: &str, snapshot: &str) {
+ let rollup = rollup_ctx(pre_aggs);
+ assert_served_by(&rollup, query, expected_rollup);
+
+ let raw = raw_ctx();
+ let (_sql, none_used) = raw.build_sql_with_used_pre_aggregations(query).unwrap();
+ assert!(
+ none_used.is_empty(),
+ "the raw context must not use pre-aggregations, got {:?}",
+ none_used
+ .iter()
+ .map(|u| u.name().clone())
+ .collect::>()
+ );
+
+ let from_rollup = rollup.try_execute_cubestore(query, SEED).await;
+ let from_source = raw.try_execute_pg(query, SEED).await;
+
+ if let (Some(from_rollup), Some(from_source)) = (&from_rollup, &from_source) {
+ assert_eq!(
+ normalize(from_rollup),
+ normalize(from_source),
+ "rollup and raw-source results disagree\n--- rollup ---\n{from_rollup}\n--- source ---\n{from_source}"
+ );
+ }
+ // Snapshot the engine-independent form of whichever engine ran, so values are
+ // pinned in a plain `integration-postgres` run too, not only when CubeStore
+ // is available.
+ if let Some(result) = from_rollup.as_deref().or(from_source.as_deref()) {
+ insta::assert_snapshot!(snapshot, normalize(result));
+ }
+}
+
+/// Matching and planning for every shape below, without executing — the part
+/// that must hold regardless of whether CubeStore can run the plan.
+#[test]
+fn test_switch_shapes_are_served_by_rollup() {
+ let by_category = rollup_ctx(&["rolling_by_category"]);
+ assert_served_by(&by_category, DIRECT_MEASURE, "rolling_by_category");
+ for (measure, window) in [
+ ("rolling_amount", "R3"),
+ ("rolling_amount", "R12"),
+ ("rolling_amount", "YTD"),
+ ("prev_rolling_amount", "R3"),
+ ("rolling_amount_change", "R3"),
+ ("rolling_amount_growth", "R3"),
+ ("rolling_amount_change", "YTD"),
+ ("rolling_amount_growth", "YTD"),
+ ] {
+ assert_served_by(
+ &by_category,
+ &query(&[measure], window, "sales.category"),
+ "rolling_by_category",
+ );
+ }
+ assert_served_by(
+ &by_category,
+ &query(
+ &[
+ "rolling_amount",
+ "prev_rolling_amount",
+ "rolling_amount_change",
+ "rolling_amount_growth",
+ ],
+ "R3",
+ "sales.category",
+ ),
+ "rolling_by_category",
+ );
+ assert_served_by(
+ &by_category,
+ &query_grouped_switch("rolling_amount"),
+ "rolling_by_category",
+ );
+
+ assert_served_by(&by_category, DATE_RANGE_ONLY, "rolling_by_category");
+
+ assert_served_by(
+ &rollup_ctx(&["rolling_by_category_stored_switch"]),
+ &query(&["rolling_amount"], "R3", "sales.category"),
+ "rolling_by_category_stored_switch",
+ );
+ assert_served_by(
+ &rollup_ctx(&["rolling_by_category_agg_idx"]),
+ &query(&["rolling_amount"], "R3", "sales.category"),
+ "rolling_by_category_agg_idx",
+ );
+ assert_served_by(
+ &rollup_ctx(&["rolling_by_account"]),
+ &query(&["rolling_amount"], "R3", "accounts.name"),
+ "rolling_by_account",
+ );
+}
+
+/// Control: the rolling measure queried directly, no switch involved.
+#[tokio::test(flavor = "multi_thread")]
+async fn test_rolling_measure() {
+ run_both(
+ &["rolling_by_category"],
+ DIRECT_MEASURE,
+ "rolling_by_category",
+ "switch_rolling_direct_measure",
+ )
+ .await;
+}
+
+/// The plain case entrypoint over a `trailing` window: nothing above the rolling
+/// windows consumes the calc-group dimension, so the outer projection prunes it.
+///
+/// This shape used to fail in CubeStore. `RollingOptimizerRule` replaced that
+/// projection with a `RollingWindowAggregate` node emitting
+/// `dimension + partition_by + rolling aggregates`, so the pruned GROUP BY column
+/// reappeared, the replacement was wider than what it replaced, and ancestors
+/// resolving columns by position hit `Optimizer rule 'optimize_projections'
+/// failed / Schema error: No field named fk_aggregate.sales__r3_amount`. Fixed in
+/// #11410; this test guards that rewrite together with the CTE-grain fix in this
+/// PR.
+#[tokio::test(flavor = "multi_thread")]
+async fn test_case_entrypoint() {
+ run_both(
+ &["rolling_by_category"],
+ &query(&["rolling_amount"], "R3", "sales.category"),
+ "rolling_by_category",
+ "switch_rolling_case_entrypoint",
+ )
+ .await;
+}
+
+/// Same, dispatching to the other window, so the switch value actually selects
+/// a different rolling measure.
+#[tokio::test(flavor = "multi_thread")]
+async fn test_case_entrypoint_other_window() {
+ run_both(
+ &["rolling_by_category"],
+ &query(&["rolling_amount"], "R12", "sales.category"),
+ "rolling_by_category",
+ "switch_rolling_case_entrypoint_r12",
+ )
+ .await;
+}
+
+/// The grain dimension is owned by a joined cube.
+#[tokio::test(flavor = "multi_thread")]
+async fn test_case_entrypoint_joined_dimension() {
+ run_both(
+ &["rolling_by_account"],
+ &query(&["rolling_amount"], "R3", "accounts.name"),
+ "rolling_by_account",
+ "switch_rolling_joined_dimension",
+ )
+ .await;
+}
+
+/// A rollup that stores the calc group as an ordinary dimension: the value is
+/// then read from the rollup column instead of being rendered as a literal.
+#[tokio::test(flavor = "multi_thread")]
+async fn test_case_entrypoint_rollup_stores_switch() {
+ run_both(
+ &["rolling_by_category_stored_switch"],
+ &query(&["rolling_amount"], "R3", "sales.category"),
+ "rolling_by_category_stored_switch",
+ "switch_rolling_stored_switch",
+ )
+ .await;
+}
+
+/// Same grain, but the rollup carries an aggregating index. Building that index
+/// used to fail before any query ran — the decimal sum widened to
+/// `Decimal128(28, 5)` against a column declared `Decimal128(18, 5)` and
+/// CubeStore panicked with `column types must match schema types`. Fixed in
+/// #11413; this test guards it.
+#[tokio::test(flavor = "multi_thread")]
+async fn test_case_entrypoint_aggregating_index() {
+ run_both(
+ &["rolling_by_category_agg_idx"],
+ &query(&["rolling_amount"], "R3", "sales.category"),
+ "rolling_by_category_agg_idx",
+ "switch_rolling_aggregating_index",
+ )
+ .await;
+}
+
+/// The switch is not pinned by a filter but grouped over, so the calc group is
+/// a real cross-joined values column rather than a literal.
+#[tokio::test(flavor = "multi_thread")]
+async fn test_case_entrypoint_grouped_switch() {
+ run_both(
+ &["rolling_by_category"],
+ &query_grouped_switch("rolling_amount"),
+ "rolling_by_category",
+ "switch_rolling_grouped_switch",
+ )
+ .await;
+}
+
+/// An entrypoint dispatching straight onto a `time_shift` measure.
+#[tokio::test(flavor = "multi_thread")]
+async fn test_prev_case_entrypoint() {
+ run_both(
+ &["rolling_by_category"],
+ &query(&["prev_rolling_amount"], "R3", "sales.category"),
+ "rolling_by_category",
+ "switch_rolling_prev_entrypoint",
+ )
+ .await;
+}
+
+/// The derived entrypoint: the arithmetic layer above the rolling windows
+/// partitions by the calc-group dimension, so the outer projection keeps it and
+/// nothing is pruned.
+#[tokio::test(flavor = "multi_thread")]
+async fn test_derived_case_entrypoint() {
+ run_both(
+ &["rolling_by_category"],
+ &query(&["rolling_amount_change"], "R3", "sales.category"),
+ "rolling_by_category",
+ "switch_rolling_derived_entrypoint",
+ )
+ .await;
+}
+
+/// A ratio over two multi-stage layers, the growth-percentage shape.
+#[tokio::test(flavor = "multi_thread")]
+async fn test_growth_case_entrypoint() {
+ run_both(
+ &["rolling_by_category"],
+ &query(&["rolling_amount_growth"], "R3", "sales.category"),
+ "rolling_by_category",
+ "switch_rolling_growth_entrypoint",
+ )
+ .await;
+}
+
+/// Four switch entrypoints at once — the dashboard shape, and the deepest
+/// FullKeyAggregate plan this model produces. CubeStore cannot decode a
+/// serialized plan this deep:
+///
+/// ```text
+/// Error during planning: Error decoding expr as protobuf: failed to decode
+/// Protobuf message: ... recursion limit reached
+/// ```
+///
+/// Unrelated to the calc-group grain — the plan is valid and the raw half of
+/// this test returns the expected rows.
+#[ignore = "CubeStore cannot decode a serialized plan this deep (protobuf recursion limit)"]
+#[tokio::test(flavor = "multi_thread")]
+async fn test_four_entrypoints_in_one_query() {
+ run_both(
+ &["rolling_by_category"],
+ &query(
+ &[
+ "rolling_amount",
+ "prev_rolling_amount",
+ "rolling_amount_change",
+ "rolling_amount_growth",
+ ],
+ "R3",
+ "sales.category",
+ ),
+ "rolling_by_category",
+ "switch_rolling_four_measures",
+ )
+ .await;
+}
+
+/// A derived entrypoint dispatching to its `else` branch: an arithmetic layer
+/// over a to-date window, which is planned without the time-series LEFT JOIN the
+/// trailing windows use, while still partitioning by the calc group.
+#[tokio::test(flavor = "multi_thread")]
+async fn test_derived_case_entrypoint_else_branch() {
+ run_both(
+ &["rolling_by_category"],
+ &query(&["rolling_amount_change"], "YTD", "sales.category"),
+ "rolling_by_category",
+ "switch_rolling_derived_else_branch",
+ )
+ .await;
+}
+
+/// Same for the ratio layer.
+#[tokio::test(flavor = "multi_thread")]
+async fn test_growth_case_entrypoint_else_branch() {
+ run_both(
+ &["rolling_by_category"],
+ &query(&["rolling_amount_growth"], "YTD", "sales.category"),
+ "rolling_by_category",
+ "switch_rolling_growth_else_branch",
+ )
+ .await;
+}
+
+/// The `else` branch resolves to a to-date window, which is planned without the
+/// time-series LEFT JOIN the trailing windows use.
+#[tokio::test(flavor = "multi_thread")]
+async fn test_case_entrypoint_else_branch() {
+ run_both(
+ &["rolling_by_category"],
+ &query(&["rolling_amount"], "YTD", "sales.category"),
+ "rolling_by_category",
+ "switch_rolling_else_branch",
+ )
+ .await;
+}
+
+const DATE_RANGE_ONLY: &str = indoc! {r#"
+ measures:
+ - sales.rolling_amount
+ dimensions:
+ - sales.category
+ filters:
+ - dimension: sales.window_kind
+ operator: equals
+ values:
+ - R3
+ time_dimensions:
+ - dimension: sales.created_at
+ dateRange:
+ - "2024-04-01"
+ - "2024-06-30"
+ order:
+ - id: sales.category
+"#};
+
+/// A date range with no granularity still matches the rollup thanks to
+/// `allow_non_strict_date_range_match`.
+#[tokio::test(flavor = "multi_thread")]
+async fn test_date_range_without_granularity() {
+ run_both(
+ &["rolling_by_category"],
+ DATE_RANGE_ONLY,
+ "rolling_by_category",
+ "switch_rolling_date_range_only",
+ )
+ .await;
+}
diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/multi_stage/snapshots/cubesqlplanner__tests__integration__multi_stage__with_rolling_window__rolling_window_under_reduce_by_time.snap b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/multi_stage/snapshots/cubesqlplanner__tests__integration__multi_stage__with_rolling_window__rolling_window_under_reduce_by_time.snap
new file mode 100644
index 0000000000000..49a60829ff617
--- /dev/null
+++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/multi_stage/snapshots/cubesqlplanner__tests__integration__multi_stage__with_rolling_window__rolling_window_under_reduce_by_time.snap
@@ -0,0 +1,16 @@
+---
+source: cubesqlplanner/cubesqlplanner/src/tests/integration/multi_stage/with_rolling_window.rs
+expression: result
+---
+orders__category | orders__created_at_day | orders__rolling_sum_7d_reduce_time
+-----------------+------------------------+-----------------------------------
+electronics | 2024-01-06 00:00:00 | 500.00
+electronics | 2024-01-07 00:00:00 | 500.00
+electronics | 2024-01-08 00:00:00 | 500.00
+electronics | 2024-01-09 00:00:00 | 500.00
+electronics | 2024-01-10 00:00:00 | 500.00
+NULL | 2024-01-01 00:00:00 | NULL
+NULL | 2024-01-02 00:00:00 | NULL
+NULL | 2024-01-03 00:00:00 | NULL
+NULL | 2024-01-04 00:00:00 | NULL
+NULL | 2024-01-05 00:00:00 | NULL
diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/multi_stage/with_rolling_window.rs b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/multi_stage/with_rolling_window.rs
index 0eba8aa67e32a..6245fea1167d9 100644
--- a/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/multi_stage/with_rolling_window.rs
+++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/multi_stage/with_rolling_window.rs
@@ -151,3 +151,82 @@ async fn test_rolling_and_calculated() {
insta::assert_snapshot!(result);
}
}
+
+/// A `case` entrypoint dispatching between two month-based rolling windows
+/// (trailing 3 month / year-to-date, the grain a monthly rollup can serve)
+/// on a `type: switch` calc-group dimension, queried with a month time
+/// dimension. The switch dimension is added to the grain of the rolling
+/// leaves, so the rolling-window CTE must project it — building the CTE
+/// from the root query dimensions instead of the requested state made
+/// this fail with `Alias not found for partition_by dimension
+/// orders.window_kind`.
+#[tokio::test(flavor = "multi_thread")]
+async fn test_rolling_window_switch_with_granular_time_dimension() {
+ let ctx = create_context();
+
+ let query = indoc! {r#"
+ measures:
+ - orders.rolling_amount_switch
+ - orders.rolling_change_switch
+ dimensions:
+ - orders.status
+ filters:
+ - member: orders.window_kind
+ operator: equals
+ values:
+ - R3
+ time_dimensions:
+ - dimension: orders.created_at
+ granularity: month
+ dateRange:
+ - "2024-01-01"
+ - "2024-03-31"
+ order:
+ - id: orders.status
+ - id: orders.created_at
+ "#};
+
+ let sql = ctx.build_sql(query).unwrap();
+
+ // The pinned switch value renders as a literal, and the calc-group
+ // dimension is projected by the CTEs feeding the case measure.
+ assert!(
+ sql.contains("'R3'"),
+ "Expected the pinned calc-group value in the generated SQL:\n{}",
+ sql
+ );
+ assert!(
+ sql.contains("orders__window_kind"),
+ "Expected the calc-group dimension to be projected:\n{}",
+ sql
+ );
+}
+
+/// An Aggregate parent reducing by the time dimension narrows the child
+/// rolling-window state: the CTE must still project and group by the rolling
+/// time dimension, otherwise the `time_series` LEFT JOIN fans out and the
+/// rolling sum is multiplied.
+#[tokio::test(flavor = "multi_thread")]
+async fn test_rolling_window_under_reduce_by_time() {
+ let ctx = create_context();
+
+ let query = indoc! {r#"
+ measures:
+ - orders.rolling_sum_7d_reduce_time
+ dimensions:
+ - orders.category
+ time_dimensions:
+ - dimension: orders.created_at
+ granularity: day
+ dateRange:
+ - "2024-01-01"
+ - "2024-01-10"
+ order:
+ - id: orders.category
+ - id: orders.created_at
+ "#};
+
+ if let Some(result) = ctx.try_execute_pg(query, SEED).await {
+ insta::assert_snapshot!(result);
+ }
+}
diff --git a/rust/cubesql/CHANGELOG.md b/rust/cubesql/CHANGELOG.md
index ed4bc21f40550..59fbe40409ad7 100644
--- a/rust/cubesql/CHANGELOG.md
+++ b/rust/cubesql/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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+### Features
+
+- **cubesql:** Separate env var for non-streaming query max row limit ([#11418](https://github.com/cube-js/cube/issues/11418)) ([236763a](https://github.com/cube-js/cube/commit/236763ad3936ac2a0df3bdd0bfc784d6df78c690))
+- **cubesql:** Split oversized CubeScan record batches ([#11384](https://github.com/cube-js/cube/issues/11384)) ([51db9c7](https://github.com/cube-js/cube/commit/51db9c7d4cc1cf4d50f7e48d4ec269982f01dff9))
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**Note:** Version bump only for package @cubejs-backend/cubesql
diff --git a/rust/cubesql/cubesql/src/config/mod.rs b/rust/cubesql/cubesql/src/config/mod.rs
index 062c1d608f7b3..c93c538cb7174 100644
--- a/rust/cubesql/cubesql/src/config/mod.rs
+++ b/rust/cubesql/cubesql/src/config/mod.rs
@@ -14,7 +14,7 @@ use crate::{
CubeError,
};
use futures::future::join_all;
-use log::error;
+use log::{error, warn};
use std::{
env,
@@ -153,6 +153,22 @@ impl ConfigObjImpl {
.map(|v| v.parse::().unwrap())
.unwrap_or(120);
let sql_push_down = env_parse("CUBESQL_SQL_PUSH_DOWN", true);
+
+ let db_query_limit: i32 = env_parse("CUBEJS_DB_QUERY_LIMIT", 50000);
+ let non_streaming_query_max_row_limit =
+ match env_optparse("CUBESQL_NON_STREAMING_QUERY_MAX_ROW_LIMIT") {
+ Some(limit) if limit > db_query_limit => {
+ warn!(
+ "CUBESQL_NON_STREAMING_QUERY_MAX_ROW_LIMIT ({}) exceeds \
+ CUBEJS_DB_QUERY_LIMIT ({}), falling back to the latter",
+ limit, db_query_limit
+ );
+ db_query_limit
+ }
+ Some(limit) => limit,
+ None => db_query_limit,
+ };
+
Self {
bind_address: env::var("CUBESQL_BIND_ADDR").ok().or_else(|| {
env::var("CUBESQL_PORT")
@@ -184,7 +200,7 @@ impl ConfigObjImpl {
push_down_pull_up_split: env_optparse("CUBESQL_PUSH_DOWN_PULL_UP_SPLIT")
.unwrap_or(sql_push_down),
stream_mode: env_parse("CUBESQL_STREAM_MODE", false),
- non_streaming_query_max_row_limit: env_parse("CUBEJS_DB_QUERY_LIMIT", 50000),
+ non_streaming_query_max_row_limit,
cube_scan_max_batch_rows: env_parse("CUBESQL_CUBE_SCAN_MAX_BATCH_ROWS", 65536),
max_sessions: env_parse("CUBEJS_MAX_SESSIONS", 1024),
no_implicit_order: env_parse("CUBESQL_SQL_NO_IMPLICIT_ORDER", true),
diff --git a/rust/cubesql/package.json b/rust/cubesql/package.json
index a08cbea5bd38b..20e21c3a673bc 100644
--- a/rust/cubesql/package.json
+++ b/rust/cubesql/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-backend/cubesql",
- "version": "1.7.14",
+ "version": "1.7.15",
"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 fb0e0fbd6cb68..ab6114bfc3143 100644
--- a/rust/cubestore/CHANGELOG.md
+++ b/rust/cubestore/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.15](https://github.com/cube-js/cube/compare/v1.7.14...v1.7.15) (2026-07-30)
+
+### Bug Fixes
+
+- **cubestore:** cast aggregating index aggregation results back to the declared column types ([#11413](https://github.com/cube-js/cube/issues/11413)) ([26c4801](https://github.com/cube-js/cube/commit/26c4801629ef4851e3474e5d0a4ed4cf76c3d4d0))
+- **cubestore:** keep the projection schema when rewriting a rolling window ([#11410](https://github.com/cube-js/cube/issues/11410)) ([1bf2dd8](https://github.com/cube-js/cube/commit/1bf2dd848e9147afa94c19235bd0026899740609))
+
## [1.7.14](https://github.com/cube-js/cube/compare/v1.7.13...v1.7.14) (2026-07-29)
**Note:** Version bump only for package @cubejs-backend/cubestore
diff --git a/rust/cubestore/Cargo.lock b/rust/cubestore/Cargo.lock
index 3eff8f667ef27..c57ab404c0fc2 100644
--- a/rust/cubestore/Cargo.lock
+++ b/rust/cubestore/Cargo.lock
@@ -1558,7 +1558,7 @@ dependencies = [
[[package]]
name = "cubestore"
-version = "1.7.14"
+version = "1.7.15"
dependencies = [
"actix-rt",
"anyhow",
diff --git a/rust/cubestore/cubestore/Cargo.toml b/rust/cubestore/cubestore/Cargo.toml
index 53edd93dda4cd..a1558934e4d7a 100644
--- a/rust/cubestore/cubestore/Cargo.toml
+++ b/rust/cubestore/cubestore/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "cubestore"
-version = "1.7.14"
+version = "1.7.15"
authors = ["Cube Dev, Inc."]
edition = "2021"
license = "Apache-2.0"
diff --git a/rust/cubestore/package.json b/rust/cubestore/package.json
index d52c79f415683..1ba8b9ba2776a 100644
--- a/rust/cubestore/package.json
+++ b/rust/cubestore/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-backend/cubestore",
- "version": "1.7.14",
+ "version": "1.7.15",
"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.14",
+ "@cubejs-backend/linter": "1.7.15",
"@types/jest": "^29",
"@types/node": "^18",
"jest": "^29",
@@ -43,7 +43,7 @@
"access": "public"
},
"dependencies": {
- "@cubejs-backend/shared": "1.7.14",
+ "@cubejs-backend/shared": "1.7.15",
"@octokit/core": "^3.2.5",
"source-map-support": "^0.5.19"
},