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" },