diff --git a/CHANGELOG.md b/CHANGELOG.md index 78c124c826090..a999ce50cc880 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,18 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +### Bug Fixes + +- **clickhouse-driver:** Fix headers check ([#9746](https://github.com/cube-js/cube/issues/9746)) ([b643b0c](https://github.com/cube-js/cube/commit/b643b0cbf85e9090008e63f3fb516bcf302b4967)) +- **schema-compiler:** Fix date filter truncation for rolling window queries ([#9743](https://github.com/cube-js/cube/issues/9743)) ([f045af9](https://github.com/cube-js/cube/commit/f045af91086dafad80fe363a4ddba6f6411892f7)) + +### Features + +- **cubestore:** Use seperate working loop for queue ([#6243](https://github.com/cube-js/cube/issues/6243)) ([f961f97](https://github.com/cube-js/cube/commit/f961f97328efbd6535cbcaf510c38904984b0970)) +- **tesseract:** Support custom granularities in to_date rolling windows ([#9739](https://github.com/cube-js/cube/issues/9739)) ([a8b611c](https://github.com/cube-js/cube/commit/a8b611c877dfa87edc14652af6d3ebeafc071bd2)) + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) ### Bug Fixes diff --git a/lerna.json b/lerna.json index ed2ab911eb893..90fbd56dbb5d7 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "1.3.30", + "version": "1.3.31", "npmClient": "yarn", "command": { "bootstrap": { diff --git a/packages/cubejs-api-gateway/CHANGELOG.md b/packages/cubejs-api-gateway/CHANGELOG.md index 6e0155100d37a..e4d13bb724f4a 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/api-gateway + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **Note:** Version bump only for package @cubejs-backend/api-gateway diff --git a/packages/cubejs-api-gateway/package.json b/packages/cubejs-api-gateway/package.json index 3f21a93c3b1b8..b0ae021830d6a 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.js API Gateway", "author": "Cube Dev, Inc.", - "version": "1.3.30", + "version": "1.3.31", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -27,8 +27,8 @@ "dist/src/*" ], "dependencies": { - "@cubejs-backend/native": "1.3.30", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/native": "1.3.31", + "@cubejs-backend/shared": "1.3.31", "@ungap/structured-clone": "^0.3.4", "assert-never": "^1.4.0", "body-parser": "^1.19.0", @@ -51,7 +51,7 @@ "uuid": "^8.3.2" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.30", + "@cubejs-backend/linter": "1.3.31", "@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 3ca954d6a90d0..3884cb4c5bce6 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/athena-driver + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 3990dfcaca393..931b14d0c3758 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.3.30", + "version": "1.3.31", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -29,13 +29,13 @@ "types": "dist/src/index.d.ts", "dependencies": { "@aws-sdk/client-athena": "^3.22.0", - "@cubejs-backend/base-driver": "1.3.30", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/base-driver": "1.3.31", + "@cubejs-backend/shared": "1.3.31", "sqlstring": "^2.3.1" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.30", - "@cubejs-backend/testing-shared": "1.3.30", + "@cubejs-backend/linter": "1.3.31", + "@cubejs-backend/testing-shared": "1.3.31", "@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 b0ca13fb505b7..3e0bc91089255 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/cloud + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 e30f4031f961d..63d21168625be 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.3.30", + "version": "1.3.31", "description": "Cube Cloud package", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", @@ -25,7 +25,7 @@ "devDependencies": { "@babel/core": "^7.24.5", "@babel/preset-env": "^7.24.5", - "@cubejs-backend/linter": "1.3.30", + "@cubejs-backend/linter": "1.3.31", "@types/fs-extra": "^9.0.8", "@types/jest": "^29", "jest": "^29", @@ -33,7 +33,7 @@ }, "dependencies": { "@cubejs-backend/dotenv": "^9.0.2", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/shared": "1.3.31", "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 d314ec7c6fdc5..458696e254eb3 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/maven + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 4d5129ff2af25..eee545c94f0c1 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.3.30", + "version": "1.3.31", "license": "Apache-2.0", "repository": { "type": "git", @@ -31,12 +31,12 @@ "dist/src/*" ], "dependencies": { - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/shared": "1.3.31", "source-map-support": "^0.5.19", "xmlbuilder2": "^2.4.0" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.30", + "@cubejs-backend/linter": "1.3.31", "@types/jest": "^29", "@types/node": "^20", "jest": "^29", diff --git a/packages/cubejs-backend-native/CHANGELOG.md b/packages/cubejs-backend-native/CHANGELOG.md index 4e0eb9946cf16..95eeacc1c9f62 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/native + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) ### Features diff --git a/packages/cubejs-backend-native/Cargo.lock b/packages/cubejs-backend-native/Cargo.lock index 29ac8873f243c..7adc9ac93fdf2 100644 --- a/packages/cubejs-backend-native/Cargo.lock +++ b/packages/cubejs-backend-native/Cargo.lock @@ -732,8 +732,8 @@ dependencies = [ "reqwest", "reqwest-middleware", "serde", - "serde_derive", "serde_json", + "serde_repr", "tokio", "url", "uuid 1.6.1", @@ -3084,6 +3084,17 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_repr" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" diff --git a/packages/cubejs-backend-native/package.json b/packages/cubejs-backend-native/package.json index a4bdb17ae5948..834cc771150f9 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.3.30", + "version": "1.3.31", "author": "Cube Dev, Inc.", "description": "Native module for Cube.js (binding to Rust codebase)", "main": "dist/js/index.js", @@ -34,7 +34,7 @@ "dist/js" ], "devDependencies": { - "@cubejs-backend/linter": "1.3.30", + "@cubejs-backend/linter": "1.3.31", "@types/jest": "^29", "@types/node": "^20", "cargo-cp-artifact": "^0.1.9", @@ -44,8 +44,8 @@ "uuid": "^8.3.2" }, "dependencies": { - "@cubejs-backend/cubesql": "1.3.30", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/cubesql": "1.3.31", + "@cubejs-backend/shared": "1.3.31", "@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 1aaf89ef7c0f3..0b5f76f7a01c3 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/shared + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 4ce13a7ed7793..aad41173713f5 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.3.30", + "version": "1.3.31", "description": "Shared code for Cube.js backend packages", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", @@ -22,7 +22,7 @@ "author": "Cube Dev, Inc.", "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.30", + "@cubejs-backend/linter": "1.3.31", "@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 68da72d5d8063..ac9f6f3439a87 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/base-driver + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 2b5d4b999448b..65384ae8106fa 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.3.30", + "version": "1.3.31", "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.3.30", + "@cubejs-backend/shared": "1.3.31", "@google-cloud/storage": "^7.13.0" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.30", + "@cubejs-backend/linter": "1.3.31", "@types/jest": "^29", "@types/node": "^20", "jest": "^29", diff --git a/packages/cubejs-bigquery-driver/CHANGELOG.md b/packages/cubejs-bigquery-driver/CHANGELOG.md index 733c9cb548e71..0cee65b50d08f 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/bigquery-driver + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 336691bfe201c..48460e9a29192 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.3.30", + "version": "1.3.31", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -28,15 +28,15 @@ "main": "index.js", "types": "dist/src/index.d.ts", "dependencies": { - "@cubejs-backend/base-driver": "1.3.30", + "@cubejs-backend/base-driver": "1.3.31", "@cubejs-backend/dotenv": "^9.0.2", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/shared": "1.3.31", "@google-cloud/bigquery": "^7.7.0", "@google-cloud/storage": "^7.13.0", "ramda": "^0.27.2" }, "devDependencies": { - "@cubejs-backend/testing-shared": "1.3.30", + "@cubejs-backend/testing-shared": "1.3.31", "@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 e374f8e9e9d74..884a436593f47 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package cubejs-cli + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **Note:** Version bump only for package cubejs-cli diff --git a/packages/cubejs-cli/package.json b/packages/cubejs-cli/package.json index 382bda2856365..63fe2ab637ff6 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.3.30", + "version": "1.3.31", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -30,10 +30,10 @@ "LICENSE" ], "dependencies": { - "@cubejs-backend/cloud": "1.3.30", + "@cubejs-backend/cloud": "1.3.31", "@cubejs-backend/dotenv": "^9.0.2", - "@cubejs-backend/schema-compiler": "1.3.30", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/schema-compiler": "1.3.31", + "@cubejs-backend/shared": "1.3.31", "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.3.30", - "@cubejs-backend/server": "1.3.30", + "@cubejs-backend/linter": "1.3.31", + "@cubejs-backend/server": "1.3.31", "@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 6c043befc8661..15ce2d0a863cc 100644 --- a/packages/cubejs-clickhouse-driver/CHANGELOG.md +++ b/packages/cubejs-clickhouse-driver/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +### Bug Fixes + +- **clickhouse-driver:** Fix headers check ([#9746](https://github.com/cube-js/cube/issues/9746)) ([b643b0c](https://github.com/cube-js/cube/commit/b643b0cbf85e9090008e63f3fb516bcf302b4967)) + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 13a9f5107bc0e..ce2530853d9d5 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.3.30", + "version": "1.3.31", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -28,16 +28,16 @@ }, "dependencies": { "@clickhouse/client": "^1.7.0", - "@cubejs-backend/base-driver": "1.3.30", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/base-driver": "1.3.31", + "@cubejs-backend/shared": "1.3.31", "moment": "^2.24.0", "sqlstring": "^2.3.1", "uuid": "^8.3.2" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.30", - "@cubejs-backend/testing-shared": "1.3.30", + "@cubejs-backend/linter": "1.3.31", + "@cubejs-backend/testing-shared": "1.3.31", "@types/jest": "^29", "jest": "^29", "typescript": "~5.2.2" diff --git a/packages/cubejs-clickhouse-driver/src/ClickHouseDriver.ts b/packages/cubejs-clickhouse-driver/src/ClickHouseDriver.ts index 80570c8a21f3b..b5a783023553c 100644 --- a/packages/cubejs-clickhouse-driver/src/ClickHouseDriver.ts +++ b/packages/cubejs-clickhouse-driver/src/ClickHouseDriver.ts @@ -268,7 +268,9 @@ export class ClickHouseDriver extends BaseDriver implements DriverInterface { abort_signal: signal, }); - if (resultSet.response_headers['x-clickhouse-format'] !== format) { + // response_headers['x-clickhouse-format'] is optional, but if it exists, + // it should match the requested format. + if (resultSet.response_headers['x-clickhouse-format'] && resultSet.response_headers['x-clickhouse-format'] !== format) { throw new Error(`Unexpected x-clickhouse-format in response: expected ${format}, received ${resultSet.response_headers['x-clickhouse-format']}`); } diff --git a/packages/cubejs-client-core/CHANGELOG.md b/packages/cubejs-client-core/CHANGELOG.md index 307aebf964539..959e95dac6ef7 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-client/core + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **Note:** Version bump only for package @cubejs-client/core diff --git a/packages/cubejs-client-core/package.json b/packages/cubejs-client-core/package.json index 98499065db5f7..95a2b948500ed 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.3.30", + "version": "1.3.31", "engines": {}, "repository": { "type": "git", @@ -38,7 +38,7 @@ ], "license": "MIT", "devDependencies": { - "@cubejs-backend/linter": "1.3.30", + "@cubejs-backend/linter": "1.3.31", "@types/jest": "^29", "@types/moment-range": "^4.0.0", "@types/ramda": "^0.27.34", diff --git a/packages/cubejs-client-dx/CHANGELOG.md b/packages/cubejs-client-dx/CHANGELOG.md index b38c46354017f..25c7e109e04cf 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-client/dx + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 c10428297fa04..e8fa0e8506e83 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.3.30", + "version": "1.3.31", "engines": {}, "repository": { "type": "git", diff --git a/packages/cubejs-client-ngx/CHANGELOG.md b/packages/cubejs-client-ngx/CHANGELOG.md index ee6b21722058e..ae7a03fb7b69b 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-client/ngx + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 75848c1c7b0ba..9c5017efbb78a 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.3.30", + "version": "1.3.31", "author": "Cube Dev, Inc.", "engines": {}, "repository": { diff --git a/packages/cubejs-client-react/CHANGELOG.md b/packages/cubejs-client-react/CHANGELOG.md index e10a18c0cb4a5..40bfc87dfb0c1 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-client/react + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **Note:** Version bump only for package @cubejs-client/react diff --git a/packages/cubejs-client-react/package.json b/packages/cubejs-client-react/package.json index b6f93a81ed5c5..592e7101794f0 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.3.30", + "version": "1.3.31", "author": "Cube Dev, Inc.", "license": "MIT", "engines": {}, @@ -24,7 +24,7 @@ ], "dependencies": { "@babel/runtime": "^7.1.2", - "@cubejs-client/core": "1.3.30", + "@cubejs-client/core": "1.3.31", "core-js": "^3.6.5", "ramda": "^0.27.2" }, diff --git a/packages/cubejs-client-vue/CHANGELOG.md b/packages/cubejs-client-vue/CHANGELOG.md index 83e7f5fac9a6b..e26f9a12e1d0b 100644 --- a/packages/cubejs-client-vue/CHANGELOG.md +++ b/packages/cubejs-client-vue/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.3.31](https://github.com/cube-js/cube.js/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-client/vue + ## [1.3.30](https://github.com/cube-js/cube.js/compare/v1.3.29...v1.3.30) (2025-07-01) **Note:** Version bump only for package @cubejs-client/vue diff --git a/packages/cubejs-client-vue/package.json b/packages/cubejs-client-vue/package.json index 6dfa055e755c7..d455fecf4eb9c 100644 --- a/packages/cubejs-client-vue/package.json +++ b/packages/cubejs-client-vue/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-client/vue", - "version": "1.3.30", + "version": "1.3.31", "engines": {}, "repository": { "type": "git", @@ -28,7 +28,7 @@ "src" ], "dependencies": { - "@cubejs-client/core": "1.3.30", + "@cubejs-client/core": "1.3.31", "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 e12c114d9b1fb..0fd01d162d3f7 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.3.31](https://github.com/cube-js/cube.js/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-client/vue3 + ## [1.3.30](https://github.com/cube-js/cube.js/compare/v1.3.29...v1.3.30) (2025-07-01) **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 2789063d8adf9..20c61f782a2c7 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.3.30", + "version": "1.3.31", "engines": {}, "repository": { "type": "git", @@ -28,7 +28,7 @@ "src" ], "dependencies": { - "@cubejs-client/core": "1.3.30", + "@cubejs-client/core": "1.3.31", "@vue/compiler-sfc": "^3.0.11", "core-js": "^3.6.5", "flush-promises": "^1.0.2", diff --git a/packages/cubejs-client-ws-transport/CHANGELOG.md b/packages/cubejs-client-ws-transport/CHANGELOG.md index 06fbe2df49801..572eda95d2470 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-client/ws-transport + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 2923c4c402e0f..03fc0a4383481 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.3.30", + "version": "1.3.31", "engines": {}, "repository": { "type": "git", @@ -20,7 +20,7 @@ }, "dependencies": { "@babel/runtime": "^7.1.2", - "@cubejs-client/core": "1.3.30", + "@cubejs-client/core": "1.3.31", "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.3.30", + "@cubejs-backend/linter": "1.3.31", "@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 8b3bccb2645a1..c21229e85da61 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/crate-driver + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 bcac4640aa637..c1c3578057ebc 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.3.30", + "version": "1.3.31", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -28,14 +28,14 @@ "lint:fix": "eslint --fix src/* --ext .ts" }, "dependencies": { - "@cubejs-backend/postgres-driver": "1.3.30", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/postgres-driver": "1.3.31", + "@cubejs-backend/shared": "1.3.31", "pg": "^8.7.1" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.30", - "@cubejs-backend/testing-shared": "1.3.30", + "@cubejs-backend/linter": "1.3.31", + "@cubejs-backend/testing-shared": "1.3.31", "testcontainers": "^10.13.0", "typescript": "~5.2.2" }, diff --git a/packages/cubejs-cubestore-driver/CHANGELOG.md b/packages/cubejs-cubestore-driver/CHANGELOG.md index 44bdb37705bdc..c4b39a5e13802 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/cubestore-driver + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 304ba60962095..5d8d84f994600 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.3.30", + "version": "1.3.31", "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.3.30", - "@cubejs-backend/cubestore": "1.3.30", - "@cubejs-backend/native": "1.3.30", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/base-driver": "1.3.31", + "@cubejs-backend/cubestore": "1.3.31", + "@cubejs-backend/native": "1.3.31", + "@cubejs-backend/shared": "1.3.31", "csv-write-stream": "^2.0.0", "flatbuffers": "23.3.3", "fs-extra": "^9.1.0", @@ -41,7 +41,7 @@ "ws": "^7.4.3" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.30", + "@cubejs-backend/linter": "1.3.31", "@types/csv-write-stream": "^2.0.0", "@types/generic-pool": "^3.8.2", "@types/jest": "^29", diff --git a/packages/cubejs-databricks-jdbc-driver/CHANGELOG.md b/packages/cubejs-databricks-jdbc-driver/CHANGELOG.md index b0b1d78e5b9c7..be633d1af83fd 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/databricks-jdbc-driver + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 3b2fb28a9e61c..29d576524b830 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.3.30", + "version": "1.3.31", "license": "Apache-2.0", "repository": { "type": "git", @@ -30,17 +30,17 @@ "bin" ], "dependencies": { - "@cubejs-backend/base-driver": "1.3.30", - "@cubejs-backend/jdbc-driver": "1.3.30", - "@cubejs-backend/schema-compiler": "1.3.30", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/base-driver": "1.3.31", + "@cubejs-backend/jdbc-driver": "1.3.31", + "@cubejs-backend/schema-compiler": "1.3.31", + "@cubejs-backend/shared": "1.3.31", "node-fetch": "^2.6.1", "ramda": "^0.27.2", "source-map-support": "^0.5.19", "uuid": "^8.3.2" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.30", + "@cubejs-backend/linter": "1.3.31", "@types/generic-pool": "^3.8.2", "@types/jest": "^29", "@types/node": "^20", diff --git a/packages/cubejs-dbt-schema-extension/CHANGELOG.md b/packages/cubejs-dbt-schema-extension/CHANGELOG.md index 0c31e4f5fedde..918de48107cbc 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/dbt-schema-extension + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 2125f3a92584b..6ed89974470fb 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.3.30", + "version": "1.3.31", "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.3.30", + "@cubejs-backend/schema-compiler": "1.3.31", "fs-extra": "^9.1.0", "inflection": "^1.12.0", "node-fetch": "^2.6.1" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.30", - "@cubejs-backend/testing": "1.3.30", + "@cubejs-backend/linter": "1.3.31", + "@cubejs-backend/testing": "1.3.31", "@types/generic-pool": "^3.8.2", "@types/jest": "^29", "jest": "^29", diff --git a/packages/cubejs-docker/CHANGELOG.md b/packages/cubejs-docker/CHANGELOG.md index cd24e019851bd..1ded3a83ccf28 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/docker + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **Note:** Version bump only for package @cubejs-backend/docker diff --git a/packages/cubejs-docker/package.json b/packages/cubejs-docker/package.json index 87e8817237a9a..4e3f2bf225a47 100644 --- a/packages/cubejs-docker/package.json +++ b/packages/cubejs-docker/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-backend/docker", - "version": "1.3.30", + "version": "1.3.31", "description": "Cube.js In Docker (virtual package)", "author": "Cube Dev, Inc.", "license": "Apache-2.0", @@ -9,35 +9,35 @@ "node": "^14.0.0 || ^16.0.0 || >=17.0.0" }, "dependencies": { - "@cubejs-backend/athena-driver": "1.3.30", - "@cubejs-backend/bigquery-driver": "1.3.30", - "@cubejs-backend/clickhouse-driver": "1.3.30", - "@cubejs-backend/crate-driver": "1.3.30", - "@cubejs-backend/databricks-jdbc-driver": "1.3.30", - "@cubejs-backend/dbt-schema-extension": "1.3.30", - "@cubejs-backend/dremio-driver": "1.3.30", - "@cubejs-backend/druid-driver": "1.3.30", - "@cubejs-backend/duckdb-driver": "1.3.30", - "@cubejs-backend/elasticsearch-driver": "1.3.30", - "@cubejs-backend/firebolt-driver": "1.3.30", - "@cubejs-backend/hive-driver": "1.3.30", - "@cubejs-backend/ksql-driver": "1.3.30", - "@cubejs-backend/materialize-driver": "1.3.30", - "@cubejs-backend/mongobi-driver": "1.3.30", - "@cubejs-backend/mssql-driver": "1.3.30", - "@cubejs-backend/mysql-driver": "1.3.30", - "@cubejs-backend/oracle-driver": "1.3.30", - "@cubejs-backend/pinot-driver": "1.3.30", - "@cubejs-backend/postgres-driver": "1.3.30", - "@cubejs-backend/prestodb-driver": "1.3.30", - "@cubejs-backend/questdb-driver": "1.3.30", - "@cubejs-backend/redshift-driver": "1.3.30", - "@cubejs-backend/server": "1.3.30", - "@cubejs-backend/snowflake-driver": "1.3.30", - "@cubejs-backend/sqlite-driver": "1.3.30", - "@cubejs-backend/trino-driver": "1.3.30", - "@cubejs-backend/vertica-driver": "1.3.30", - "cubejs-cli": "1.3.30", + "@cubejs-backend/athena-driver": "1.3.31", + "@cubejs-backend/bigquery-driver": "1.3.31", + "@cubejs-backend/clickhouse-driver": "1.3.31", + "@cubejs-backend/crate-driver": "1.3.31", + "@cubejs-backend/databricks-jdbc-driver": "1.3.31", + "@cubejs-backend/dbt-schema-extension": "1.3.31", + "@cubejs-backend/dremio-driver": "1.3.31", + "@cubejs-backend/druid-driver": "1.3.31", + "@cubejs-backend/duckdb-driver": "1.3.31", + "@cubejs-backend/elasticsearch-driver": "1.3.31", + "@cubejs-backend/firebolt-driver": "1.3.31", + "@cubejs-backend/hive-driver": "1.3.31", + "@cubejs-backend/ksql-driver": "1.3.31", + "@cubejs-backend/materialize-driver": "1.3.31", + "@cubejs-backend/mongobi-driver": "1.3.31", + "@cubejs-backend/mssql-driver": "1.3.31", + "@cubejs-backend/mysql-driver": "1.3.31", + "@cubejs-backend/oracle-driver": "1.3.31", + "@cubejs-backend/pinot-driver": "1.3.31", + "@cubejs-backend/postgres-driver": "1.3.31", + "@cubejs-backend/prestodb-driver": "1.3.31", + "@cubejs-backend/questdb-driver": "1.3.31", + "@cubejs-backend/redshift-driver": "1.3.31", + "@cubejs-backend/server": "1.3.31", + "@cubejs-backend/snowflake-driver": "1.3.31", + "@cubejs-backend/sqlite-driver": "1.3.31", + "@cubejs-backend/trino-driver": "1.3.31", + "@cubejs-backend/vertica-driver": "1.3.31", + "cubejs-cli": "1.3.31", "typescript": "~5.2.2" }, "resolutions": { diff --git a/packages/cubejs-dremio-driver/CHANGELOG.md b/packages/cubejs-dremio-driver/CHANGELOG.md index 07c2ab0aadef4..ac76645ec172c 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/dremio-driver + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 f0438294c0c41..531630b87b051 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.3.30", + "version": "1.3.31", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -22,15 +22,15 @@ "lint:fix": "eslint driver/*.js" }, "dependencies": { - "@cubejs-backend/base-driver": "1.3.30", - "@cubejs-backend/schema-compiler": "1.3.30", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/base-driver": "1.3.31", + "@cubejs-backend/schema-compiler": "1.3.31", + "@cubejs-backend/shared": "1.3.31", "axios": "^1.8.3", "sqlstring": "^2.3.1" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.30", - "@cubejs-backend/testing-shared": "1.3.30", + "@cubejs-backend/linter": "1.3.31", + "@cubejs-backend/testing-shared": "1.3.31", "jest": "^29" }, "license": "Apache-2.0", diff --git a/packages/cubejs-druid-driver/CHANGELOG.md b/packages/cubejs-druid-driver/CHANGELOG.md index f5cb36f26b66a..0fa282ee0befe 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/druid-driver + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 355d1e6a9ff79..282935b2b530d 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.3.30", + "version": "1.3.31", "license": "Apache-2.0", "repository": { "type": "git", @@ -28,13 +28,13 @@ "dist/src/*" ], "dependencies": { - "@cubejs-backend/base-driver": "1.3.30", - "@cubejs-backend/schema-compiler": "1.3.30", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/base-driver": "1.3.31", + "@cubejs-backend/schema-compiler": "1.3.31", + "@cubejs-backend/shared": "1.3.31", "axios": "^1.8.3" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.30", + "@cubejs-backend/linter": "1.3.31", "@types/generic-pool": "^3.8.2", "@types/jest": "^29", "@types/node": "^20", diff --git a/packages/cubejs-duckdb-driver/CHANGELOG.md b/packages/cubejs-duckdb-driver/CHANGELOG.md index 53769e35e5712..9db23b0b89a1e 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/duckdb-driver + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 4ea7f5070e15f..678627695c60d 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.3.30", + "version": "1.3.31", "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.3.30", - "@cubejs-backend/schema-compiler": "1.3.30", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/base-driver": "1.3.31", + "@cubejs-backend/schema-compiler": "1.3.31", + "@cubejs-backend/shared": "1.3.31", "duckdb": "^1.3.1" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.30", - "@cubejs-backend/testing-shared": "1.3.30", + "@cubejs-backend/linter": "1.3.31", + "@cubejs-backend/testing-shared": "1.3.31", "@types/jest": "^29", "@types/node": "^20", "jest": "^29", diff --git a/packages/cubejs-elasticsearch-driver/CHANGELOG.md b/packages/cubejs-elasticsearch-driver/CHANGELOG.md index 1cb7fff48d3be..6b8067bb3d024 100644 --- a/packages/cubejs-elasticsearch-driver/CHANGELOG.md +++ b/packages/cubejs-elasticsearch-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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/elasticsearch-driver + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **Note:** Version bump only for package @cubejs-backend/elasticsearch-driver diff --git a/packages/cubejs-elasticsearch-driver/package.json b/packages/cubejs-elasticsearch-driver/package.json index c126e85468b89..7927bc3f7f7ab 100644 --- a/packages/cubejs-elasticsearch-driver/package.json +++ b/packages/cubejs-elasticsearch-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/elasticsearch-driver", "description": "Cube.js elasticsearch database driver", "author": "Cube Dev, Inc.", - "version": "1.3.30", + "version": "1.3.31", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -23,14 +23,14 @@ "driver" ], "dependencies": { - "@cubejs-backend/base-driver": "1.3.30", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/base-driver": "1.3.31", + "@cubejs-backend/shared": "1.3.31", "@elastic/elasticsearch": "7.12.0", "sqlstring": "^2.3.1" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.30", + "@cubejs-backend/linter": "1.3.31", "@types/jest": "^29", "jest": "^29", "testcontainers": "^10.10.4" diff --git a/packages/cubejs-firebolt-driver/CHANGELOG.md b/packages/cubejs-firebolt-driver/CHANGELOG.md index 582e2d55b81d0..eaef942c9b51d 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/firebolt-driver + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 80e8604e5d3e8..780097bee6de8 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.3.30", + "version": "1.3.31", "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.3.30", - "@cubejs-backend/schema-compiler": "1.3.30", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/base-driver": "1.3.31", + "@cubejs-backend/schema-compiler": "1.3.31", + "@cubejs-backend/shared": "1.3.31", "firebolt-sdk": "1.10.0" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.30", - "@cubejs-backend/testing-shared": "1.3.30", + "@cubejs-backend/linter": "1.3.31", + "@cubejs-backend/testing-shared": "1.3.31", "typescript": "~5.2.2" }, "publishConfig": { diff --git a/packages/cubejs-hive-driver/CHANGELOG.md b/packages/cubejs-hive-driver/CHANGELOG.md index 656ee6f48aa00..e303c6ac23251 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/hive-driver + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 8b72ca3e3f03d..e0556766ce180 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.3.30", + "version": "1.3.31", "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.3.30", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/base-driver": "1.3.31", + "@cubejs-backend/shared": "1.3.31", "generic-pool": "^3.8.2", "jshs2": "^0.4.4", "sasl-plain": "^0.1.0", @@ -28,7 +28,7 @@ }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.30" + "@cubejs-backend/linter": "1.3.31" }, "publishConfig": { "access": "public" diff --git a/packages/cubejs-jdbc-driver/CHANGELOG.md b/packages/cubejs-jdbc-driver/CHANGELOG.md index 915dbaf0306bf..05fd38ac36510 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/jdbc-driver + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 d697d6ccda1d0..ee884e099f392 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.3.30", + "version": "1.3.31", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -25,9 +25,9 @@ "index.js" ], "dependencies": { - "@cubejs-backend/base-driver": "1.3.30", + "@cubejs-backend/base-driver": "1.3.31", "@cubejs-backend/node-java-maven": "^0.1.3", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/shared": "1.3.31", "generic-pool": "^3.8.2", "sqlstring": "^2.3.0" }, @@ -43,7 +43,7 @@ "testEnvironment": "node" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.30", + "@cubejs-backend/linter": "1.3.31", "@types/generic-pool": "^3.8.2", "@types/node": "^20", "@types/sqlstring": "^2.3.0", diff --git a/packages/cubejs-ksql-driver/CHANGELOG.md b/packages/cubejs-ksql-driver/CHANGELOG.md index 151e4494dc204..038669f0955ce 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/ksql-driver + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 dfa5bd504fd81..4a493b4413db3 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.3.30", + "version": "1.3.31", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -25,9 +25,9 @@ "lint:fix": "eslint --fix src/* --ext .ts" }, "dependencies": { - "@cubejs-backend/base-driver": "1.3.30", - "@cubejs-backend/schema-compiler": "1.3.30", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/base-driver": "1.3.31", + "@cubejs-backend/schema-compiler": "1.3.31", + "@cubejs-backend/shared": "1.3.31", "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.3.30", + "@cubejs-backend/linter": "1.3.31", "typescript": "~5.2.2" } } diff --git a/packages/cubejs-linter/CHANGELOG.md b/packages/cubejs-linter/CHANGELOG.md index 473f2ad4f065a..208f1ab52ef6c 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/linter + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **Note:** Version bump only for package @cubejs-backend/linter diff --git a/packages/cubejs-linter/package.json b/packages/cubejs-linter/package.json index e58a745edc409..6fba9d0146cf3 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.3.30", + "version": "1.3.31", "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 9b6a65787fba8..d5c6d2da14072 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/materialize-driver + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 d09cb6db206f5..ba5feab4df84c 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.3.30", + "version": "1.3.31", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -27,17 +27,17 @@ "lint:fix": "eslint --fix src/* --ext .ts" }, "dependencies": { - "@cubejs-backend/base-driver": "1.3.30", - "@cubejs-backend/postgres-driver": "1.3.30", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/base-driver": "1.3.31", + "@cubejs-backend/postgres-driver": "1.3.31", + "@cubejs-backend/shared": "1.3.31", "@types/pg": "^8.6.0", "pg": "^8.6.0", "semver": "^7.6.3" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.30", - "@cubejs-backend/testing": "1.3.30", + "@cubejs-backend/linter": "1.3.31", + "@cubejs-backend/testing": "1.3.31", "typescript": "~5.2.2" }, "publishConfig": { diff --git a/packages/cubejs-mongobi-driver/CHANGELOG.md b/packages/cubejs-mongobi-driver/CHANGELOG.md index ae42dd718ad67..eed053c8609a9 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/mongobi-driver + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 21884db44608b..f6bbce842fb5d 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.3.30", + "version": "1.3.31", "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.3.30", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/base-driver": "1.3.31", + "@cubejs-backend/shared": "1.3.31", "@types/node": "^20", "generic-pool": "^3.8.2", "moment": "^2.29.1", @@ -39,7 +39,7 @@ "access": "public" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.30", + "@cubejs-backend/linter": "1.3.31", "@types/generic-pool": "^3.8.2", "testcontainers": "^10.13.0", "typescript": "~5.2.2" diff --git a/packages/cubejs-mssql-driver/CHANGELOG.md b/packages/cubejs-mssql-driver/CHANGELOG.md index 7bae44ba9281d..f15c67022382e 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/mssql-driver + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 74d965b44b85e..b9abd15faf42e 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.3.30", + "version": "1.3.31", "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.3.30", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/base-driver": "1.3.31", + "@cubejs-backend/shared": "1.3.31", "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 0ac0eb7b1a09a..4f8bdcb69b731 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/mysql-aurora-serverless-driver + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 f14936e527651..93c1d7f79edad 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.3.30", + "version": "1.3.31", "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.3.30", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/base-driver": "1.3.31", + "@cubejs-backend/shared": "1.3.31", "@types/mysql": "^2.15.15", "aws-sdk": "^2.787.0", "data-api-client": "^1.1.0" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.30", + "@cubejs-backend/linter": "1.3.31", "@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 71fc69d3674ec..790e7d9d3b404 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/mysql-driver + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 cbc73e7407982..5b194c18b55c4 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.3.30", + "version": "1.3.31", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -27,14 +27,14 @@ "lint:fix": "eslint --fix src/* test/* --ext .ts,.js" }, "dependencies": { - "@cubejs-backend/base-driver": "1.3.30", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/base-driver": "1.3.31", + "@cubejs-backend/shared": "1.3.31", "generic-pool": "^3.8.2", "mysql": "^2.18.1" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.30", - "@cubejs-backend/testing-shared": "1.3.30", + "@cubejs-backend/linter": "1.3.31", + "@cubejs-backend/testing-shared": "1.3.31", "@types/generic-pool": "^3.8.2", "@types/jest": "^29", "@types/mysql": "^2.15.21", diff --git a/packages/cubejs-oracle-driver/CHANGELOG.md b/packages/cubejs-oracle-driver/CHANGELOG.md index bc5bbf2c76474..5f046a707c513 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/oracle-driver + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 f256eeb73f0b0..d517c519a74b6 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.3.30", + "version": "1.3.31", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -13,7 +13,7 @@ }, "main": "driver/OracleDriver.js", "dependencies": { - "@cubejs-backend/base-driver": "1.3.30", + "@cubejs-backend/base-driver": "1.3.31", "ramda": "^0.27.0" }, "optionalDependencies": { diff --git a/packages/cubejs-pinot-driver/CHANGELOG.md b/packages/cubejs-pinot-driver/CHANGELOG.md index bb979c28d5db3..7f95b7a398038 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/pinot-driver + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 205c3282c6615..af8584d6bc408 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.3.30", + "version": "1.3.31", "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.3.30", - "@cubejs-backend/schema-compiler": "1.3.30", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/base-driver": "1.3.31", + "@cubejs-backend/schema-compiler": "1.3.31", + "@cubejs-backend/shared": "1.3.31", "node-fetch": "^2.6.1", "ramda": "^0.27.2", "sqlstring": "^2.3.3" @@ -39,7 +39,7 @@ "access": "public" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.30", + "@cubejs-backend/linter": "1.3.31", "@types/jest": "^29", "jest": "^29", "should": "^13.2.3", diff --git a/packages/cubejs-playground/CHANGELOG.md b/packages/cubejs-playground/CHANGELOG.md index ab3e2ba380cd0..e21b938158015 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-client/playground + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **Note:** Version bump only for package @cubejs-client/playground diff --git a/packages/cubejs-playground/package.json b/packages/cubejs-playground/package.json index 235a3c5978a00..9dda6ca9eca46 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.3.30", + "version": "1.3.31", "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.3.30", - "@cubejs-client/react": "1.3.30", + "@cubejs-client/core": "1.3.31", + "@cubejs-client/react": "1.3.31", "@types/flexsearch": "^0.7.3", "@types/node": "^20", "@types/react": "^18.3.4", diff --git a/packages/cubejs-postgres-driver/CHANGELOG.md b/packages/cubejs-postgres-driver/CHANGELOG.md index def86e9e57c88..f3c950fd3d04a 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/postgres-driver + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 a0442acfd961b..fa19f9f25b392 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.3.30", + "version": "1.3.31", "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.3.30", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/base-driver": "1.3.31", + "@cubejs-backend/shared": "1.3.31", "@types/pg": "^8.6.0", "@types/pg-query-stream": "^1.0.3", "moment": "^2.24.0", @@ -37,8 +37,8 @@ }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.30", - "@cubejs-backend/testing-shared": "1.3.30", + "@cubejs-backend/linter": "1.3.31", + "@cubejs-backend/testing-shared": "1.3.31", "testcontainers": "^10.13.0", "typescript": "~5.2.2" }, diff --git a/packages/cubejs-prestodb-driver/CHANGELOG.md b/packages/cubejs-prestodb-driver/CHANGELOG.md index f3fbe79b5ea88..7ae49da33a320 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/prestodb-driver + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 aaacd19650ec9..e45422650cfe1 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.3.30", + "version": "1.3.31", "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.3.30", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/base-driver": "1.3.31", + "@cubejs-backend/shared": "1.3.31", "presto-client": "^1.1.0", "ramda": "^0.27.0", "sqlstring": "^2.3.1" @@ -38,7 +38,7 @@ "access": "public" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.30", + "@cubejs-backend/linter": "1.3.31", "@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 d448c2d4f521b..9a0cb7213921a 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/query-orchestrator + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 877f084f9cd08..749c8183b0788 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.3.30", + "version": "1.3.31", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -29,16 +29,16 @@ "dist/src/*" ], "dependencies": { - "@cubejs-backend/base-driver": "1.3.30", - "@cubejs-backend/cubestore-driver": "1.3.30", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/base-driver": "1.3.31", + "@cubejs-backend/cubestore-driver": "1.3.31", + "@cubejs-backend/shared": "1.3.31", "csv-write-stream": "^2.0.0", "generic-pool": "^3.8.2", "lru-cache": "^11.1.0", "ramda": "^0.27.2" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.30", + "@cubejs-backend/linter": "1.3.31", "@types/generic-pool": "^3.8.2", "@types/jest": "^29", "@types/node": "^20", diff --git a/packages/cubejs-questdb-driver/CHANGELOG.md b/packages/cubejs-questdb-driver/CHANGELOG.md index 81a2d82b8b060..80f75872d9189 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/questdb-driver + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 856f9b1e6ef9c..5f1c54976f721 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.3.30", + "version": "1.3.31", "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.3.30", - "@cubejs-backend/schema-compiler": "1.3.30", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/base-driver": "1.3.31", + "@cubejs-backend/schema-compiler": "1.3.31", + "@cubejs-backend/shared": "1.3.31", "@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.3.30", - "@cubejs-backend/testing-shared": "1.3.30", + "@cubejs-backend/linter": "1.3.31", + "@cubejs-backend/testing-shared": "1.3.31", "testcontainers": "^10.13.0", "typescript": "~5.2.2" }, diff --git a/packages/cubejs-redshift-driver/CHANGELOG.md b/packages/cubejs-redshift-driver/CHANGELOG.md index 2c26f5ac1c7ff..9faa3b6c77ea0 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/redshift-driver + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 e2baa332db2a9..e99d2c3f7902b 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.3.30", + "version": "1.3.31", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -25,13 +25,13 @@ "lint:fix": "eslint --fix src/* --ext .ts" }, "dependencies": { - "@cubejs-backend/base-driver": "1.3.30", - "@cubejs-backend/postgres-driver": "1.3.30", - "@cubejs-backend/shared": "1.3.30" + "@cubejs-backend/base-driver": "1.3.31", + "@cubejs-backend/postgres-driver": "1.3.31", + "@cubejs-backend/shared": "1.3.31" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.30", + "@cubejs-backend/linter": "1.3.31", "typescript": "~5.2.2" }, "publishConfig": { diff --git a/packages/cubejs-schema-compiler/CHANGELOG.md b/packages/cubejs-schema-compiler/CHANGELOG.md index 562b21f333389..7316a4492f734 100644 --- a/packages/cubejs-schema-compiler/CHANGELOG.md +++ b/packages/cubejs-schema-compiler/CHANGELOG.md @@ -3,6 +3,16 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +### Bug Fixes + +- **schema-compiler:** Fix date filter truncation for rolling window queries ([#9743](https://github.com/cube-js/cube/issues/9743)) ([f045af9](https://github.com/cube-js/cube/commit/f045af91086dafad80fe363a4ddba6f6411892f7)) + +### Features + +- **tesseract:** Support custom granularities in to_date rolling windows ([#9739](https://github.com/cube-js/cube/issues/9739)) ([a8b611c](https://github.com/cube-js/cube/commit/a8b611c877dfa87edc14652af6d3ebeafc071bd2)) + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **Note:** Version bump only for package @cubejs-backend/schema-compiler diff --git a/packages/cubejs-schema-compiler/package.json b/packages/cubejs-schema-compiler/package.json index 49a02bb22558b..97f1e0b920944 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.3.30", + "version": "1.3.31", "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.3.30", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/native": "1.3.31", + "@cubejs-backend/shared": "1.3.31", "antlr4ts": "0.5.0-alpha.4", "camelcase": "^6.2.0", "cron-parser": "^4.9.0", @@ -60,8 +60,8 @@ }, "devDependencies": { "@clickhouse/client": "^1.7.0", - "@cubejs-backend/linter": "1.3.30", - "@cubejs-backend/query-orchestrator": "1.3.30", + "@cubejs-backend/linter": "1.3.31", + "@cubejs-backend/query-orchestrator": "1.3.31", "@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/src/adapter/BaseQuery.js b/packages/cubejs-schema-compiler/src/adapter/BaseQuery.js index 6c50fc2398971..3b2ec023ed845 100644 --- a/packages/cubejs-schema-compiler/src/adapter/BaseQuery.js +++ b/packages/cubejs-schema-compiler/src/adapter/BaseQuery.js @@ -1037,23 +1037,48 @@ export class BaseQuery { } rollingWindowToDateJoinCondition(granularity) { - return this.timeDimensions - .filter(td => td.granularity) - .map( - d => [ - d, - (dateFrom, dateTo, dateField, _dimensionDateFrom, _dimensionDateTo, _isFromStartToEnd) => `${dateField} >= ${this.timeGroupedColumn(granularity, dateFrom)} AND ${dateField} <= ${dateTo}` - ] - ); + return Object.values( + this.timeDimensions.reduce((acc, td) => { + const key = td.dimension; + + if (!acc[key]) { + acc[key] = td; + } + + if (!acc[key].granularity && td.granularity) { + acc[key] = td; + } + + return acc; + }, {}) + ).map( + d => [ + d, + (dateFrom, dateTo, dateField, _dimensionDateFrom, _dimensionDateTo, _isFromStartToEnd) => `${dateField} >= ${this.timeGroupedColumn(granularity, dateFrom)} AND ${dateField} <= ${dateTo}` + ] + ); } rollingWindowDateJoinCondition(trailingInterval, leadingInterval, offset) { offset = offset || 'end'; - return this.timeDimensions - .filter(td => td.granularity) + return Object.values( + this.timeDimensions.reduce((acc, td) => { + const key = td.dimension; + + if (!acc[key]) { + acc[key] = td; + } + + if (!acc[key].granularity && td.granularity) { + acc[key] = td; + } + + return acc; + }, {}) + ) .map( d => [d, (dateFrom, dateTo, dateField, _dimensionDateFrom, _dimensionDateTo, isFromStartToEnd) => { - // dateFrom based window + // dateFrom based window const conditions = []; if (trailingInterval !== 'unbounded') { const startDate = isFromStartToEnd || offset === 'start' ? dateFrom : dateTo; @@ -3665,7 +3690,6 @@ export class BaseQuery { * @param {import('./Granularity').Granularity} granularity * @return {string} */ - // eslint-disable-next-line @typescript-eslint/no-unused-vars dimensionTimeGroupedColumn(dimension, granularity) { let dtDate; diff --git a/packages/cubejs-schema-compiler/src/adapter/BigqueryQuery.ts b/packages/cubejs-schema-compiler/src/adapter/BigqueryQuery.ts index 574a8bb7ddc11..bd615ee791ca5 100644 --- a/packages/cubejs-schema-compiler/src/adapter/BigqueryQuery.ts +++ b/packages/cubejs-schema-compiler/src/adapter/BigqueryQuery.ts @@ -216,14 +216,26 @@ export class BigqueryQuery extends BaseQuery { * joining conditions (note timeStampCast) */ public override rollingWindowToDateJoinCondition(granularity) { - return this.timeDimensions - .filter(td => td.granularity) - .map( - d => [ - d, - (dateFrom: string, dateTo: string, dateField: string, _dimensionDateFrom: string, _dimensionDateTo: string, _isFromStartToEnd: boolean) => `${dateField} >= ${this.timeGroupedColumn(granularity, dateFrom)} AND ${dateField} <= ${this.timeStampCast(dateTo)}` - ] - ); + return Object.values( + this.timeDimensions.reduce((acc, td) => { + const key = td.dimension; + + if (!acc[key]) { + acc[key] = td; + } + + if (!acc[key].granularity && td.granularity) { + acc[key] = td; + } + + return acc; + }, {}) + ).map( + d => [ + d, + (dateFrom: string, dateTo: string, dateField: string, _dimensionDateFrom: string, _dimensionDateTo: string, _isFromStartToEnd: boolean) => `${dateField} >= ${this.timeGroupedColumn(granularity, dateFrom)} AND ${dateField} <= ${this.timeStampCast(dateTo)}` + ] + ); } /** @@ -233,8 +245,21 @@ export class BigqueryQuery extends BaseQuery { */ public override rollingWindowDateJoinCondition(trailingInterval, leadingInterval, offset) { offset = offset || 'end'; - return this.timeDimensions - .filter(td => td.granularity) + return Object.values( + this.timeDimensions.reduce((acc, td) => { + const key = td.dimension; + + if (!acc[key]) { + acc[key] = td; + } + + if (!acc[key].granularity && td.granularity) { + acc[key] = td; + } + + return acc; + }, {}) + ) .map( d => [d, (dateFrom: string, dateTo: string, dateField: string, _dimensionDateFrom: string, _dimensionDateTo: string, isFromStartToEnd: boolean) => { // dateFrom based window diff --git a/packages/cubejs-schema-compiler/test/integration/postgres/sql-generation.test.ts b/packages/cubejs-schema-compiler/test/integration/postgres/sql-generation.test.ts index 088f83ed341de..c3c43f7e60dd5 100644 --- a/packages/cubejs-schema-compiler/test/integration/postgres/sql-generation.test.ts +++ b/packages/cubejs-schema-compiler/test/integration/postgres/sql-generation.test.ts @@ -144,6 +144,13 @@ describe('SQL Generation', () => { granularity: 'week' } }, + countRollingThreeDaysToDate: { + type: 'count', + rollingWindow: { + type: 'to_date', + granularity: 'three_days' + } + }, revenue_qtd: { type: 'sum', sql: 'amount', @@ -1063,6 +1070,84 @@ SELECT 1 AS revenue, cast('2024-01-01' AS timestamp) as time UNION ALL } ])); + it('rolling window with one time dimension with granularity', async () => runQueryTest({ + measures: [ + 'visitors.countRollingWeekToDate' + ], + timeDimensions: [ + { + dimension: 'visitors.created_at', + granularity: 'day', + dateRange: ['2017-01-01', '2017-01-10'] + } + ], + order: [{ + id: 'visitors.created_at' + }], + timezone: 'America/Los_Angeles' + }, [ + { + visitors__count_rolling_week_to_date: null, + visitors__created_at_day: '2017-01-01T00:00:00.000Z', + }, + { + visitors__count_rolling_week_to_date: '1', + visitors__created_at_day: '2017-01-02T00:00:00.000Z', + }, + { + visitors__count_rolling_week_to_date: '1', + visitors__created_at_day: '2017-01-03T00:00:00.000Z', + }, + { + visitors__count_rolling_week_to_date: '2', + visitors__created_at_day: '2017-01-04T00:00:00.000Z', + }, + { + visitors__count_rolling_week_to_date: '3', + visitors__created_at_day: '2017-01-05T00:00:00.000Z', + }, + { + visitors__count_rolling_week_to_date: '5', + visitors__created_at_day: '2017-01-06T00:00:00.000Z', + }, + { + visitors__count_rolling_week_to_date: '5', + visitors__created_at_day: '2017-01-07T00:00:00.000Z', + }, + { + visitors__count_rolling_week_to_date: '5', + visitors__created_at_day: '2017-01-08T00:00:00.000Z', + }, + { + visitors__count_rolling_week_to_date: null, + visitors__created_at_day: '2017-01-09T00:00:00.000Z', + }, + { + visitors__count_rolling_week_to_date: null, + visitors__created_at_day: '2017-01-10T00:00:00.000Z', + }, + ])); + + it('rolling window with one time dimension without granularity', async () => runQueryTest({ + measures: [ + 'visitors.countRollingWeekToDate' + ], + timeDimensions: [ + { + dimension: 'visitors.created_at', + dateRange: ['2017-01-01', '2017-01-10'] + } + ], + order: [{ + id: 'visitors.created_at' + }], + timezone: 'America/Los_Angeles' + }, [ + { + visitors__count_rolling_week_to_date: '5', + } + ])); + it('rolling window with two time dimension granularities', async () => runQueryTest({ measures: [ 'visitors.countRollingWeekToDate' @@ -1210,6 +1295,149 @@ SELECT 1 AS revenue, cast('2024-01-01' AS timestamp) as time UNION ALL } ])); + if (getEnv('nativeSqlPlanner')) { + it('custom granularity rolling window to_date with one time dimension with regular granularity', async () => runQueryTest({ + measures: [ + 'visitors.countRollingThreeDaysToDate' + ], + timeDimensions: [ + { + dimension: 'visitors.created_at', + granularity: 'day', + dateRange: ['2017-01-01', '2017-01-10'] + } + ], + order: [{ + id: 'visitors.created_at' + }], + timezone: 'America/Los_Angeles' + }, [ + { + visitors__count_rolling_three_days_to_date: null, + visitors__created_at_day: '2017-01-01T00:00:00.000Z', + }, + { + visitors__count_rolling_three_days_to_date: '1', + visitors__created_at_day: '2017-01-02T00:00:00.000Z', + }, + { + visitors__count_rolling_three_days_to_date: '1', + visitors__created_at_day: '2017-01-03T00:00:00.000Z', + }, + { + visitors__count_rolling_three_days_to_date: '1', + visitors__created_at_day: '2017-01-04T00:00:00.000Z', + }, + { + visitors__count_rolling_three_days_to_date: '2', + visitors__created_at_day: '2017-01-05T00:00:00.000Z', + }, + { + visitors__count_rolling_three_days_to_date: '4', + visitors__created_at_day: '2017-01-06T00:00:00.000Z', + }, + { + visitors__count_rolling_three_days_to_date: null, + visitors__created_at_day: '2017-01-07T00:00:00.000Z', + }, + { + visitors__count_rolling_three_days_to_date: null, + visitors__created_at_day: '2017-01-08T00:00:00.000Z', + }, + { + visitors__count_rolling_three_days_to_date: null, + visitors__created_at_day: '2017-01-09T00:00:00.000Z', + }, + { + visitors__count_rolling_three_days_to_date: null, + visitors__created_at_day: '2017-01-10T00:00:00.000Z', + }, + ])); + } else { + it.skip('NO_BASE_QUERY_SUPPORT: custom granularity rolling window to_date with one time dimension with regular granularity', () => { + // Skipping because it works only in Tesseract + }); + } + + if (getEnv('nativeSqlPlanner')) { + it('custom granularity rolling window to_date with two time dimension granularities one custom one regular', async () => runQueryTest({ + measures: [ + 'visitors.countRollingThreeDaysToDate' + ], + timeDimensions: [ + { + dimension: 'visitors.created_at', + granularity: 'three_days', + dateRange: ['2017-01-01', '2017-01-10'] + }, + { + dimension: 'visitors.created_at', + granularity: 'day', + dateRange: ['2017-01-01', '2017-01-10'] + } + ], + order: [{ + id: 'visitors.created_at' + }], + timezone: 'America/Los_Angeles' + }, [ + { + visitors__count_rolling_three_days_to_date: null, + visitors__created_at_day: '2017-01-01T00:00:00.000Z', + visitors__created_at_three_days: '2017-01-01T00:00:00.000Z', + }, + { + visitors__count_rolling_three_days_to_date: '1', + visitors__created_at_day: '2017-01-02T00:00:00.000Z', + visitors__created_at_three_days: '2017-01-01T00:00:00.000Z', + }, + { + visitors__count_rolling_three_days_to_date: '1', + visitors__created_at_day: '2017-01-03T00:00:00.000Z', + visitors__created_at_three_days: '2017-01-01T00:00:00.000Z', + }, + { + visitors__count_rolling_three_days_to_date: '1', + visitors__created_at_day: '2017-01-04T00:00:00.000Z', + visitors__created_at_three_days: '2017-01-04T00:00:00.000Z', + }, + { + visitors__count_rolling_three_days_to_date: '2', + visitors__created_at_day: '2017-01-05T00:00:00.000Z', + visitors__created_at_three_days: '2017-01-04T00:00:00.000Z', + }, + { + visitors__count_rolling_three_days_to_date: '4', + visitors__created_at_day: '2017-01-06T00:00:00.000Z', + visitors__created_at_three_days: '2017-01-04T00:00:00.000Z', + }, + { + visitors__count_rolling_three_days_to_date: null, + visitors__created_at_day: '2017-01-07T00:00:00.000Z', + visitors__created_at_three_days: '2017-01-07T00:00:00.000Z', + }, + { + visitors__count_rolling_three_days_to_date: null, + visitors__created_at_day: '2017-01-08T00:00:00.000Z', + visitors__created_at_three_days: '2017-01-07T00:00:00.000Z', + }, + { + visitors__count_rolling_three_days_to_date: null, + visitors__created_at_day: '2017-01-09T00:00:00.000Z', + visitors__created_at_three_days: '2017-01-07T00:00:00.000Z', + }, + { + visitors__count_rolling_three_days_to_date: null, + visitors__created_at_day: '2017-01-10T00:00:00.000Z', + visitors__created_at_three_days: '2017-01-10T00:00:00.000Z', + }, + ])); + } else { + it.skip('NO_BASE_QUERY_SUPPORT: custom granularity rolling window to_date with two time dimension granularities one custom one regular', () => { + // Skipping because it works only in Tesseract + }); + } + it('rolling window with same td with and without granularity', async () => runQueryTest({ measures: [ 'visitors.countRollingWeekToDate' diff --git a/packages/cubejs-server-core/CHANGELOG.md b/packages/cubejs-server-core/CHANGELOG.md index 099f8026f6304..c292dae34c474 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/server-core + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 371143bb2bb72..9c36b847b6e75 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.3.30", + "version": "1.3.31", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -29,14 +29,14 @@ "unit": "jest --runInBand --forceExit --coverage dist/test" }, "dependencies": { - "@cubejs-backend/api-gateway": "1.3.30", - "@cubejs-backend/cloud": "1.3.30", + "@cubejs-backend/api-gateway": "1.3.31", + "@cubejs-backend/cloud": "1.3.31", "@cubejs-backend/dotenv": "^9.0.2", - "@cubejs-backend/native": "1.3.30", - "@cubejs-backend/query-orchestrator": "1.3.30", - "@cubejs-backend/schema-compiler": "1.3.30", - "@cubejs-backend/shared": "1.3.30", - "@cubejs-backend/templates": "1.3.30", + "@cubejs-backend/native": "1.3.31", + "@cubejs-backend/query-orchestrator": "1.3.31", + "@cubejs-backend/schema-compiler": "1.3.31", + "@cubejs-backend/shared": "1.3.31", + "@cubejs-backend/templates": "1.3.31", "codesandbox-import-utils": "^2.1.12", "cross-spawn": "^7.0.1", "fs-extra": "^8.1.0", @@ -59,9 +59,9 @@ "ws": "^7.5.3" }, "devDependencies": { - "@cubejs-backend/cubestore-driver": "1.3.30", - "@cubejs-backend/linter": "1.3.30", - "@cubejs-client/playground": "1.3.30", + "@cubejs-backend/cubestore-driver": "1.3.31", + "@cubejs-backend/linter": "1.3.31", + "@cubejs-client/playground": "1.3.31", "@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 bd5808cad5a79..a065a6c303d7e 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/server + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **Note:** Version bump only for package @cubejs-backend/server diff --git a/packages/cubejs-server/package.json b/packages/cubejs-server/package.json index bcdaa8039ea99..b34ee64ac3125 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.3.30", + "version": "1.3.31", "types": "index.d.ts", "repository": { "type": "git", @@ -40,11 +40,11 @@ "jest:shapshot": "jest --updateSnapshot test" }, "dependencies": { - "@cubejs-backend/cubestore-driver": "1.3.30", + "@cubejs-backend/cubestore-driver": "1.3.31", "@cubejs-backend/dotenv": "^9.0.2", - "@cubejs-backend/native": "1.3.30", - "@cubejs-backend/server-core": "1.3.30", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/native": "1.3.31", + "@cubejs-backend/server-core": "1.3.31", + "@cubejs-backend/shared": "1.3.31", "@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.3.30", - "@cubejs-backend/query-orchestrator": "1.3.30", + "@cubejs-backend/linter": "1.3.31", + "@cubejs-backend/query-orchestrator": "1.3.31", "@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 7dab221c0da99..268080e9050f2 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/snowflake-driver + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 c92aaba109f8a..06a4be5678363 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.3.30", + "version": "1.3.31", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -25,8 +25,8 @@ "lint:fix": "eslint --fix src/* --ext .ts" }, "dependencies": { - "@cubejs-backend/base-driver": "1.3.30", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/base-driver": "1.3.31", + "@cubejs-backend/shared": "1.3.31", "date-fns-timezone": "^0.1.4", "snowflake-sdk": "^2.0.3" }, @@ -38,7 +38,7 @@ "extends": "../cubejs-linter" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.30", + "@cubejs-backend/linter": "1.3.31", "typescript": "~5.2.2" } } diff --git a/packages/cubejs-sqlite-driver/CHANGELOG.md b/packages/cubejs-sqlite-driver/CHANGELOG.md index 846c932fd36f5..b557147e7e05d 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/sqlite-driver + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 c6e48ad59cfb2..d19588b831808 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.3.30", + "version": "1.3.31", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -17,13 +17,13 @@ "lint": "eslint **/*.js" }, "dependencies": { - "@cubejs-backend/base-driver": "1.3.30", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/base-driver": "1.3.31", + "@cubejs-backend/shared": "1.3.31", "sqlite3": "^5.1.7" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.30" + "@cubejs-backend/linter": "1.3.31" }, "publishConfig": { "access": "public" diff --git a/packages/cubejs-templates/CHANGELOG.md b/packages/cubejs-templates/CHANGELOG.md index 5c90cf4bd86ad..c03c5cdf72640 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/templates + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **Note:** Version bump only for package @cubejs-backend/templates diff --git a/packages/cubejs-templates/package.json b/packages/cubejs-templates/package.json index 2050ce35cac9c..bb54b49a2ff01 100644 --- a/packages/cubejs-templates/package.json +++ b/packages/cubejs-templates/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-backend/templates", - "version": "1.3.30", + "version": "1.3.31", "description": "Cube.js Templates helpers", "author": "Cube Dev, Inc.", "license": "Apache-2.0", @@ -26,7 +26,7 @@ "extends": "../cubejs-linter" }, "dependencies": { - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/shared": "1.3.31", "cross-spawn": "^7.0.3", "decompress": "^4.2.1", "decompress-targz": "^4.1.1", @@ -36,7 +36,7 @@ "source-map-support": "^0.5.19" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.30", + "@cubejs-backend/linter": "1.3.31", "typescript": "~5.2.2" } } diff --git a/packages/cubejs-testing-drivers/CHANGELOG.md b/packages/cubejs-testing-drivers/CHANGELOG.md index 0797e92434fdc..1b076fe4b881b 100644 --- a/packages/cubejs-testing-drivers/CHANGELOG.md +++ b/packages/cubejs-testing-drivers/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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +### Bug Fixes + +- **schema-compiler:** Fix date filter truncation for rolling window queries ([#9743](https://github.com/cube-js/cube/issues/9743)) ([f045af9](https://github.com/cube-js/cube/commit/f045af91086dafad80fe363a4ddba6f6411892f7)) + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 879a55a38ed66..99ffa547486b1 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.3.30", + "version": "1.3.31", "description": "Cube.js drivers test suite", "author": "Cube Dev, Inc.", "license": "MIT", @@ -66,24 +66,24 @@ "dist/src" ], "dependencies": { - "@cubejs-backend/athena-driver": "1.3.30", - "@cubejs-backend/base-driver": "1.3.30", - "@cubejs-backend/bigquery-driver": "1.3.30", - "@cubejs-backend/clickhouse-driver": "1.3.30", - "@cubejs-backend/cubestore-driver": "1.3.30", - "@cubejs-backend/databricks-jdbc-driver": "1.3.30", + "@cubejs-backend/athena-driver": "1.3.31", + "@cubejs-backend/base-driver": "1.3.31", + "@cubejs-backend/bigquery-driver": "1.3.31", + "@cubejs-backend/clickhouse-driver": "1.3.31", + "@cubejs-backend/cubestore-driver": "1.3.31", + "@cubejs-backend/databricks-jdbc-driver": "1.3.31", "@cubejs-backend/dotenv": "^9.0.2", - "@cubejs-backend/linter": "1.3.30", - "@cubejs-backend/mssql-driver": "1.3.30", - "@cubejs-backend/mysql-driver": "1.3.30", - "@cubejs-backend/postgres-driver": "1.3.30", - "@cubejs-backend/query-orchestrator": "1.3.30", - "@cubejs-backend/server-core": "1.3.30", - "@cubejs-backend/shared": "1.3.30", - "@cubejs-backend/snowflake-driver": "1.3.30", - "@cubejs-backend/testing-shared": "1.3.30", - "@cubejs-client/core": "1.3.30", - "@cubejs-client/ws-transport": "1.3.30", + "@cubejs-backend/linter": "1.3.31", + "@cubejs-backend/mssql-driver": "1.3.31", + "@cubejs-backend/mysql-driver": "1.3.31", + "@cubejs-backend/postgres-driver": "1.3.31", + "@cubejs-backend/query-orchestrator": "1.3.31", + "@cubejs-backend/server-core": "1.3.31", + "@cubejs-backend/shared": "1.3.31", + "@cubejs-backend/snowflake-driver": "1.3.31", + "@cubejs-backend/testing-shared": "1.3.31", + "@cubejs-client/core": "1.3.31", + "@cubejs-client/ws-transport": "1.3.31", "@jest/globals": "^29", "@types/jest": "^29", "@types/node": "^20", diff --git a/packages/cubejs-testing-drivers/test/__snapshots__/athena-export-bucket-s3-full.test.ts.snap b/packages/cubejs-testing-drivers/test/__snapshots__/athena-export-bucket-s3-full.test.ts.snap index e476188d809e5..0386e57ffa1d1 100644 --- a/packages/cubejs-testing-drivers/test/__snapshots__/athena-export-bucket-s3-full.test.ts.snap +++ b/packages/cubejs-testing-drivers/test/__snapshots__/athena-export-bucket-s3-full.test.ts.snap @@ -4479,7 +4479,7 @@ Array [ exports[`Queries with the @cubejs-backend/athena-driver querying BigECommerce: rolling window YTD without granularity 1`] = ` Array [ Object { - "BigECommerce.rollingCountYTD": "44", + "BigECommerce.rollingCountYTD": "3", }, ] `; diff --git a/packages/cubejs-testing-drivers/test/__snapshots__/bigquery-export-bucket-gcs-full.test.ts.snap b/packages/cubejs-testing-drivers/test/__snapshots__/bigquery-export-bucket-gcs-full.test.ts.snap index 6151311383e79..0511af1464010 100644 --- a/packages/cubejs-testing-drivers/test/__snapshots__/bigquery-export-bucket-gcs-full.test.ts.snap +++ b/packages/cubejs-testing-drivers/test/__snapshots__/bigquery-export-bucket-gcs-full.test.ts.snap @@ -8149,7 +8149,7 @@ Array [ exports[`Queries with the @cubejs-backend/bigquery-driver querying BigECommerce: rolling window YTD without granularity 1`] = ` Array [ Object { - "BigECommerce.rollingCountYTD": 44, + "BigECommerce.rollingCountYTD": 3, }, ] `; diff --git a/packages/cubejs-testing-drivers/test/__snapshots__/clickhouse-export-bucket-s3-full.test.ts.snap b/packages/cubejs-testing-drivers/test/__snapshots__/clickhouse-export-bucket-s3-full.test.ts.snap index 46d25c66d5c8e..fe1568c9aacb4 100644 --- a/packages/cubejs-testing-drivers/test/__snapshots__/clickhouse-export-bucket-s3-full.test.ts.snap +++ b/packages/cubejs-testing-drivers/test/__snapshots__/clickhouse-export-bucket-s3-full.test.ts.snap @@ -4680,7 +4680,7 @@ Array [ exports[`Queries with the @cubejs-backend/clickhouse-driver export-bucket-s3 querying BigECommerce: rolling window YTD without granularity 1`] = ` Array [ Object { - "BigECommerce.rollingCountYTD": "44", + "BigECommerce.rollingCountYTD": "3", }, ] `; diff --git a/packages/cubejs-testing-drivers/test/__snapshots__/clickhouse-export-bucket-s3-prefix-full.test.ts.snap b/packages/cubejs-testing-drivers/test/__snapshots__/clickhouse-export-bucket-s3-prefix-full.test.ts.snap index f2b47eecd6f42..aea90fc34c1a5 100644 --- a/packages/cubejs-testing-drivers/test/__snapshots__/clickhouse-export-bucket-s3-prefix-full.test.ts.snap +++ b/packages/cubejs-testing-drivers/test/__snapshots__/clickhouse-export-bucket-s3-prefix-full.test.ts.snap @@ -4680,7 +4680,7 @@ Array [ exports[`Queries with the @cubejs-backend/clickhouse-driver export-bucket-s3-prefix querying BigECommerce: rolling window YTD without granularity 1`] = ` Array [ Object { - "BigECommerce.rollingCountYTD": "44", + "BigECommerce.rollingCountYTD": "3", }, ] `; diff --git a/packages/cubejs-testing-drivers/test/__snapshots__/clickhouse-full.test.ts.snap b/packages/cubejs-testing-drivers/test/__snapshots__/clickhouse-full.test.ts.snap index 2134c6b87aff1..42f25946b7529 100644 --- a/packages/cubejs-testing-drivers/test/__snapshots__/clickhouse-full.test.ts.snap +++ b/packages/cubejs-testing-drivers/test/__snapshots__/clickhouse-full.test.ts.snap @@ -4680,7 +4680,7 @@ Array [ exports[`Queries with the @cubejs-backend/clickhouse-driver querying BigECommerce: rolling window YTD without granularity 1`] = ` Array [ Object { - "BigECommerce.rollingCountYTD": "44", + "BigECommerce.rollingCountYTD": "3", }, ] `; diff --git a/packages/cubejs-testing-drivers/test/__snapshots__/databricks-jdbc-export-bucket-azure-full.test.ts.snap b/packages/cubejs-testing-drivers/test/__snapshots__/databricks-jdbc-export-bucket-azure-full.test.ts.snap index 67a92ae7070e9..c87bab9dd5e3a 100644 --- a/packages/cubejs-testing-drivers/test/__snapshots__/databricks-jdbc-export-bucket-azure-full.test.ts.snap +++ b/packages/cubejs-testing-drivers/test/__snapshots__/databricks-jdbc-export-bucket-azure-full.test.ts.snap @@ -10885,7 +10885,7 @@ Array [ exports[`Queries with the @cubejs-backend/databricks-jdbc-driver export-bucket-azure querying BigECommerce: rolling window YTD without granularity 1`] = ` Array [ Object { - "BigECommerce.rollingCountYTD": "44", + "BigECommerce.rollingCountYTD": "3", }, ] `; diff --git a/packages/cubejs-testing-drivers/test/__snapshots__/databricks-jdbc-export-bucket-azure-prefix-full.test.ts.snap b/packages/cubejs-testing-drivers/test/__snapshots__/databricks-jdbc-export-bucket-azure-prefix-full.test.ts.snap index 7628b6dfb85d9..8a3e70cd33e67 100644 --- a/packages/cubejs-testing-drivers/test/__snapshots__/databricks-jdbc-export-bucket-azure-prefix-full.test.ts.snap +++ b/packages/cubejs-testing-drivers/test/__snapshots__/databricks-jdbc-export-bucket-azure-prefix-full.test.ts.snap @@ -10690,7 +10690,7 @@ Array [ exports[`Queries with the @cubejs-backend/databricks-jdbc-driver export-bucket-azure-prefix querying BigECommerce: rolling window YTD without granularity 1`] = ` Array [ Object { - "BigECommerce.rollingCountYTD": "44", + "BigECommerce.rollingCountYTD": "3", }, ] `; diff --git a/packages/cubejs-testing-drivers/test/__snapshots__/databricks-jdbc-export-bucket-gcs-full.test.ts.snap b/packages/cubejs-testing-drivers/test/__snapshots__/databricks-jdbc-export-bucket-gcs-full.test.ts.snap index c42ce9fef39a3..264579108e8cf 100644 --- a/packages/cubejs-testing-drivers/test/__snapshots__/databricks-jdbc-export-bucket-gcs-full.test.ts.snap +++ b/packages/cubejs-testing-drivers/test/__snapshots__/databricks-jdbc-export-bucket-gcs-full.test.ts.snap @@ -10885,7 +10885,7 @@ Array [ exports[`Queries with the @cubejs-backend/databricks-jdbc-driver export-bucket-gcs querying BigECommerce: rolling window YTD without granularity 1`] = ` Array [ Object { - "BigECommerce.rollingCountYTD": "44", + "BigECommerce.rollingCountYTD": "3", }, ] `; diff --git a/packages/cubejs-testing-drivers/test/__snapshots__/databricks-jdbc-export-bucket-gcs-prefix-full.test.ts.snap b/packages/cubejs-testing-drivers/test/__snapshots__/databricks-jdbc-export-bucket-gcs-prefix-full.test.ts.snap index 932834e2e1c8e..9e76908cf768e 100644 --- a/packages/cubejs-testing-drivers/test/__snapshots__/databricks-jdbc-export-bucket-gcs-prefix-full.test.ts.snap +++ b/packages/cubejs-testing-drivers/test/__snapshots__/databricks-jdbc-export-bucket-gcs-prefix-full.test.ts.snap @@ -10690,7 +10690,7 @@ Array [ exports[`Queries with the @cubejs-backend/databricks-jdbc-driver export-bucket-gcs-prefix querying BigECommerce: rolling window YTD without granularity 1`] = ` Array [ Object { - "BigECommerce.rollingCountYTD": "44", + "BigECommerce.rollingCountYTD": "3", }, ] `; diff --git a/packages/cubejs-testing-drivers/test/__snapshots__/databricks-jdbc-export-bucket-s3-full.test.ts.snap b/packages/cubejs-testing-drivers/test/__snapshots__/databricks-jdbc-export-bucket-s3-full.test.ts.snap index b65744d54238e..f2666d3e16522 100644 --- a/packages/cubejs-testing-drivers/test/__snapshots__/databricks-jdbc-export-bucket-s3-full.test.ts.snap +++ b/packages/cubejs-testing-drivers/test/__snapshots__/databricks-jdbc-export-bucket-s3-full.test.ts.snap @@ -10885,7 +10885,7 @@ Array [ exports[`Queries with the @cubejs-backend/databricks-jdbc-driver export-bucket-s3 querying BigECommerce: rolling window YTD without granularity 1`] = ` Array [ Object { - "BigECommerce.rollingCountYTD": "44", + "BigECommerce.rollingCountYTD": "3", }, ] `; diff --git a/packages/cubejs-testing-drivers/test/__snapshots__/databricks-jdbc-export-bucket-s3-prefix-full.test.ts.snap b/packages/cubejs-testing-drivers/test/__snapshots__/databricks-jdbc-export-bucket-s3-prefix-full.test.ts.snap index 38ac7dbbb35a3..95dd37d541341 100644 --- a/packages/cubejs-testing-drivers/test/__snapshots__/databricks-jdbc-export-bucket-s3-prefix-full.test.ts.snap +++ b/packages/cubejs-testing-drivers/test/__snapshots__/databricks-jdbc-export-bucket-s3-prefix-full.test.ts.snap @@ -10690,7 +10690,7 @@ Array [ exports[`Queries with the @cubejs-backend/databricks-jdbc-driver export-bucket-s3-prefix querying BigECommerce: rolling window YTD without granularity 1`] = ` Array [ Object { - "BigECommerce.rollingCountYTD": "44", + "BigECommerce.rollingCountYTD": "3", }, ] `; diff --git a/packages/cubejs-testing-drivers/test/__snapshots__/databricks-jdbc-full.test.ts.snap b/packages/cubejs-testing-drivers/test/__snapshots__/databricks-jdbc-full.test.ts.snap index fadc20415235f..fce072a38c3cb 100644 --- a/packages/cubejs-testing-drivers/test/__snapshots__/databricks-jdbc-full.test.ts.snap +++ b/packages/cubejs-testing-drivers/test/__snapshots__/databricks-jdbc-full.test.ts.snap @@ -10885,7 +10885,7 @@ Array [ exports[`Queries with the @cubejs-backend/databricks-jdbc-driver querying BigECommerce: rolling window YTD without granularity 1`] = ` Array [ Object { - "BigECommerce.rollingCountYTD": "44", + "BigECommerce.rollingCountYTD": "3", }, ] `; diff --git a/packages/cubejs-testing-drivers/test/__snapshots__/mssql-full.test.ts.snap b/packages/cubejs-testing-drivers/test/__snapshots__/mssql-full.test.ts.snap index f87b7a0a8cc15..94e743162c16e 100644 --- a/packages/cubejs-testing-drivers/test/__snapshots__/mssql-full.test.ts.snap +++ b/packages/cubejs-testing-drivers/test/__snapshots__/mssql-full.test.ts.snap @@ -3965,7 +3965,7 @@ Array [ exports[`Queries with the @cubejs-backend/mssql-driver querying BigECommerce: rolling window YTD without granularity 1`] = ` Array [ Object { - "BigECommerce.rollingCountYTD": "440000", + "BigECommerce.rollingCountYTD": "30000", }, ] `; diff --git a/packages/cubejs-testing-drivers/test/__snapshots__/mysql-full.test.ts.snap b/packages/cubejs-testing-drivers/test/__snapshots__/mysql-full.test.ts.snap index 28f6ea2a85719..e392a5a12f5b7 100644 --- a/packages/cubejs-testing-drivers/test/__snapshots__/mysql-full.test.ts.snap +++ b/packages/cubejs-testing-drivers/test/__snapshots__/mysql-full.test.ts.snap @@ -3978,7 +3978,7 @@ Array [ exports[`Queries with the @cubejs-backend/mysql-driver querying BigECommerce: rolling window YTD without granularity 1`] = ` Array [ Object { - "BigECommerce.rollingCountYTD": 44, + "BigECommerce.rollingCountYTD": 3, }, ] `; diff --git a/packages/cubejs-testing-drivers/test/__snapshots__/postgres-full.test.ts.snap b/packages/cubejs-testing-drivers/test/__snapshots__/postgres-full.test.ts.snap index 276193395175c..8aecfb381e798 100644 --- a/packages/cubejs-testing-drivers/test/__snapshots__/postgres-full.test.ts.snap +++ b/packages/cubejs-testing-drivers/test/__snapshots__/postgres-full.test.ts.snap @@ -13021,7 +13021,7 @@ Array [ exports[`Queries with the @cubejs-backend/postgres-driver querying BigECommerce: rolling window YTD without granularity 1`] = ` Array [ Object { - "BigECommerce.rollingCountYTD": "44", + "BigECommerce.rollingCountYTD": "3", }, ] `; diff --git a/packages/cubejs-testing-drivers/test/__snapshots__/redshift-export-bucket-s3-full.test.ts.snap b/packages/cubejs-testing-drivers/test/__snapshots__/redshift-export-bucket-s3-full.test.ts.snap index 5dd1fea974151..1a8c496c95919 100644 --- a/packages/cubejs-testing-drivers/test/__snapshots__/redshift-export-bucket-s3-full.test.ts.snap +++ b/packages/cubejs-testing-drivers/test/__snapshots__/redshift-export-bucket-s3-full.test.ts.snap @@ -12753,7 +12753,7 @@ Array [ exports[`Queries with the @cubejs-backend/redshift-driver export-bucket-s3 querying BigECommerce: rolling window YTD without granularity 1`] = ` Array [ Object { - "BigECommerce.rollingCountYTD": "44", + "BigECommerce.rollingCountYTD": "3", }, ] `; diff --git a/packages/cubejs-testing-drivers/test/__snapshots__/redshift-full.test.ts.snap b/packages/cubejs-testing-drivers/test/__snapshots__/redshift-full.test.ts.snap index e8a90b2954bcd..95d5d9e95ab34 100644 --- a/packages/cubejs-testing-drivers/test/__snapshots__/redshift-full.test.ts.snap +++ b/packages/cubejs-testing-drivers/test/__snapshots__/redshift-full.test.ts.snap @@ -12753,7 +12753,7 @@ Array [ exports[`Queries with the @cubejs-backend/redshift-driver querying BigECommerce: rolling window YTD without granularity 1`] = ` Array [ Object { - "BigECommerce.rollingCountYTD": "44", + "BigECommerce.rollingCountYTD": "3", }, ] `; diff --git a/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-encrypted-pk-full.test.ts.snap b/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-encrypted-pk-full.test.ts.snap index 0473c988d1c26..aae59e24272b1 100644 --- a/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-encrypted-pk-full.test.ts.snap +++ b/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-encrypted-pk-full.test.ts.snap @@ -17984,7 +17984,7 @@ Array [ exports[`Queries with the @cubejs-backend/snowflake-driver encrypted-pk querying BigECommerce: rolling window YTD without granularity 1`] = ` Array [ Object { - "BigECommerce.rollingCountYTD": "44", + "BigECommerce.rollingCountYTD": "3", }, ] `; diff --git a/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-export-bucket-azure-full.test.ts.snap b/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-export-bucket-azure-full.test.ts.snap index 19a75e77428ba..dbcf74d07bfd7 100644 --- a/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-export-bucket-azure-full.test.ts.snap +++ b/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-export-bucket-azure-full.test.ts.snap @@ -12718,7 +12718,7 @@ Array [ exports[`Queries with the @cubejs-backend/snowflake-driver export-bucket-azure querying BigECommerce: rolling window YTD without granularity 1`] = ` Array [ Object { - "BigECommerce.rollingCountYTD": "44", + "BigECommerce.rollingCountYTD": "3", }, ] `; diff --git a/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-export-bucket-azure-prefix-full.test.ts.snap b/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-export-bucket-azure-prefix-full.test.ts.snap index 3054d58dde22e..a2ede7ad0de52 100644 --- a/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-export-bucket-azure-prefix-full.test.ts.snap +++ b/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-export-bucket-azure-prefix-full.test.ts.snap @@ -12523,7 +12523,7 @@ Array [ exports[`Queries with the @cubejs-backend/snowflake-driver export-bucket-azure-prefix querying BigECommerce: rolling window YTD without granularity 1`] = ` Array [ Object { - "BigECommerce.rollingCountYTD": "44", + "BigECommerce.rollingCountYTD": "3", }, ] `; diff --git a/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-export-bucket-azure-via-storage-integration-full.test.ts.snap b/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-export-bucket-azure-via-storage-integration-full.test.ts.snap index 17be8697a05d1..59c7750db36a8 100644 --- a/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-export-bucket-azure-via-storage-integration-full.test.ts.snap +++ b/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-export-bucket-azure-via-storage-integration-full.test.ts.snap @@ -12925,7 +12925,7 @@ Array [ exports[`Queries with the @cubejs-backend/snowflake-driver export-bucket-azure-via-storage-integration querying BigECommerce: rolling window YTD without granularity 1`] = ` Array [ Object { - "BigECommerce.rollingCountYTD": "44", + "BigECommerce.rollingCountYTD": "3", }, ] `; diff --git a/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-export-bucket-gcs-full.test.ts.snap b/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-export-bucket-gcs-full.test.ts.snap index 92a245a32eb26..d0d7a47cfd1a3 100644 --- a/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-export-bucket-gcs-full.test.ts.snap +++ b/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-export-bucket-gcs-full.test.ts.snap @@ -12925,7 +12925,7 @@ Array [ exports[`Queries with the @cubejs-backend/snowflake-driver export-bucket-gcs querying BigECommerce: rolling window YTD without granularity 1`] = ` Array [ Object { - "BigECommerce.rollingCountYTD": "44", + "BigECommerce.rollingCountYTD": "3", }, ] `; diff --git a/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-export-bucket-gcs-prefix-full.test.ts.snap b/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-export-bucket-gcs-prefix-full.test.ts.snap index c8887e275f7ce..59d466c71a05b 100644 --- a/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-export-bucket-gcs-prefix-full.test.ts.snap +++ b/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-export-bucket-gcs-prefix-full.test.ts.snap @@ -12730,7 +12730,7 @@ Array [ exports[`Queries with the @cubejs-backend/snowflake-driver export-bucket-gcs-prefix querying BigECommerce: rolling window YTD without granularity 1`] = ` Array [ Object { - "BigECommerce.rollingCountYTD": "44", + "BigECommerce.rollingCountYTD": "3", }, ] `; diff --git a/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-export-bucket-s3-full.test.ts.snap b/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-export-bucket-s3-full.test.ts.snap index 92c55f701dfc6..f4f88a94e063f 100644 --- a/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-export-bucket-s3-full.test.ts.snap +++ b/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-export-bucket-s3-full.test.ts.snap @@ -12925,7 +12925,7 @@ Array [ exports[`Queries with the @cubejs-backend/snowflake-driver export-bucket-s3 querying BigECommerce: rolling window YTD without granularity 1`] = ` Array [ Object { - "BigECommerce.rollingCountYTD": "44", + "BigECommerce.rollingCountYTD": "3", }, ] `; diff --git a/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-export-bucket-s3-prefix-full.test.ts.snap b/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-export-bucket-s3-prefix-full.test.ts.snap index 2bdc99a4e7d47..33335261db3dc 100644 --- a/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-export-bucket-s3-prefix-full.test.ts.snap +++ b/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-export-bucket-s3-prefix-full.test.ts.snap @@ -12730,7 +12730,7 @@ Array [ exports[`Queries with the @cubejs-backend/snowflake-driver export-bucket-s3-prefix querying BigECommerce: rolling window YTD without granularity 1`] = ` Array [ Object { - "BigECommerce.rollingCountYTD": "44", + "BigECommerce.rollingCountYTD": "3", }, ] `; diff --git a/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-full.test.ts.snap b/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-full.test.ts.snap index 81e777544c0d7..823c06e7c0ea0 100644 --- a/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-full.test.ts.snap +++ b/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-full.test.ts.snap @@ -12925,7 +12925,7 @@ Array [ exports[`Queries with the @cubejs-backend/snowflake-driver querying BigECommerce: rolling window YTD without granularity 1`] = ` Array [ Object { - "BigECommerce.rollingCountYTD": "44", + "BigECommerce.rollingCountYTD": "3", }, ] `; diff --git a/packages/cubejs-testing-shared/CHANGELOG.md b/packages/cubejs-testing-shared/CHANGELOG.md index 1aa3dab975ad0..87aeca8b0ad80 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/testing-shared + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 97765d6c831ec..4727996535e82 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.3.30", + "version": "1.3.31", "description": "Cube.js Testing Helpers", "author": "Cube Dev, Inc.", "license": "Apache-2.0", @@ -21,16 +21,16 @@ ], "dependencies": { "@cubejs-backend/dotenv": "^9.0.2", - "@cubejs-backend/query-orchestrator": "1.3.30", - "@cubejs-backend/schema-compiler": "1.3.30", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/query-orchestrator": "1.3.31", + "@cubejs-backend/schema-compiler": "1.3.31", + "@cubejs-backend/shared": "1.3.31", "@testcontainers/kafka": "~10.13.0", "dedent": "^0.7.0", "node-fetch": "^2.6.7", "testcontainers": "^10.13.0" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.30", + "@cubejs-backend/linter": "1.3.31", "@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 f48b6138defcf..803b92a17612a 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +### Bug Fixes + +- **schema-compiler:** Fix date filter truncation for rolling window queries ([#9743](https://github.com/cube-js/cube/issues/9743)) ([f045af9](https://github.com/cube-js/cube/commit/f045af91086dafad80fe363a4ddba6f6411892f7)) + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **Note:** Version bump only for package @cubejs-backend/testing diff --git a/packages/cubejs-testing/package.json b/packages/cubejs-testing/package.json index e98f61d96d6a0..799370b7e3a41 100644 --- a/packages/cubejs-testing/package.json +++ b/packages/cubejs-testing/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-backend/testing", - "version": "1.3.30", + "version": "1.3.31", "description": "Cube.js e2e tests", "author": "Cube Dev, Inc.", "license": "Apache-2.0", @@ -94,15 +94,15 @@ "birdbox-fixtures" ], "dependencies": { - "@cubejs-backend/cubestore-driver": "1.3.30", + "@cubejs-backend/cubestore-driver": "1.3.31", "@cubejs-backend/dotenv": "^9.0.2", - "@cubejs-backend/ksql-driver": "1.3.30", - "@cubejs-backend/postgres-driver": "1.3.30", - "@cubejs-backend/query-orchestrator": "1.3.30", - "@cubejs-backend/schema-compiler": "1.3.30", - "@cubejs-backend/shared": "1.3.30", - "@cubejs-backend/testing-shared": "1.3.30", - "@cubejs-client/ws-transport": "1.3.30", + "@cubejs-backend/ksql-driver": "1.3.31", + "@cubejs-backend/postgres-driver": "1.3.31", + "@cubejs-backend/query-orchestrator": "1.3.31", + "@cubejs-backend/schema-compiler": "1.3.31", + "@cubejs-backend/shared": "1.3.31", + "@cubejs-backend/testing-shared": "1.3.31", + "@cubejs-client/ws-transport": "1.3.31", "dedent": "^0.7.0", "fs-extra": "^8.1.0", "http-proxy": "^1.18.1", @@ -113,8 +113,8 @@ }, "devDependencies": { "@4tw/cypress-drag-drop": "^1.6.0", - "@cubejs-backend/linter": "1.3.30", - "@cubejs-client/core": "1.3.30", + "@cubejs-backend/linter": "1.3.31", + "@cubejs-client/core": "1.3.31", "@jest/globals": "^29", "@types/dedent": "^0.7.0", "@types/http-proxy": "^1.17.5", diff --git a/packages/cubejs-testing/test/__snapshots__/birdbox-postgresql-pre-aggregations.test.ts.snap b/packages/cubejs-testing/test/__snapshots__/birdbox-postgresql-pre-aggregations.test.ts.snap index 2c460f3a54246..aa6dbc4729a9c 100644 --- a/packages/cubejs-testing/test/__snapshots__/birdbox-postgresql-pre-aggregations.test.ts.snap +++ b/packages/cubejs-testing/test/__snapshots__/birdbox-postgresql-pre-aggregations.test.ts.snap @@ -5,7 +5,7 @@ exports[`postgresql-cubestore HTTP Transport Empty partitions: Empty partitions exports[`postgresql-cubestore HTTP Transport Rolling Mixed With Dimension No Granularity: Rolling Mixed With Dimension No Granularity 1`] = ` Array [ Object { - "visitors.checkinsRollingTotal": "5", + "visitors.checkinsRollingTotal": null, "visitors.source": "some", }, ] diff --git a/packages/cubejs-testing/test/__snapshots__/cli-postgresql-pre-aggregations.test.ts.snap b/packages/cubejs-testing/test/__snapshots__/cli-postgresql-pre-aggregations.test.ts.snap index c08bfb0cae46b..3c28478f95231 100644 --- a/packages/cubejs-testing/test/__snapshots__/cli-postgresql-pre-aggregations.test.ts.snap +++ b/packages/cubejs-testing/test/__snapshots__/cli-postgresql-pre-aggregations.test.ts.snap @@ -5,7 +5,7 @@ exports[`postgresql HTTP Transport Empty partitions: Empty partitions 1`] = `Arr exports[`postgresql HTTP Transport Rolling Mixed With Dimension No Granularity: Rolling Mixed With Dimension No Granularity 1`] = ` Array [ Object { - "visitors.checkinsRollingTotal": "5", + "visitors.checkinsRollingTotal": null, "visitors.source": "some", }, ] diff --git a/packages/cubejs-trino-driver/CHANGELOG.md b/packages/cubejs-trino-driver/CHANGELOG.md index 5ac74885484b9..10002c47d1748 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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/trino-driver + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **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 a361e8b9e2abc..f365494a67249 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.3.30", + "version": "1.3.31", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -27,10 +27,10 @@ "lint:fix": "eslint --fix src/* --ext .ts" }, "dependencies": { - "@cubejs-backend/base-driver": "1.3.30", - "@cubejs-backend/prestodb-driver": "1.3.30", - "@cubejs-backend/schema-compiler": "1.3.30", - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/base-driver": "1.3.31", + "@cubejs-backend/prestodb-driver": "1.3.31", + "@cubejs-backend/schema-compiler": "1.3.31", + "@cubejs-backend/shared": "1.3.31", "node-fetch": "^2.6.1", "presto-client": "^1.1.0", "sqlstring": "^2.3.1" @@ -40,7 +40,7 @@ "access": "public" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.30", + "@cubejs-backend/linter": "1.3.31", "@types/jest": "^29", "jest": "^29", "testcontainers": "^10.13.0", diff --git a/packages/cubejs-vertica-driver/CHANGELOG.md b/packages/cubejs-vertica-driver/CHANGELOG.md index 40f5d7ae027e3..1655263e85c80 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.3.31](https://github.com/cube-js/cube.js/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/vertica-driver + ## [1.3.30](https://github.com/cube-js/cube.js/compare/v1.3.29...v1.3.30) (2025-07-01) **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 342efdce6b149..f02af3f0d7015 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.3.30", + "version": "1.3.31", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.js.git", @@ -19,15 +19,15 @@ "lint:fix": "eslint --fix **/*.js" }, "dependencies": { - "@cubejs-backend/base-driver": "1.3.30", - "@cubejs-backend/query-orchestrator": "1.3.30", - "@cubejs-backend/schema-compiler": "1.3.30", + "@cubejs-backend/base-driver": "1.3.31", + "@cubejs-backend/query-orchestrator": "1.3.31", + "@cubejs-backend/schema-compiler": "1.3.31", "vertica-nodejs": "^1.0.3" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.30", - "@cubejs-backend/testing-shared": "1.3.30", + "@cubejs-backend/linter": "1.3.31", + "@cubejs-backend/testing-shared": "1.3.31", "@types/jest": "^29", "jest": "^29", "testcontainers": "^10.13.0" diff --git a/rust/cubenativeutils/Cargo.lock b/rust/cubenativeutils/Cargo.lock index 3ee1a78750ab9..b518d0715c90f 100644 --- a/rust/cubenativeutils/Cargo.lock +++ b/rust/cubenativeutils/Cargo.lock @@ -641,8 +641,8 @@ dependencies = [ "reqwest", "reqwest-middleware", "serde", - "serde_derive", "serde_json", + "serde_repr", "tokio", "url", "uuid 1.9.1", @@ -1646,7 +1646,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e310b3a6b5907f99202fcdb4960ff45b93735d7c7d96b760fcff8db2dc0e103d" dependencies = [ "cfg-if", - "windows-targets 0.48.5", + "windows-targets 0.52.6", ] [[package]] @@ -2682,6 +2682,17 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_repr" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.95", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" diff --git a/rust/cubesql/CHANGELOG.md b/rust/cubesql/CHANGELOG.md index 8e2887fe55cd1..415e42f04b707 100644 --- a/rust/cubesql/CHANGELOG.md +++ b/rust/cubesql/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +**Note:** Version bump only for package @cubejs-backend/cubesql + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) ### Features diff --git a/rust/cubesql/Cargo.lock b/rust/cubesql/Cargo.lock index 810919a15c1e3..8d60ef3c7779a 100644 --- a/rust/cubesql/Cargo.lock +++ b/rust/cubesql/Cargo.lock @@ -740,8 +740,8 @@ dependencies = [ "reqwest", "reqwest-middleware", "serde", - "serde_derive", "serde_json", + "serde_repr", "tokio", "url", "uuid 1.10.0", @@ -2858,6 +2858,17 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_repr" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" diff --git a/rust/cubesql/cubeclient/.openapi-generator/VERSION b/rust/cubesql/cubeclient/.openapi-generator/VERSION index cd802a1ec4eb6..e465da43155f4 100644 --- a/rust/cubesql/cubeclient/.openapi-generator/VERSION +++ b/rust/cubesql/cubeclient/.openapi-generator/VERSION @@ -1 +1 @@ -6.6.0 \ No newline at end of file +7.14.0 diff --git a/rust/cubesql/cubeclient/Cargo.toml b/rust/cubesql/cubeclient/Cargo.toml index 1e7797cd9bf98..29b3384ff0a54 100644 --- a/rust/cubesql/cubeclient/Cargo.toml +++ b/rust/cubesql/cubeclient/Cargo.toml @@ -9,8 +9,7 @@ documentation = "https://cube.dev/docs" homepage = "https://cube.dev" [dependencies] -serde = "1.0.209" -serde_derive = "1.0.209" +serde = { version = "1.0.209", features = ["derive"] } serde_json = "^1.0" url = "^2.2" reqwest-middleware = { version = "0.3.2", features = ["json"] } @@ -19,6 +18,7 @@ async-trait = "0.1.51" tokio = { version = "1.6", features = ["time"] } uuid = { version = "1", features = ["v4"] } log = "0.4" +serde_repr = "0.1.20" [dependencies.reqwest] version = "0.12.5" diff --git a/rust/cubesql/cubeclient/DEVELOPMENT.md b/rust/cubesql/cubeclient/DEVELOPMENT.md index ce5d1e194e695..f018f2bd99f94 100644 --- a/rust/cubesql/cubeclient/DEVELOPMENT.md +++ b/rust/cubesql/cubeclient/DEVELOPMENT.md @@ -22,7 +22,7 @@ openapi-generator generate -i ../../packages/cubejs-api-gateway/openspec.yml -g From repo root ```sh -docker run --rm -v ".:/cube" --workdir /cube/rust/cubesql openapitools/openapi-generator-cli:v6.6.0 generate -i ../../packages/cubejs-api-gateway/openspec.yml -g rust -o cubeclient +docker run --rm -v ".:/cube" --workdir /cube/rust/cubesql openapitools/openapi-generator-cli:v7.14.0 generate -i ../../packages/cubejs-api-gateway/openspec.yml -g rust -o cubeclient ``` Take care around Docker on root and files owner and mode diff --git a/rust/cubesql/cubeclient/src/apis/default_api.rs b/rust/cubesql/cubeclient/src/apis/default_api.rs index ad33866cdeb23..ccb54a893a49b 100644 --- a/rust/cubesql/cubeclient/src/apis/default_api.rs +++ b/rust/cubesql/cubeclient/src/apis/default_api.rs @@ -1,5 +1,6 @@ use log::{debug, error}; use reqwest; +use serde::{Deserialize, Serialize}; use uuid::Uuid; use super::{configuration, Error}; diff --git a/rust/cubesql/cubeclient/src/lib.rs b/rust/cubesql/cubeclient/src/lib.rs index 60e95930302aa..9556a0a134ef1 100644 --- a/rust/cubesql/cubeclient/src/lib.rs +++ b/rust/cubesql/cubeclient/src/lib.rs @@ -1,13 +1,10 @@ -// Open spec generator generates ToString methods for enums, let's disable clippy rule as quick -// workaround. TODO: Use new one open spec generator? -#![allow(clippy::to_string_trait_impl)] - -#[macro_use] -extern crate serde_derive; +#![allow(unused_imports)] +#![allow(clippy::too_many_arguments)] extern crate reqwest; extern crate serde; extern crate serde_json; +extern crate serde_repr; extern crate url; pub mod apis; diff --git a/rust/cubesql/cubeclient/src/models/v1_cube_meta.rs b/rust/cubesql/cubeclient/src/models/v1_cube_meta.rs index e47c9349af3d6..ddd19ed03bccd 100644 --- a/rust/cubesql/cubeclient/src/models/v1_cube_meta.rs +++ b/rust/cubesql/cubeclient/src/models/v1_cube_meta.rs @@ -8,39 +8,42 @@ * Generated by: https://openapi-generator.tech */ -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] +use crate::models; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct V1CubeMeta { #[serde(rename = "name")] pub name: String, #[serde(rename = "title", skip_serializing_if = "Option::is_none")] pub title: Option, #[serde(rename = "type")] - pub r#type: crate::models::V1CubeMetaType, + pub r#type: models::V1CubeMetaType, #[serde(rename = "meta", skip_serializing_if = "Option::is_none")] pub meta: Option, #[serde(rename = "description", skip_serializing_if = "Option::is_none")] pub description: Option, #[serde(rename = "measures")] - pub measures: Vec, + pub measures: Vec, #[serde(rename = "dimensions")] - pub dimensions: Vec, + pub dimensions: Vec, #[serde(rename = "segments")] - pub segments: Vec, + pub segments: Vec, #[serde(rename = "joins", skip_serializing_if = "Option::is_none")] - pub joins: Option>, + pub joins: Option>, #[serde(rename = "folders", skip_serializing_if = "Option::is_none")] - pub folders: Option>, + pub folders: Option>, #[serde(rename = "hierarchies", skip_serializing_if = "Option::is_none")] - pub hierarchies: Option>, + pub hierarchies: Option>, } impl V1CubeMeta { pub fn new( name: String, - r#type: crate::models::V1CubeMetaType, - measures: Vec, - dimensions: Vec, - segments: Vec, + r#type: models::V1CubeMetaType, + measures: Vec, + dimensions: Vec, + segments: Vec, ) -> V1CubeMeta { V1CubeMeta { name, diff --git a/rust/cubesql/cubeclient/src/models/v1_cube_meta_dimension.rs b/rust/cubesql/cubeclient/src/models/v1_cube_meta_dimension.rs index e13cc186c93a1..dd7781f59d4c0 100644 --- a/rust/cubesql/cubeclient/src/models/v1_cube_meta_dimension.rs +++ b/rust/cubesql/cubeclient/src/models/v1_cube_meta_dimension.rs @@ -8,7 +8,10 @@ * Generated by: https://openapi-generator.tech */ -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] +use crate::models; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct V1CubeMetaDimension { #[serde(rename = "name")] pub name: String, @@ -24,7 +27,7 @@ pub struct V1CubeMetaDimension { #[serde(rename = "aliasMember", skip_serializing_if = "Option::is_none")] pub alias_member: Option, #[serde(rename = "granularities", skip_serializing_if = "Option::is_none")] - pub granularities: Option>, + pub granularities: Option>, #[serde(rename = "meta", skip_serializing_if = "Option::is_none")] pub meta: Option, } diff --git a/rust/cubesql/cubeclient/src/models/v1_cube_meta_dimension_granularity.rs b/rust/cubesql/cubeclient/src/models/v1_cube_meta_dimension_granularity.rs index c973276f8bcae..9e819452493a6 100644 --- a/rust/cubesql/cubeclient/src/models/v1_cube_meta_dimension_granularity.rs +++ b/rust/cubesql/cubeclient/src/models/v1_cube_meta_dimension_granularity.rs @@ -8,7 +8,10 @@ * Generated by: https://openapi-generator.tech */ -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] +use crate::models; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct V1CubeMetaDimensionGranularity { #[serde(rename = "name")] pub name: String, diff --git a/rust/cubesql/cubeclient/src/models/v1_cube_meta_folder.rs b/rust/cubesql/cubeclient/src/models/v1_cube_meta_folder.rs index b137ceedaf986..ccd75604caf04 100644 --- a/rust/cubesql/cubeclient/src/models/v1_cube_meta_folder.rs +++ b/rust/cubesql/cubeclient/src/models/v1_cube_meta_folder.rs @@ -8,7 +8,10 @@ * Generated by: https://openapi-generator.tech */ -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] +use crate::models; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct V1CubeMetaFolder { #[serde(rename = "name")] pub name: String, diff --git a/rust/cubesql/cubeclient/src/models/v1_cube_meta_hierarchy.rs b/rust/cubesql/cubeclient/src/models/v1_cube_meta_hierarchy.rs index 21dc40d14b8dc..36015fcd77f88 100644 --- a/rust/cubesql/cubeclient/src/models/v1_cube_meta_hierarchy.rs +++ b/rust/cubesql/cubeclient/src/models/v1_cube_meta_hierarchy.rs @@ -8,7 +8,10 @@ * Generated by: https://openapi-generator.tech */ -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] +use crate::models; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct V1CubeMetaHierarchy { #[serde(rename = "name")] pub name: String, diff --git a/rust/cubesql/cubeclient/src/models/v1_cube_meta_join.rs b/rust/cubesql/cubeclient/src/models/v1_cube_meta_join.rs index 95c09738e9251..530ed96752045 100644 --- a/rust/cubesql/cubeclient/src/models/v1_cube_meta_join.rs +++ b/rust/cubesql/cubeclient/src/models/v1_cube_meta_join.rs @@ -8,7 +8,10 @@ * Generated by: https://openapi-generator.tech */ -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] +use crate::models; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct V1CubeMetaJoin { #[serde(rename = "name")] pub name: String, diff --git a/rust/cubesql/cubeclient/src/models/v1_cube_meta_measure.rs b/rust/cubesql/cubeclient/src/models/v1_cube_meta_measure.rs index 9acab8ddc2cae..f92ab149051c6 100644 --- a/rust/cubesql/cubeclient/src/models/v1_cube_meta_measure.rs +++ b/rust/cubesql/cubeclient/src/models/v1_cube_meta_measure.rs @@ -8,7 +8,10 @@ * Generated by: https://openapi-generator.tech */ -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] +use crate::models; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct V1CubeMetaMeasure { #[serde(rename = "name")] pub name: String, diff --git a/rust/cubesql/cubeclient/src/models/v1_cube_meta_segment.rs b/rust/cubesql/cubeclient/src/models/v1_cube_meta_segment.rs index 89410c34eac87..b11046c2c0d53 100644 --- a/rust/cubesql/cubeclient/src/models/v1_cube_meta_segment.rs +++ b/rust/cubesql/cubeclient/src/models/v1_cube_meta_segment.rs @@ -8,7 +8,10 @@ * Generated by: https://openapi-generator.tech */ -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] +use crate::models; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct V1CubeMetaSegment { #[serde(rename = "name")] pub name: String, diff --git a/rust/cubesql/cubeclient/src/models/v1_cube_meta_type.rs b/rust/cubesql/cubeclient/src/models/v1_cube_meta_type.rs index 63662f481a431..b8e125a856a2d 100644 --- a/rust/cubesql/cubeclient/src/models/v1_cube_meta_type.rs +++ b/rust/cubesql/cubeclient/src/models/v1_cube_meta_type.rs @@ -8,6 +8,9 @@ * Generated by: https://openapi-generator.tech */ +use crate::models; +use serde::{Deserialize, Serialize}; + /// V1CubeMetaType : Type of cube /// Type of cube #[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] @@ -18,11 +21,11 @@ pub enum V1CubeMetaType { View, } -impl ToString for V1CubeMetaType { - fn to_string(&self) -> String { +impl std::fmt::Display for V1CubeMetaType { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { match self { - Self::Cube => String::from("cube"), - Self::View => String::from("view"), + Self::Cube => write!(f, "cube"), + Self::View => write!(f, "view"), } } } diff --git a/rust/cubesql/cubeclient/src/models/v1_error.rs b/rust/cubesql/cubeclient/src/models/v1_error.rs index f20bf33476717..6d7376bfa9d24 100644 --- a/rust/cubesql/cubeclient/src/models/v1_error.rs +++ b/rust/cubesql/cubeclient/src/models/v1_error.rs @@ -8,7 +8,10 @@ * Generated by: https://openapi-generator.tech */ -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] +use crate::models; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct V1Error { #[serde(rename = "error")] pub error: String, diff --git a/rust/cubesql/cubeclient/src/models/v1_load_continue_wait.rs b/rust/cubesql/cubeclient/src/models/v1_load_continue_wait.rs index 57879aa449e2e..7d074c1e98584 100644 --- a/rust/cubesql/cubeclient/src/models/v1_load_continue_wait.rs +++ b/rust/cubesql/cubeclient/src/models/v1_load_continue_wait.rs @@ -1,3 +1,5 @@ +use serde::{Deserialize, Serialize}; + #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] pub struct V1LoadContinueWait { pub error: String, diff --git a/rust/cubesql/cubeclient/src/models/v1_load_request.rs b/rust/cubesql/cubeclient/src/models/v1_load_request.rs index db960d20e550f..c9d0c5e28fedb 100644 --- a/rust/cubesql/cubeclient/src/models/v1_load_request.rs +++ b/rust/cubesql/cubeclient/src/models/v1_load_request.rs @@ -8,12 +8,15 @@ * Generated by: https://openapi-generator.tech */ -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] +use crate::models; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct V1LoadRequest { #[serde(rename = "queryType", skip_serializing_if = "Option::is_none")] pub query_type: Option, #[serde(rename = "query", skip_serializing_if = "Option::is_none")] - pub query: Option, + pub query: Option, } impl V1LoadRequest { diff --git a/rust/cubesql/cubeclient/src/models/v1_load_request_query.rs b/rust/cubesql/cubeclient/src/models/v1_load_request_query.rs index b96cab68df20e..ae966f9c65160 100644 --- a/rust/cubesql/cubeclient/src/models/v1_load_request_query.rs +++ b/rust/cubesql/cubeclient/src/models/v1_load_request_query.rs @@ -8,7 +8,10 @@ * Generated by: https://openapi-generator.tech */ -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] +use crate::models; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct V1LoadRequestQuery { #[serde(rename = "measures", skip_serializing_if = "Option::is_none")] pub measures: Option>, @@ -17,7 +20,7 @@ pub struct V1LoadRequestQuery { #[serde(rename = "segments", skip_serializing_if = "Option::is_none")] pub segments: Option>, #[serde(rename = "timeDimensions", skip_serializing_if = "Option::is_none")] - pub time_dimensions: Option>, + pub time_dimensions: Option>, #[serde(rename = "order", skip_serializing_if = "Option::is_none")] pub order: Option>>, #[serde(rename = "limit", skip_serializing_if = "Option::is_none")] @@ -25,11 +28,11 @@ pub struct V1LoadRequestQuery { #[serde(rename = "offset", skip_serializing_if = "Option::is_none")] pub offset: Option, #[serde(rename = "filters", skip_serializing_if = "Option::is_none")] - pub filters: Option>, + pub filters: Option>, #[serde(rename = "ungrouped", skip_serializing_if = "Option::is_none")] pub ungrouped: Option, #[serde(rename = "subqueryJoins", skip_serializing_if = "Option::is_none")] - pub subquery_joins: Option>, + pub subquery_joins: Option>, #[serde(rename = "joinHints", skip_serializing_if = "Option::is_none")] pub join_hints: Option>>, } diff --git a/rust/cubesql/cubeclient/src/models/v1_load_request_query_filter_base.rs b/rust/cubesql/cubeclient/src/models/v1_load_request_query_filter_base.rs index 9f2e476ff7f0f..efa348be1f2fe 100644 --- a/rust/cubesql/cubeclient/src/models/v1_load_request_query_filter_base.rs +++ b/rust/cubesql/cubeclient/src/models/v1_load_request_query_filter_base.rs @@ -8,7 +8,10 @@ * Generated by: https://openapi-generator.tech */ -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] +use crate::models; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct V1LoadRequestQueryFilterBase { #[serde(rename = "member", skip_serializing_if = "Option::is_none")] pub member: Option, diff --git a/rust/cubesql/cubeclient/src/models/v1_load_request_query_filter_item.rs b/rust/cubesql/cubeclient/src/models/v1_load_request_query_filter_item.rs index 957a0a0dc5d56..682965e9af0a3 100644 --- a/rust/cubesql/cubeclient/src/models/v1_load_request_query_filter_item.rs +++ b/rust/cubesql/cubeclient/src/models/v1_load_request_query_filter_item.rs @@ -8,7 +8,10 @@ * Generated by: https://openapi-generator.tech */ -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] +use crate::models; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct V1LoadRequestQueryFilterItem { #[serde(rename = "member", skip_serializing_if = "Option::is_none")] pub member: Option, diff --git a/rust/cubesql/cubeclient/src/models/v1_load_request_query_filter_logical_and.rs b/rust/cubesql/cubeclient/src/models/v1_load_request_query_filter_logical_and.rs index d85e18d88875e..ad3ca9ef7c149 100644 --- a/rust/cubesql/cubeclient/src/models/v1_load_request_query_filter_logical_and.rs +++ b/rust/cubesql/cubeclient/src/models/v1_load_request_query_filter_logical_and.rs @@ -8,7 +8,10 @@ * Generated by: https://openapi-generator.tech */ -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] +use crate::models; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct V1LoadRequestQueryFilterLogicalAnd { #[serde(rename = "and", skip_serializing_if = "Option::is_none")] pub and: Option>, diff --git a/rust/cubesql/cubeclient/src/models/v1_load_request_query_filter_logical_or.rs b/rust/cubesql/cubeclient/src/models/v1_load_request_query_filter_logical_or.rs index d47a7bde8b26f..e8194cc282cba 100644 --- a/rust/cubesql/cubeclient/src/models/v1_load_request_query_filter_logical_or.rs +++ b/rust/cubesql/cubeclient/src/models/v1_load_request_query_filter_logical_or.rs @@ -8,7 +8,10 @@ * Generated by: https://openapi-generator.tech */ -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] +use crate::models; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct V1LoadRequestQueryFilterLogicalOr { #[serde(rename = "or", skip_serializing_if = "Option::is_none")] pub or: Option>, diff --git a/rust/cubesql/cubeclient/src/models/v1_load_request_query_join_subquery.rs b/rust/cubesql/cubeclient/src/models/v1_load_request_query_join_subquery.rs index 8a5db06e44899..eb554ba0c18be 100644 --- a/rust/cubesql/cubeclient/src/models/v1_load_request_query_join_subquery.rs +++ b/rust/cubesql/cubeclient/src/models/v1_load_request_query_join_subquery.rs @@ -8,7 +8,10 @@ * Generated by: https://openapi-generator.tech */ -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] +use crate::models; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct V1LoadRequestQueryJoinSubquery { #[serde(rename = "sql")] pub sql: String, diff --git a/rust/cubesql/cubeclient/src/models/v1_load_request_query_time_dimension.rs b/rust/cubesql/cubeclient/src/models/v1_load_request_query_time_dimension.rs index 11bbd9e53e51d..09cc867fd4cae 100644 --- a/rust/cubesql/cubeclient/src/models/v1_load_request_query_time_dimension.rs +++ b/rust/cubesql/cubeclient/src/models/v1_load_request_query_time_dimension.rs @@ -8,7 +8,10 @@ * Generated by: https://openapi-generator.tech */ -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] +use crate::models; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct V1LoadRequestQueryTimeDimension { #[serde(rename = "dimension")] pub dimension: String, diff --git a/rust/cubesql/cubeclient/src/models/v1_load_request_query_time_dimension_date_range_filter.rs b/rust/cubesql/cubeclient/src/models/v1_load_request_query_time_dimension_date_range_filter.rs index e420cc446a135..7bd1a484ad872 100644 --- a/rust/cubesql/cubeclient/src/models/v1_load_request_query_time_dimension_date_range_filter.rs +++ b/rust/cubesql/cubeclient/src/models/v1_load_request_query_time_dimension_date_range_filter.rs @@ -1,3 +1,5 @@ +use serde::{Deserialize, Serialize}; + #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] pub struct V1LoadRequestQueryTimeDimensionDateRangeFilter { } diff --git a/rust/cubesql/cubeclient/src/models/v1_load_response.rs b/rust/cubesql/cubeclient/src/models/v1_load_response.rs index 35d7b8d4cad87..21b52b844b68a 100644 --- a/rust/cubesql/cubeclient/src/models/v1_load_response.rs +++ b/rust/cubesql/cubeclient/src/models/v1_load_response.rs @@ -8,7 +8,10 @@ * Generated by: https://openapi-generator.tech */ -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] +use crate::models; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct V1LoadResponse { #[serde(rename = "pivotQuery", skip_serializing_if = "Option::is_none")] pub pivot_query: Option, @@ -17,11 +20,11 @@ pub struct V1LoadResponse { #[serde(rename = "queryType", skip_serializing_if = "Option::is_none")] pub query_type: Option, #[serde(rename = "results")] - pub results: Vec, + pub results: Vec, } impl V1LoadResponse { - pub fn new(results: Vec) -> V1LoadResponse { + pub fn new(results: Vec) -> V1LoadResponse { V1LoadResponse { pivot_query: None, slow_query: None, diff --git a/rust/cubesql/cubeclient/src/models/v1_load_result.rs b/rust/cubesql/cubeclient/src/models/v1_load_result.rs index 7b50ab1633e59..b0610626d6d41 100644 --- a/rust/cubesql/cubeclient/src/models/v1_load_result.rs +++ b/rust/cubesql/cubeclient/src/models/v1_load_result.rs @@ -7,12 +7,16 @@ * * Generated by: https://openapi-generator.tech */ -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] + +use crate::models; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct V1LoadResult { #[serde(rename = "dataSource", skip_serializing_if = "Option::is_none")] pub data_source: Option, #[serde(rename = "annotation")] - pub annotation: Box, + pub annotation: Box, #[serde(rename = "data")] pub data: Vec, #[serde(rename = "refreshKeyValues", skip_serializing_if = "Option::is_none")] @@ -21,7 +25,7 @@ pub struct V1LoadResult { impl V1LoadResult { pub fn new( - annotation: crate::models::V1LoadResultAnnotation, + annotation: models::V1LoadResultAnnotation, data: Vec, ) -> V1LoadResult { V1LoadResult { diff --git a/rust/cubesql/cubeclient/src/models/v1_load_result_annotation.rs b/rust/cubesql/cubeclient/src/models/v1_load_result_annotation.rs index 5b4bec4802bc8..232cf4563df0c 100644 --- a/rust/cubesql/cubeclient/src/models/v1_load_result_annotation.rs +++ b/rust/cubesql/cubeclient/src/models/v1_load_result_annotation.rs @@ -8,7 +8,10 @@ * Generated by: https://openapi-generator.tech */ -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] +use crate::models; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct V1LoadResultAnnotation { #[serde(rename = "measures")] pub measures: serde_json::Value, diff --git a/rust/cubesql/cubeclient/src/models/v1_meta_response.rs b/rust/cubesql/cubeclient/src/models/v1_meta_response.rs index a7921d857d9f5..1363c709f82c1 100644 --- a/rust/cubesql/cubeclient/src/models/v1_meta_response.rs +++ b/rust/cubesql/cubeclient/src/models/v1_meta_response.rs @@ -8,10 +8,13 @@ * Generated by: https://openapi-generator.tech */ -#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] +use crate::models; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct V1MetaResponse { #[serde(rename = "cubes", skip_serializing_if = "Option::is_none")] - pub cubes: Option>, + pub cubes: Option>, #[serde(rename = "compilerId", skip_serializing_if = "Option::is_none")] pub compiler_id: Option, } diff --git a/rust/cubesql/package.json b/rust/cubesql/package.json index 0353e6c5a4941..5c243efa0a0c6 100644 --- a/rust/cubesql/package.json +++ b/rust/cubesql/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-backend/cubesql", - "version": "1.3.30", + "version": "1.3.31", "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/cubesqlplanner/Cargo.lock b/rust/cubesqlplanner/Cargo.lock index 33383aae171a6..3c6bb74f6e8f8 100644 --- a/rust/cubesqlplanner/Cargo.lock +++ b/rust/cubesqlplanner/Cargo.lock @@ -682,8 +682,8 @@ dependencies = [ "reqwest", "reqwest-middleware", "serde", - "serde_derive", "serde_json", + "serde_repr", "tokio", "url", "uuid 1.9.1", @@ -2757,6 +2757,17 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_repr" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" diff --git a/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/multistage/rolling_window.rs b/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/multistage/rolling_window.rs index 2d4b5f7699351..9301ec0e77f7f 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/multistage/rolling_window.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/multistage/rolling_window.rs @@ -1,6 +1,7 @@ use crate::logical_plan::*; use crate::planner::query_properties::OrderByItem; use crate::planner::sql_evaluator::MemberSymbol; +use crate::planner::Granularity; use std::rc::Rc; pub struct MultiStageRegularRollingWindow { @@ -24,14 +25,17 @@ impl PrettyPrint for MultiStageRegularRollingWindow { } pub struct MultiStageToDateRollingWindow { - pub granularity: String, + pub granularity_obj: Rc, } impl PrettyPrint for MultiStageToDateRollingWindow { fn pretty_print(&self, result: &mut PrettyPrintResult, state: &PrettyPrintState) { result.println("ToDate Rolling Window", state); let state = state.new_level(); - result.println(&format!("granularity: {}", self.granularity), &state); + result.println( + &format!("granularity: {}", self.granularity_obj.granularity()), + &state, + ); } } diff --git a/rust/cubesqlplanner/cubesqlplanner/src/physical_plan_builder/builder.rs b/rust/cubesqlplanner/cubesqlplanner/src/physical_plan_builder/builder.rs index 2923330135c2b..2c66e0977b4a6 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/physical_plan_builder/builder.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/physical_plan_builder/builder.rs @@ -1061,7 +1061,7 @@ impl PhysicalPlanBuilder { MultiStageRollingWindowType::ToDate(to_date_rolling_window) => { JoinCondition::new_to_date_rolling_join( root_alias.clone(), - to_date_rolling_window.granularity.clone(), + to_date_rolling_window.granularity_obj.clone(), Expr::Reference(QualifiedColumnName::new( Some(measure_input_alias.clone()), base_time_dimension_alias, @@ -1092,7 +1092,7 @@ impl PhysicalPlanBuilder { let mut render_references = HashMap::new(); let mut select_builder = SelectBuilder::new(from.clone()); - //We insert render reference for main time dimension (with the some granularity as in time series to avoid unnecessary date_tranc) + //We insert render reference for main time dimension (with some granularity as in time series to avoid unnecessary date_tranc) render_references.insert( time_dimension.full_name(), QualifiedColumnName::new(Some(root_alias.clone()), format!("date_from")), diff --git a/rust/cubesqlplanner/cubesqlplanner/src/plan/join.rs b/rust/cubesqlplanner/cubesqlplanner/src/plan/join.rs index 66171dc9ce231..e3c64d746d3cd 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/plan/join.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/plan/join.rs @@ -1,7 +1,7 @@ use super::{Expr, SingleAliasedSource}; use crate::planner::query_tools::QueryTools; use crate::planner::sql_templates::PlanSqlTemplates; -use crate::planner::{BaseJoinCondition, VisitorContext}; +use crate::planner::{BaseJoinCondition, Granularity, VisitorContext}; use cubenativeutils::CubeError; use lazy_static::lazy_static; @@ -118,7 +118,7 @@ impl RollingTotalJoinCondition { } pub struct ToDateRollingWindowJoinCondition { time_series_source: String, - granularity: String, + granularity: Rc, time_dimension: Expr, _query_tools: Rc, } @@ -126,7 +126,7 @@ pub struct ToDateRollingWindowJoinCondition { impl ToDateRollingWindowJoinCondition { pub fn new( time_series_source: String, - granularity: String, + granularity: Rc, time_dimension: Expr, query_tools: Rc, ) -> Self { @@ -151,7 +151,7 @@ impl ToDateRollingWindowJoinCondition { templates.column_reference(&Some(self.time_series_source.clone()), "date_to")?; let date_from = templates.rolling_window_expr_timestamp_cast(&date_from)?; let date_to = templates.rolling_window_expr_timestamp_cast(&date_to)?; - let grouped_from = templates.time_grouped_column(self.granularity.clone(), date_from)?; + let grouped_from = self.granularity.apply_to_input_sql(templates, date_from)?; let result = format!("{date_column} >= {grouped_from} and {date_column} <= {date_to}"); Ok(result) } @@ -243,7 +243,7 @@ impl JoinCondition { pub fn new_to_date_rolling_join( time_series_source: String, - granularity: String, + granularity: Rc, time_dimension: Expr, query_tools: Rc, ) -> Self { diff --git a/rust/cubesqlplanner/cubesqlplanner/src/planner/filter/base_filter.rs b/rust/cubesqlplanner/cubesqlplanner/src/planner/filter/base_filter.rs index 0a5628e0293fd..8cab5a19275ea 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/planner/filter/base_filter.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/planner/filter/base_filter.rs @@ -3,8 +3,8 @@ use crate::planner::query_tools::QueryTools; use crate::planner::sql_evaluator::MemberSymbol; use crate::planner::sql_templates::PlanSqlTemplates; use crate::planner::sql_templates::TemplateProjectionColumn; -use crate::planner::QueryDateTimeHelper; use crate::planner::{evaluate_with_context, FiltersContext, VisitorContext}; +use crate::planner::{Granularity, GranularityHelper, QueryDateTimeHelper}; use cubenativeutils::CubeError; use std::rc::Rc; @@ -188,13 +188,47 @@ impl BaseFilter { filters_context, &member_type, )?, - FilterOperator::ToDateRollingWindowDateRange => self - .to_date_rolling_window_date_range( + FilterOperator::ToDateRollingWindowDateRange => { + let query_granularity = if self.values.len() >= 3 { + if let Some(granularity) = &self.values[2] { + granularity + } else { + return Err(CubeError::user( + "Granularity required for to_date rolling window".to_string(), + )); + } + } else { + return Err(CubeError::user( + "Granularity required for to_date rolling window".to_string(), + )); + }; + let evaluator_compiler_cell = self.query_tools.evaluator_compiler().clone(); + let mut evaluator_compiler = evaluator_compiler_cell.borrow_mut(); + + let Some(granularity_obj) = GranularityHelper::make_granularity_obj( + self.query_tools.cube_evaluator().clone(), + &mut evaluator_compiler, + self.query_tools.timezone().clone(), + &symbol.cube_name(), + &symbol.name(), + Some(query_granularity.clone()), + )? + else { + return Err(CubeError::internal(format!( + "Rolling window granularity '{}' is not found in time dimension '{}'", + query_granularity, + symbol.name() + ))); + }; + + self.to_date_rolling_window_date_range( &member_sql, plan_templates, filters_context, &member_type, - )?, + granularity_obj, + )? + } FilterOperator::In => { self.in_where(&member_sql, plan_templates, filters_context, &member_type)? } @@ -539,22 +573,11 @@ impl BaseFilter { plan_templates: &PlanSqlTemplates, _filters_context: &FiltersContext, _member_type: &Option, + granularity_obj: Granularity, ) -> Result { let (from, to) = self.date_range_from_time_series(plan_templates)?; - let from = if self.values.len() >= 3 { - if let Some(granularity) = &self.values[2] { - plan_templates.time_grouped_column(granularity.clone(), from)? - } else { - return Err(CubeError::user(format!( - "Granularity required for to_date rolling window" - ))); - } - } else { - return Err(CubeError::user(format!( - "Granularity required for to_date rolling window" - ))); - }; + let from = granularity_obj.apply_to_input_sql(plan_templates, from.clone())?; let date_field = plan_templates.convert_tz(member_sql.to_string())?; plan_templates.time_range_filter(date_field, from, to) diff --git a/rust/cubesqlplanner/cubesqlplanner/src/planner/planners/multi_stage/member_query_planner.rs b/rust/cubesqlplanner/cubesqlplanner/src/planner/planners/multi_stage/member_query_planner.rs index 7cad1c4e66f54..a481a23c26dba 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/planner/planners/multi_stage/member_query_planner.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/planner/planners/multi_stage/member_query_planner.rs @@ -6,7 +6,9 @@ use crate::logical_plan::*; use crate::planner::planners::{multi_stage::RollingWindowType, QueryPlanner, SimpleQueryPlanner}; use crate::planner::query_tools::QueryTools; use crate::planner::sql_evaluator::MemberSymbol; -use crate::planner::{BaseDimension, BaseMeasure, BaseMember, BaseMemberHelper, BaseTimeDimension}; +use crate::planner::{ + BaseDimension, BaseMeasure, BaseMember, BaseMemberHelper, BaseTimeDimension, GranularityHelper, +}; use crate::planner::{OrderByItem, QueryProperties}; use cubenativeutils::CubeError; @@ -126,8 +128,30 @@ impl MultiStageMemberQueryPlanner { }) } RollingWindowType::ToDate(to_date_rolling_window) => { + let time_dimension = &rolling_window_desc.time_dimension; + let query_granularity = to_date_rolling_window.granularity.clone(); + + let evaluator_compiler_cell = self.query_tools.evaluator_compiler().clone(); + let mut evaluator_compiler = evaluator_compiler_cell.borrow_mut(); + + let Some(granularity_obj) = GranularityHelper::make_granularity_obj( + self.query_tools.cube_evaluator().clone(), + &mut evaluator_compiler, + self.query_tools.timezone().clone(), + time_dimension.cube_name(), + time_dimension.name(), + Some(query_granularity.clone()), + )? + else { + return Err(CubeError::internal(format!( + "Rolling window granularity '{}' is not found in time dimension '{}'", + query_granularity, + time_dimension.name() + ))); + }; + MultiStageRollingWindowType::ToDate(MultiStageToDateRollingWindow { - granularity: to_date_rolling_window.granularity.clone(), + granularity_obj: Rc::new(granularity_obj), }) } RollingWindowType::RunningTotal => MultiStageRollingWindowType::RunningTotal, diff --git a/rust/cubesqlplanner/cubesqlplanner/src/planner/sql_evaluator/sql_nodes/time_dimension.rs b/rust/cubesqlplanner/cubesqlplanner/src/planner/sql_evaluator/sql_nodes/time_dimension.rs index 4376d59887642..b24c59e22ee1a 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/planner/sql_evaluator/sql_nodes/time_dimension.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/planner/sql_evaluator/sql_nodes/time_dimension.rs @@ -62,30 +62,7 @@ impl SqlNode for TimeDimensionNode { templates.convert_tz(input_sql)? }; - let res = if granularity_obj.is_natural_aligned() { - if let Some(granularity_offset) = granularity_obj.granularity_offset() { - let dt = templates - .subtract_interval(converted_tz, granularity_offset.clone())?; - let dt = templates.time_grouped_column( - granularity_obj.granularity_from_interval()?, - dt, - )?; - templates.add_interval(dt, granularity_offset.clone())? - } else { - templates.time_grouped_column( - granularity_obj.granularity().clone(), - converted_tz, - )? - } - } else { - templates.date_bin( - granularity_obj.granularity_interval().clone(), - converted_tz, - granularity_obj.origin_local_formatted(), - )? - }; - - res + granularity_obj.apply_to_input_sql(templates, converted_tz)? } else { input_sql }; diff --git a/rust/cubesqlplanner/cubesqlplanner/src/planner/sql_templates/plan.rs b/rust/cubesqlplanner/cubesqlplanner/src/planner/sql_templates/plan.rs index 69cb7400e9c26..5221a6ddb502e 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/planner/sql_templates/plan.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/planner/sql_templates/plan.rs @@ -62,6 +62,15 @@ impl PlanSqlTemplates { .time_grouped_column(granularity, dimension) } + pub fn date_bin( + &self, + interval: String, + source: String, + origin: String, + ) -> Result { + self.driver_tools.date_bin(interval, source, origin) + } + pub fn timestamp_precision(&self) -> Result { self.driver_tools.timestamp_precision() } @@ -121,14 +130,6 @@ impl PlanSqlTemplates { self.driver_tools.count_distinct_approx(sql) } - pub fn date_bin( - &self, - interval: String, - source: String, - origin: String, - ) -> Result { - self.driver_tools.date_bin(interval, source, origin) - } pub fn alias_name(name: &str) -> String { let res = name .with_boundaries(&[ diff --git a/rust/cubesqlplanner/cubesqlplanner/src/planner/time_dimension/granularity.rs b/rust/cubesqlplanner/cubesqlplanner/src/planner/time_dimension/granularity.rs index 0e5e0d242ff5a..4a480e11be3bb 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/planner/time_dimension/granularity.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/planner/time_dimension/granularity.rs @@ -1,5 +1,6 @@ use super::{GranularityHelper, QueryDateTime, SqlInterval}; use crate::planner::sql_evaluator::SqlCall; +use crate::planner::sql_templates::PlanSqlTemplates; use chrono_tz::Tz; use cubenativeutils::CubeError; use itertools::Itertools; @@ -166,4 +167,29 @@ impl Granularity { fn default_origin(timezone: Tz) -> Result { Ok(QueryDateTime::now(timezone)?.start_of_year()) } + + pub fn apply_to_input_sql( + &self, + templates: &PlanSqlTemplates, + input: String, + ) -> Result { + let res = if self.is_natural_aligned { + if let Some(offset) = &self.granularity_offset { + let mut res = templates.subtract_interval(input.clone(), offset.clone())?; + res = templates.time_grouped_column(self.granularity_from_interval()?, res)?; + res = templates.add_interval(res, offset.clone())?; + res + } else { + templates.time_grouped_column(self.granularity_from_interval()?, input)? + } + } else { + templates.date_bin( + self.granularity_interval.clone(), + input, + self.origin_local_formatted(), + )? + }; + + Ok(res) + } } diff --git a/rust/cubesqlplanner/cubesqlplanner/src/planner/time_dimension/sql_interval.rs b/rust/cubesqlplanner/cubesqlplanner/src/planner/time_dimension/sql_interval.rs index ebd130787fd62..8d5ce117d4d7c 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/planner/time_dimension/sql_interval.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/planner/time_dimension/sql_interval.rs @@ -6,6 +6,7 @@ use std::str::FromStr; #[derive(Default, Debug, PartialEq, Clone, Hash, Eq)] pub struct SqlInterval { pub year: i32, + pub quarter: i32, pub month: i32, pub week: i32, pub day: i32, @@ -17,6 +18,7 @@ pub struct SqlInterval { impl SqlInterval { pub fn new( year: i32, + quarter: i32, month: i32, week: i32, day: i32, @@ -26,6 +28,7 @@ impl SqlInterval { ) -> Self { Self { year, + quarter, month, week, day, @@ -48,12 +51,14 @@ impl SqlInterval { "week" } else if self.month != 0 { "month" + } else if self.quarter != 0 { + "quarter" } else if self.year != 0 { "year" } else { - return Err(CubeError::internal(format!( - "Attempt to get granularity from empty SqlInterval" - ))); + return Err(CubeError::internal( + "Attempt to get granularity from empty SqlInterval".to_string(), + )); }; Ok(res.to_string()) } @@ -63,6 +68,9 @@ impl SqlInterval { if self.year != 0 { res.push(format!("{} year", self.year)); } + if self.quarter != 0 { + res.push(format!("{} quarter", self.quarter)); + } if self.month != 0 { res.push(format!("{} month", self.month)); } @@ -87,6 +95,7 @@ impl SqlInterval { pub fn inverse(&self) -> Self { Self::new( -self.year, + -self.quarter, -self.month, -self.week, -self.day, @@ -102,6 +111,7 @@ impl Add for SqlInterval { fn add(self, other: SqlInterval) -> SqlInterval { SqlInterval::new( self.year + other.year, + self.quarter + other.quarter, self.month + other.month, self.week + other.week, self.day + other.day, @@ -115,6 +125,7 @@ impl Add for SqlInterval { impl AddAssign<&SqlInterval> for SqlInterval { fn add_assign(&mut self, other: &SqlInterval) { self.year += other.year; + self.quarter += other.quarter; self.month += other.month; self.week += other.week; self.day += other.day; @@ -135,6 +146,7 @@ impl Sub for SqlInterval { fn sub(self, other: SqlInterval) -> SqlInterval { SqlInterval::new( self.year - other.year, + self.quarter - other.quarter, self.month - other.month, self.week - other.week, self.day - other.day, @@ -150,6 +162,7 @@ impl Neg for SqlInterval { fn neg(self) -> SqlInterval { SqlInterval::new( -self.year, + -self.quarter, -self.month, -self.week, -self.day, @@ -175,6 +188,7 @@ impl FromStr for SqlInterval { "day" | "days" => result.day = value, "week" | "weeks" => result.week = value, "month" | "months" => result.month = value, + "quarter" | "quarters" => result.quarter = value, "year" | "years" => result.year = value, other => return Err(CubeError::user(format!("Invalid interval unit: {}", other))), } @@ -191,28 +205,28 @@ mod tests { fn test_from_str() { assert_eq!( SqlInterval::from_str("1 second").unwrap(), - SqlInterval::new(0, 0, 0, 0, 0, 0, 1) + SqlInterval::new(0, 0, 0, 0, 0, 0, 0, 1) ); assert_eq!( SqlInterval::from_str("1 year 3 months 4 weeks 2 day 4 hours 2 minutes 1 second") .unwrap(), - SqlInterval::new(1, 3, 4, 2, 4, 2, 1) + SqlInterval::new(1, 0, 3, 4, 2, 4, 2, 1) ); } #[test] fn test_arithmetic() { assert_eq!( - SqlInterval::new(1, 3, 4, 2, 4, 2, 1) + SqlInterval::new(1, 3, 4, 2, 4, 2, 1), - SqlInterval::new(2, 6, 8, 4, 8, 4, 2) + SqlInterval::new(1, 0, 3, 4, 2, 4, 2, 1) + SqlInterval::new(1, 0, 3, 4, 2, 4, 2, 1), + SqlInterval::new(2, 0, 6, 8, 4, 8, 4, 2) ); assert_eq!( - SqlInterval::new(1, 3, 4, 2, 4, 2, 1) - SqlInterval::new(1, 4, 4, 2, 2, 2, 1), - SqlInterval::new(0, -1, 0, 0, 2, 0, 0) + SqlInterval::new(1, 0, 3, 4, 2, 4, 2, 1) - SqlInterval::new(1, 0, 4, 4, 2, 2, 2, 1), + SqlInterval::new(0, 0, -1, 0, 0, 2, 0, 0) ); assert_eq!( - -SqlInterval::new(1, 3, -4, 2, 4, 2, 1), - SqlInterval::new(-1, -3, 4, -2, -4, -2, -1) + -SqlInterval::new(1, 0, 3, -4, 2, 4, 2, 1), + SqlInterval::new(-1, 0, -3, 4, -2, -4, -2, -1) ); } } diff --git a/rust/cubestore/CHANGELOG.md b/rust/cubestore/CHANGELOG.md index ecb07fb4e88d8..ceaf174de2475 100644 --- a/rust/cubestore/CHANGELOG.md +++ b/rust/cubestore/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.3.31](https://github.com/cube-js/cube/compare/v1.3.30...v1.3.31) (2025-07-02) + +### Features + +- **cubestore:** Use seperate working loop for queue ([#6243](https://github.com/cube-js/cube/issues/6243)) ([f961f97](https://github.com/cube-js/cube/commit/f961f97328efbd6535cbcaf510c38904984b0970)) + ## [1.3.30](https://github.com/cube-js/cube/compare/v1.3.29...v1.3.30) (2025-07-01) **Note:** Version bump only for package @cubejs-backend/cubestore diff --git a/rust/cubestore/cubestore/src/cachestore/cache_rocksstore.rs b/rust/cubestore/cubestore/src/cachestore/cache_rocksstore.rs index 08e8045ab8d73..e82e22803c1d1 100644 --- a/rust/cubestore/cubestore/src/cachestore/cache_rocksstore.rs +++ b/rust/cubestore/cubestore/src/cachestore/cache_rocksstore.rs @@ -15,7 +15,7 @@ use std::env; use crate::metastore::{ BaseRocksStoreFs, BatchPipe, DbTableRef, IdRow, MetaStoreEvent, MetaStoreFs, RocksPropertyRow, - RocksStore, RocksStoreDetails, RocksTable, RocksTableStats, + RocksStore, RocksStoreDetails, RocksStoreRWLoop, RocksTable, RocksTableStats, }; use crate::remotefs::LocalDirRemoteFs; use crate::util::WorkerLoop; @@ -184,6 +184,7 @@ pub struct RocksCacheStore { cache_eviction_manager: CacheEvictionManager, upload_loop: Arc, metrics_loop: Arc, + rw_loop_queue_cf: RocksStoreRWLoop, } impl RocksCacheStore { @@ -222,6 +223,7 @@ impl RocksCacheStore { cache_eviction_manager, upload_loop: Arc::new(WorkerLoop::new("Cachestore upload")), metrics_loop: Arc::new(WorkerLoop::new("Cachestore metrics")), + rw_loop_queue_cf: RocksStoreRWLoop::new("queue"), })) } @@ -500,29 +502,60 @@ impl RocksCacheStore { } impl RocksCacheStore { - async fn queue_result_delete_by_id(&self, id: u64) -> Result<(), CubeError> { + #[inline(always)] + pub async fn write_operation_queue( + &self, + op_name: &'static str, + f: F, + ) -> Result + where + F: for<'a> FnOnce(DbTableRef<'a>, &'a mut BatchPipe) -> Result + + Send + + Sync + + 'static, + R: Send + Sync + 'static, + { self.store - .write_operation("queue_result_delete_by_id", move |db_ref, batch_pipe| { - let result_schema = QueueResultRocksTable::new(db_ref.clone()); - result_schema.try_delete(id, batch_pipe)?; + .write_operation_impl::(&self.rw_loop_queue_cf, op_name, f) + .await + } - Ok(()) - }) + #[inline(always)] + pub async fn read_operation_queue( + &self, + op_name: &'static str, + f: F, + ) -> Result + where + F: for<'a> FnOnce(DbTableRef<'a>) -> Result + Send + Sync + 'static, + R: Send + Sync + 'static, + { + self.store + .read_operation_impl::(&self.rw_loop_queue_cf, op_name, f) .await } + async fn queue_result_delete_by_id(&self, id: u64) -> Result<(), CubeError> { + self.write_operation_queue("queue_result_delete_by_id", move |db_ref, batch_pipe| { + let result_schema = QueueResultRocksTable::new(db_ref.clone()); + result_schema.try_delete(id, batch_pipe)?; + + Ok(()) + }) + .await + } + /// This method should be called when we are sure that we return data to the consumer async fn queue_result_ready_to_delete(&self, id: u64) -> Result<(), CubeError> { - self.store - .write_operation("queue_result_ready_to_delete", move |db_ref, batch_pipe| { - let result_schema = QueueResultRocksTable::new(db_ref.clone()); - if let Some(row) = result_schema.get_row(id)? { - Self::queue_result_ready_to_delete_impl(&result_schema, batch_pipe, row)?; - } + self.write_operation_queue("queue_result_ready_to_delete", move |db_ref, batch_pipe| { + let result_schema = QueueResultRocksTable::new(db_ref.clone()); + if let Some(row) = result_schema.get_row(id)? { + Self::queue_result_ready_to_delete_impl(&result_schema, batch_pipe, row)?; + } - Ok(()) - }) - .await + Ok(()) + }) + .await } /// This method should be called when we are sure that we return data to the consumer @@ -554,33 +587,32 @@ impl RocksCacheStore { &self, key: QueueKey, ) -> Result, CubeError> { - self.store - .write_operation("lookup_queue_result_by_key", move |db_ref, batch_pipe| { - let result_schema = QueueResultRocksTable::new(db_ref.clone()); - let query_key_is_path = key.is_path(); - let queue_result = result_schema.get_row_by_key(key.clone())?; - - if let Some(queue_result) = queue_result { - if query_key_is_path { - if queue_result.get_row().is_deleted() { - Ok(None) - } else { - Self::queue_result_ready_to_delete_impl( - &result_schema, - batch_pipe, - queue_result, - ) - } + self.write_operation_queue("lookup_queue_result_by_key", move |db_ref, batch_pipe| { + let result_schema = QueueResultRocksTable::new(db_ref.clone()); + let query_key_is_path = key.is_path(); + let queue_result = result_schema.get_row_by_key(key.clone())?; + + if let Some(queue_result) = queue_result { + if query_key_is_path { + if queue_result.get_row().is_deleted() { + Ok(None) } else { - Ok(Some(QueueResultResponse::Success { - value: Some(queue_result.into_row().value), - })) + Self::queue_result_ready_to_delete_impl( + &result_schema, + batch_pipe, + queue_result, + ) } } else { - Ok(None) + Ok(Some(QueueResultResponse::Success { + value: Some(queue_result.into_row().value), + })) } - }) - .await + } else { + Ok(None) + } + }) + .await } fn filter_to_cancel( @@ -1040,94 +1072,89 @@ impl CacheStore for RocksCacheStore { &self, limit: Option, ) -> Result>, CubeError> { - self.store - .read_operation("queue_results_all", move |db_ref| { - Ok(QueueResultRocksTable::new(db_ref).scan_rows(limit)?) - }) - .await + self.read_operation_queue("queue_results_all", move |db_ref| { + Ok(QueueResultRocksTable::new(db_ref).scan_rows(limit)?) + }) + .await } async fn queue_results_multi_delete(&self, ids: Vec) -> Result<(), CubeError> { - self.store - .write_operation("queue_results_multi_delete", move |db_ref, batch_pipe| { - let queue_result_schema = QueueResultRocksTable::new(db_ref); + self.write_operation_queue("queue_results_multi_delete", move |db_ref, batch_pipe| { + let queue_result_schema = QueueResultRocksTable::new(db_ref); - for id in ids { - queue_result_schema.try_delete(id, batch_pipe)?; - } + for id in ids { + queue_result_schema.try_delete(id, batch_pipe)?; + } - Ok(()) - }) - .await + Ok(()) + }) + .await } async fn queue_add(&self, payload: QueueAddPayload) -> Result { - self.store - .write_operation("queue_add", move |db_ref, batch_pipe| { - let queue_schema = QueueItemRocksTable::new(db_ref.clone()); - let pending = queue_schema.count_rows_by_index( - &QueueItemIndexKey::ByPrefixAndStatus( - QueueItem::extract_prefix(payload.path.clone()).unwrap_or("".to_string()), - QueueItemStatus::Pending, - ), - &QueueItemRocksIndex::ByPrefixAndStatus, - )?; - - let index_key = QueueItemIndexKey::ByPath(payload.path.clone()); - let id_row_opt = queue_schema - .get_single_opt_row_by_index(&index_key, &QueueItemRocksIndex::ByPath)?; + self.write_operation_queue("queue_add", move |db_ref, batch_pipe| { + let queue_schema = QueueItemRocksTable::new(db_ref.clone()); + let pending = queue_schema.count_rows_by_index( + &QueueItemIndexKey::ByPrefixAndStatus( + QueueItem::extract_prefix(payload.path.clone()).unwrap_or("".to_string()), + QueueItemStatus::Pending, + ), + &QueueItemRocksIndex::ByPrefixAndStatus, + )?; - let (id, added) = if let Some(row) = id_row_opt { - (row.id, false) - } else { - let queue_item_row = queue_schema.insert( - QueueItem::new( - payload.path, - QueueItem::status_default(), - payload.priority, - payload.orphaned.clone(), - ), - batch_pipe, - )?; + let index_key = QueueItemIndexKey::ByPath(payload.path.clone()); + let id_row_opt = queue_schema + .get_single_opt_row_by_index(&index_key, &QueueItemRocksIndex::ByPath)?; - let queue_payload_schema = QueueItemPayloadRocksTable::new(db_ref.clone()); - queue_payload_schema.insert_with_pk( - queue_item_row.id, - QueueItemPayload::new( - payload.value, - queue_item_row.row.get_created().clone(), - queue_item_row.row.get_expire().clone(), - ), - batch_pipe, - )?; + let (id, added) = if let Some(row) = id_row_opt { + (row.id, false) + } else { + let queue_item_row = queue_schema.insert( + QueueItem::new( + payload.path, + QueueItem::status_default(), + payload.priority, + payload.orphaned.clone(), + ), + batch_pipe, + )?; + let queue_payload_schema = QueueItemPayloadRocksTable::new(db_ref.clone()); + queue_payload_schema.insert_with_pk( + queue_item_row.id, + QueueItemPayload::new( + payload.value, + queue_item_row.row.get_created().clone(), + queue_item_row.row.get_expire().clone(), + ), + batch_pipe, + )?; - (queue_item_row.id, true) - }; + (queue_item_row.id, true) + }; - Ok(QueueAddResponse { - id, - added, - pending: if added { pending + 1 } else { pending }, - }) + Ok(QueueAddResponse { + id, + added, + pending: if added { pending + 1 } else { pending }, }) - .await + }) + .await } async fn queue_truncate(&self) -> Result<(), CubeError> { - self.store - .write_operation("queue_truncate", move |db_ref, batch_pipe| { - let queue_item_schema = QueueItemRocksTable::new(db_ref.clone()); - queue_item_schema.truncate(batch_pipe)?; + self.write_operation_queue("queue_truncate", move |db_ref, batch_pipe| { + let queue_item_schema = QueueItemRocksTable::new(db_ref.clone()); + queue_item_schema.truncate(batch_pipe)?; - let queue_item_payload_schema = QueueItemPayloadRocksTable::new(db_ref.clone()); - queue_item_payload_schema.truncate(batch_pipe)?; + let queue_item_payload_schema = QueueItemPayloadRocksTable::new(db_ref.clone()); + queue_item_payload_schema.truncate(batch_pipe)?; - let queue_result_schema = QueueResultRocksTable::new(db_ref); - queue_result_schema.truncate(batch_pipe)?; + let queue_result_schema = QueueResultRocksTable::new(db_ref); + queue_result_schema.truncate(batch_pipe)?; - Ok(()) - }) - .await?; + Ok(()) + }) + .await?; Ok(()) } @@ -1138,21 +1165,20 @@ impl CacheStore for RocksCacheStore { orphaned_timeout: Option, heartbeat_timeout: Option, ) -> Result>, CubeError> { - self.store - .read_operation("queue_to_cancel", move |db_ref| { - let queue_schema = QueueItemRocksTable::new(db_ref.clone()); - let index_key = QueueItemIndexKey::ByPrefix(prefix); - let items = - queue_schema.get_rows_by_index(&index_key, &QueueItemRocksIndex::ByPrefix)?; - - Ok(Self::filter_to_cancel( - db_ref.start_time.clone(), - items, - orphaned_timeout, - heartbeat_timeout, - )) - }) - .await + self.read_operation_queue("queue_to_cancel", move |db_ref| { + let queue_schema = QueueItemRocksTable::new(db_ref.clone()); + let index_key = QueueItemIndexKey::ByPrefix(prefix); + let items = + queue_schema.get_rows_by_index(&index_key, &QueueItemRocksIndex::ByPrefix)?; + + Ok(Self::filter_to_cancel( + db_ref.start_time.clone(), + items, + orphaned_timeout, + heartbeat_timeout, + )) + }) + .await } async fn queue_list( @@ -1162,130 +1188,124 @@ impl CacheStore for RocksCacheStore { priority_sort: bool, with_payload: bool, ) -> Result, CubeError> { - self.store - .read_operation("queue_list", move |db_ref| { - let queue_schema = QueueItemRocksTable::new(db_ref.clone()); + self.read_operation_queue("queue_list", move |db_ref| { + let queue_schema = QueueItemRocksTable::new(db_ref.clone()); - let items = if let Some(status_filter) = status_filter { - let index_key = QueueItemIndexKey::ByPrefixAndStatus(prefix, status_filter); - queue_schema - .get_rows_by_index(&index_key, &QueueItemRocksIndex::ByPrefixAndStatus)? - } else { - let index_key = QueueItemIndexKey::ByPrefix(prefix); - queue_schema.get_rows_by_index(&index_key, &QueueItemRocksIndex::ByPrefix)? - }; - - let items = if priority_sort { - items - .into_iter() - .sorted_by(|a, b| b.row.cmp(&a.row)) - .collect() - } else { - items - }; + let items = if let Some(status_filter) = status_filter { + let index_key = QueueItemIndexKey::ByPrefixAndStatus(prefix, status_filter); + queue_schema + .get_rows_by_index(&index_key, &QueueItemRocksIndex::ByPrefixAndStatus)? + } else { + let index_key = QueueItemIndexKey::ByPrefix(prefix); + queue_schema.get_rows_by_index(&index_key, &QueueItemRocksIndex::ByPrefix)? + }; - if with_payload { - let queue_payload_schema = QueueItemPayloadRocksTable::new(db_ref.clone()); - let mut res = Vec::with_capacity(items.len()); + let items = if priority_sort { + items + .into_iter() + .sorted_by(|a, b| b.row.cmp(&a.row)) + .collect() + } else { + items + }; - for item in items { - if let Some(payload_row) = queue_payload_schema.get_row(item.get_id())? { - res.push(QueueListItem::WithPayload( - item, - payload_row.into_row().value, - )); - } else { - res.push(QueueListItem::ItemOnly(item)); - } + if with_payload { + let queue_payload_schema = QueueItemPayloadRocksTable::new(db_ref.clone()); + let mut res = Vec::with_capacity(items.len()); + + for item in items { + if let Some(payload_row) = queue_payload_schema.get_row(item.get_id())? { + res.push(QueueListItem::WithPayload( + item, + payload_row.into_row().value, + )); + } else { + res.push(QueueListItem::ItemOnly(item)); } - - Ok(res) - } else { - Ok(items - .into_iter() - .map(|item| QueueListItem::ItemOnly(item)) - .collect()) } - }) - .await + + Ok(res) + } else { + Ok(items + .into_iter() + .map(|item| QueueListItem::ItemOnly(item)) + .collect()) + } + }) + .await } async fn queue_get(&self, key: QueueKey) -> Result, CubeError> { - self.store - .read_operation("queue_get", move |db_ref| { - let queue_schema = QueueItemRocksTable::new(db_ref.clone()); - - if let Some(item_row) = queue_schema.get_row_by_key(key)? { - let queue_payload_schema = QueueItemPayloadRocksTable::new(db_ref.clone()); + self.read_operation_queue("queue_get", move |db_ref| { + let queue_schema = QueueItemRocksTable::new(db_ref.clone()); - if let Some(payload_row) = queue_payload_schema.get_row(item_row.get_id())? { - Ok(Some(QueueGetResponse { - extra: item_row.into_row().extra, - payload: payload_row.into_row().value, - })) - } else { - error!( - "Unable to find payload for queue item, id = {}", - item_row.get_id() - ); + if let Some(item_row) = queue_schema.get_row_by_key(key)? { + let queue_payload_schema = QueueItemPayloadRocksTable::new(db_ref.clone()); - Ok(None) - } + if let Some(payload_row) = queue_payload_schema.get_row(item_row.get_id())? { + Ok(Some(QueueGetResponse { + extra: item_row.into_row().extra, + payload: payload_row.into_row().value, + })) } else { + error!( + "Unable to find payload for queue item, id = {}", + item_row.get_id() + ); + Ok(None) } - }) - .await + } else { + Ok(None) + } + }) + .await } async fn queue_cancel(&self, key: QueueKey) -> Result, CubeError> { - self.store - .write_operation("queue_cancel", move |db_ref, batch_pipe| { - let queue_schema = QueueItemRocksTable::new(db_ref.clone()); - let queue_payload_schema = QueueItemPayloadRocksTable::new(db_ref.clone()); - - if let Some(id_row) = queue_schema.get_row_by_key(key)? { - let row_id = id_row.get_id(); - let queue_item = queue_schema.delete_row(id_row, batch_pipe)?; - - if let Some(queue_payload) = - queue_payload_schema.try_delete(row_id, batch_pipe)? - { - Ok(Some(QueueCancelResponse { - extra: queue_item.into_row().extra, - value: queue_payload.into_row().value, - })) - } else { - error!("Unable to find payload for queue item, id = {}", row_id); - - Ok(None) - } + self.write_operation_queue("queue_cancel", move |db_ref, batch_pipe| { + let queue_schema = QueueItemRocksTable::new(db_ref.clone()); + let queue_payload_schema = QueueItemPayloadRocksTable::new(db_ref.clone()); + + if let Some(id_row) = queue_schema.get_row_by_key(key)? { + let row_id = id_row.get_id(); + let queue_item = queue_schema.delete_row(id_row, batch_pipe)?; + + if let Some(queue_payload) = queue_payload_schema.try_delete(row_id, batch_pipe)? { + Ok(Some(QueueCancelResponse { + extra: queue_item.into_row().extra, + value: queue_payload.into_row().value, + })) } else { + error!("Unable to find payload for queue item, id = {}", row_id); + Ok(None) } - }) - .await + } else { + Ok(None) + } + }) + .await } async fn queue_heartbeat(&self, key: QueueKey) -> Result<(), CubeError> { - self.store - .write_operation("queue_heartbeat", move |db_ref, batch_pipe| { - let queue_schema = QueueItemRocksTable::new(db_ref.clone()); - let id_row_opt = queue_schema.get_row_by_key(key.clone())?; + self.write_operation_queue("queue_heartbeat", move |db_ref, batch_pipe| { + let queue_schema = QueueItemRocksTable::new(db_ref.clone()); + let id_row_opt = queue_schema.get_row_by_key(key.clone())?; - if let Some(id_row) = id_row_opt { - let mut new = id_row.get_row().clone(); - new.update_heartbeat(); + if let Some(id_row) = id_row_opt { + let mut new = id_row.get_row().clone(); + new.update_heartbeat(); - queue_schema.update(id_row.id, new, id_row.get_row(), batch_pipe)?; - Ok(()) - } else { - trace!("Unable to update heartbeat, unknown key: {:?}", key); + queue_schema.update(id_row.id, new, id_row.get_row(), batch_pipe)?; + Ok(()) + } else { + trace!("Unable to update heartbeat, unknown key: {:?}", key); - Ok(()) - } - }) - .await + Ok(()) + } + }) + .await } async fn queue_retrieve_by_path( @@ -1293,125 +1313,120 @@ impl CacheStore for RocksCacheStore { path: String, allow_concurrency: u32, ) -> Result { - self.store - .write_operation("queue_retrieve_by_path", move |db_ref, batch_pipe| { - let queue_schema = QueueItemRocksTable::new(db_ref.clone()); - let prefix = QueueItem::parse_path(path.clone()) - .0 - .unwrap_or("".to_string()); - - let mut pending = queue_schema.count_rows_by_index( - &QueueItemIndexKey::ByPrefixAndStatus(prefix.clone(), QueueItemStatus::Pending), + self.write_operation_queue("queue_retrieve_by_path", move |db_ref, batch_pipe| { + let queue_schema = QueueItemRocksTable::new(db_ref.clone()); + let prefix = QueueItem::parse_path(path.clone()) + .0 + .unwrap_or("".to_string()); + let mut pending = queue_schema.count_rows_by_index( + &QueueItemIndexKey::ByPrefixAndStatus(prefix.clone(), QueueItemStatus::Pending), + &QueueItemRocksIndex::ByPrefixAndStatus, + )?; + + let mut active: Vec = queue_schema + .get_rows_by_index( + &QueueItemIndexKey::ByPrefixAndStatus(prefix, QueueItemStatus::Active), &QueueItemRocksIndex::ByPrefixAndStatus, - )?; - - let mut active: Vec = queue_schema - .get_rows_by_index( - &QueueItemIndexKey::ByPrefixAndStatus(prefix, QueueItemStatus::Active), - &QueueItemRocksIndex::ByPrefixAndStatus, - )? - .into_iter() - .map(|item| item.into_row().key) - .collect(); - if active.len() >= (allow_concurrency as usize) { - return Ok(QueueRetrieveResponse::NotEnoughConcurrency { pending, active }); - } - - let id_row = queue_schema.get_single_opt_row_by_index( - &QueueItemIndexKey::ByPath(path.clone()), - &QueueItemRocksIndex::ByPath, - )?; - let id_row = if let Some(id_row) = id_row { - id_row - } else { - return Ok(QueueRetrieveResponse::NotFound { pending, active }); - }; + )? + .into_iter() + .map(|item| item.into_row().key) + .collect(); + if active.len() >= (allow_concurrency as usize) { + return Ok(QueueRetrieveResponse::NotEnoughConcurrency { pending, active }); + } - if id_row.get_row().get_status() == &QueueItemStatus::Pending { - let mut new = id_row.get_row().clone(); - new.status = QueueItemStatus::Active; - // It's important to insert heartbeat, because - // without that created datetime will be used for orphaned filtering - new.update_heartbeat(); + let id_row = queue_schema.get_single_opt_row_by_index( + &QueueItemIndexKey::ByPath(path.clone()), + &QueueItemRocksIndex::ByPath, + )?; + let id_row = if let Some(id_row) = id_row { + id_row + } else { + return Ok(QueueRetrieveResponse::NotFound { pending, active }); + }; - let queue_payload_schema = QueueItemPayloadRocksTable::new(db_ref.clone()); + if id_row.get_row().get_status() == &QueueItemStatus::Pending { + let mut new = id_row.get_row().clone(); + new.status = QueueItemStatus::Active; + // It's important to insert heartbeat, because + // without that created datetime will be used for orphaned filtering + new.update_heartbeat(); - let res = - queue_schema.update(id_row.get_id(), new, id_row.get_row(), batch_pipe)?; - let payload = if let Some(r) = queue_payload_schema.get_row(res.get_id())? { - r.into_row().value - } else { - error!( - "Unable to find payload for queue item, id = {}", - res.get_id() - ); + let queue_payload_schema = QueueItemPayloadRocksTable::new(db_ref.clone()); - queue_schema.delete_row(res, batch_pipe)?; + let res = + queue_schema.update(id_row.get_id(), new, id_row.get_row(), batch_pipe)?; + let payload = if let Some(r) = queue_payload_schema.get_row(res.get_id())? { + r.into_row().value + } else { + error!( + "Unable to find payload for queue item, id = {}", + res.get_id() + ); - return Ok(QueueRetrieveResponse::NotFound { pending, active }); - }; + queue_schema.delete_row(res, batch_pipe)?; - active.push(res.get_row().get_key().clone()); - pending -= 1; + return Ok(QueueRetrieveResponse::NotFound { pending, active }); + }; - Ok(QueueRetrieveResponse::Success { - id: id_row.get_id(), - payload, - item: res.into_row(), - pending, - active, - }) - } else { - Ok(QueueRetrieveResponse::LockFailed { pending, active }) - } - }) - .await + active.push(res.get_row().get_key().clone()); + pending -= 1; + Ok(QueueRetrieveResponse::Success { + id: id_row.get_id(), + payload, + item: res.into_row(), + pending, + active, + }) + } else { + Ok(QueueRetrieveResponse::LockFailed { pending, active }) + } + }) + .await } async fn queue_ack(&self, key: QueueKey, result: Option) -> Result { - self.store - .write_operation("queue_ack", move |db_ref, batch_pipe| { - let queue_item_tbl = QueueItemRocksTable::new(db_ref.clone()); - let queue_item_payload_tbl = QueueItemPayloadRocksTable::new(db_ref.clone()); - - let item_row = queue_item_tbl.get_row_by_key(key.clone())?; - if let Some(item_row) = item_row { - let path = item_row.get_row().get_path(); - let id = item_row.get_id(); - - queue_item_tbl.delete_row(item_row, batch_pipe)?; - queue_item_payload_tbl.try_delete(id, batch_pipe)?; - - if let Some(result) = result { - let queue_result = QueueResult::new(path.clone(), result); - let result_schema = QueueResultRocksTable::new(db_ref.clone()); - // QueueResult is a result of QueueItem, it's why we can use row_id of QueueItem - let result_row = - result_schema.insert_with_pk(id, queue_result, batch_pipe)?; - - batch_pipe.add_event(MetaStoreEvent::AckQueueItem(QueueResultAckEvent { - id, - path, - result: QueueResultAckEventResult::WithResult { - result: Arc::new(result_row.into_row().value), - }, - })); - } else { - batch_pipe.add_event(MetaStoreEvent::AckQueueItem(QueueResultAckEvent { - id, - path, - result: QueueResultAckEventResult::Empty {}, - })); - } - - Ok(true) + self.write_operation_queue("queue_ack", move |db_ref, batch_pipe| { + let queue_item_tbl = QueueItemRocksTable::new(db_ref.clone()); + let queue_item_payload_tbl = QueueItemPayloadRocksTable::new(db_ref.clone()); + + let item_row = queue_item_tbl.get_row_by_key(key.clone())?; + if let Some(item_row) = item_row { + let path = item_row.get_row().get_path(); + let id = item_row.get_id(); + + queue_item_tbl.delete_row(item_row, batch_pipe)?; + queue_item_payload_tbl.try_delete(id, batch_pipe)?; + + if let Some(result) = result { + let queue_result = QueueResult::new(path.clone(), result); + let result_schema = QueueResultRocksTable::new(db_ref.clone()); + // QueueResult is a result of QueueItem, it's why we can use row_id of QueueItem + let result_row = result_schema.insert_with_pk(id, queue_result, batch_pipe)?; + + batch_pipe.add_event(MetaStoreEvent::AckQueueItem(QueueResultAckEvent { + id, + path, + result: QueueResultAckEventResult::WithResult { + result: Arc::new(result_row.into_row().value), + }, + })); } else { - warn!("Unable to ack queue, unknown key: {:?}", key); - - Ok(false) + batch_pipe.add_event(MetaStoreEvent::AckQueueItem(QueueResultAckEvent { + id, + path, + result: QueueResultAckEventResult::Empty {}, + })); } - }) - .await + + Ok(true) + } else { + warn!("Unable to ack queue, unknown key: {:?}", key); + + Ok(false) + } + }) + .await } async fn queue_result_by_path( @@ -1471,22 +1486,22 @@ impl CacheStore for RocksCacheStore { } async fn queue_merge_extra(&self, key: QueueKey, payload: String) -> Result<(), CubeError> { - self.store - .write_operation("queue_merge_extra", move |db_ref, batch_pipe| { - let queue_schema = QueueItemRocksTable::new(db_ref.clone()); - let id_row_opt = queue_schema.get_row_by_key(key.clone())?; + self.write_operation_queue("queue_merge_extra", move |db_ref, batch_pipe| { + let queue_schema = QueueItemRocksTable::new(db_ref.clone()); - if let Some(id_row) = id_row_opt { - let new = id_row.get_row().merge_extra(payload)?; + let id_row_opt = queue_schema.get_row_by_key(key.clone())?; - queue_schema.update(id_row.id, new, id_row.get_row(), batch_pipe)?; - } else { - warn!("Unable to merge extra, unknown key: {:?}", key); - } + if let Some(id_row) = id_row_opt { + let new = id_row.get_row().merge_extra(payload)?; - Ok(()) - }) - .await + queue_schema.update(id_row.id, new, id_row.get_row(), batch_pipe)?; + } else { + warn!("Unable to merge extra, unknown key: {:?}", key); + } + + Ok(()) + }) + .await } async fn compaction(&self) -> Result<(), CubeError> { diff --git a/rust/cubestore/cubestore/src/metastore/rocks_store.rs b/rust/cubestore/cubestore/src/metastore/rocks_store.rs index cd5b212069e12..9bda9ff02711d 100644 --- a/rust/cubestore/cubestore/src/metastore/rocks_store.rs +++ b/rust/cubestore/cubestore/src/metastore/rocks_store.rs @@ -805,6 +805,58 @@ pub trait RocksStoreDetails: Send + Sync { fn log_enabled(&self) -> bool; } +pub type RocksStoreRWLoopFn = Box Result<(), CubeError> + Send + 'static>; + +#[derive(Debug, Clone)] +pub struct RocksStoreRWLoop { + name: &'static str, + tx: tokio::sync::mpsc::Sender, + _join_handle: Arc>, +} + +impl RocksStoreRWLoop { + pub fn new(name: &'static str) -> Self { + let (tx, mut rx) = tokio::sync::mpsc::channel::(32_768); + + let join_handle = cube_ext::spawn_blocking(move || loop { + if let Some(fun) = rx.blocking_recv() { + match std::panic::catch_unwind(std::panic::AssertUnwindSafe(fun)) { + Err(panic_payload) => { + let restore_error = CubeError::from_panic_payload(panic_payload); + log::error!("Panic during read write loop execution: {}", restore_error); + } + Ok(res) => { + if let Err(e) = res { + log::error!("Error during read write loop execution: {}", e); + } + } + } + } else { + return; + } + }); + + Self { + name, + tx, + _join_handle: Arc::new(AbortingJoinHandle::new(join_handle)), + } + } + + pub async fn schedule(&self, fun: RocksStoreRWLoopFn) -> Result<(), CubeError> { + self.tx.send(fun).await.map_err(|err| { + CubeError::user(format!( + "Failed to schedule task to RWLoop ({}), error: {}", + self.name, err + )) + }) + } + + pub fn get_name(&self) -> &'static str { + self.name + } +} + #[derive(Clone)] pub struct RocksStore { pub db: Arc, @@ -820,10 +872,7 @@ pub struct RocksStore { snapshot_uploaded: Arc>, snapshots_upload_stopped: Arc>, pub(crate) cached_tables: Arc>>>>, - rw_loop_tx: tokio::sync::mpsc::Sender< - Box Result<(), CubeError> + Send + Sync + 'static>, - >, - _rw_loop_join_handle: Arc>, + rw_loop_default_cf: RocksStoreRWLoop, details: Arc, } @@ -863,28 +912,6 @@ impl RocksStore { let db = details.open_db(path, &config)?; let db_arc = Arc::new(db); - let (rw_loop_tx, mut rw_loop_rx) = tokio::sync::mpsc::channel::< - Box Result<(), CubeError> + Send + Sync + 'static>, - >(32_768); - - let join_handle = cube_ext::spawn_blocking(move || loop { - if let Some(fun) = rw_loop_rx.blocking_recv() { - match std::panic::catch_unwind(std::panic::AssertUnwindSafe(fun)) { - Err(panic_payload) => { - let restore_error = CubeError::from_panic_payload(panic_payload); - log::error!("Panic during read write loop execution: {}", restore_error); - } - Ok(res) => { - if let Err(e) = res { - log::error!("Error during read write loop execution: {}", e); - } - } - } - } else { - return; - } - }); - let meta_store = RocksStore { db: db_arc.clone(), seq_store: Arc::new(Mutex::new(HashMap::new())), @@ -899,8 +926,7 @@ impl RocksStore { snapshots_upload_stopped: Arc::new(AsyncMutex::new(false)), config, cached_tables: Arc::new(Mutex::new(None)), - rw_loop_tx, - _rw_loop_join_handle: Arc::new(AbortingJoinHandle::new(join_handle)), + rw_loop_default_cf: RocksStoreRWLoop::new("default"), details, }; @@ -979,7 +1005,25 @@ impl RocksStore { self.listeners.write().await.push(listener); } + #[inline(always)] pub async fn write_operation(&self, op_name: &'static str, f: F) -> Result + where + F: for<'a> FnOnce(DbTableRef<'a>, &'a mut BatchPipe) -> Result + + Send + + Sync + + 'static, + R: Send + Sync + 'static, + { + self.write_operation_impl::(&self.rw_loop_default_cf, op_name, f) + .await + } + + pub async fn write_operation_impl( + &self, + rw_loop: &RocksStoreRWLoop, + op_name: &'static str, + f: F, + ) -> Result where F: for<'a> FnOnce(DbTableRef<'a>, &'a mut BatchPipe) -> Result + Send @@ -991,54 +1035,57 @@ impl RocksStore { let mem_seq = MemorySequence::new(self.seq_store.clone()); let db_to_send = db.clone(); let cached_tables = self.cached_tables.clone(); + + let loop_name = rw_loop.get_name(); let store_name = self.details.get_name(); - let span_name = format!("{} write operation {}", store_name, op_name); + let span_name = format!("{}({}) write operation: {}", store_name, loop_name, op_name); - let rw_loop_sender = self.rw_loop_tx.clone(); let (tx, rx) = oneshot::channel::), CubeError>>(); - let res = rw_loop_sender.send(Box::new(move || { - let db_span = warn_long(&span_name, Duration::from_millis(100)); - - let mut batch = BatchPipe::new(db_to_send.as_ref()); - let snapshot = db_to_send.snapshot(); - let res = f( - DbTableRef { - db: db_to_send.as_ref(), - snapshot: &snapshot, - mem_seq, - start_time: Utc::now(), - }, - &mut batch, - ); - match res { - Ok(res) => { - if batch.invalidate_tables_cache { - *cached_tables.lock().unwrap() = None; + let res = rw_loop + .schedule(Box::new(move || { + let db_span = warn_long(&span_name, Duration::from_millis(100)); + + let mut batch = BatchPipe::new(db_to_send.as_ref()); + let snapshot = db_to_send.snapshot(); + let res = f( + DbTableRef { + db: db_to_send.as_ref(), + snapshot: &snapshot, + mem_seq, + start_time: Utc::now(), + }, + &mut batch, + ); + match res { + Ok(res) => { + if batch.invalidate_tables_cache { + *cached_tables.lock().unwrap() = None; + } + let write_result = batch.batch_write_rows()?; + tx.send(Ok((res, write_result))).map_err(|_| { + CubeError::internal(format!( + "[{}-{}] Write operation result receiver has been dropped", + store_name, loop_name + )) + })?; + } + Err(e) => { + tx.send(Err(e)).map_err(|_| { + CubeError::internal(format!( + "[{}-{}] Write operation result receiver has been dropped", + store_name, loop_name + )) + })?; } - let write_result = batch.batch_write_rows()?; - tx.send(Ok((res, write_result))).map_err(|_| { - CubeError::internal(format!( - "[{}] Write operation result receiver has been dropped", - store_name - )) - })?; - } - Err(e) => { - tx.send(Err(e)).map_err(|_| { - CubeError::internal(format!( - "[{}] Write operation result receiver has been dropped", - store_name - )) - })?; } - } - mem::drop(db_span); + mem::drop(db_span); - Ok(()) - })); - if let Err(e) = res.await { + Ok(()) + })) + .await; + if let Err(e) = res { log::error!( "[{}] Error during scheduling write task in loop: {}", store_name, @@ -1300,21 +1347,35 @@ impl RocksStore { Ok((remote_path, checkpoint_path)) } + #[inline(always)] pub async fn read_operation(&self, op_name: &'static str, f: F) -> Result + where + F: for<'a> FnOnce(DbTableRef<'a>) -> Result + Send + Sync + 'static, + R: Send + Sync + 'static, + { + self.read_operation_impl::(&self.rw_loop_default_cf, op_name, f) + .await + } + + pub async fn read_operation_impl( + &self, + rw_loop: &RocksStoreRWLoop, + op_name: &'static str, + f: F, + ) -> Result where F: for<'a> FnOnce(DbTableRef<'a>) -> Result + Send + Sync + 'static, R: Send + Sync + 'static, { let mem_seq = MemorySequence::new(self.seq_store.clone()); let db_to_send = self.db.clone(); - let store_name = self.details.get_name(); - - let rw_loop_sender = self.rw_loop_tx.clone(); let (tx, rx) = oneshot::channel::>(); - let span_name = format!("{} read operation {}", store_name, op_name); + let loop_name = rw_loop.get_name(); + let store_name = self.details.get_name(); + let span_name = format!("{}({}) read operation: {}", store_name, loop_name, op_name); - let res = rw_loop_sender.send(Box::new(move || { + let res = rw_loop.schedule(Box::new(move || { let db_span = warn_long(&span_name, Duration::from_millis(100)); let snapshot = db_to_send.snapshot(); @@ -1327,8 +1388,8 @@ impl RocksStore { tx.send(res).map_err(|_| { CubeError::internal(format!( - "[{}] Read operation result receiver has been dropped", - store_name + "[{}-{}] Read operation result receiver has been dropped", + store_name, loop_name )) })?; diff --git a/rust/cubestore/package.json b/rust/cubestore/package.json index 7943620f8d33e..20fba6647088e 100644 --- a/rust/cubestore/package.json +++ b/rust/cubestore/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-backend/cubestore", - "version": "1.3.30", + "version": "1.3.31", "description": "Cube.js pre-aggregation storage layer.", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", @@ -27,7 +27,7 @@ "author": "Cube Dev, Inc.", "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.30", + "@cubejs-backend/linter": "1.3.31", "@types/jest": "^27", "@types/node": "^18", "jest": "^27", @@ -37,7 +37,7 @@ "access": "public" }, "dependencies": { - "@cubejs-backend/shared": "1.3.30", + "@cubejs-backend/shared": "1.3.31", "@octokit/core": "^3.2.5", "source-map-support": "^0.5.19" }, pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy