diff --git a/CHANGELOG.md b/CHANGELOG.md index cc1dc6d542170..3a860147d2b04 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,21 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +### Bug Fixes + +- **cubesql:** Fix adding missing columns for `ORDER BY` clause ([#9764](https://github.com/cube-js/cube/issues/9764)) ([185db54](https://github.com/cube-js/cube/commit/185db547e0c83c0e276c9a89618b4753c969dea7)) +- **cubesql:** Improve DBeaver compatibility ([#9769](https://github.com/cube-js/cube/issues/9769)) ([c206c90](https://github.com/cube-js/cube/commit/c206c901e9da14a230a2b358dfc4ea577adf9f49)) +- **cubestore:** Avoid bug in topk planning when projection column order is permuted ([#9765](https://github.com/cube-js/cube/issues/9765)) ([49a58ff](https://github.com/cube-js/cube/commit/49a58fffb8ffa064debe9b4cfecc078e5da01004)) +- **cubestore:** Make projection_above_limit optimization behave deter… ([#9766](https://github.com/cube-js/cube/issues/9766)) ([08f21b6](https://github.com/cube-js/cube/commit/08f21b67dbf6f05739822409ef0c48265bc0d429)) + +### Features + +- **tesseract:** Rolling window with custom granularities without date range ([#9762](https://github.com/cube-js/cube/issues/9762)) ([d81c57d](https://github.com/cube-js/cube/commit/d81c57db80e96a211c1d12a67b06cefd868e111e)) +- **tesseract:** Rollup Join support ([#9745](https://github.com/cube-js/cube/issues/9745)) ([05bb520](https://github.com/cube-js/cube/commit/05bb52091ad2d3ac09303c0fa50603cd24c99d61)) +- **tesseract:** Support for time shifts over calendar cubes dimensions ([#9758](https://github.com/cube-js/cube/issues/9758)) ([70dfa52](https://github.com/cube-js/cube/commit/70dfa52a2aa0cafd80cdf21229d70795392009ec)) + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) ### Bug Fixes diff --git a/lerna.json b/lerna.json index 0ffcdc0848b2b..5d809158c880b 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "1.3.35", + "version": "1.3.36", "npmClient": "yarn", "command": { "bootstrap": { diff --git a/packages/cubejs-api-gateway/CHANGELOG.md b/packages/cubejs-api-gateway/CHANGELOG.md index b9b23c30516e5..5718757a9d70b 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/api-gateway + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 f337ca6e53add..4ffa74c944dab 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.35", + "version": "1.3.36", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -27,8 +27,8 @@ "dist/src/*" ], "dependencies": { - "@cubejs-backend/native": "1.3.35", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/native": "1.3.36", + "@cubejs-backend/shared": "1.3.36", "@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.35", + "@cubejs-backend/linter": "1.3.36", "@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 3f2461ccdbf0e..f5bf4116442f5 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/athena-driver + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 d2c8cb7a278ea..707d18c38e1fa 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.35", + "version": "1.3.36", "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.35", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/base-driver": "1.3.36", + "@cubejs-backend/shared": "1.3.36", "sqlstring": "^2.3.1" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.35", - "@cubejs-backend/testing-shared": "1.3.35", + "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/testing-shared": "1.3.36", "@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 29cb491cd8dfe..19aeddeb9e8d0 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/cloud + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 5bbddb43f9083..acbc63d38f6bb 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.35", + "version": "1.3.36", "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.35", + "@cubejs-backend/linter": "1.3.36", "@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.35", + "@cubejs-backend/shared": "1.3.36", "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 682a63cc7ab05..1d55762b86235 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/maven + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 84f4e5f04feb2..8add63fb8e3b1 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.35", + "version": "1.3.36", "license": "Apache-2.0", "repository": { "type": "git", @@ -31,12 +31,12 @@ "dist/src/*" ], "dependencies": { - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/shared": "1.3.36", "source-map-support": "^0.5.19", "xmlbuilder2": "^2.4.0" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.35", + "@cubejs-backend/linter": "1.3.36", "@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 1125b13e92d83..8963cb7916fc3 100644 --- a/packages/cubejs-backend-native/CHANGELOG.md +++ b/packages/cubejs-backend-native/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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +### Bug Fixes + +- **cubesql:** Fix adding missing columns for `ORDER BY` clause ([#9764](https://github.com/cube-js/cube/issues/9764)) ([185db54](https://github.com/cube-js/cube/commit/185db547e0c83c0e276c9a89618b4753c969dea7)) + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) ### Bug Fixes diff --git a/packages/cubejs-backend-native/Cargo.lock b/packages/cubejs-backend-native/Cargo.lock index 830e1d8dfe7bf..d62709e76cbb0 100644 --- a/packages/cubejs-backend-native/Cargo.lock +++ b/packages/cubejs-backend-native/Cargo.lock @@ -714,7 +714,7 @@ dependencies = [ [[package]] name = "cube-ext" version = "1.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=637003a448a98bbc5e1585d0f01cc19ba9d50668#637003a448a98bbc5e1585d0f01cc19ba9d50668" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6#7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6" dependencies = [ "arrow", "chrono", @@ -884,7 +884,7 @@ checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" [[package]] name = "datafusion" version = "7.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=637003a448a98bbc5e1585d0f01cc19ba9d50668#637003a448a98bbc5e1585d0f01cc19ba9d50668" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6#7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6" dependencies = [ "ahash 0.7.8", "arrow", @@ -917,7 +917,7 @@ dependencies = [ [[package]] name = "datafusion-common" version = "7.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=637003a448a98bbc5e1585d0f01cc19ba9d50668#637003a448a98bbc5e1585d0f01cc19ba9d50668" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6#7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6" dependencies = [ "arrow", "ordered-float 2.10.1", @@ -928,7 +928,7 @@ dependencies = [ [[package]] name = "datafusion-data-access" version = "1.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=637003a448a98bbc5e1585d0f01cc19ba9d50668#637003a448a98bbc5e1585d0f01cc19ba9d50668" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6#7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6" dependencies = [ "async-trait", "chrono", @@ -941,7 +941,7 @@ dependencies = [ [[package]] name = "datafusion-expr" version = "7.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=637003a448a98bbc5e1585d0f01cc19ba9d50668#637003a448a98bbc5e1585d0f01cc19ba9d50668" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6#7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6" dependencies = [ "ahash 0.7.8", "arrow", @@ -952,7 +952,7 @@ dependencies = [ [[package]] name = "datafusion-physical-expr" version = "7.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=637003a448a98bbc5e1585d0f01cc19ba9d50668#637003a448a98bbc5e1585d0f01cc19ba9d50668" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6#7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6" dependencies = [ "ahash 0.7.8", "arrow", diff --git a/packages/cubejs-backend-native/package.json b/packages/cubejs-backend-native/package.json index fcc6a59817a35..ff6fe4969d1e0 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.35", + "version": "1.3.36", "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.35", + "@cubejs-backend/linter": "1.3.36", "@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.35", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/cubesql": "1.3.36", + "@cubejs-backend/shared": "1.3.36", "@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 76918fb80aa2c..fb4fb4a7f4d52 100644 --- a/packages/cubejs-backend-shared/CHANGELOG.md +++ b/packages/cubejs-backend-shared/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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +### Features + +- **tesseract:** Rolling window with custom granularities without date range ([#9762](https://github.com/cube-js/cube/issues/9762)) ([d81c57d](https://github.com/cube-js/cube/commit/d81c57db80e96a211c1d12a67b06cefd868e111e)) + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) ### Features diff --git a/packages/cubejs-backend-shared/package.json b/packages/cubejs-backend-shared/package.json index 998a627719e5b..fed473f56bc88 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.35", + "version": "1.3.36", "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.35", + "@cubejs-backend/linter": "1.3.36", "@types/bytes": "^3.1.5", "@types/cli-progress": "^3.9.1", "@types/decompress": "^4.2.7", diff --git a/packages/cubejs-backend-shared/src/time.ts b/packages/cubejs-backend-shared/src/time.ts index d21bc4e8cbdd7..1bd7867f3851b 100644 --- a/packages/cubejs-backend-shared/src/time.ts +++ b/packages/cubejs-backend-shared/src/time.ts @@ -104,7 +104,7 @@ export function parseSqlInterval(intervalStr: SqlInterval): ParsedInterval { for (let i = 0; i < parts.length; i += 2) { const value = parseInt(parts[i], 10); - const unit = parts[i + 1]; + const unit = parts[i + 1].toLowerCase(); // Remove ending 's' (e.g., 'days' -> 'day') const singularUnit = (unit.endsWith('s') ? unit.slice(0, -1) : unit) as unitOfTime.DurationConstructor; diff --git a/packages/cubejs-base-driver/CHANGELOG.md b/packages/cubejs-base-driver/CHANGELOG.md index 43674bde6ec51..d3b530984024f 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/base-driver + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 7347c305f3486..279545ba7ff00 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.35", + "version": "1.3.36", "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.35", + "@cubejs-backend/shared": "1.3.36", "@google-cloud/storage": "^7.13.0" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.35", + "@cubejs-backend/linter": "1.3.36", "@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 287abe7865b45..07a84a336a956 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/bigquery-driver + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 edc0e02d3e662..31272717e0348 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.35", + "version": "1.3.36", "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.35", + "@cubejs-backend/base-driver": "1.3.36", "@cubejs-backend/dotenv": "^9.0.2", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/shared": "1.3.36", "@google-cloud/bigquery": "^7.7.0", "@google-cloud/storage": "^7.13.0", "ramda": "^0.27.2" }, "devDependencies": { - "@cubejs-backend/testing-shared": "1.3.35", + "@cubejs-backend/testing-shared": "1.3.36", "@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 93d4b6eb80062..bf7db283f89c3 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package cubejs-cli + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **Note:** Version bump only for package cubejs-cli diff --git a/packages/cubejs-cli/package.json b/packages/cubejs-cli/package.json index cf45fbd1afe42..7b0373107812d 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.35", + "version": "1.3.36", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -30,10 +30,10 @@ "LICENSE" ], "dependencies": { - "@cubejs-backend/cloud": "1.3.35", + "@cubejs-backend/cloud": "1.3.36", "@cubejs-backend/dotenv": "^9.0.2", - "@cubejs-backend/schema-compiler": "1.3.35", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/schema-compiler": "1.3.36", + "@cubejs-backend/shared": "1.3.36", "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.35", - "@cubejs-backend/server": "1.3.35", + "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/server": "1.3.36", "@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 0f66d624e094d..b1b13e2e85b49 100644 --- a/packages/cubejs-clickhouse-driver/CHANGELOG.md +++ b/packages/cubejs-clickhouse-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/clickhouse-driver + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 4e1d77771a2d9..c551cdbe636b8 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.35", + "version": "1.3.36", "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.35", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/base-driver": "1.3.36", + "@cubejs-backend/shared": "1.3.36", "moment": "^2.24.0", "sqlstring": "^2.3.1", "uuid": "^8.3.2" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.35", - "@cubejs-backend/testing-shared": "1.3.35", + "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/testing-shared": "1.3.36", "@types/jest": "^29", "jest": "^29", "typescript": "~5.2.2" diff --git a/packages/cubejs-client-core/CHANGELOG.md b/packages/cubejs-client-core/CHANGELOG.md index 2066fd419e86e..6701583d09f7a 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-client/core + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 b63d8176c4130..057e4d21e9265 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.35", + "version": "1.3.36", "engines": {}, "repository": { "type": "git", @@ -38,7 +38,7 @@ ], "license": "MIT", "devDependencies": { - "@cubejs-backend/linter": "1.3.35", + "@cubejs-backend/linter": "1.3.36", "@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 34b46851824e0..5909f6d331611 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-client/dx + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 6bf19d8bdec08..508b6f4746369 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.35", + "version": "1.3.36", "engines": {}, "repository": { "type": "git", diff --git a/packages/cubejs-client-ngx/CHANGELOG.md b/packages/cubejs-client-ngx/CHANGELOG.md index 2a4dc57f68aeb..05dc7b424880c 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-client/ngx + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 2544ad4374519..8b49c32940eec 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.35", + "version": "1.3.36", "author": "Cube Dev, Inc.", "engines": {}, "repository": { diff --git a/packages/cubejs-client-react/CHANGELOG.md b/packages/cubejs-client-react/CHANGELOG.md index 6316acc2b00a9..5d7f0b6985e82 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-client/react + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 de2050e7409da..147beaeffc21d 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.35", + "version": "1.3.36", "author": "Cube Dev, Inc.", "license": "MIT", "engines": {}, @@ -24,7 +24,7 @@ ], "dependencies": { "@babel/runtime": "^7.1.2", - "@cubejs-client/core": "1.3.35", + "@cubejs-client/core": "1.3.36", "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 c216dda9dc492..bdc36e01e0353 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.36](https://github.com/cube-js/cube.js/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-client/vue + ## [1.3.35](https://github.com/cube-js/cube.js/compare/v1.3.34...v1.3.35) (2025-07-09) **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 38cdccb8b9f1a..372b32dd4761e 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.35", + "version": "1.3.36", "engines": {}, "repository": { "type": "git", @@ -28,7 +28,7 @@ "src" ], "dependencies": { - "@cubejs-client/core": "1.3.35", + "@cubejs-client/core": "1.3.36", "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 d90d97a37c8e0..477477d952677 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.36](https://github.com/cube-js/cube.js/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-client/vue3 + ## [1.3.35](https://github.com/cube-js/cube.js/compare/v1.3.34...v1.3.35) (2025-07-09) **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 8f094b5e8c527..56f01dc60038b 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.35", + "version": "1.3.36", "engines": {}, "repository": { "type": "git", @@ -28,7 +28,7 @@ "src" ], "dependencies": { - "@cubejs-client/core": "1.3.35", + "@cubejs-client/core": "1.3.36", "@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 f968706f03817..7619b21dcc886 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-client/ws-transport + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 24ea3accc9be8..586055ec8ee02 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.35", + "version": "1.3.36", "engines": {}, "repository": { "type": "git", @@ -20,7 +20,7 @@ }, "dependencies": { "@babel/runtime": "^7.1.2", - "@cubejs-client/core": "1.3.35", + "@cubejs-client/core": "1.3.36", "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.35", + "@cubejs-backend/linter": "1.3.36", "@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 4da1018ab808e..3ebcda4391269 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/crate-driver + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 c799da3f44367..5b021b2bfad0b 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.35", + "version": "1.3.36", "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.35", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/postgres-driver": "1.3.36", + "@cubejs-backend/shared": "1.3.36", "pg": "^8.7.1" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.35", - "@cubejs-backend/testing-shared": "1.3.35", + "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/testing-shared": "1.3.36", "testcontainers": "^10.28.0", "typescript": "~5.2.2" }, diff --git a/packages/cubejs-cubestore-driver/CHANGELOG.md b/packages/cubejs-cubestore-driver/CHANGELOG.md index 8300641a63f45..d8b6bfc53260a 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/cubestore-driver + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 ef7122a40c16d..15efdadfda5f4 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.35", + "version": "1.3.36", "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.35", - "@cubejs-backend/cubestore": "1.3.35", - "@cubejs-backend/native": "1.3.35", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/base-driver": "1.3.36", + "@cubejs-backend/cubestore": "1.3.36", + "@cubejs-backend/native": "1.3.36", + "@cubejs-backend/shared": "1.3.36", "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.35", + "@cubejs-backend/linter": "1.3.36", "@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 0722af660059b..b9c83ed1b7a29 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/databricks-jdbc-driver + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 c8531f6c62690..6a134890a2342 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.35", + "version": "1.3.36", "license": "Apache-2.0", "repository": { "type": "git", @@ -30,17 +30,17 @@ "bin" ], "dependencies": { - "@cubejs-backend/base-driver": "1.3.35", - "@cubejs-backend/jdbc-driver": "1.3.35", - "@cubejs-backend/schema-compiler": "1.3.35", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/base-driver": "1.3.36", + "@cubejs-backend/jdbc-driver": "1.3.36", + "@cubejs-backend/schema-compiler": "1.3.36", + "@cubejs-backend/shared": "1.3.36", "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.35", + "@cubejs-backend/linter": "1.3.36", "@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 b4ec8a3036129..bc231972187ee 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/dbt-schema-extension + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 20a05ef82e931..d784146dd9fc2 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.35", + "version": "1.3.36", "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.35", + "@cubejs-backend/schema-compiler": "1.3.36", "fs-extra": "^9.1.0", "inflection": "^1.12.0", "node-fetch": "^2.6.1" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.35", - "@cubejs-backend/testing": "1.3.35", + "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/testing": "1.3.36", "@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 aee9381679eda..b29bbbd28910f 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/docker + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **Note:** Version bump only for package @cubejs-backend/docker diff --git a/packages/cubejs-docker/package.json b/packages/cubejs-docker/package.json index 2b3989bccbd1d..645d969d35d7e 100644 --- a/packages/cubejs-docker/package.json +++ b/packages/cubejs-docker/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-backend/docker", - "version": "1.3.35", + "version": "1.3.36", "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.35", - "@cubejs-backend/bigquery-driver": "1.3.35", - "@cubejs-backend/clickhouse-driver": "1.3.35", - "@cubejs-backend/crate-driver": "1.3.35", - "@cubejs-backend/databricks-jdbc-driver": "1.3.35", - "@cubejs-backend/dbt-schema-extension": "1.3.35", - "@cubejs-backend/dremio-driver": "1.3.35", - "@cubejs-backend/druid-driver": "1.3.35", - "@cubejs-backend/duckdb-driver": "1.3.35", - "@cubejs-backend/elasticsearch-driver": "1.3.35", - "@cubejs-backend/firebolt-driver": "1.3.35", - "@cubejs-backend/hive-driver": "1.3.35", - "@cubejs-backend/ksql-driver": "1.3.35", - "@cubejs-backend/materialize-driver": "1.3.35", - "@cubejs-backend/mongobi-driver": "1.3.35", - "@cubejs-backend/mssql-driver": "1.3.35", - "@cubejs-backend/mysql-driver": "1.3.35", - "@cubejs-backend/oracle-driver": "1.3.35", - "@cubejs-backend/pinot-driver": "1.3.35", - "@cubejs-backend/postgres-driver": "1.3.35", - "@cubejs-backend/prestodb-driver": "1.3.35", - "@cubejs-backend/questdb-driver": "1.3.35", - "@cubejs-backend/redshift-driver": "1.3.35", - "@cubejs-backend/server": "1.3.35", - "@cubejs-backend/snowflake-driver": "1.3.35", - "@cubejs-backend/sqlite-driver": "1.3.35", - "@cubejs-backend/trino-driver": "1.3.35", - "@cubejs-backend/vertica-driver": "1.3.35", - "cubejs-cli": "1.3.35", + "@cubejs-backend/athena-driver": "1.3.36", + "@cubejs-backend/bigquery-driver": "1.3.36", + "@cubejs-backend/clickhouse-driver": "1.3.36", + "@cubejs-backend/crate-driver": "1.3.36", + "@cubejs-backend/databricks-jdbc-driver": "1.3.36", + "@cubejs-backend/dbt-schema-extension": "1.3.36", + "@cubejs-backend/dremio-driver": "1.3.36", + "@cubejs-backend/druid-driver": "1.3.36", + "@cubejs-backend/duckdb-driver": "1.3.36", + "@cubejs-backend/elasticsearch-driver": "1.3.36", + "@cubejs-backend/firebolt-driver": "1.3.36", + "@cubejs-backend/hive-driver": "1.3.36", + "@cubejs-backend/ksql-driver": "1.3.36", + "@cubejs-backend/materialize-driver": "1.3.36", + "@cubejs-backend/mongobi-driver": "1.3.36", + "@cubejs-backend/mssql-driver": "1.3.36", + "@cubejs-backend/mysql-driver": "1.3.36", + "@cubejs-backend/oracle-driver": "1.3.36", + "@cubejs-backend/pinot-driver": "1.3.36", + "@cubejs-backend/postgres-driver": "1.3.36", + "@cubejs-backend/prestodb-driver": "1.3.36", + "@cubejs-backend/questdb-driver": "1.3.36", + "@cubejs-backend/redshift-driver": "1.3.36", + "@cubejs-backend/server": "1.3.36", + "@cubejs-backend/snowflake-driver": "1.3.36", + "@cubejs-backend/sqlite-driver": "1.3.36", + "@cubejs-backend/trino-driver": "1.3.36", + "@cubejs-backend/vertica-driver": "1.3.36", + "cubejs-cli": "1.3.36", "typescript": "~5.2.2" }, "resolutions": { diff --git a/packages/cubejs-dremio-driver/CHANGELOG.md b/packages/cubejs-dremio-driver/CHANGELOG.md index aa706d73673ec..31482949d908a 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/dremio-driver + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 c42dd0670168e..ecabb0779e665 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.35", + "version": "1.3.36", "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.35", - "@cubejs-backend/schema-compiler": "1.3.35", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/base-driver": "1.3.36", + "@cubejs-backend/schema-compiler": "1.3.36", + "@cubejs-backend/shared": "1.3.36", "axios": "^1.8.3", "sqlstring": "^2.3.1" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.35", - "@cubejs-backend/testing-shared": "1.3.35", + "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/testing-shared": "1.3.36", "jest": "^29" }, "license": "Apache-2.0", diff --git a/packages/cubejs-druid-driver/CHANGELOG.md b/packages/cubejs-druid-driver/CHANGELOG.md index c7b0e7a9bc72c..c3a5d5b05eab7 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/druid-driver + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 f4570c3acc068..7ae136868b995 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.35", + "version": "1.3.36", "license": "Apache-2.0", "repository": { "type": "git", @@ -28,13 +28,13 @@ "dist/src/*" ], "dependencies": { - "@cubejs-backend/base-driver": "1.3.35", - "@cubejs-backend/schema-compiler": "1.3.35", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/base-driver": "1.3.36", + "@cubejs-backend/schema-compiler": "1.3.36", + "@cubejs-backend/shared": "1.3.36", "axios": "^1.8.3" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.35", + "@cubejs-backend/linter": "1.3.36", "@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 a6acde122b332..f5ccc2c8357a0 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/duckdb-driver + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 9c123f0a21d06..52ece38c4c2fa 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.35", + "version": "1.3.36", "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.35", - "@cubejs-backend/schema-compiler": "1.3.35", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/base-driver": "1.3.36", + "@cubejs-backend/schema-compiler": "1.3.36", + "@cubejs-backend/shared": "1.3.36", "duckdb": "^1.3.1" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.35", - "@cubejs-backend/testing-shared": "1.3.35", + "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/testing-shared": "1.3.36", "@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 0effd0be40685..6cf54adb529ce 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/elasticsearch-driver + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 9edcffcf05175..ba9020d3e6c2e 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.35", + "version": "1.3.36", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -23,14 +23,14 @@ "driver" ], "dependencies": { - "@cubejs-backend/base-driver": "1.3.35", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/base-driver": "1.3.36", + "@cubejs-backend/shared": "1.3.36", "@elastic/elasticsearch": "7.12.0", "sqlstring": "^2.3.1" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.35", + "@cubejs-backend/linter": "1.3.36", "@types/jest": "^29", "jest": "^29", "testcontainers": "^10.28.0" diff --git a/packages/cubejs-firebolt-driver/CHANGELOG.md b/packages/cubejs-firebolt-driver/CHANGELOG.md index ca06c1f849dcc..56d7389a01efa 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/firebolt-driver + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 eb3e3c0632dfc..80d9de8d894b3 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.35", + "version": "1.3.36", "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.35", - "@cubejs-backend/schema-compiler": "1.3.35", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/base-driver": "1.3.36", + "@cubejs-backend/schema-compiler": "1.3.36", + "@cubejs-backend/shared": "1.3.36", "firebolt-sdk": "1.10.0" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.35", - "@cubejs-backend/testing-shared": "1.3.35", + "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/testing-shared": "1.3.36", "typescript": "~5.2.2" }, "publishConfig": { diff --git a/packages/cubejs-hive-driver/CHANGELOG.md b/packages/cubejs-hive-driver/CHANGELOG.md index 1e4b168da31b5..8b23732744d50 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/hive-driver + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 863440c06bca3..63631605b008d 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.35", + "version": "1.3.36", "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.35", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/base-driver": "1.3.36", + "@cubejs-backend/shared": "1.3.36", "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.35" + "@cubejs-backend/linter": "1.3.36" }, "publishConfig": { "access": "public" diff --git a/packages/cubejs-jdbc-driver/CHANGELOG.md b/packages/cubejs-jdbc-driver/CHANGELOG.md index d848500a7e2f1..cea26c583598d 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/jdbc-driver + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 2cc347f89e62d..83ca50e4bde98 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.35", + "version": "1.3.36", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -25,9 +25,9 @@ "index.js" ], "dependencies": { - "@cubejs-backend/base-driver": "1.3.35", + "@cubejs-backend/base-driver": "1.3.36", "@cubejs-backend/node-java-maven": "^0.1.3", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/shared": "1.3.36", "generic-pool": "^3.8.2", "sqlstring": "^2.3.0" }, @@ -43,7 +43,7 @@ "testEnvironment": "node" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.35", + "@cubejs-backend/linter": "1.3.36", "@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 7c5226ca9fe08..8c60f381a8c3f 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/ksql-driver + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 abd2620562321..50b1a4f42ed93 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.35", + "version": "1.3.36", "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.35", - "@cubejs-backend/schema-compiler": "1.3.35", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/base-driver": "1.3.36", + "@cubejs-backend/schema-compiler": "1.3.36", + "@cubejs-backend/shared": "1.3.36", "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.35", + "@cubejs-backend/linter": "1.3.36", "typescript": "~5.2.2" } } diff --git a/packages/cubejs-linter/CHANGELOG.md b/packages/cubejs-linter/CHANGELOG.md index 5a8fb99c14511..13a41ddfefcc0 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/linter + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **Note:** Version bump only for package @cubejs-backend/linter diff --git a/packages/cubejs-linter/package.json b/packages/cubejs-linter/package.json index 403e64f338320..d9ffc7230df33 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.35", + "version": "1.3.36", "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 06586fb1d0624..7f291574d8e63 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/materialize-driver + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 1963c40109e23..fa61c4ad02558 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.35", + "version": "1.3.36", "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.35", - "@cubejs-backend/postgres-driver": "1.3.35", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/base-driver": "1.3.36", + "@cubejs-backend/postgres-driver": "1.3.36", + "@cubejs-backend/shared": "1.3.36", "@types/pg": "^8.6.0", "pg": "^8.6.0", "semver": "^7.6.3" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.35", - "@cubejs-backend/testing": "1.3.35", + "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/testing": "1.3.36", "typescript": "~5.2.2" }, "publishConfig": { diff --git a/packages/cubejs-mongobi-driver/CHANGELOG.md b/packages/cubejs-mongobi-driver/CHANGELOG.md index e0b6b802741b0..8f70f6f1cb271 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/mongobi-driver + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 b38b7180d9861..051d35548c3f0 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.35", + "version": "1.3.36", "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.35", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/base-driver": "1.3.36", + "@cubejs-backend/shared": "1.3.36", "@types/node": "^20", "generic-pool": "^3.8.2", "moment": "^2.29.1", @@ -39,7 +39,7 @@ "access": "public" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.35", + "@cubejs-backend/linter": "1.3.36", "@types/generic-pool": "^3.8.2", "testcontainers": "^10.28.0", "typescript": "~5.2.2" diff --git a/packages/cubejs-mssql-driver/CHANGELOG.md b/packages/cubejs-mssql-driver/CHANGELOG.md index 759b65361efee..c7b7a3a957386 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/mssql-driver + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 07d20fc3731ec..cdfd452bdecdf 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.35", + "version": "1.3.36", "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.35", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/base-driver": "1.3.36", + "@cubejs-backend/shared": "1.3.36", "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 676c37d2f3c77..dce9c83f0c77a 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/mysql-aurora-serverless-driver + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 c693c1ba17736..599b800e89ff1 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.35", + "version": "1.3.36", "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.35", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/base-driver": "1.3.36", + "@cubejs-backend/shared": "1.3.36", "@types/mysql": "^2.15.15", "aws-sdk": "^2.787.0", "data-api-client": "^1.1.0" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.35", + "@cubejs-backend/linter": "1.3.36", "@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 49242a3d43bba..1b4ab364825e9 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/mysql-driver + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 330256403cdff..caa3e7dd169df 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.35", + "version": "1.3.36", "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.35", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/base-driver": "1.3.36", + "@cubejs-backend/shared": "1.3.36", "generic-pool": "^3.8.2", "mysql": "^2.18.1" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.35", - "@cubejs-backend/testing-shared": "1.3.35", + "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/testing-shared": "1.3.36", "@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 9beffa0faca8a..5b3e2af6c9767 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/oracle-driver + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 7c51e812859cc..cbcfa04a0e74b 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.35", + "version": "1.3.36", "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.35", + "@cubejs-backend/base-driver": "1.3.36", "ramda": "^0.27.0" }, "optionalDependencies": { diff --git a/packages/cubejs-pinot-driver/CHANGELOG.md b/packages/cubejs-pinot-driver/CHANGELOG.md index 19b555992cbe1..da502a8dfe501 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/pinot-driver + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 79aa77583685b..85b2d33177cb2 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.35", + "version": "1.3.36", "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.35", - "@cubejs-backend/schema-compiler": "1.3.35", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/base-driver": "1.3.36", + "@cubejs-backend/schema-compiler": "1.3.36", + "@cubejs-backend/shared": "1.3.36", "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.35", + "@cubejs-backend/linter": "1.3.36", "@types/jest": "^29", "jest": "^29", "should": "^13.2.3", diff --git a/packages/cubejs-playground/CHANGELOG.md b/packages/cubejs-playground/CHANGELOG.md index 830ef852791bd..9c49968fc206e 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-client/playground + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **Note:** Version bump only for package @cubejs-client/playground diff --git a/packages/cubejs-playground/package.json b/packages/cubejs-playground/package.json index 49e8adecd1c70..9bdee5982bb37 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.35", + "version": "1.3.36", "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.35", - "@cubejs-client/react": "1.3.35", + "@cubejs-client/core": "1.3.36", + "@cubejs-client/react": "1.3.36", "@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 f9a215255b24d..48f1e395e6618 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/postgres-driver + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 380849498f152..39fb48874c4c5 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.35", + "version": "1.3.36", "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.35", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/base-driver": "1.3.36", + "@cubejs-backend/shared": "1.3.36", "@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.35", - "@cubejs-backend/testing-shared": "1.3.35", + "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/testing-shared": "1.3.36", "testcontainers": "^10.28.0", "typescript": "~5.2.2" }, diff --git a/packages/cubejs-prestodb-driver/CHANGELOG.md b/packages/cubejs-prestodb-driver/CHANGELOG.md index c83bef485931a..83cda01da14fe 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/prestodb-driver + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 5f3319c331c44..5612cea29c3a9 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.35", + "version": "1.3.36", "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.35", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/base-driver": "1.3.36", + "@cubejs-backend/shared": "1.3.36", "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.35", + "@cubejs-backend/linter": "1.3.36", "@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 e443a72c31b8c..0c7efad1a17b7 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/query-orchestrator + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 8d800e1e1b02a..2671532670eed 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.35", + "version": "1.3.36", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -29,16 +29,16 @@ "dist/src/*" ], "dependencies": { - "@cubejs-backend/base-driver": "1.3.35", - "@cubejs-backend/cubestore-driver": "1.3.35", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/base-driver": "1.3.36", + "@cubejs-backend/cubestore-driver": "1.3.36", + "@cubejs-backend/shared": "1.3.36", "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.35", + "@cubejs-backend/linter": "1.3.36", "@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 9a278e0eb5c1f..5b7acf9e0165e 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/questdb-driver + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 5a5d4abdae567..fe459659384ef 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.35", + "version": "1.3.36", "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.35", - "@cubejs-backend/schema-compiler": "1.3.35", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/base-driver": "1.3.36", + "@cubejs-backend/schema-compiler": "1.3.36", + "@cubejs-backend/shared": "1.3.36", "@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.35", - "@cubejs-backend/testing-shared": "1.3.35", + "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/testing-shared": "1.3.36", "testcontainers": "^10.28.0", "typescript": "~5.2.2" }, diff --git a/packages/cubejs-redshift-driver/CHANGELOG.md b/packages/cubejs-redshift-driver/CHANGELOG.md index 258cebe19f4e0..3bb3b64438513 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/redshift-driver + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 e35228164bd09..b63b5e041bb8f 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.35", + "version": "1.3.36", "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.35", - "@cubejs-backend/postgres-driver": "1.3.35", - "@cubejs-backend/shared": "1.3.35" + "@cubejs-backend/base-driver": "1.3.36", + "@cubejs-backend/postgres-driver": "1.3.36", + "@cubejs-backend/shared": "1.3.36" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.35", + "@cubejs-backend/linter": "1.3.36", "typescript": "~5.2.2" }, "publishConfig": { diff --git a/packages/cubejs-schema-compiler/CHANGELOG.md b/packages/cubejs-schema-compiler/CHANGELOG.md index 5c158744a464e..8de808cc2198e 100644 --- a/packages/cubejs-schema-compiler/CHANGELOG.md +++ b/packages/cubejs-schema-compiler/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +### Features + +- **tesseract:** Rolling window with custom granularities without date range ([#9762](https://github.com/cube-js/cube/issues/9762)) ([d81c57d](https://github.com/cube-js/cube/commit/d81c57db80e96a211c1d12a67b06cefd868e111e)) +- **tesseract:** Rollup Join support ([#9745](https://github.com/cube-js/cube/issues/9745)) ([05bb520](https://github.com/cube-js/cube/commit/05bb52091ad2d3ac09303c0fa50603cd24c99d61)) +- **tesseract:** Support for time shifts over calendar cubes dimensions ([#9758](https://github.com/cube-js/cube/issues/9758)) ([70dfa52](https://github.com/cube-js/cube/commit/70dfa52a2aa0cafd80cdf21229d70795392009ec)) + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) ### Bug Fixes diff --git a/packages/cubejs-schema-compiler/package.json b/packages/cubejs-schema-compiler/package.json index c79d446e024c9..83da04b9213e7 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.35", + "version": "1.3.36", "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.35", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/native": "1.3.36", + "@cubejs-backend/shared": "1.3.36", "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.35", - "@cubejs-backend/query-orchestrator": "1.3.35", + "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/query-orchestrator": "1.3.36", "@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 72c6ad031d46e..de3278a966ada 100644 --- a/packages/cubejs-schema-compiler/src/adapter/BaseQuery.js +++ b/packages/cubejs-schema-compiler/src/adapter/BaseQuery.js @@ -1117,6 +1117,11 @@ export class BaseQuery { return `${date} + interval ${intervalStr}`; } + // For use in Tesseract + supportGeneratedSeriesForCustomTd() { + return false; + } + /** * @param {string} interval * @returns {string} @@ -2048,7 +2053,6 @@ export class BaseQuery { * Returns a tuple: (formatted interval, minimal time unit) */ intervalAndMinimalTimeUnit(interval) { - const intervalParsed = parseSqlInterval(interval); const minGranularity = this.diffTimeUnitForInterval(interval); return [interval, minGranularity]; } @@ -4138,7 +4142,6 @@ export class BaseQuery { sort: '{{ expr }} {% if asc %}ASC{% else %}DESC{% endif %} NULLS {% if nulls_first %}FIRST{% else %}LAST{% endif %}', order_by: '{% if index %} {{ index }} {% else %} {{ expr }} {% endif %} {% if asc %}ASC{% else %}DESC{% endif %}{% if nulls_first %} NULLS FIRST{% endif %}', cast: 'CAST({{ expr }} AS {{ data_type }})', - cast_to_string: 'CAST({{ expr }} AS TEXT)', window_function: '{{ fun_call }} OVER ({% if partition_by_concat %}PARTITION BY {{ partition_by_concat }}{% if order_by_concat or window_frame %} {% endif %}{% endif %}{% if order_by_concat %}ORDER BY {{ order_by_concat }}{% if window_frame %} {% endif %}{% endif %}{% if window_frame %}{{ window_frame }}{% endif %})', window_frame_bounds: '{{ frame_type }} BETWEEN {{ frame_start }} AND {{ frame_end }}', in_list: '{{ expr }} {% if negated %}NOT {% endif %}IN ({{ in_exprs_concat }})', diff --git a/packages/cubejs-schema-compiler/src/adapter/BigqueryQuery.ts b/packages/cubejs-schema-compiler/src/adapter/BigqueryQuery.ts index bd615ee791ca5..1d4e50649e41b 100644 --- a/packages/cubejs-schema-compiler/src/adapter/BigqueryQuery.ts +++ b/packages/cubejs-schema-compiler/src/adapter/BigqueryQuery.ts @@ -127,10 +127,10 @@ export class BigqueryQuery extends BaseQuery { return [`'${intervalParsed.hour}:${intervalParsed.minute}:${intervalParsed.second}' HOUR TO SECOND`, 'SECOND']; } else if (intervalParsed.minute && intervalParsed.second && intKeys === 2) { return [`'${intervalParsed.minute}:${intervalParsed.second}' MINUTE TO SECOND`, 'SECOND']; + } else if (intervalParsed.millisecond && intKeys === 1) { + return [`'${intervalParsed.millisecond}' MILLISECOND`, 'MILLISECOND']; } - // No need to support microseconds. - throw new Error(`Cannot transform interval expression "${interval}" to BigQuery dialect`); } @@ -367,7 +367,6 @@ export class BigqueryQuery extends BaseQuery { templates.types.double = 'FLOAT64'; templates.types.decimal = 'BIGDECIMAL({{ precision }},{{ scale }})'; templates.types.binary = 'BYTES'; - templates.expressions.cast_to_string = 'CAST({{ expr }} AS STRING)'; templates.operators.is_not_distinct_from = 'IS NOT DISTINCT FROM'; templates.join_types.full = 'FULL'; templates.statements.time_series_select = 'SELECT DATETIME(TIMESTAMP(f)) date_from, DATETIME(TIMESTAMP(t)) date_to \n' + diff --git a/packages/cubejs-schema-compiler/src/adapter/PostgresQuery.ts b/packages/cubejs-schema-compiler/src/adapter/PostgresQuery.ts index 58cf3c240b440..f8b91ffccdb67 100644 --- a/packages/cubejs-schema-compiler/src/adapter/PostgresQuery.ts +++ b/packages/cubejs-schema-compiler/src/adapter/PostgresQuery.ts @@ -57,6 +57,10 @@ export class PostgresQuery extends BaseQuery { return `round(hll_cardinality(hll_add_agg(hll_hash_any(${sql}))))`; } + public supportGeneratedSeriesForCustomTd() { + return true; + } + public sqlTemplates() { const templates = super.sqlTemplates(); // eslint-disable-next-line no-template-curly-in-string @@ -82,8 +86,8 @@ export class PostgresQuery extends BaseQuery { templates.types.double = 'DOUBLE PRECISION'; templates.types.binary = 'BYTEA'; templates.operators.is_not_distinct_from = 'IS NOT DISTINCT FROM'; - templates.statements.generated_time_series_select = 'SELECT d AS "date_from",\n' + - 'd + interval {{ granularity }} - interval \'1 millisecond\' AS "date_to" \n' + + templates.statements.generated_time_series_select = 'SELECT {{ date_from }} AS "date_from",\n' + + '{{ date_to }} AS "date_to" \n' + 'FROM generate_series({{ start }}::timestamp, {{ end }}:: timestamp, {{ granularity }}::interval) d '; templates.statements.generated_time_series_with_cte_range_source = 'SELECT d AS "date_from",\n' + 'd + interval {{ granularity }} - interval \'1 millisecond\' AS "date_to" \n' + diff --git a/packages/cubejs-schema-compiler/src/adapter/PrestodbQuery.ts b/packages/cubejs-schema-compiler/src/adapter/PrestodbQuery.ts index b04e5e55cb783..962f175c98c52 100644 --- a/packages/cubejs-schema-compiler/src/adapter/PrestodbQuery.ts +++ b/packages/cubejs-schema-compiler/src/adapter/PrestodbQuery.ts @@ -122,6 +122,10 @@ export class PrestodbQuery extends BaseQuery { return `approx_distinct(${sql})`; } + public supportGeneratedSeriesForCustomTd() { + return true; + } + protected limitOffsetClause(limit, offset) { const limitClause = limit != null ? ` LIMIT ${limit}` : ''; const offsetClause = offset != null ? ` OFFSET ${offset}` : ''; diff --git a/packages/cubejs-schema-compiler/src/compiler/CubeEvaluator.ts b/packages/cubejs-schema-compiler/src/compiler/CubeEvaluator.ts index d8ee7b6bd19b0..b1321762061ff 100644 --- a/packages/cubejs-schema-compiler/src/compiler/CubeEvaluator.ts +++ b/packages/cubejs-schema-compiler/src/compiler/CubeEvaluator.ts @@ -571,6 +571,22 @@ export class CubeEvaluator extends CubeSymbols { })); } + public preAggregationDescriptionByName(cubeName: string, preAggName: string) { + const cube = this.cubeFromPath(cubeName); + const preAggregations = cube.preAggregations || {}; + + const preAgg = preAggregations[preAggName]; + + if (!preAgg) { + return undefined; + } + + return { + name: preAggName, + ...(preAgg as Record) + }; + } + /** * Returns pre-aggregations filtered by the specified selector. */ @@ -785,6 +801,14 @@ export class CubeEvaluator extends CubeSymbols { return { cubeReferencesUsed, pathReferencesUsed, evaluatedSql }; } + /** + * Evaluates rollup references for retrieving rollupReference used in Tesseract. + * This is a temporary solution until Tesseract takes ownership of all pre-aggregations. + */ + public evaluateRollupReferences>(cube: string, rollupReferences: (...args: Array) => T) { + return this.evaluateReferences(cube, rollupReferences, { originalSorting: true }); + } + public evaluatePreAggregationReferences(cube: string, aggregation: PreAggregationDefinition): PreAggregationReferences { const timeDimensions: Array = []; diff --git a/packages/cubejs-schema-compiler/src/compiler/CubeValidator.ts b/packages/cubejs-schema-compiler/src/compiler/CubeValidator.ts index bf604b83cceaa..9ca271d51b4bb 100644 --- a/packages/cubejs-schema-compiler/src/compiler/CubeValidator.ts +++ b/packages/cubejs-schema-compiler/src/compiler/CubeValidator.ts @@ -575,7 +575,7 @@ const timeShiftItemRequired = Joi.object({ }); const timeShiftItemOptional = Joi.object({ - timeDimension: Joi.func(), // не required + timeDimension: Joi.func(), // not required interval: regexTimeInterval.required(), type: Joi.string().valid('next', 'prior').required(), }); @@ -661,6 +661,17 @@ const DimensionsSchema = Joi.object().pattern(identifierRegex, Joi.alternatives( type: Joi.any().valid('number').required(), sql: Joi.func().required(), addGroupBy: Joi.func(), + }), + // TODO should be valid only for calendar cubes, but this requires significant refactoring + // of all schemas. Left for the future when we'll switch to zod. + inherit(BaseDimensionWithoutSubQuery, { + type: Joi.any().valid('time').required(), + sql: Joi.func().required(), + timeShift: Joi.array().items(Joi.object({ + interval: regexTimeInterval.required(), + type: Joi.string().valid('next', 'prior').required(), + sql: Joi.func().required(), + })), }) )); diff --git a/packages/cubejs-schema-compiler/test/integration/postgres/calendars.test.ts b/packages/cubejs-schema-compiler/test/integration/postgres/calendars.test.ts index 85c6d44335650..21292548cf4de 100644 --- a/packages/cubejs-schema-compiler/test/integration/postgres/calendars.test.ts +++ b/packages/cubejs-schema-compiler/test/integration/postgres/calendars.test.ts @@ -16,14 +16,14 @@ cubes: 100 + gs.id AS user_id, (ARRAY['new', 'processed', 'shipped'])[(gs.id % 3) + 1] AS status, make_timestamp( - 2025, + 2024 + (case when gs.id < 41 then 0 else 1 end), (gs.id % 12) + 1, 1 + (gs.id * 7 % 25), 0, 0, 0 ) AS created_at - FROM generate_series(1, 40) AS gs(id) + FROM generate_series(1, 80) AS gs(id) joins: - name: custom_calendar @@ -57,7 +57,7 @@ cubes: type: count - name: count_shifted - type: count + type: number multi_stage: true sql: "{count}" time_shift: @@ -65,6 +65,30 @@ cubes: interval: 1 year type: prior + - name: count_shifted_calendar_y + type: number + multi_stage: true + sql: "{count}" + time_shift: + - interval: 1 year + type: prior + + - name: count_shifted_calendar_m + type: number + multi_stage: true + sql: "{count}" + time_shift: + - interval: 1 month + type: prior + + - name: count_shifted_calendar_w + type: number + multi_stage: true + sql: "{count}" + time_shift: + - interval: 1 week + type: prior + - name: completed_count type: count filters: @@ -81,56 +105,99 @@ cubes: trailing: unbounded - name: custom_calendar + # language=SQL sql: > - WITH base AS ( - SELECT - gs.n - 1 AS day_offset, - DATE '2025-02-02' + (gs.n - 1) AS date_val - FROM generate_series(1, 364) AS gs(n) - ), - retail_calc AS ( - SELECT - date_val, - date_val AS retail_date, - '2025' AS retail_year_name, - (day_offset / 7) + 1 AS retail_week, - -- Group of months 4-5-4 (13 weeks = 3 months) - ((day_offset / 7) / 13) + 1 AS retail_quarter, - (day_offset / 7) % 13 AS week_in_quarter, - DATE '2025-02-02' AS retail_year_begin_date - FROM base + WITH base AS (SELECT gs.n - 1 AS day_offset, + DATE '2024-02-04' + (gs.n - 1) AS date_val + FROM generate_series(1, 728) AS gs(n) ), - final AS ( - SELECT - date_val, - retail_date, - retail_year_name, - ('Retail Month ' || ((retail_quarter - 1) * 3 + - CASE - WHEN week_in_quarter < 4 THEN 1 - WHEN week_in_quarter < 9 THEN 2 - ELSE 3 - END)) AS retail_month_long_name, - ('WK' || LPAD(retail_week::text, 2, '0')) AS retail_week_name, - retail_year_begin_date, - ('Q' || retail_quarter || ' 2025') AS retail_quarter_year, - (SELECT MIN(date_val) FROM retail_calc r2 - WHERE r2.retail_quarter = r.retail_quarter - AND CASE - WHEN week_in_quarter < 4 THEN 1 - WHEN week_in_quarter < 9 THEN 2 - ELSE 3 - END = - CASE - WHEN r.week_in_quarter < 4 THEN 1 - WHEN r.week_in_quarter < 9 THEN 2 - ELSE 3 - END - ) AS retail_month_begin_date, - date_val - (extract(dow from date_val)::int) AS retail_week_begin_date, - ('2025-WK' || LPAD(retail_week::text, 2, '0')) AS retail_year_week - FROM retail_calc r - ) + retail_calc AS (SELECT date_val, + date_val AS retail_date, + + CASE + WHEN day_offset < 364 THEN '2024' + ELSE '2025' + END AS retail_year_name, + + (day_offset % 364) AS day_of_retail_year, + ((day_offset % 364) / 7) + 1 AS retail_week, + ((day_offset % 364) / 91) + 1 AS retail_quarter, + ((day_offset % 364) / 7) % 13 AS week_in_quarter, + + DATE '2024-02-04' + CASE + WHEN day_offset < 364 THEN 0 + ELSE 364 + END AS retail_year_begin_date, + + ((day_offset / 7) / 13) * 3 + + CASE + WHEN ((day_offset / 7) % 13) < 4 THEN 1 + WHEN ((day_offset / 7) % 13) < 9 THEN 2 + ELSE 3 + END AS global_month, + + ((day_offset / 7) / 13) + 1 AS global_quarter, + day_offset + 1 AS global_day_number, + + ((day_offset / 7) / 13) * 3 + + CASE + WHEN ((day_offset / 7) % 13) < 4 THEN 1 + WHEN ((day_offset / 7) % 13) < 9 THEN 2 + ELSE 3 + END - CASE + WHEN day_offset < 364 THEN 0 + ELSE 12 + END AS retail_month_in_year, + + row_number() OVER ( + PARTITION BY + ((day_offset / 7) / 13) * 3 + + CASE + WHEN ((day_offset / 7) % 13) < 4 THEN 1 + WHEN ((day_offset / 7) % 13) < 9 THEN 2 + ELSE 3 + END + ORDER BY date_val + ) AS day_in_retail_month, + + row_number() OVER ( + PARTITION BY ((day_offset / 7) / 13) + 1 + ORDER BY date_val + ) AS day_in_retail_quarter, + + row_number() OVER ( + ORDER BY date_val + ) AS day_in_retail_year + FROM base), + final AS (SELECT r.date_val::timestamp, + r.retail_date::timestamp, + r.retail_year_name, + ('Retail Month ' || r.retail_month_in_year) AS retail_month_long_name, + ('WK' || LPAD(r.retail_week::text, 2, '0')) AS retail_week_name, + r.retail_year_begin_date, + ('Q' || r.retail_quarter || ' ' || r.retail_year_name) AS retail_quarter_year, + + (SELECT MIN(date_val) + FROM retail_calc r2 + WHERE r2.global_month = r.global_month + AND r2.day_in_retail_month = 1) AS retail_month_begin_date, + + r.date_val - (extract(dow from r.date_val)::int) AS retail_week_begin_date, + (r.retail_year_name || '-WK' || LPAD(r.retail_week::text, 2, '0')) AS retail_year_week, + + r_prev_month.date_val::timestamp AS retail_date_prev_month, + r_prev_quarter.date_val::timestamp AS retail_date_prev_quarter, + r_prev_year.date_val::timestamp AS retail_date_prev_year + + FROM retail_calc r + LEFT JOIN retail_calc r_prev_month + ON r_prev_month.global_month = r.global_month - 1 + AND r_prev_month.day_in_retail_month = r.day_in_retail_month + LEFT JOIN retail_calc r_prev_quarter + ON r_prev_quarter.global_quarter = r.global_quarter - 1 + AND r_prev_quarter.day_in_retail_quarter = r.day_in_retail_quarter + LEFT JOIN retail_calc r_prev_year + ON r_prev_year.global_day_number = r.global_day_number - 364) SELECT * FROM final ORDER BY date_val @@ -151,16 +218,16 @@ cubes: granularities: - name: year - sql: "{CUBE.retail_year_begin_date}" + sql: "{CUBE}.retail_year_begin_date" - name: quarter - sql: "{CUBE.retail_quarter_year}" + sql: "{CUBE}.retail_quarter_year" - - name: month - sql: "{CUBE.retail_month_begin_date}" +# - name: month +# sql: "{CUBE}.retail_month_begin_date" - name: week - sql: "{CUBE.retail_week_begin_date}" + sql: "{CUBE}.retail_week_begin_date" # Casually defining custom granularities should also work. # While maybe not very sound from a business standpoint, @@ -169,6 +236,19 @@ cubes: interval: 2 week origin: "2025-01-01" + time_shift: + - interval: 1 month + type: prior + sql: "{CUBE}.retail_date_prev_month" + + - interval: 1 quarter + type: prior + sql: "{CUBE}.retail_date_prev_quarter" + + - interval: 1 year + type: prior + sql: "{CUBE}.retail_date_prev_year" + - name: retail_year sql: "{CUBE}.retail_year_name" type: string @@ -230,12 +310,12 @@ cubes: timeDimensions: [{ dimension: 'custom_calendar.retail_date', granularity: 'year', - dateRange: ['2025-02-01', '2026-03-01'] + dateRange: ['2025-02-02', '2026-02-01'] }], order: [{ id: 'custom_calendar.retail_date' }] }, [ { - calendar_orders__count: '36', + calendar_orders__count: '37', custom_calendar__retail_date_year: '2025-02-02T00:00:00.000Z', } ])); @@ -245,54 +325,54 @@ cubes: timeDimensions: [{ dimension: 'custom_calendar.retail_date', granularity: 'month', - dateRange: ['2025-02-01', '2026-03-01'] + dateRange: ['2025-02-02', '2026-02-01'] }], order: [{ id: 'custom_calendar.retail_date' }] }, [ { calendar_orders__count: '3', - custom_calendar__retail_date_month: '2025-02-02T00:00:00.000Z', + custom_calendar__retail_date_month: '2025-02-01T00:00:00.000Z', }, { - calendar_orders__count: '4', - custom_calendar__retail_date_month: '2025-03-02T00:00:00.000Z', + calendar_orders__count: '3', + custom_calendar__retail_date_month: '2025-03-01T00:00:00.000Z', }, { - calendar_orders__count: '4', - custom_calendar__retail_date_month: '2025-04-06T00:00:00.000Z', + calendar_orders__count: '3', + custom_calendar__retail_date_month: '2025-04-01T00:00:00.000Z', }, { - calendar_orders__count: '4', - custom_calendar__retail_date_month: '2025-05-04T00:00:00.000Z', + calendar_orders__count: '3', + custom_calendar__retail_date_month: '2025-05-01T00:00:00.000Z', }, { calendar_orders__count: '4', custom_calendar__retail_date_month: '2025-06-01T00:00:00.000Z', }, { - calendar_orders__count: '2', - custom_calendar__retail_date_month: '2025-07-06T00:00:00.000Z', + calendar_orders__count: '4', + custom_calendar__retail_date_month: '2025-07-01T00:00:00.000Z', }, { - calendar_orders__count: '3', - custom_calendar__retail_date_month: '2025-08-03T00:00:00.000Z', + calendar_orders__count: '4', + custom_calendar__retail_date_month: '2025-08-01T00:00:00.000Z', }, { - calendar_orders__count: '3', - custom_calendar__retail_date_month: '2025-08-31T00:00:00.000Z', + calendar_orders__count: '4', + custom_calendar__retail_date_month: '2025-09-01T00:00:00.000Z', }, { calendar_orders__count: '3', - custom_calendar__retail_date_month: '2025-10-05T00:00:00.000Z', + custom_calendar__retail_date_month: '2025-10-01T00:00:00.000Z', }, { calendar_orders__count: '3', - custom_calendar__retail_date_month: '2025-11-02T00:00:00.000Z', + custom_calendar__retail_date_month: '2025-11-01T00:00:00.000Z', }, { calendar_orders__count: '3', - custom_calendar__retail_date_month: '2025-11-30T00:00:00.000Z', - } + custom_calendar__retail_date_month: '2025-12-01T00:00:00.000Z', + }, ])); it('Count by retail week', async () => runQueryTest({ @@ -300,7 +380,7 @@ cubes: timeDimensions: [{ dimension: 'custom_calendar.retail_date', granularity: 'week', - dateRange: ['2025-02-01', '2025-04-01'] + dateRange: ['2025-02-02', '2025-04-01'] }], order: [{ id: 'custom_calendar.retail_date' }] }, [ @@ -318,7 +398,7 @@ cubes: }, { calendar_orders__count: '1', - custom_calendar__retail_date_week: '2025-03-02T00:00:00.000Z', + custom_calendar__retail_date_week: '2025-02-23T00:00:00.000Z', }, { calendar_orders__count: '1', @@ -330,8 +410,8 @@ cubes: }, { calendar_orders__count: '1', - custom_calendar__retail_date_week: '2025-03-23T00:00:00.000Z', - } + custom_calendar__retail_date_week: '2025-03-30T00:00:00.000Z', + }, ])); it('Count by fortnight custom granularity', async () => runQueryTest({ @@ -339,25 +419,244 @@ cubes: timeDimensions: [{ dimension: 'custom_calendar.retail_date', granularity: 'fortnight', - dateRange: ['2025-02-01', '2025-04-01'] + dateRange: ['2025-02-02', '2025-04-01'] }], order: [{ id: 'custom_calendar.retail_date' }] }, [ { - calendar_orders__count: '2', + calendar_orders__count: '1', custom_calendar__retail_date_fortnight: '2025-01-29T00:00:00.000Z', // Notice it starts on 2025-01-29, not 2025-02-01 }, { - calendar_orders__count: '1', + calendar_orders__count: '2', custom_calendar__retail_date_fortnight: '2025-02-12T00:00:00.000Z', }, { - calendar_orders__count: '1', + calendar_orders__count: '2', custom_calendar__retail_date_fortnight: '2025-02-26T00:00:00.000Z', }, { - calendar_orders__count: '3', + calendar_orders__count: '1', custom_calendar__retail_date_fortnight: '2025-03-12T00:00:00.000Z', - } + }, + { + calendar_orders__count: '1', + custom_calendar__retail_date_fortnight: '2025-03-26T00:00:00.000Z', + }, ])); + + describe('Time-shifts', () => { + it('Count shifted by retail year (custom shift + custom granularity)', async () => runQueryTest({ + measures: ['calendar_orders.count', 'calendar_orders.count_shifted_calendar_y'], + timeDimensions: [{ + dimension: 'custom_calendar.retail_date', + granularity: 'year', + dateRange: ['2025-02-02', '2026-02-01'] + }], + order: [{ id: 'custom_calendar.retail_date' }] + }, [ + { + calendar_orders__count: '37', + calendar_orders__count_shifted_calendar_y: '39', + custom_calendar__retail_date_year: '2025-02-02T00:00:00.000Z', + }, + ])); + + it('Count shifted by retail month (custom shift common granularity)', async () => runQueryTest({ + measures: ['calendar_orders.count', 'calendar_orders.count_shifted_calendar_m'], + timeDimensions: [{ + dimension: 'custom_calendar.retail_date', + granularity: 'month', + dateRange: ['2025-02-02', '2026-02-01'] + }], + order: [{ id: 'custom_calendar.retail_date' }] + }, [ + { + calendar_orders__count: '3', + calendar_orders__count_shifted_calendar_m: '3', + custom_calendar__retail_date_month: '2025-02-01T00:00:00.000Z', + }, + { + calendar_orders__count: '3', + calendar_orders__count_shifted_calendar_m: '4', + custom_calendar__retail_date_month: '2025-03-01T00:00:00.000Z', + }, + { + calendar_orders__count: '3', + calendar_orders__count_shifted_calendar_m: '2', + custom_calendar__retail_date_month: '2025-04-01T00:00:00.000Z', + }, + { + calendar_orders__count: '3', + calendar_orders__count_shifted_calendar_m: '2', + custom_calendar__retail_date_month: '2025-05-01T00:00:00.000Z', + }, + { + calendar_orders__count: '4', + calendar_orders__count_shifted_calendar_m: '3', + custom_calendar__retail_date_month: '2025-06-01T00:00:00.000Z', + }, + { + calendar_orders__count: '4', + calendar_orders__count_shifted_calendar_m: '4', + custom_calendar__retail_date_month: '2025-07-01T00:00:00.000Z', + }, + { + calendar_orders__count: '4', + calendar_orders__count_shifted_calendar_m: '4', + custom_calendar__retail_date_month: '2025-08-01T00:00:00.000Z', + }, + { + calendar_orders__count: '4', + calendar_orders__count_shifted_calendar_m: '3', + custom_calendar__retail_date_month: '2025-09-01T00:00:00.000Z', + }, + { + calendar_orders__count: '3', + calendar_orders__count_shifted_calendar_m: '4', + custom_calendar__retail_date_month: '2025-10-01T00:00:00.000Z', + }, + { + calendar_orders__count: '3', + calendar_orders__count_shifted_calendar_m: '3', + custom_calendar__retail_date_month: '2025-11-01T00:00:00.000Z', + }, + { + calendar_orders__count: '3', + calendar_orders__count_shifted_calendar_m: '3', + custom_calendar__retail_date_month: '2025-12-01T00:00:00.000Z', + }, + ])); + + it('Count shifted by retail week (common shift custom granularity)', async () => runQueryTest({ + measures: ['calendar_orders.count', 'calendar_orders.count_shifted_calendar_w'], + timeDimensions: [{ + dimension: 'custom_calendar.retail_date', + granularity: 'week', + dateRange: ['2025-02-02', '2026-02-01'] + }], + order: [{ id: 'custom_calendar.retail_date' }] + }, [ + { + calendar_orders__count: '1', + calendar_orders__count_shifted_calendar_w: '1', + custom_calendar__retail_date_week: '2025-02-09T00:00:00.000Z', + }, + { + calendar_orders__count: '1', + calendar_orders__count_shifted_calendar_w: '1', + custom_calendar__retail_date_week: '2025-02-16T00:00:00.000Z', + }, + { + calendar_orders__count: '1', + calendar_orders__count_shifted_calendar_w: '1', + custom_calendar__retail_date_week: '2025-02-23T00:00:00.000Z', + }, + { + calendar_orders__count: '1', + calendar_orders__count_shifted_calendar_w: '1', + custom_calendar__retail_date_week: '2025-03-16T00:00:00.000Z', + }, + { + calendar_orders__count: '1', + calendar_orders__count_shifted_calendar_w: '1', + custom_calendar__retail_date_week: '2025-04-06T00:00:00.000Z', + }, + { + calendar_orders__count: '1', + calendar_orders__count_shifted_calendar_w: '1', + custom_calendar__retail_date_week: '2025-04-13T00:00:00.000Z', + }, + { + calendar_orders__count: '1', + calendar_orders__count_shifted_calendar_w: '1', + custom_calendar__retail_date_week: '2025-05-11T00:00:00.000Z', + }, + { + calendar_orders__count: '1', + calendar_orders__count_shifted_calendar_w: '1', + custom_calendar__retail_date_week: '2025-05-18T00:00:00.000Z', + }, + { + calendar_orders__count: '1', + calendar_orders__count_shifted_calendar_w: '1', + custom_calendar__retail_date_week: '2025-06-08T00:00:00.000Z', + }, + { + calendar_orders__count: '1', + calendar_orders__count_shifted_calendar_w: '1', + custom_calendar__retail_date_week: '2025-06-15T00:00:00.000Z', + }, + { + calendar_orders__count: '1', + calendar_orders__count_shifted_calendar_w: '1', + custom_calendar__retail_date_week: '2025-06-22T00:00:00.000Z', + }, + { + calendar_orders__count: '1', + calendar_orders__count_shifted_calendar_w: '1', + custom_calendar__retail_date_week: '2025-06-29T00:00:00.000Z', + }, + { + calendar_orders__count: '2', + calendar_orders__count_shifted_calendar_w: '1', + custom_calendar__retail_date_week: '2025-07-20T00:00:00.000Z', + }, + { + calendar_orders__count: '1', + calendar_orders__count_shifted_calendar_w: '2', + custom_calendar__retail_date_week: '2025-07-27T00:00:00.000Z', + }, + { + calendar_orders__count: '1', + calendar_orders__count_shifted_calendar_w: '1', + custom_calendar__retail_date_week: '2025-08-03T00:00:00.000Z', + }, + { + calendar_orders__count: '1', + calendar_orders__count_shifted_calendar_w: '1', + custom_calendar__retail_date_week: '2025-08-10T00:00:00.000Z', + }, + { + calendar_orders__count: '1', + calendar_orders__count_shifted_calendar_w: '1', + custom_calendar__retail_date_week: '2025-08-17T00:00:00.000Z', + }, + { + calendar_orders__count: '2', + calendar_orders__count_shifted_calendar_w: '1', + custom_calendar__retail_date_week: '2025-09-07T00:00:00.000Z', + }, + { + calendar_orders__count: '1', + calendar_orders__count_shifted_calendar_w: '2', + custom_calendar__retail_date_week: '2025-09-14T00:00:00.000Z', + }, + { + calendar_orders__count: '1', + calendar_orders__count_shifted_calendar_w: '1', + custom_calendar__retail_date_week: '2025-10-12T00:00:00.000Z', + }, + { + calendar_orders__count: '1', + calendar_orders__count_shifted_calendar_w: '1', + custom_calendar__retail_date_week: '2025-10-19T00:00:00.000Z', + }, + { + calendar_orders__count: '1', + calendar_orders__count_shifted_calendar_w: '1', + custom_calendar__retail_date_week: '2025-11-23T00:00:00.000Z', + }, + { + calendar_orders__count: '1', + calendar_orders__count_shifted_calendar_w: '1', + custom_calendar__retail_date_week: '2025-11-30T00:00:00.000Z', + }, + { + calendar_orders__count: '1', + calendar_orders__count_shifted_calendar_w: '1', + custom_calendar__retail_date_week: '2025-12-21T00:00:00.000Z', + }, + ])); + }); }); diff --git a/packages/cubejs-schema-compiler/test/unit/__snapshots__/schema.test.ts.snap b/packages/cubejs-schema-compiler/test/unit/__snapshots__/schema.test.ts.snap index 5857397186fc4..0ffe9c8cc20c4 100644 --- a/packages/cubejs-schema-compiler/test/unit/__snapshots__/schema.test.ts.snap +++ b/packages/cubejs-schema-compiler/test/unit/__snapshots__/schema.test.ts.snap @@ -80,8 +80,40 @@ Object { }, "ownedByCube": true, "sql": [Function], + "timeShift": Array [ + Object { + "interval": "1 month", + "sql": [Function], + "type": "prior", + }, + Object { + "interval": "1 year", + "sql": [Function], + "type": "prior", + }, + Object { + "interval": "2 year", + "sql": [Function], + "type": "prior", + }, + ], "type": "time", }, + "retail_date_prev_month": Object { + "ownedByCube": true, + "sql": [Function], + "type": "string", + }, + "retail_date_prev_prev_year": Object { + "ownedByCube": true, + "sql": [Function], + "type": "string", + }, + "retail_date_prev_year": Object { + "ownedByCube": true, + "sql": [Function], + "type": "string", + }, "retail_month_begin_date": Object { "ownedByCube": true, "sql": [Function], @@ -232,6 +264,38 @@ Object { "sql": [Function], }, }, + "ownedByCube": true, + "sql": [Function], + "timeShift": Array [ + Object { + "interval": "1 month", + "sql": [Function], + "type": "prior", + }, + Object { + "interval": "1 year", + "sql": [Function], + "type": "prior", + }, + Object { + "interval": "2 year", + "sql": [Function], + "type": "prior", + }, + ], + "type": "time", + }, + "retail_date_prev_month": Object { + "ownedByCube": true, + "sql": [Function], + "type": "time", + }, + "retail_date_prev_prev_year": Object { + "ownedByCube": true, + "sql": [Function], + "type": "time", + }, + "retail_date_prev_year": Object { "ownedByCube": true, "sql": [Function], "type": "time", diff --git a/packages/cubejs-schema-compiler/test/unit/fixtures/custom_calendar.js b/packages/cubejs-schema-compiler/test/unit/fixtures/custom_calendar.js index 395e251a3ec36..78f434a20fdfe 100644 --- a/packages/cubejs-schema-compiler/test/unit/fixtures/custom_calendar.js +++ b/packages/cubejs-schema-compiler/test/unit/fixtures/custom_calendar.js @@ -33,7 +33,24 @@ cube(`custom_calendar_js`, { year: { sql: `{CUBE.retail_year_begin_date}`, } - } + }, + timeShift: [ + { + interval: '1 month', + type: 'prior', + sql: `{CUBE.retail_date_prev_month}`, + }, + { + interval: '1 year', + type: 'prior', + sql: `{CUBE.retail_date_prev_year}`, + }, + { + interval: '2 year', + type: 'prior', + sql: `{CUBE.retail_date_prev_prev_year}`, + } + ] }, retail_year: { @@ -86,6 +103,21 @@ cube(`custom_calendar_js`, { type: `string` }, + retail_date_prev_month: { + sql: `retail_date_prev_month`, + type: `string` + }, + + retail_date_prev_year: { + sql: `retail_date_prev_year`, + type: `string` + }, + + retail_date_prev_prev_year: { + sql: `retail_date_prev_prev_year`, + type: `string` + }, + fiscal_year: { sql: `fiscal_year`, type: `string` diff --git a/packages/cubejs-schema-compiler/test/unit/fixtures/custom_calendar.yml b/packages/cubejs-schema-compiler/test/unit/fixtures/custom_calendar.yml index dee8571c0ac67..aa0a2271a8629 100644 --- a/packages/cubejs-schema-compiler/test/unit/fixtures/custom_calendar.yml +++ b/packages/cubejs-schema-compiler/test/unit/fixtures/custom_calendar.yml @@ -37,6 +37,23 @@ cubes: interval: 2 week origin: "2025-01-01" + # This is similar to the syntax shown above for custom granularities. + # New `time_shift` parameter is introduced for time dimensions, + # with `interval`, `type`, and `sql` parameters + time_shift: + - interval: 1 month + type: prior + sql: "{CUBE.retail_date_prev_month}" + + - interval: 1 year + type: prior + sql: "{CUBE.retail_date_prev_year}" + + # All needed intervals should be defined explicitly + - interval: 2 year + type: prior + sql: "{CUBE.retail_date_prev_prev_year}" + - name: retail_year sql: "{CUBE}.retail_year_name" type: string @@ -77,6 +94,18 @@ cubes: sql: "{CUBE}.retail_week_in_month" type: string + - name: retail_date_prev_month + sql: "{CUBE}.retail_date_prev_month" + type: time + + - name: retail_date_prev_year + sql: "{CUBE}.retail_date_prev_year" + type: time + + - name: retail_date_prev_prev_year + sql: "{CUBE}.retail_date_prev_prev_year" + type: time + ##### Fiscal Dates #### - name: fiscal_year diff --git a/packages/cubejs-server-core/CHANGELOG.md b/packages/cubejs-server-core/CHANGELOG.md index b85ad42f93257..6057a060e1da6 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/server-core + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 08a9dd91cf154..c66287841ef7d 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.35", + "version": "1.3.36", "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.35", - "@cubejs-backend/cloud": "1.3.35", + "@cubejs-backend/api-gateway": "1.3.36", + "@cubejs-backend/cloud": "1.3.36", "@cubejs-backend/dotenv": "^9.0.2", - "@cubejs-backend/native": "1.3.35", - "@cubejs-backend/query-orchestrator": "1.3.35", - "@cubejs-backend/schema-compiler": "1.3.35", - "@cubejs-backend/shared": "1.3.35", - "@cubejs-backend/templates": "1.3.35", + "@cubejs-backend/native": "1.3.36", + "@cubejs-backend/query-orchestrator": "1.3.36", + "@cubejs-backend/schema-compiler": "1.3.36", + "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/templates": "1.3.36", "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.35", - "@cubejs-backend/linter": "1.3.35", - "@cubejs-client/playground": "1.3.35", + "@cubejs-backend/cubestore-driver": "1.3.36", + "@cubejs-backend/linter": "1.3.36", + "@cubejs-client/playground": "1.3.36", "@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 f2acef07765ac..2b195c9fd6946 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/server + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **Note:** Version bump only for package @cubejs-backend/server diff --git a/packages/cubejs-server/package.json b/packages/cubejs-server/package.json index 72bf319431169..0bb999b4b4c6b 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.35", + "version": "1.3.36", "types": "index.d.ts", "repository": { "type": "git", @@ -40,11 +40,11 @@ "jest:shapshot": "jest --updateSnapshot test" }, "dependencies": { - "@cubejs-backend/cubestore-driver": "1.3.35", + "@cubejs-backend/cubestore-driver": "1.3.36", "@cubejs-backend/dotenv": "^9.0.2", - "@cubejs-backend/native": "1.3.35", - "@cubejs-backend/server-core": "1.3.35", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/native": "1.3.36", + "@cubejs-backend/server-core": "1.3.36", + "@cubejs-backend/shared": "1.3.36", "@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.35", - "@cubejs-backend/query-orchestrator": "1.3.35", + "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/query-orchestrator": "1.3.36", "@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 07503232aed29..dc51d489eba96 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/snowflake-driver + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) ### Features diff --git a/packages/cubejs-snowflake-driver/package.json b/packages/cubejs-snowflake-driver/package.json index 2dcf217d1848c..1af696e828604 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.35", + "version": "1.3.36", "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.35", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/base-driver": "1.3.36", + "@cubejs-backend/shared": "1.3.36", "date-fns-timezone": "^0.1.4", "snowflake-sdk": "^2.0.3" }, @@ -38,7 +38,7 @@ "extends": "../cubejs-linter" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.35", + "@cubejs-backend/linter": "1.3.36", "typescript": "~5.2.2" } } diff --git a/packages/cubejs-sqlite-driver/CHANGELOG.md b/packages/cubejs-sqlite-driver/CHANGELOG.md index 3d107fbc06d3a..522b579048b6e 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/sqlite-driver + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 f374762fb41de..5fe1564a30ce5 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.35", + "version": "1.3.36", "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.35", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/base-driver": "1.3.36", + "@cubejs-backend/shared": "1.3.36", "sqlite3": "^5.1.7" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.35" + "@cubejs-backend/linter": "1.3.36" }, "publishConfig": { "access": "public" diff --git a/packages/cubejs-templates/CHANGELOG.md b/packages/cubejs-templates/CHANGELOG.md index 017ea1d2976df..61145dd48bf5b 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/templates + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **Note:** Version bump only for package @cubejs-backend/templates diff --git a/packages/cubejs-templates/package.json b/packages/cubejs-templates/package.json index 14f5133bf8231..e4fe559f8fe20 100644 --- a/packages/cubejs-templates/package.json +++ b/packages/cubejs-templates/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-backend/templates", - "version": "1.3.35", + "version": "1.3.36", "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.35", + "@cubejs-backend/shared": "1.3.36", "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.35", + "@cubejs-backend/linter": "1.3.36", "typescript": "~5.2.2" } } diff --git a/packages/cubejs-testing-drivers/CHANGELOG.md b/packages/cubejs-testing-drivers/CHANGELOG.md index 1e5aec02fe6cf..2fdb209d565cf 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +### Features + +- **tesseract:** Rolling window with custom granularities without date range ([#9762](https://github.com/cube-js/cube/issues/9762)) ([d81c57d](https://github.com/cube-js/cube/commit/d81c57db80e96a211c1d12a67b06cefd868e111e)) + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **Note:** Version bump only for package @cubejs-backend/testing-drivers diff --git a/packages/cubejs-testing-drivers/fixtures/athena.json b/packages/cubejs-testing-drivers/fixtures/athena.json index 11ed669c88937..9b30cfacff973 100644 --- a/packages/cubejs-testing-drivers/fixtures/athena.json +++ b/packages/cubejs-testing-drivers/fixtures/athena.json @@ -149,6 +149,7 @@ "querying BigECommerce: rolling window YTD without date range", "week granularity is not supported for intervals", "querying BigECommerce: rolling window by 2 week", + "querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByLeading without date range", "---------------------------------------", "Custom Granularities ", @@ -185,9 +186,6 @@ "querying custom granularities ECommerce: count by three_months_by_march + dimension", "querying custom granularities (with preaggregation) ECommerce: totalQuantity by half_year + no dimension", "querying custom granularities (with preaggregation) ECommerce: totalQuantity by half_year + dimension", - "querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByUnbounded", - "querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByTrailing", - "querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByLeading", "pre-aggregations Customers: running total without time dimension", "querying BigECommerce: totalProfitYearAgo", "SQL API: post-aggregate percentage of total", diff --git a/packages/cubejs-testing-drivers/fixtures/bigquery.json b/packages/cubejs-testing-drivers/fixtures/bigquery.json index 9624a5c1fec98..0defe94516aa8 100644 --- a/packages/cubejs-testing-drivers/fixtures/bigquery.json +++ b/packages/cubejs-testing-drivers/fixtures/bigquery.json @@ -163,6 +163,7 @@ "querying BigECommerce: rolling window by 2 day without date range", "querying BigECommerce: rolling window by 2 month without date range", "querying BigECommerce: rolling window YTD without date range", + "querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByLeading without date range", "---------------------------------------", "SKIPPED SQL API (Need work)", @@ -188,6 +189,7 @@ "querying ECommerce: total quantity, avg discount, total sales, total profit by product + order + total -- rounding in athena", "querying ECommerce: total sales, total profit by month + order (date) + total -- doesn't work with the BigQuery", "querying ECommerce: total quantity, avg discount, total sales, total profit by product + order + total -- noisy test", + "querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByLeading without date range", "querying BigECommerce: null sum", "querying BigECommerce: null boolean", "querying BigECommerce: rolling window by 2 day without date range", diff --git a/packages/cubejs-testing-drivers/fixtures/clickhouse.json b/packages/cubejs-testing-drivers/fixtures/clickhouse.json index 292008f58f6a7..8ce44e3bf905e 100644 --- a/packages/cubejs-testing-drivers/fixtures/clickhouse.json +++ b/packages/cubejs-testing-drivers/fixtures/clickhouse.json @@ -200,6 +200,7 @@ "querying BigECommerce: rolling window by 2 day without date range", "querying BigECommerce: rolling window by 2 month without date range", "querying BigECommerce: rolling window YTD without date range", + "querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByLeading without date range", "---------------------------------------", "Custom Granularities ", diff --git a/packages/cubejs-testing-drivers/fixtures/databricks-jdbc.json b/packages/cubejs-testing-drivers/fixtures/databricks-jdbc.json index 75c855a0a9063..13a0605c5d852 100644 --- a/packages/cubejs-testing-drivers/fixtures/databricks-jdbc.json +++ b/packages/cubejs-testing-drivers/fixtures/databricks-jdbc.json @@ -216,6 +216,7 @@ "querying BigECommerce: rolling window by 2 day without date range", "querying BigECommerce: rolling window by 2 month without date range", "querying BigECommerce: rolling window YTD without date range", + "querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByLeading without date range", "---------------------------------------", "Custom Granularities ", diff --git a/packages/cubejs-testing-drivers/fixtures/mssql.json b/packages/cubejs-testing-drivers/fixtures/mssql.json index b4e5b3170787e..c2fef8fcb97d4 100644 --- a/packages/cubejs-testing-drivers/fixtures/mssql.json +++ b/packages/cubejs-testing-drivers/fixtures/mssql.json @@ -142,6 +142,7 @@ "querying BigECommerce: rolling window by 2 day without date range", "querying BigECommerce: rolling window by 2 month without date range", "querying BigECommerce: rolling window YTD without date range", + "querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByLeading without date range", "---------------------------------------", "SKIPPED SQL API (Need work)", diff --git a/packages/cubejs-testing-drivers/fixtures/mysql.json b/packages/cubejs-testing-drivers/fixtures/mysql.json index 70c4e89d130d8..413226f28f5ba 100644 --- a/packages/cubejs-testing-drivers/fixtures/mysql.json +++ b/packages/cubejs-testing-drivers/fixtures/mysql.json @@ -138,6 +138,7 @@ "querying BigECommerce: rolling window by 2 day without date range", "querying BigECommerce: rolling window by 2 month without date range", "querying BigECommerce: rolling window YTD without date range", + "querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByLeading without date range", "---------------------------------------", "Custom Granularities ", diff --git a/packages/cubejs-testing-drivers/fixtures/postgres.json b/packages/cubejs-testing-drivers/fixtures/postgres.json index 68984c53407ca..068481dedbeba 100644 --- a/packages/cubejs-testing-drivers/fixtures/postgres.json +++ b/packages/cubejs-testing-drivers/fixtures/postgres.json @@ -162,7 +162,8 @@ "---------------------------------------", "querying BigECommerce: rolling window by 2 day without date range", "querying BigECommerce: rolling window by 2 month without date range", - "querying BigECommerce: rolling window YTD without date range" + "querying BigECommerce: rolling window YTD without date range", + "querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByLeading without date range" ], "tesseractSkip": [ "querying Products: dimensions -- doesn't work wo ordering", diff --git a/packages/cubejs-testing-drivers/fixtures/redshift.json b/packages/cubejs-testing-drivers/fixtures/redshift.json index 2181ec35dccc5..4807fc88d567b 100644 --- a/packages/cubejs-testing-drivers/fixtures/redshift.json +++ b/packages/cubejs-testing-drivers/fixtures/redshift.json @@ -174,6 +174,7 @@ "querying BigECommerce: rolling window by 2 day without date range", "querying BigECommerce: rolling window by 2 month without date range", "querying BigECommerce: rolling window YTD without date range", + "querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByLeading without date range", "---------------------------------------", "SKIPPED SQL API (Need work) ", diff --git a/packages/cubejs-testing-drivers/fixtures/snowflake.json b/packages/cubejs-testing-drivers/fixtures/snowflake.json index 3458b34fe334c..6e3d2dc65e2c7 100644 --- a/packages/cubejs-testing-drivers/fixtures/snowflake.json +++ b/packages/cubejs-testing-drivers/fixtures/snowflake.json @@ -232,6 +232,7 @@ "querying ECommerce: total quantity, avg discount, total sales, total profit by product + order + total -- noisy test", "querying BigECommerce: null sum", "querying BigECommerce: null boolean", + "querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByLeading without date range", "---------------------------------------", "Requires Tesseract. ", diff --git a/packages/cubejs-testing-drivers/package.json b/packages/cubejs-testing-drivers/package.json index 757b4c6faa0cc..1730f8ca6d26c 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.35", + "version": "1.3.36", "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.35", - "@cubejs-backend/base-driver": "1.3.35", - "@cubejs-backend/bigquery-driver": "1.3.35", - "@cubejs-backend/clickhouse-driver": "1.3.35", - "@cubejs-backend/cubestore-driver": "1.3.35", - "@cubejs-backend/databricks-jdbc-driver": "1.3.35", + "@cubejs-backend/athena-driver": "1.3.36", + "@cubejs-backend/base-driver": "1.3.36", + "@cubejs-backend/bigquery-driver": "1.3.36", + "@cubejs-backend/clickhouse-driver": "1.3.36", + "@cubejs-backend/cubestore-driver": "1.3.36", + "@cubejs-backend/databricks-jdbc-driver": "1.3.36", "@cubejs-backend/dotenv": "^9.0.2", - "@cubejs-backend/linter": "1.3.35", - "@cubejs-backend/mssql-driver": "1.3.35", - "@cubejs-backend/mysql-driver": "1.3.35", - "@cubejs-backend/postgres-driver": "1.3.35", - "@cubejs-backend/query-orchestrator": "1.3.35", - "@cubejs-backend/server-core": "1.3.35", - "@cubejs-backend/shared": "1.3.35", - "@cubejs-backend/snowflake-driver": "1.3.35", - "@cubejs-backend/testing-shared": "1.3.35", - "@cubejs-client/core": "1.3.35", - "@cubejs-client/ws-transport": "1.3.35", + "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/mssql-driver": "1.3.36", + "@cubejs-backend/mysql-driver": "1.3.36", + "@cubejs-backend/postgres-driver": "1.3.36", + "@cubejs-backend/query-orchestrator": "1.3.36", + "@cubejs-backend/server-core": "1.3.36", + "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/snowflake-driver": "1.3.36", + "@cubejs-backend/testing-shared": "1.3.36", + "@cubejs-client/core": "1.3.36", + "@cubejs-client/ws-transport": "1.3.36", "@jest/globals": "^29", "@types/jest": "^29", "@types/node": "^20", diff --git a/packages/cubejs-testing-drivers/src/tests/testQueries.ts b/packages/cubejs-testing-drivers/src/tests/testQueries.ts index 65e77cd8f7904..af3adffb0ed59 100644 --- a/packages/cubejs-testing-drivers/src/tests/testQueries.ts +++ b/packages/cubejs-testing-drivers/src/tests/testQueries.ts @@ -1974,6 +1974,19 @@ export function testQueries(type: string, { includeIncrementalSchemaSuite, exten expect(response.rawData()).toMatchSnapshot(); }); + execute('querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByLeading without date range', async () => { + const response = await client.load({ + measures: [ + 'ECommerce.rollingCountByLeading', + ], + timeDimensions: [{ + dimension: 'ECommerce.customOrderDateNoPreAgg', + granularity: 'two_mo_by_feb', + }], + }); + expect(response.rawData()).toMatchSnapshot(); + }); + execute('querying custom granularities (with preaggregation) ECommerce: totalQuantity by half_year + no dimension', async () => { const response = await client.load({ measures: [ 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 0386e57ffa1d1..a51e066219a71 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 @@ -9761,6 +9761,41 @@ Array [ ] `; +exports[`Queries with the @cubejs-backend/athena-driver querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByLeading without date range 1`] = ` +Array [ + Object { + "ECommerce.customOrderDateNoPreAgg": "2020-02-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2020-02-01T10:00:00.000", + "ECommerce.rollingCountByLeading": "12", + }, + Object { + "ECommerce.customOrderDateNoPreAgg": "2020-04-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2020-04-01T10:00:00.000", + "ECommerce.rollingCountByLeading": "6", + }, + Object { + "ECommerce.customOrderDateNoPreAgg": "2020-06-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2020-06-01T10:00:00.000", + "ECommerce.rollingCountByLeading": "19", + }, + Object { + "ECommerce.customOrderDateNoPreAgg": "2020-08-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2020-08-01T10:00:00.000", + "ECommerce.rollingCountByLeading": "16", + }, + Object { + "ECommerce.customOrderDateNoPreAgg": "2020-10-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2020-10-01T10:00:00.000", + "ECommerce.rollingCountByLeading": null, + }, + Object { + "ECommerce.customOrderDateNoPreAgg": "2020-12-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2020-12-01T10:00:00.000", + "ECommerce.rollingCountByLeading": null, + }, +] +`; + exports[`Queries with the @cubejs-backend/athena-driver querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByTrailing 1`] = ` Array [ Object { 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 8aecfb381e798..10c36f86216c0 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 @@ -18465,6 +18465,46 @@ Array [ ] `; +exports[`Queries with the @cubejs-backend/postgres-driver querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByLeading without date range 1`] = ` +Array [ + Object { + "ECommerce.customOrderDateNoPreAgg": "2019-12-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2019-12-01T10:00:00.000", + "ECommerce.rollingCountByLeading": "8", + }, + Object { + "ECommerce.customOrderDateNoPreAgg": "2020-02-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2020-02-01T10:00:00.000", + "ECommerce.rollingCountByLeading": "12", + }, + Object { + "ECommerce.customOrderDateNoPreAgg": "2020-04-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2020-04-01T10:00:00.000", + "ECommerce.rollingCountByLeading": "6", + }, + Object { + "ECommerce.customOrderDateNoPreAgg": "2020-06-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2020-06-01T10:00:00.000", + "ECommerce.rollingCountByLeading": "19", + }, + Object { + "ECommerce.customOrderDateNoPreAgg": "2020-08-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2020-08-01T10:00:00.000", + "ECommerce.rollingCountByLeading": "16", + }, + Object { + "ECommerce.customOrderDateNoPreAgg": "2020-10-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2020-10-01T10:00:00.000", + "ECommerce.rollingCountByLeading": null, + }, + Object { + "ECommerce.customOrderDateNoPreAgg": "2020-12-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2020-12-01T10:00:00.000", + "ECommerce.rollingCountByLeading": null, + }, +] +`; + exports[`Queries with the @cubejs-backend/postgres-driver querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByTrailing 1`] = ` Array [ Object { diff --git a/packages/cubejs-testing-shared/CHANGELOG.md b/packages/cubejs-testing-shared/CHANGELOG.md index e244fd0a546f1..751cdf68e2549 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/testing-shared + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 bbca7d5708303..af86acb8b3704 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.35", + "version": "1.3.36", "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.35", - "@cubejs-backend/schema-compiler": "1.3.35", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/query-orchestrator": "1.3.36", + "@cubejs-backend/schema-compiler": "1.3.36", + "@cubejs-backend/shared": "1.3.36", "@testcontainers/kafka": "~10.28.0", "dedent": "^0.7.0", "node-fetch": "^2.6.7", "testcontainers": "^10.28.0" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.35", + "@cubejs-backend/linter": "1.3.36", "@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 84fffb332ba29..75af443b317bb 100644 --- a/packages/cubejs-testing/CHANGELOG.md +++ b/packages/cubejs-testing/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/testing + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **Note:** Version bump only for package @cubejs-backend/testing diff --git a/packages/cubejs-testing/package.json b/packages/cubejs-testing/package.json index 81fb52fd45007..a94c8d3fe128a 100644 --- a/packages/cubejs-testing/package.json +++ b/packages/cubejs-testing/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-backend/testing", - "version": "1.3.35", + "version": "1.3.36", "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.35", + "@cubejs-backend/cubestore-driver": "1.3.36", "@cubejs-backend/dotenv": "^9.0.2", - "@cubejs-backend/ksql-driver": "1.3.35", - "@cubejs-backend/postgres-driver": "1.3.35", - "@cubejs-backend/query-orchestrator": "1.3.35", - "@cubejs-backend/schema-compiler": "1.3.35", - "@cubejs-backend/shared": "1.3.35", - "@cubejs-backend/testing-shared": "1.3.35", - "@cubejs-client/ws-transport": "1.3.35", + "@cubejs-backend/ksql-driver": "1.3.36", + "@cubejs-backend/postgres-driver": "1.3.36", + "@cubejs-backend/query-orchestrator": "1.3.36", + "@cubejs-backend/schema-compiler": "1.3.36", + "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/testing-shared": "1.3.36", + "@cubejs-client/ws-transport": "1.3.36", "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.35", - "@cubejs-client/core": "1.3.35", + "@cubejs-backend/linter": "1.3.36", + "@cubejs-client/core": "1.3.36", "@jest/globals": "^29", "@types/dedent": "^0.7.0", "@types/http-proxy": "^1.17.5", diff --git a/packages/cubejs-trino-driver/CHANGELOG.md b/packages/cubejs-trino-driver/CHANGELOG.md index fcb0b4e45e96b..4795073ec535d 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.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/trino-driver + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) **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 0f6761aa97637..b1c4725eee7db 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.35", + "version": "1.3.36", "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.35", - "@cubejs-backend/prestodb-driver": "1.3.35", - "@cubejs-backend/schema-compiler": "1.3.35", - "@cubejs-backend/shared": "1.3.35", + "@cubejs-backend/base-driver": "1.3.36", + "@cubejs-backend/prestodb-driver": "1.3.36", + "@cubejs-backend/schema-compiler": "1.3.36", + "@cubejs-backend/shared": "1.3.36", "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.35", + "@cubejs-backend/linter": "1.3.36", "@types/jest": "^29", "jest": "^29", "testcontainers": "^10.28.0", diff --git a/packages/cubejs-vertica-driver/CHANGELOG.md b/packages/cubejs-vertica-driver/CHANGELOG.md index 4143b2eec5624..1b66dfda97e2d 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.36](https://github.com/cube-js/cube.js/compare/v1.3.35...v1.3.36) (2025-07-10) + +**Note:** Version bump only for package @cubejs-backend/vertica-driver + ## [1.3.35](https://github.com/cube-js/cube.js/compare/v1.3.34...v1.3.35) (2025-07-09) **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 498fdf4bcaace..872a40d98806e 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.35", + "version": "1.3.36", "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.35", - "@cubejs-backend/query-orchestrator": "1.3.35", - "@cubejs-backend/schema-compiler": "1.3.35", + "@cubejs-backend/base-driver": "1.3.36", + "@cubejs-backend/query-orchestrator": "1.3.36", + "@cubejs-backend/schema-compiler": "1.3.36", "vertica-nodejs": "^1.0.3" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.35", - "@cubejs-backend/testing-shared": "1.3.35", + "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/testing-shared": "1.3.36", "@types/jest": "^29", "jest": "^29", "testcontainers": "^10.28.0" diff --git a/rust/cubenativeutils/Cargo.lock b/rust/cubenativeutils/Cargo.lock index d646a6d7a3f1a..9fbd818a0bd8b 100644 --- a/rust/cubenativeutils/Cargo.lock +++ b/rust/cubenativeutils/Cargo.lock @@ -623,7 +623,7 @@ dependencies = [ [[package]] name = "cube-ext" version = "1.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=637003a448a98bbc5e1585d0f01cc19ba9d50668#637003a448a98bbc5e1585d0f01cc19ba9d50668" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6#7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6" dependencies = [ "arrow", "chrono", @@ -715,7 +715,7 @@ dependencies = [ [[package]] name = "datafusion" version = "7.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=637003a448a98bbc5e1585d0f01cc19ba9d50668#637003a448a98bbc5e1585d0f01cc19ba9d50668" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6#7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6" dependencies = [ "ahash 0.7.8", "arrow", @@ -748,7 +748,7 @@ dependencies = [ [[package]] name = "datafusion-common" version = "7.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=637003a448a98bbc5e1585d0f01cc19ba9d50668#637003a448a98bbc5e1585d0f01cc19ba9d50668" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6#7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6" dependencies = [ "arrow", "ordered-float 2.10.1", @@ -759,7 +759,7 @@ dependencies = [ [[package]] name = "datafusion-data-access" version = "1.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=637003a448a98bbc5e1585d0f01cc19ba9d50668#637003a448a98bbc5e1585d0f01cc19ba9d50668" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6#7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6" dependencies = [ "async-trait", "chrono", @@ -772,7 +772,7 @@ dependencies = [ [[package]] name = "datafusion-expr" version = "7.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=637003a448a98bbc5e1585d0f01cc19ba9d50668#637003a448a98bbc5e1585d0f01cc19ba9d50668" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6#7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6" dependencies = [ "ahash 0.7.8", "arrow", @@ -783,7 +783,7 @@ dependencies = [ [[package]] name = "datafusion-physical-expr" version = "7.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=637003a448a98bbc5e1585d0f01cc19ba9d50668#637003a448a98bbc5e1585d0f01cc19ba9d50668" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6#7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6" dependencies = [ "ahash 0.7.8", "arrow", diff --git a/rust/cubesql/CHANGELOG.md b/rust/cubesql/CHANGELOG.md index bad8baf547057..50bb4fab819f2 100644 --- a/rust/cubesql/CHANGELOG.md +++ b/rust/cubesql/CHANGELOG.md @@ -3,6 +3,13 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) + +### Bug Fixes + +- **cubesql:** Fix adding missing columns for `ORDER BY` clause ([#9764](https://github.com/cube-js/cube/issues/9764)) ([185db54](https://github.com/cube-js/cube/commit/185db547e0c83c0e276c9a89618b4753c969dea7)) +- **cubesql:** Improve DBeaver compatibility ([#9769](https://github.com/cube-js/cube/issues/9769)) ([c206c90](https://github.com/cube-js/cube/commit/c206c901e9da14a230a2b358dfc4ea577adf9f49)) + ## [1.3.35](https://github.com/cube-js/cube/compare/v1.3.34...v1.3.35) (2025-07-09) ### Bug Fixes diff --git a/rust/cubesql/Cargo.lock b/rust/cubesql/Cargo.lock index cbd2cb0f20aea..1681340c2bb7a 100644 --- a/rust/cubesql/Cargo.lock +++ b/rust/cubesql/Cargo.lock @@ -722,7 +722,7 @@ dependencies = [ [[package]] name = "cube-ext" version = "1.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=637003a448a98bbc5e1585d0f01cc19ba9d50668#637003a448a98bbc5e1585d0f01cc19ba9d50668" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6#7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6" dependencies = [ "arrow", "chrono", @@ -846,7 +846,7 @@ dependencies = [ [[package]] name = "datafusion" version = "7.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=637003a448a98bbc5e1585d0f01cc19ba9d50668#637003a448a98bbc5e1585d0f01cc19ba9d50668" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6#7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6" dependencies = [ "ahash 0.7.8", "arrow", @@ -879,7 +879,7 @@ dependencies = [ [[package]] name = "datafusion-common" version = "7.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=637003a448a98bbc5e1585d0f01cc19ba9d50668#637003a448a98bbc5e1585d0f01cc19ba9d50668" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6#7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6" dependencies = [ "arrow", "ordered-float 2.10.0", @@ -890,7 +890,7 @@ dependencies = [ [[package]] name = "datafusion-data-access" version = "1.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=637003a448a98bbc5e1585d0f01cc19ba9d50668#637003a448a98bbc5e1585d0f01cc19ba9d50668" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6#7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6" dependencies = [ "async-trait", "chrono", @@ -903,7 +903,7 @@ dependencies = [ [[package]] name = "datafusion-expr" version = "7.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=637003a448a98bbc5e1585d0f01cc19ba9d50668#637003a448a98bbc5e1585d0f01cc19ba9d50668" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6#7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6" dependencies = [ "ahash 0.7.8", "arrow", @@ -914,7 +914,7 @@ dependencies = [ [[package]] name = "datafusion-physical-expr" version = "7.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=637003a448a98bbc5e1585d0f01cc19ba9d50668#637003a448a98bbc5e1585d0f01cc19ba9d50668" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6#7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6" dependencies = [ "ahash 0.7.8", "arrow", diff --git a/rust/cubesql/cubesql/Cargo.toml b/rust/cubesql/cubesql/Cargo.toml index 345481df952f0..f23b5d9aaf933 100644 --- a/rust/cubesql/cubesql/Cargo.toml +++ b/rust/cubesql/cubesql/Cargo.toml @@ -10,7 +10,7 @@ homepage = "https://cube.dev" [dependencies] arc-swap = "1" -datafusion = { git = 'https://github.com/cube-js/arrow-datafusion.git', rev = "637003a448a98bbc5e1585d0f01cc19ba9d50668", default-features = false, features = [ +datafusion = { git = 'https://github.com/cube-js/arrow-datafusion.git', rev = "7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6", default-features = false, features = [ "regex_expressions", "unicode_expressions", ] } diff --git a/rust/cubesql/cubesql/src/compile/engine/context_postgresql.rs b/rust/cubesql/cubesql/src/compile/engine/context_postgresql.rs index 06770f57c3243..b7952f7d32b18 100644 --- a/rust/cubesql/cubesql/src/compile/engine/context_postgresql.rs +++ b/rust/cubesql/cubesql/src/compile/engine/context_postgresql.rs @@ -23,9 +23,9 @@ use super::information_schema::postgres::{ PgCatalogIndexProvider, PgCatalogInheritsProvider, PgCatalogMatviewsProvider, PgCatalogNamespaceProvider, PgCatalogPartitionedTableProvider, PgCatalogProcProvider, PgCatalogRangeProvider, PgCatalogRolesProvider, PgCatalogSequenceProvider, - PgCatalogSettingsProvider, PgCatalogStatActivityProvider, PgCatalogStatUserTablesProvider, - PgCatalogStatioUserTablesProvider, PgCatalogStatsProvider, PgCatalogTableProvider, - PgCatalogTypeProvider, PgCatalogUserProvider, PgCatalogViewsProvider, + PgCatalogSettingsProvider, PgCatalogShdescriptionProvider, PgCatalogStatActivityProvider, + PgCatalogStatUserTablesProvider, PgCatalogStatioUserTablesProvider, PgCatalogStatsProvider, + PgCatalogTableProvider, PgCatalogTypeProvider, PgCatalogUserProvider, PgCatalogViewsProvider, PgPreparedStatementsProvider, }; use crate::{ @@ -136,6 +136,8 @@ impl DatabaseProtocol { "pg_catalog.pg_views".to_string() } else if let Some(_) = any.downcast_ref::() { "pg_catalog.pg_stat_user_tables".to_string() + } else if let Some(_) = any.downcast_ref::() { + "pg_catalog.pg_shdescription".to_string() } else if let Some(_) = any.downcast_ref::() { "pg_catalog.pg_external_schema".to_string() } else if let Some(_) = any.downcast_ref::() { @@ -401,6 +403,7 @@ impl DatabaseProtocol { &context.meta.tables, ))) } + "pg_shdescription" => return Some(Arc::new(PgCatalogShdescriptionProvider::new())), "pg_external_schema" => { return Some(Arc::new(RedshiftPgExternalSchemaProvider::new())) } diff --git a/rust/cubesql/cubesql/src/compile/engine/information_schema/postgres/mod.rs b/rust/cubesql/cubesql/src/compile/engine/information_schema/postgres/mod.rs index 2ca1bf2b5d36a..9b5e52bd30a67 100644 --- a/rust/cubesql/cubesql/src/compile/engine/information_schema/postgres/mod.rs +++ b/rust/cubesql/cubesql/src/compile/engine/information_schema/postgres/mod.rs @@ -34,6 +34,7 @@ mod pg_range; mod pg_roles; mod pg_sequence; mod pg_settings; +mod pg_shdescription; mod pg_stat_activity; mod pg_stat_user_tables; mod pg_statio_user_tables; @@ -69,6 +70,7 @@ pub use pg_range::*; pub use pg_roles::*; pub use pg_sequence::*; pub use pg_settings::*; +pub use pg_shdescription::*; pub use pg_stat_activity::*; pub use pg_stat_user_tables::*; pub use pg_statio_user_tables::*; diff --git a/rust/cubesql/cubesql/src/compile/engine/information_schema/postgres/pg_shdescription.rs b/rust/cubesql/cubesql/src/compile/engine/information_schema/postgres/pg_shdescription.rs new file mode 100644 index 0000000000000..5b8d0997b99cd --- /dev/null +++ b/rust/cubesql/cubesql/src/compile/engine/information_schema/postgres/pg_shdescription.rs @@ -0,0 +1,97 @@ +use std::{any::Any, sync::Arc}; + +use async_trait::async_trait; + +use datafusion::{ + arrow::{ + array::{Array, ArrayRef, StringBuilder, UInt32Builder}, + datatypes::{DataType, Field, Schema, SchemaRef}, + record_batch::RecordBatch, + }, + datasource::{datasource::TableProviderFilterPushDown, TableProvider, TableType}, + error::DataFusionError, + logical_plan::Expr, + physical_plan::{memory::MemoryExec, ExecutionPlan}, +}; + +struct PgCatalogShdescriptionBuilder { + objoid: UInt32Builder, + classoid: UInt32Builder, + description: StringBuilder, +} + +impl PgCatalogShdescriptionBuilder { + fn new(capacity: usize) -> Self { + Self { + objoid: UInt32Builder::new(capacity), + classoid: UInt32Builder::new(capacity), + description: StringBuilder::new(capacity), + } + } + + fn finish(mut self) -> Vec> { + let columns: Vec> = vec![ + Arc::new(self.objoid.finish()), + Arc::new(self.classoid.finish()), + Arc::new(self.description.finish()), + ]; + + columns + } +} + +pub struct PgCatalogShdescriptionProvider { + data: Arc>, +} + +// https://www.postgresql.org/docs/14/catalog-pg-shdescription.html +impl PgCatalogShdescriptionProvider { + pub fn new() -> Self { + let builder = PgCatalogShdescriptionBuilder::new(0); + + Self { + data: Arc::new(builder.finish()), + } + } +} + +#[async_trait] +impl TableProvider for PgCatalogShdescriptionProvider { + fn as_any(&self) -> &dyn Any { + self + } + + fn table_type(&self) -> TableType { + TableType::View + } + + fn schema(&self) -> SchemaRef { + Arc::new(Schema::new(vec![ + Field::new("objoid", DataType::UInt32, false), + Field::new("classoid", DataType::UInt32, false), + Field::new("description", DataType::Utf8, false), + ])) + } + + async fn scan( + &self, + projection: &Option>, + _filters: &[Expr], + _limit: Option, + ) -> Result, DataFusionError> { + let batch = RecordBatch::try_new(self.schema(), self.data.to_vec())?; + + Ok(Arc::new(MemoryExec::try_new( + &[vec![batch]], + self.schema(), + projection.clone(), + )?)) + } + + fn supports_filter_pushdown( + &self, + _filter: &Expr, + ) -> Result { + Ok(TableProviderFilterPushDown::Unsupported) + } +} diff --git a/rust/cubesql/cubesql/src/compile/engine/udf/common.rs b/rust/cubesql/cubesql/src/compile/engine/udf/common.rs index e75583b667099..6535634178916 100644 --- a/rust/cubesql/cubesql/src/compile/engine/udf/common.rs +++ b/rust/cubesql/cubesql/src/compile/engine/udf/common.rs @@ -3999,6 +3999,59 @@ pub fn create_inet_server_addr_udf() -> ScalarUDF { ) } +pub fn create_pg_get_partkeydef_udf() -> ScalarUDF { + let fun = make_scalar_function(move |args: &[ArrayRef]| { + let table_oids = downcast_primitive_arg!(args[0], "table_oid", OidType); + + let result = table_oids + .iter() + .map(|_| None::) + .collect::(); + + Ok(Arc::new(result)) + }); + + create_udf( + "pg_get_partkeydef", + vec![DataType::UInt32], + Arc::new(DataType::Utf8), + Volatility::Immutable, + fun, + ) +} + +pub fn create_pg_relation_size_udf() -> ScalarUDF { + let fun = make_scalar_function(move |args: &[ArrayRef]| { + assert!(args.len() == 1); + + let relids = downcast_primitive_arg!(args[0], "relid", OidType); + + // 8192 is the lowest size for a table that has at least one column + // TODO: check if the requested table actually exists + let result = relids + .iter() + .map(|relid| relid.map(|_| 8192)) + .collect::>(); + + Ok(Arc::new(result)) + }); + + let return_type: ReturnTypeFunction = Arc::new(move |_| Ok(Arc::new(DataType::Int64))); + + ScalarUDF::new( + "pg_relation_size", + &Signature::one_of( + vec![ + TypeSignature::Exact(vec![DataType::UInt32]), + TypeSignature::Exact(vec![DataType::UInt32, DataType::Utf8]), + ], + Volatility::Immutable, + ), + &return_type, + &fun, + ) +} + pub fn register_fun_stubs(mut ctx: SessionContext) -> SessionContext { macro_rules! register_fun_stub { ($FTYP:ident, $NAME:expr, argc=$ARGC:expr $(, rettyp=$RETTYP:ident)? $(, vol=$VOL:ident)?) => { @@ -4863,13 +4916,6 @@ pub fn register_fun_stubs(mut ctx: SessionContext) -> SessionContext { rettyp = Utf8, vol = Volatile ); - register_fun_stub!( - udf, - "pg_relation_size", - tsigs = [[Regclass], [Regclass, Utf8],], - rettyp = Int64, - vol = Volatile - ); register_fun_stub!( udf, "pg_reload_conf", diff --git a/rust/cubesql/cubesql/src/compile/mod.rs b/rust/cubesql/cubesql/src/compile/mod.rs index fd4fb2c54dc10..d375e9cb03de0 100644 --- a/rust/cubesql/cubesql/src/compile/mod.rs +++ b/rust/cubesql/cubesql/src/compile/mod.rs @@ -626,6 +626,7 @@ mod tests { .request .dimensions, Some(vec![ + "KibanaSampleDataEcommerce.id".to_string(), "KibanaSampleDataEcommerce.order_date".to_string(), "KibanaSampleDataEcommerce.last_mod".to_string(), "KibanaSampleDataEcommerce.customer_gender".to_string(), @@ -651,6 +652,7 @@ mod tests { .request .dimensions, Some(vec![ + "KibanaSampleDataEcommerce.id".to_string(), "KibanaSampleDataEcommerce.order_date".to_string(), "KibanaSampleDataEcommerce.last_mod".to_string(), "KibanaSampleDataEcommerce.customer_gender".to_string(), @@ -756,6 +758,7 @@ mod tests { ]), segments: Some(vec![]), dimensions: Some(vec![ + "KibanaSampleDataEcommerce.id".to_string(), "KibanaSampleDataEcommerce.order_date".to_string(), "KibanaSampleDataEcommerce.last_mod".to_string(), "KibanaSampleDataEcommerce.customer_gender".to_string(), @@ -5719,6 +5722,20 @@ ORDER BY Ok(()) } + #[tokio::test] + async fn test_pgcatalog_pgshdescription_postgres() -> Result<(), CubeError> { + insta::assert_snapshot!( + "pgcatalog_pgshdescription_postgres", + execute_query( + "SELECT * FROM pg_catalog.pg_shdescription".to_string(), + DatabaseProtocol::PostgreSQL + ) + .await? + ); + + Ok(()) + } + #[tokio::test] async fn test_constraint_column_usage_postgres() -> Result<(), CubeError> { insta::assert_snapshot!( @@ -8217,6 +8234,7 @@ ORDER BY "source"."str0" ASC "Logs.agentCountApprox".to_string(), ]), dimensions: Some(vec![ + "KibanaSampleDataEcommerce.id".to_string(), "KibanaSampleDataEcommerce.order_date".to_string(), "KibanaSampleDataEcommerce.last_mod".to_string(), "KibanaSampleDataEcommerce.customer_gender".to_string(), @@ -8402,6 +8420,7 @@ ORDER BY "source"."str0" ASC "KibanaSampleDataEcommerce.countDistinct".to_string(), ]), dimensions: Some(vec![ + "KibanaSampleDataEcommerce.id".to_string(), "KibanaSampleDataEcommerce.order_date".to_string(), "KibanaSampleDataEcommerce.last_mod".to_string(), "KibanaSampleDataEcommerce.customer_gender".to_string(), @@ -17110,4 +17129,43 @@ LIMIT {{ limit }}{% endif %}"#.to_string(), displayable(physical_plan.as_ref()).indent() ); } + + #[tokio::test] + async fn test_sort_normalize() { + init_testing_logger(); + + let logical_plan = convert_select_to_query_plan( + r#" + SELECT + q2.id, + q3.id + FROM KibanaSampleDataEcommerce q1 + LEFT JOIN Logs q2 ON q1.__cubeJoinField = q2.__cubeJoinField + LEFT JOIN Logs q3 ON q1.__cubeJoinField = q3.__cubeJoinField + ORDER BY + q2.id, + q3.id + ;"# + .to_string(), + DatabaseProtocol::PostgreSQL, + ) + .await + .as_logical_plan(); + + assert_eq!( + logical_plan.find_cube_scan().request, + V1LoadRequestQuery { + measures: Some(vec![]), + dimensions: Some(vec!["Logs.id".to_string(),]), + segments: Some(vec![]), + order: Some(vec![]), + ungrouped: Some(true), + join_hints: Some(vec![ + vec!["KibanaSampleDataEcommerce".to_string(), "Logs".to_string()], + vec!["KibanaSampleDataEcommerce".to_string(), "Logs".to_string()], + ]), + ..Default::default() + } + ) + } } diff --git a/rust/cubesql/cubesql/src/compile/parser.rs b/rust/cubesql/cubesql/src/compile/parser.rs index 4177e7f66ccec..6b4e1ccc4c097 100644 --- a/rust/cubesql/cubesql/src/compile/parser.rs +++ b/rust/cubesql/cubesql/src/compile/parser.rs @@ -73,6 +73,12 @@ pub fn parse_sql_to_statements( "SELECT n.oid,n.*,d.description FROM", "SELECT n.oid as _oid,n.*,d.description FROM", ); + let query = query.replace("SELECT c.oid,c.*,", "SELECT c.oid as _oid,c.*,"); + let query = query.replace("SELECT a.oid,a.*,", "SELECT a.oid as _oid,a.*,"); + let query = query.replace( + "LEFT OUTER JOIN pg_depend dep on dep.refobjid = a.attrelid AND dep.deptype = 'i' and dep.refobjsubid = a.attnum and dep.classid = dep.refclassid", + "LEFT OUTER JOIN pg_depend dep on dep.refobjid = a.attrelid AND dep.deptype = 'i' and dep.refobjsubid = a.attnum", + ); // TODO Superset introspection: LEFT JOIN by ANY() is not supported let query = query.replace( diff --git a/rust/cubesql/cubesql/src/compile/query_engine.rs b/rust/cubesql/cubesql/src/compile/query_engine.rs index 2b5e442f358bb..a9ff013c3dce2 100644 --- a/rust/cubesql/cubesql/src/compile/query_engine.rs +++ b/rust/cubesql/cubesql/src/compile/query_engine.rs @@ -516,6 +516,8 @@ impl QueryEngine for SqlQueryEngine { ctx.register_udf(create_pg_get_indexdef_udf()); ctx.register_udf(create_inet_server_addr_udf()); ctx.register_udf(create_age_udf()); + ctx.register_udf(create_pg_get_partkeydef_udf()); + ctx.register_udf(create_pg_relation_size_udf()); // udaf ctx.register_udaf(create_measure_udaf()); diff --git a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__information_schema_columns_mysql.snap b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__information_schema_columns_mysql.snap index 4eec7d043fb26..679717bec9a77 100644 --- a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__information_schema_columns_mysql.snap +++ b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__information_schema_columns_mysql.snap @@ -1,7 +1,6 @@ --- source: cubesql/src/compile/mod.rs -assertion_line: 6584 -expression: "execute_query(\"SELECT * FROM information_schema.columns WHERE TABLE_SCHEMA = 'db'\".to_string(),\n DatabaseProtocol::MySQL).await?" +expression: "execute_query(\"SELECT * FROM information_schema.columns WHERE TABLE_SCHEMA = 'db'\".to_string(),\nDatabaseProtocol::MySQL).await?" --- +---------------+--------------+---------------------------+--------------------+------------------+----------------+-------------+------------+--------------------------+------------------------+--------------+-------------------+---------------+--------------------+------------+-------+----------------+-----------------------+--------+ | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | ORDINAL_POSITION | COLUMN_DEFAULT | IS_NULLABLE | DATA_TYPE | CHARACTER_MAXIMUM_LENGTH | CHARACTER_OCTET_LENGTH | COLUMN_TYPE | NUMERIC_PRECISION | NUMERIC_SCALE | DATETIME_PRECISION | COLUMN_KEY | EXTRA | COLUMN_COMMENT | GENERATION_EXPRESSION | SRS_ID | @@ -12,6 +11,7 @@ expression: "execute_query(\"SELECT * FROM information_schema.columns WHERE TABL | def | db | KibanaSampleDataEcommerce | minPrice | 0 | | NO | numeric | NULL | NULL | numeric | NULL | NULL | NULL | | | | | | | def | db | KibanaSampleDataEcommerce | avgPrice | 0 | | NO | numeric | NULL | NULL | numeric | NULL | NULL | NULL | | | | | | | def | db | KibanaSampleDataEcommerce | countDistinct | 0 | | NO | int | NULL | NULL | int | NULL | NULL | NULL | | | | | | +| def | db | KibanaSampleDataEcommerce | id | 0 | | YES | numeric | NULL | NULL | numeric | NULL | NULL | NULL | | | | | | | def | db | KibanaSampleDataEcommerce | order_date | 0 | | YES | datetime | NULL | NULL | datetime | NULL | NULL | NULL | | | | | | | def | db | KibanaSampleDataEcommerce | last_mod | 0 | | YES | datetime | NULL | NULL | datetime | NULL | NULL | NULL | | | | | | | def | db | KibanaSampleDataEcommerce | customer_gender | 0 | | YES | varchar | NULL | NULL | varchar(255) | NULL | NULL | NULL | | | | | | diff --git a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__information_schema_columns_postgres.snap b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__information_schema_columns_postgres.snap index bdbf6c057b0be..9630c1f937a8d 100644 --- a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__information_schema_columns_postgres.snap +++ b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__information_schema_columns_postgres.snap @@ -1,7 +1,6 @@ --- source: cubesql/src/compile/mod.rs -assertion_line: 8890 -expression: "execute_query(\"SELECT * FROM information_schema.columns\".to_string(),\n DatabaseProtocol::PostgreSQL).await?" +expression: "execute_query(\"SELECT * FROM information_schema.columns\".to_string(),\nDatabaseProtocol::PostgreSQL).await?" --- +---------------+--------------+---------------------------+--------------------+------------------+----------------+-------------+-----------------------------+--------------------------+------------------------+-------------------+-------------------------+---------------+--------------------+---------------+--------------------+-----------------------+----------------------+--------------------+-------------------+------------------+----------------+----------------+---------------+-------------+-------------+------------+-----------+---------------+--------------+------------+---------------------+----------------+---------------------+-------------+---------------------+----------------+--------------------+------------------+------------------+----------------+--------------+-----------------------+--------------+ | table_catalog | table_schema | table_name | column_name | ordinal_position | column_default | is_nullable | data_type | character_maximum_length | character_octet_length | numeric_precision | numeric_precision_radix | numeric_scale | datetime_precision | interval_type | interval_precision | character_set_catalog | character_set_schema | character_set_name | collation_catalog | collation_schema | collation_name | domain_catalog | domain_schema | domain_name | udt_catalog | udt_schema | udt_name | scope_catalog | scope_schema | scope_name | maximum_cardinality | dtd_identifier | is_self_referencing | is_identity | identity_generation | identity_start | identity_increment | identity_maximum | identity_minimum | identity_cycle | is_generated | generation_expression | is_updatable | @@ -12,16 +11,17 @@ expression: "execute_query(\"SELECT * FROM information_schema.columns\".to_strin | cubedb | public | KibanaSampleDataEcommerce | minPrice | 4 | | NO | numeric | NULL | NULL | NULL | 10 | NULL | NULL | | | | | | | | | NULL | NULL | NULL | cubedb | pg_catalog | numeric | | | | 0 | 0 | NO | NO | | | | | | NO | NEVER | | YES | | cubedb | public | KibanaSampleDataEcommerce | avgPrice | 5 | | NO | numeric | NULL | NULL | NULL | 10 | NULL | NULL | | | | | | | | | NULL | NULL | NULL | cubedb | pg_catalog | numeric | | | | 0 | 0 | NO | NO | | | | | | NO | NEVER | | YES | | cubedb | public | KibanaSampleDataEcommerce | countDistinct | 6 | | NO | bigint | NULL | NULL | 64 | 2 | 0 | NULL | | | | | | | | | NULL | NULL | NULL | cubedb | pg_catalog | int8 | | | | 0 | 0 | NO | NO | | | | | | NO | NEVER | | YES | -| cubedb | public | KibanaSampleDataEcommerce | order_date | 7 | | YES | timestamp without time zone | NULL | NULL | NULL | NULL | NULL | 6 | | | | | | | | | NULL | NULL | NULL | cubedb | pg_catalog | timestamp | | | | 0 | 0 | NO | NO | | | | | | NO | NEVER | | YES | -| cubedb | public | KibanaSampleDataEcommerce | last_mod | 8 | | YES | timestamp without time zone | NULL | NULL | NULL | NULL | NULL | 6 | | | | | | | | | NULL | NULL | NULL | cubedb | pg_catalog | timestamp | | | | 0 | 0 | NO | NO | | | | | | NO | NEVER | | YES | -| cubedb | public | KibanaSampleDataEcommerce | customer_gender | 9 | | YES | text | NULL | 1073741824 | NULL | NULL | NULL | NULL | | | | | | | | | NULL | NULL | NULL | cubedb | pg_catalog | text | | | | 0 | 0 | NO | NO | | | | | | NO | NEVER | | YES | -| cubedb | public | KibanaSampleDataEcommerce | notes | 10 | | YES | text | NULL | 1073741824 | NULL | NULL | NULL | NULL | | | | | | | | | NULL | NULL | NULL | cubedb | pg_catalog | text | | | | 0 | 0 | NO | NO | | | | | | NO | NEVER | | YES | -| cubedb | public | KibanaSampleDataEcommerce | taxful_total_price | 11 | | YES | numeric | NULL | NULL | NULL | 10 | NULL | NULL | | | | | | | | | NULL | NULL | NULL | cubedb | pg_catalog | numeric | | | | 0 | 0 | NO | NO | | | | | | NO | NEVER | | YES | -| cubedb | public | KibanaSampleDataEcommerce | has_subscription | 12 | | YES | boolean | NULL | NULL | NULL | NULL | NULL | NULL | | | | | | | | | NULL | NULL | NULL | cubedb | pg_catalog | bool | | | | 0 | 0 | NO | NO | | | | | | NO | NEVER | | YES | -| cubedb | public | KibanaSampleDataEcommerce | is_male | 13 | | NO | boolean | NULL | NULL | NULL | NULL | NULL | NULL | | | | | | | | | NULL | NULL | NULL | cubedb | pg_catalog | bool | | | | 0 | 0 | NO | NO | | | | | | NO | NEVER | | YES | -| cubedb | public | KibanaSampleDataEcommerce | is_female | 14 | | NO | boolean | NULL | NULL | NULL | NULL | NULL | NULL | | | | | | | | | NULL | NULL | NULL | cubedb | pg_catalog | bool | | | | 0 | 0 | NO | NO | | | | | | NO | NEVER | | YES | -| cubedb | public | KibanaSampleDataEcommerce | __user | 15 | | YES | text | NULL | 1073741824 | NULL | NULL | NULL | NULL | | | | | | | | | NULL | NULL | NULL | cubedb | pg_catalog | text | | | | 0 | 0 | NO | NO | | | | | | NO | NEVER | | YES | -| cubedb | public | KibanaSampleDataEcommerce | __cubeJoinField | 16 | | YES | text | NULL | 1073741824 | NULL | NULL | NULL | NULL | | | | | | | | | NULL | NULL | NULL | cubedb | pg_catalog | text | | | | 0 | 0 | NO | NO | | | | | | NO | NEVER | | YES | +| cubedb | public | KibanaSampleDataEcommerce | id | 7 | | YES | numeric | NULL | NULL | NULL | 10 | NULL | NULL | | | | | | | | | NULL | NULL | NULL | cubedb | pg_catalog | numeric | | | | 0 | 0 | NO | NO | | | | | | NO | NEVER | | YES | +| cubedb | public | KibanaSampleDataEcommerce | order_date | 8 | | YES | timestamp without time zone | NULL | NULL | NULL | NULL | NULL | 6 | | | | | | | | | NULL | NULL | NULL | cubedb | pg_catalog | timestamp | | | | 0 | 0 | NO | NO | | | | | | NO | NEVER | | YES | +| cubedb | public | KibanaSampleDataEcommerce | last_mod | 9 | | YES | timestamp without time zone | NULL | NULL | NULL | NULL | NULL | 6 | | | | | | | | | NULL | NULL | NULL | cubedb | pg_catalog | timestamp | | | | 0 | 0 | NO | NO | | | | | | NO | NEVER | | YES | +| cubedb | public | KibanaSampleDataEcommerce | customer_gender | 10 | | YES | text | NULL | 1073741824 | NULL | NULL | NULL | NULL | | | | | | | | | NULL | NULL | NULL | cubedb | pg_catalog | text | | | | 0 | 0 | NO | NO | | | | | | NO | NEVER | | YES | +| cubedb | public | KibanaSampleDataEcommerce | notes | 11 | | YES | text | NULL | 1073741824 | NULL | NULL | NULL | NULL | | | | | | | | | NULL | NULL | NULL | cubedb | pg_catalog | text | | | | 0 | 0 | NO | NO | | | | | | NO | NEVER | | YES | +| cubedb | public | KibanaSampleDataEcommerce | taxful_total_price | 12 | | YES | numeric | NULL | NULL | NULL | 10 | NULL | NULL | | | | | | | | | NULL | NULL | NULL | cubedb | pg_catalog | numeric | | | | 0 | 0 | NO | NO | | | | | | NO | NEVER | | YES | +| cubedb | public | KibanaSampleDataEcommerce | has_subscription | 13 | | YES | boolean | NULL | NULL | NULL | NULL | NULL | NULL | | | | | | | | | NULL | NULL | NULL | cubedb | pg_catalog | bool | | | | 0 | 0 | NO | NO | | | | | | NO | NEVER | | YES | +| cubedb | public | KibanaSampleDataEcommerce | is_male | 14 | | NO | boolean | NULL | NULL | NULL | NULL | NULL | NULL | | | | | | | | | NULL | NULL | NULL | cubedb | pg_catalog | bool | | | | 0 | 0 | NO | NO | | | | | | NO | NEVER | | YES | +| cubedb | public | KibanaSampleDataEcommerce | is_female | 15 | | NO | boolean | NULL | NULL | NULL | NULL | NULL | NULL | | | | | | | | | NULL | NULL | NULL | cubedb | pg_catalog | bool | | | | 0 | 0 | NO | NO | | | | | | NO | NEVER | | YES | +| cubedb | public | KibanaSampleDataEcommerce | __user | 16 | | YES | text | NULL | 1073741824 | NULL | NULL | NULL | NULL | | | | | | | | | NULL | NULL | NULL | cubedb | pg_catalog | text | | | | 0 | 0 | NO | NO | | | | | | NO | NEVER | | YES | +| cubedb | public | KibanaSampleDataEcommerce | __cubeJoinField | 17 | | YES | text | NULL | 1073741824 | NULL | NULL | NULL | NULL | | | | | | | | | NULL | NULL | NULL | cubedb | pg_catalog | text | | | | 0 | 0 | NO | NO | | | | | | NO | NEVER | | YES | | cubedb | public | Logs | agentCount | 1 | | NO | bigint | NULL | NULL | 64 | 2 | 0 | NULL | | | | | | | | | NULL | NULL | NULL | cubedb | pg_catalog | int8 | | | | 0 | 0 | NO | NO | | | | | | NO | NEVER | | YES | | cubedb | public | Logs | agentCountApprox | 2 | | NO | bigint | NULL | NULL | 64 | 2 | 0 | NULL | | | | | | | | | NULL | NULL | NULL | cubedb | pg_catalog | int8 | | | | 0 | 0 | NO | NO | | | | | | NO | NEVER | | YES | | cubedb | public | Logs | id | 3 | | YES | numeric | NULL | NULL | NULL | 10 | NULL | NULL | | | | | | | | | NULL | NULL | NULL | cubedb | pg_catalog | numeric | | | | 0 | 0 | NO | NO | | | | | | NO | NEVER | | YES | diff --git a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__information_schema_role_column_grants_postgresql.snap b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__information_schema_role_column_grants_postgresql.snap index 86eefe77a1a44..9eb2dea5ac69c 100644 --- a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__information_schema_role_column_grants_postgresql.snap +++ b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__information_schema_role_column_grants_postgresql.snap @@ -1,7 +1,6 @@ --- source: cubesql/src/compile/mod.rs -assertion_line: 6570 -expression: "execute_query(\"SELECT * FROM information_schema.role_column_grants\".to_string(),\n DatabaseProtocol::PostgreSQL).await?" +expression: "execute_query(\"SELECT * FROM information_schema.role_column_grants\".to_string(),\nDatabaseProtocol::PostgreSQL).await?" --- +---------+---------+---------------+--------------+---------------------------+--------------------+----------------+--------------+ | grantor | grantee | table_catalog | table_schema | table_name | column_name | privilege_type | is_grantable | @@ -12,6 +11,7 @@ expression: "execute_query(\"SELECT * FROM information_schema.role_column_grants | ovr | ovr | cubedb | public | KibanaSampleDataEcommerce | minPrice | SELECT | YES | | ovr | ovr | cubedb | public | KibanaSampleDataEcommerce | avgPrice | SELECT | YES | | ovr | ovr | cubedb | public | KibanaSampleDataEcommerce | countDistinct | SELECT | YES | +| ovr | ovr | cubedb | public | KibanaSampleDataEcommerce | id | SELECT | YES | | ovr | ovr | cubedb | public | KibanaSampleDataEcommerce | order_date | SELECT | YES | | ovr | ovr | cubedb | public | KibanaSampleDataEcommerce | last_mod | SELECT | YES | | ovr | ovr | cubedb | public | KibanaSampleDataEcommerce | customer_gender | SELECT | YES | diff --git a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__join_where_and_or.snap b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__join_where_and_or.snap index b4833f1441821..cdb65447c9ced 100644 --- a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__join_where_and_or.snap +++ b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__join_where_and_or.snap @@ -1,7 +1,6 @@ --- source: cubesql/src/compile/mod.rs -assertion_line: 11984 -expression: "execute_query(\"\n SELECT\n att.attname,\n att.attnum,\n cl.oid\n FROM pg_attribute att\n JOIN pg_class cl ON\n cl.oid = attrelid AND (\n cl.relkind = 's' OR\n cl.relkind = 'r'\n )\n ORDER BY\n cl.oid ASC,\n att.attnum ASC\n ;\n \".to_string(),\n DatabaseProtocol::PostgreSQL).await?" +expression: "execute_query(\"\n SELECT\n att.attname,\n att.attnum,\n cl.oid\n FROM pg_attribute att\n JOIN pg_class cl ON\n cl.oid = attrelid AND (\n cl.relkind = 's' OR\n cl.relkind = 'r'\n )\n ORDER BY\n cl.oid ASC,\n att.attnum ASC\n ;\n \".to_string(),\nDatabaseProtocol::PostgreSQL).await?" --- +--------------------+--------+-------+ | attname | attnum | oid | @@ -12,298 +11,299 @@ expression: "execute_query(\"\n SELECT\n att.a | minPrice | 4 | 18000 | | avgPrice | 5 | 18000 | | countDistinct | 6 | 18000 | -| order_date | 7 | 18000 | -| last_mod | 8 | 18000 | -| customer_gender | 9 | 18000 | -| notes | 10 | 18000 | -| taxful_total_price | 11 | 18000 | -| has_subscription | 12 | 18000 | -| is_male | 13 | 18000 | -| is_female | 14 | 18000 | -| __user | 15 | 18000 | -| __cubeJoinField | 16 | 18000 | -| agentCount | 1 | 18019 | -| agentCountApprox | 2 | 18019 | -| id | 3 | 18019 | -| read | 4 | 18019 | -| content | 5 | 18019 | -| __user | 6 | 18019 | -| __cubeJoinField | 7 | 18019 | -| someNumber | 1 | 18029 | -| __user | 2 | 18029 | -| __cubeJoinField | 3 | 18029 | -| measure0 | 1 | 18035 | -| measure1 | 2 | 18035 | -| measure2 | 3 | 18035 | -| measure3 | 4 | 18035 | -| measure4 | 5 | 18035 | -| measure5 | 6 | 18035 | -| measure6 | 7 | 18035 | -| measure7 | 8 | 18035 | -| measure8 | 9 | 18035 | -| measure9 | 10 | 18035 | -| measure10 | 11 | 18035 | -| measure11 | 12 | 18035 | -| measure12 | 13 | 18035 | -| measure13 | 14 | 18035 | -| measure14 | 15 | 18035 | -| measure15 | 16 | 18035 | -| measure16 | 17 | 18035 | -| measure17 | 18 | 18035 | -| measure18 | 19 | 18035 | -| measure19 | 20 | 18035 | -| measure20 | 21 | 18035 | -| measure21 | 22 | 18035 | -| measure22 | 23 | 18035 | -| measure23 | 24 | 18035 | -| measure24 | 25 | 18035 | -| measure25 | 26 | 18035 | -| measure26 | 27 | 18035 | -| measure27 | 28 | 18035 | -| measure28 | 29 | 18035 | -| measure29 | 30 | 18035 | -| measure30 | 31 | 18035 | -| measure31 | 32 | 18035 | -| measure32 | 33 | 18035 | -| measure33 | 34 | 18035 | -| measure34 | 35 | 18035 | -| measure35 | 36 | 18035 | -| measure36 | 37 | 18035 | -| measure37 | 38 | 18035 | -| measure38 | 39 | 18035 | -| measure39 | 40 | 18035 | -| measure40 | 41 | 18035 | -| measure41 | 42 | 18035 | -| measure42 | 43 | 18035 | -| measure43 | 44 | 18035 | -| measure44 | 45 | 18035 | -| measure45 | 46 | 18035 | -| measure46 | 47 | 18035 | -| measure47 | 48 | 18035 | -| measure48 | 49 | 18035 | -| measure49 | 50 | 18035 | -| measure50 | 51 | 18035 | -| measure51 | 52 | 18035 | -| measure52 | 53 | 18035 | -| measure53 | 54 | 18035 | -| measure54 | 55 | 18035 | -| measure55 | 56 | 18035 | -| measure56 | 57 | 18035 | -| measure57 | 58 | 18035 | -| measure58 | 59 | 18035 | -| measure59 | 60 | 18035 | -| measure60 | 61 | 18035 | -| measure61 | 62 | 18035 | -| measure62 | 63 | 18035 | -| measure63 | 64 | 18035 | -| measure64 | 65 | 18035 | -| measure65 | 66 | 18035 | -| measure66 | 67 | 18035 | -| measure67 | 68 | 18035 | -| measure68 | 69 | 18035 | -| measure69 | 70 | 18035 | -| measure70 | 71 | 18035 | -| measure71 | 72 | 18035 | -| measure72 | 73 | 18035 | -| measure73 | 74 | 18035 | -| measure74 | 75 | 18035 | -| measure75 | 76 | 18035 | -| measure76 | 77 | 18035 | -| measure77 | 78 | 18035 | -| measure78 | 79 | 18035 | -| measure79 | 80 | 18035 | -| measure80 | 81 | 18035 | -| measure81 | 82 | 18035 | -| measure82 | 83 | 18035 | -| measure83 | 84 | 18035 | -| measure84 | 85 | 18035 | -| measure85 | 86 | 18035 | -| measure86 | 87 | 18035 | -| measure87 | 88 | 18035 | -| measure88 | 89 | 18035 | -| measure89 | 90 | 18035 | -| measure90 | 91 | 18035 | -| measure91 | 92 | 18035 | -| measure92 | 93 | 18035 | -| measure93 | 94 | 18035 | -| measure94 | 95 | 18035 | -| measure95 | 96 | 18035 | -| measure96 | 97 | 18035 | -| measure97 | 98 | 18035 | -| measure98 | 99 | 18035 | -| measure99 | 100 | 18035 | -| count | 101 | 18035 | -| maxPrice | 102 | 18035 | -| minPrice | 103 | 18035 | -| avgPrice | 104 | 18035 | -| countDistinct | 105 | 18035 | -| dim0 | 106 | 18035 | -| dim1 | 107 | 18035 | -| dim2 | 108 | 18035 | -| dim3 | 109 | 18035 | -| dim4 | 110 | 18035 | -| dim5 | 111 | 18035 | -| dim6 | 112 | 18035 | -| dim7 | 113 | 18035 | -| dim8 | 114 | 18035 | -| dim9 | 115 | 18035 | -| dim10 | 116 | 18035 | -| dim11 | 117 | 18035 | -| dim12 | 118 | 18035 | -| dim13 | 119 | 18035 | -| dim14 | 120 | 18035 | -| dim15 | 121 | 18035 | -| dim16 | 122 | 18035 | -| dim17 | 123 | 18035 | -| dim18 | 124 | 18035 | -| dim19 | 125 | 18035 | -| dim20 | 126 | 18035 | -| dim21 | 127 | 18035 | -| dim22 | 128 | 18035 | -| dim23 | 129 | 18035 | -| dim24 | 130 | 18035 | -| dim25 | 131 | 18035 | -| dim26 | 132 | 18035 | -| dim27 | 133 | 18035 | -| dim28 | 134 | 18035 | -| dim29 | 135 | 18035 | -| dim30 | 136 | 18035 | -| dim31 | 137 | 18035 | -| dim32 | 138 | 18035 | -| dim33 | 139 | 18035 | -| dim34 | 140 | 18035 | -| dim35 | 141 | 18035 | -| dim36 | 142 | 18035 | -| dim37 | 143 | 18035 | -| dim38 | 144 | 18035 | -| dim39 | 145 | 18035 | -| dim40 | 146 | 18035 | -| dim41 | 147 | 18035 | -| dim42 | 148 | 18035 | -| dim43 | 149 | 18035 | -| dim44 | 150 | 18035 | -| dim45 | 151 | 18035 | -| dim46 | 152 | 18035 | -| dim47 | 153 | 18035 | -| dim48 | 154 | 18035 | -| dim49 | 155 | 18035 | -| dim50 | 156 | 18035 | -| dim51 | 157 | 18035 | -| dim52 | 158 | 18035 | -| dim53 | 159 | 18035 | -| dim54 | 160 | 18035 | -| dim55 | 161 | 18035 | -| dim56 | 162 | 18035 | -| dim57 | 163 | 18035 | -| dim58 | 164 | 18035 | -| dim59 | 165 | 18035 | -| dim60 | 166 | 18035 | -| dim61 | 167 | 18035 | -| dim62 | 168 | 18035 | -| dim63 | 169 | 18035 | -| dim64 | 170 | 18035 | -| dim65 | 171 | 18035 | -| dim66 | 172 | 18035 | -| dim67 | 173 | 18035 | -| dim68 | 174 | 18035 | -| dim69 | 175 | 18035 | -| dim70 | 176 | 18035 | -| dim71 | 177 | 18035 | -| dim72 | 178 | 18035 | -| dim73 | 179 | 18035 | -| dim74 | 180 | 18035 | -| dim75 | 181 | 18035 | -| dim76 | 182 | 18035 | -| dim77 | 183 | 18035 | -| dim78 | 184 | 18035 | -| dim79 | 185 | 18035 | -| dim80 | 186 | 18035 | -| dim81 | 187 | 18035 | -| dim82 | 188 | 18035 | -| dim83 | 189 | 18035 | -| dim84 | 190 | 18035 | -| dim85 | 191 | 18035 | -| dim86 | 192 | 18035 | -| dim87 | 193 | 18035 | -| dim88 | 194 | 18035 | -| dim89 | 195 | 18035 | -| dim90 | 196 | 18035 | -| dim91 | 197 | 18035 | -| dim92 | 198 | 18035 | -| dim93 | 199 | 18035 | -| dim94 | 200 | 18035 | -| dim95 | 201 | 18035 | -| dim96 | 202 | 18035 | -| dim97 | 203 | 18035 | -| dim98 | 204 | 18035 | -| dim99 | 205 | 18035 | -| __user | 206 | 18035 | -| __cubeJoinField | 207 | 18035 | -| measure_num0 | 1 | 18245 | -| measure_str0 | 2 | 18245 | -| measure_date0 | 3 | 18245 | -| measure_num1 | 4 | 18245 | -| measure_str1 | 5 | 18245 | -| measure_date1 | 6 | 18245 | -| measure_num2 | 7 | 18245 | -| measure_str2 | 8 | 18245 | -| measure_date2 | 9 | 18245 | -| measure_num3 | 10 | 18245 | -| measure_str3 | 11 | 18245 | -| measure_date3 | 12 | 18245 | -| measure_num4 | 13 | 18245 | -| measure_str4 | 14 | 18245 | -| measure_date4 | 15 | 18245 | -| measure_num5 | 16 | 18245 | -| measure_str5 | 17 | 18245 | -| measure_date5 | 18 | 18245 | -| measure_num6 | 19 | 18245 | -| measure_str6 | 20 | 18245 | -| measure_date6 | 21 | 18245 | -| measure_num7 | 22 | 18245 | -| measure_str7 | 23 | 18245 | -| measure_date7 | 24 | 18245 | -| measure_num8 | 25 | 18245 | -| measure_str8 | 26 | 18245 | -| measure_date8 | 27 | 18245 | -| measure_num9 | 28 | 18245 | -| measure_str9 | 29 | 18245 | -| measure_date9 | 30 | 18245 | -| count | 31 | 18245 | -| maxPrice | 32 | 18245 | -| minPrice | 33 | 18245 | -| avgPrice | 34 | 18245 | -| countDistinct | 35 | 18245 | -| dim_num0 | 36 | 18245 | -| dim_str0 | 37 | 18245 | -| dim_date0 | 38 | 18245 | -| dim_num1 | 39 | 18245 | -| dim_str1 | 40 | 18245 | -| dim_date1 | 41 | 18245 | -| dim_num2 | 42 | 18245 | -| dim_str2 | 43 | 18245 | -| dim_date2 | 44 | 18245 | -| dim_num3 | 45 | 18245 | -| dim_str3 | 46 | 18245 | -| dim_date3 | 47 | 18245 | -| dim_num4 | 48 | 18245 | -| dim_str4 | 49 | 18245 | -| dim_date4 | 50 | 18245 | -| dim_num5 | 51 | 18245 | -| dim_str5 | 52 | 18245 | -| dim_date5 | 53 | 18245 | -| dim_num6 | 54 | 18245 | -| dim_str6 | 55 | 18245 | -| dim_date6 | 56 | 18245 | -| dim_num7 | 57 | 18245 | -| dim_str7 | 58 | 18245 | -| dim_date7 | 59 | 18245 | -| dim_num8 | 60 | 18245 | -| dim_str8 | 61 | 18245 | -| dim_date8 | 62 | 18245 | -| dim_num9 | 63 | 18245 | -| dim_str9 | 64 | 18245 | -| dim_date9 | 65 | 18245 | -| __user | 66 | 18245 | -| __cubeJoinField | 67 | 18245 | +| id | 7 | 18000 | +| order_date | 8 | 18000 | +| last_mod | 9 | 18000 | +| customer_gender | 10 | 18000 | +| notes | 11 | 18000 | +| taxful_total_price | 12 | 18000 | +| has_subscription | 13 | 18000 | +| is_male | 14 | 18000 | +| is_female | 15 | 18000 | +| __user | 16 | 18000 | +| __cubeJoinField | 17 | 18000 | +| agentCount | 1 | 18020 | +| agentCountApprox | 2 | 18020 | +| id | 3 | 18020 | +| read | 4 | 18020 | +| content | 5 | 18020 | +| __user | 6 | 18020 | +| __cubeJoinField | 7 | 18020 | +| someNumber | 1 | 18030 | +| __user | 2 | 18030 | +| __cubeJoinField | 3 | 18030 | +| measure0 | 1 | 18036 | +| measure1 | 2 | 18036 | +| measure2 | 3 | 18036 | +| measure3 | 4 | 18036 | +| measure4 | 5 | 18036 | +| measure5 | 6 | 18036 | +| measure6 | 7 | 18036 | +| measure7 | 8 | 18036 | +| measure8 | 9 | 18036 | +| measure9 | 10 | 18036 | +| measure10 | 11 | 18036 | +| measure11 | 12 | 18036 | +| measure12 | 13 | 18036 | +| measure13 | 14 | 18036 | +| measure14 | 15 | 18036 | +| measure15 | 16 | 18036 | +| measure16 | 17 | 18036 | +| measure17 | 18 | 18036 | +| measure18 | 19 | 18036 | +| measure19 | 20 | 18036 | +| measure20 | 21 | 18036 | +| measure21 | 22 | 18036 | +| measure22 | 23 | 18036 | +| measure23 | 24 | 18036 | +| measure24 | 25 | 18036 | +| measure25 | 26 | 18036 | +| measure26 | 27 | 18036 | +| measure27 | 28 | 18036 | +| measure28 | 29 | 18036 | +| measure29 | 30 | 18036 | +| measure30 | 31 | 18036 | +| measure31 | 32 | 18036 | +| measure32 | 33 | 18036 | +| measure33 | 34 | 18036 | +| measure34 | 35 | 18036 | +| measure35 | 36 | 18036 | +| measure36 | 37 | 18036 | +| measure37 | 38 | 18036 | +| measure38 | 39 | 18036 | +| measure39 | 40 | 18036 | +| measure40 | 41 | 18036 | +| measure41 | 42 | 18036 | +| measure42 | 43 | 18036 | +| measure43 | 44 | 18036 | +| measure44 | 45 | 18036 | +| measure45 | 46 | 18036 | +| measure46 | 47 | 18036 | +| measure47 | 48 | 18036 | +| measure48 | 49 | 18036 | +| measure49 | 50 | 18036 | +| measure50 | 51 | 18036 | +| measure51 | 52 | 18036 | +| measure52 | 53 | 18036 | +| measure53 | 54 | 18036 | +| measure54 | 55 | 18036 | +| measure55 | 56 | 18036 | +| measure56 | 57 | 18036 | +| measure57 | 58 | 18036 | +| measure58 | 59 | 18036 | +| measure59 | 60 | 18036 | +| measure60 | 61 | 18036 | +| measure61 | 62 | 18036 | +| measure62 | 63 | 18036 | +| measure63 | 64 | 18036 | +| measure64 | 65 | 18036 | +| measure65 | 66 | 18036 | +| measure66 | 67 | 18036 | +| measure67 | 68 | 18036 | +| measure68 | 69 | 18036 | +| measure69 | 70 | 18036 | +| measure70 | 71 | 18036 | +| measure71 | 72 | 18036 | +| measure72 | 73 | 18036 | +| measure73 | 74 | 18036 | +| measure74 | 75 | 18036 | +| measure75 | 76 | 18036 | +| measure76 | 77 | 18036 | +| measure77 | 78 | 18036 | +| measure78 | 79 | 18036 | +| measure79 | 80 | 18036 | +| measure80 | 81 | 18036 | +| measure81 | 82 | 18036 | +| measure82 | 83 | 18036 | +| measure83 | 84 | 18036 | +| measure84 | 85 | 18036 | +| measure85 | 86 | 18036 | +| measure86 | 87 | 18036 | +| measure87 | 88 | 18036 | +| measure88 | 89 | 18036 | +| measure89 | 90 | 18036 | +| measure90 | 91 | 18036 | +| measure91 | 92 | 18036 | +| measure92 | 93 | 18036 | +| measure93 | 94 | 18036 | +| measure94 | 95 | 18036 | +| measure95 | 96 | 18036 | +| measure96 | 97 | 18036 | +| measure97 | 98 | 18036 | +| measure98 | 99 | 18036 | +| measure99 | 100 | 18036 | +| count | 101 | 18036 | +| maxPrice | 102 | 18036 | +| minPrice | 103 | 18036 | +| avgPrice | 104 | 18036 | +| countDistinct | 105 | 18036 | +| dim0 | 106 | 18036 | +| dim1 | 107 | 18036 | +| dim2 | 108 | 18036 | +| dim3 | 109 | 18036 | +| dim4 | 110 | 18036 | +| dim5 | 111 | 18036 | +| dim6 | 112 | 18036 | +| dim7 | 113 | 18036 | +| dim8 | 114 | 18036 | +| dim9 | 115 | 18036 | +| dim10 | 116 | 18036 | +| dim11 | 117 | 18036 | +| dim12 | 118 | 18036 | +| dim13 | 119 | 18036 | +| dim14 | 120 | 18036 | +| dim15 | 121 | 18036 | +| dim16 | 122 | 18036 | +| dim17 | 123 | 18036 | +| dim18 | 124 | 18036 | +| dim19 | 125 | 18036 | +| dim20 | 126 | 18036 | +| dim21 | 127 | 18036 | +| dim22 | 128 | 18036 | +| dim23 | 129 | 18036 | +| dim24 | 130 | 18036 | +| dim25 | 131 | 18036 | +| dim26 | 132 | 18036 | +| dim27 | 133 | 18036 | +| dim28 | 134 | 18036 | +| dim29 | 135 | 18036 | +| dim30 | 136 | 18036 | +| dim31 | 137 | 18036 | +| dim32 | 138 | 18036 | +| dim33 | 139 | 18036 | +| dim34 | 140 | 18036 | +| dim35 | 141 | 18036 | +| dim36 | 142 | 18036 | +| dim37 | 143 | 18036 | +| dim38 | 144 | 18036 | +| dim39 | 145 | 18036 | +| dim40 | 146 | 18036 | +| dim41 | 147 | 18036 | +| dim42 | 148 | 18036 | +| dim43 | 149 | 18036 | +| dim44 | 150 | 18036 | +| dim45 | 151 | 18036 | +| dim46 | 152 | 18036 | +| dim47 | 153 | 18036 | +| dim48 | 154 | 18036 | +| dim49 | 155 | 18036 | +| dim50 | 156 | 18036 | +| dim51 | 157 | 18036 | +| dim52 | 158 | 18036 | +| dim53 | 159 | 18036 | +| dim54 | 160 | 18036 | +| dim55 | 161 | 18036 | +| dim56 | 162 | 18036 | +| dim57 | 163 | 18036 | +| dim58 | 164 | 18036 | +| dim59 | 165 | 18036 | +| dim60 | 166 | 18036 | +| dim61 | 167 | 18036 | +| dim62 | 168 | 18036 | +| dim63 | 169 | 18036 | +| dim64 | 170 | 18036 | +| dim65 | 171 | 18036 | +| dim66 | 172 | 18036 | +| dim67 | 173 | 18036 | +| dim68 | 174 | 18036 | +| dim69 | 175 | 18036 | +| dim70 | 176 | 18036 | +| dim71 | 177 | 18036 | +| dim72 | 178 | 18036 | +| dim73 | 179 | 18036 | +| dim74 | 180 | 18036 | +| dim75 | 181 | 18036 | +| dim76 | 182 | 18036 | +| dim77 | 183 | 18036 | +| dim78 | 184 | 18036 | +| dim79 | 185 | 18036 | +| dim80 | 186 | 18036 | +| dim81 | 187 | 18036 | +| dim82 | 188 | 18036 | +| dim83 | 189 | 18036 | +| dim84 | 190 | 18036 | +| dim85 | 191 | 18036 | +| dim86 | 192 | 18036 | +| dim87 | 193 | 18036 | +| dim88 | 194 | 18036 | +| dim89 | 195 | 18036 | +| dim90 | 196 | 18036 | +| dim91 | 197 | 18036 | +| dim92 | 198 | 18036 | +| dim93 | 199 | 18036 | +| dim94 | 200 | 18036 | +| dim95 | 201 | 18036 | +| dim96 | 202 | 18036 | +| dim97 | 203 | 18036 | +| dim98 | 204 | 18036 | +| dim99 | 205 | 18036 | +| __user | 206 | 18036 | +| __cubeJoinField | 207 | 18036 | +| measure_num0 | 1 | 18246 | +| measure_str0 | 2 | 18246 | +| measure_date0 | 3 | 18246 | +| measure_num1 | 4 | 18246 | +| measure_str1 | 5 | 18246 | +| measure_date1 | 6 | 18246 | +| measure_num2 | 7 | 18246 | +| measure_str2 | 8 | 18246 | +| measure_date2 | 9 | 18246 | +| measure_num3 | 10 | 18246 | +| measure_str3 | 11 | 18246 | +| measure_date3 | 12 | 18246 | +| measure_num4 | 13 | 18246 | +| measure_str4 | 14 | 18246 | +| measure_date4 | 15 | 18246 | +| measure_num5 | 16 | 18246 | +| measure_str5 | 17 | 18246 | +| measure_date5 | 18 | 18246 | +| measure_num6 | 19 | 18246 | +| measure_str6 | 20 | 18246 | +| measure_date6 | 21 | 18246 | +| measure_num7 | 22 | 18246 | +| measure_str7 | 23 | 18246 | +| measure_date7 | 24 | 18246 | +| measure_num8 | 25 | 18246 | +| measure_str8 | 26 | 18246 | +| measure_date8 | 27 | 18246 | +| measure_num9 | 28 | 18246 | +| measure_str9 | 29 | 18246 | +| measure_date9 | 30 | 18246 | +| count | 31 | 18246 | +| maxPrice | 32 | 18246 | +| minPrice | 33 | 18246 | +| avgPrice | 34 | 18246 | +| countDistinct | 35 | 18246 | +| dim_num0 | 36 | 18246 | +| dim_str0 | 37 | 18246 | +| dim_date0 | 38 | 18246 | +| dim_num1 | 39 | 18246 | +| dim_str1 | 40 | 18246 | +| dim_date1 | 41 | 18246 | +| dim_num2 | 42 | 18246 | +| dim_str2 | 43 | 18246 | +| dim_date2 | 44 | 18246 | +| dim_num3 | 45 | 18246 | +| dim_str3 | 46 | 18246 | +| dim_date3 | 47 | 18246 | +| dim_num4 | 48 | 18246 | +| dim_str4 | 49 | 18246 | +| dim_date4 | 50 | 18246 | +| dim_num5 | 51 | 18246 | +| dim_str5 | 52 | 18246 | +| dim_date5 | 53 | 18246 | +| dim_num6 | 54 | 18246 | +| dim_str6 | 55 | 18246 | +| dim_date6 | 56 | 18246 | +| dim_num7 | 57 | 18246 | +| dim_str7 | 58 | 18246 | +| dim_date7 | 59 | 18246 | +| dim_num8 | 60 | 18246 | +| dim_str8 | 61 | 18246 | +| dim_date8 | 62 | 18246 | +| dim_num9 | 63 | 18246 | +| dim_str9 | 64 | 18246 | +| dim_date9 | 65 | 18246 | +| __user | 66 | 18246 | +| __cubeJoinField | 67 | 18246 | +--------------------+--------+-------+ diff --git a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__metabase_pg_class_query.snap b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__metabase_pg_class_query.snap index d804b18e6e1a5..c1e9fecc39450 100644 --- a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__metabase_pg_class_query.snap +++ b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__metabase_pg_class_query.snap @@ -11,14 +11,15 @@ expression: "execute_query(\"\n SELECT *\n FRO | public | KibanaSampleDataEcommerce | minPrice | 1700 | true | -1 | -1 | -1 | 4 | NULL | NULL | NULL | 0 | b | | public | KibanaSampleDataEcommerce | avgPrice | 1700 | true | -1 | -1 | -1 | 5 | NULL | NULL | NULL | 0 | b | | public | KibanaSampleDataEcommerce | countDistinct | 20 | true | -1 | 8 | -1 | 6 | NULL | NULL | NULL | 0 | b | -| public | KibanaSampleDataEcommerce | order_date | 1114 | false | -1 | 8 | -1 | 7 | NULL | NULL | NULL | 0 | b | -| public | KibanaSampleDataEcommerce | last_mod | 1114 | false | -1 | 8 | -1 | 8 | NULL | NULL | NULL | 0 | b | -| public | KibanaSampleDataEcommerce | customer_gender | 25 | false | -1 | -1 | -1 | 9 | NULL | NULL | Customer gender | 0 | b | -| public | KibanaSampleDataEcommerce | notes | 25 | false | -1 | -1 | -1 | 10 | NULL | NULL | NULL | 0 | b | -| public | KibanaSampleDataEcommerce | taxful_total_price | 1700 | false | -1 | -1 | -1 | 11 | NULL | NULL | NULL | 0 | b | -| public | KibanaSampleDataEcommerce | has_subscription | 16 | false | -1 | 1 | -1 | 12 | NULL | NULL | NULL | 0 | b | -| public | KibanaSampleDataEcommerce | is_male | 16 | true | -1 | 1 | -1 | 13 | NULL | NULL | Male users segment | 0 | b | -| public | KibanaSampleDataEcommerce | is_female | 16 | true | -1 | 1 | -1 | 14 | NULL | NULL | NULL | 0 | b | -| public | KibanaSampleDataEcommerce | __user | 25 | false | -1 | -1 | -1 | 15 | NULL | NULL | Virtual column for security context switching | 0 | b | -| public | KibanaSampleDataEcommerce | __cubeJoinField | 25 | false | -1 | -1 | -1 | 16 | NULL | NULL | Virtual column for joining cubes | 0 | b | +| public | KibanaSampleDataEcommerce | id | 1700 | false | -1 | -1 | -1 | 7 | NULL | NULL | NULL | 0 | b | +| public | KibanaSampleDataEcommerce | order_date | 1114 | false | -1 | 8 | -1 | 8 | NULL | NULL | NULL | 0 | b | +| public | KibanaSampleDataEcommerce | last_mod | 1114 | false | -1 | 8 | -1 | 9 | NULL | NULL | NULL | 0 | b | +| public | KibanaSampleDataEcommerce | customer_gender | 25 | false | -1 | -1 | -1 | 10 | NULL | NULL | Customer gender | 0 | b | +| public | KibanaSampleDataEcommerce | notes | 25 | false | -1 | -1 | -1 | 11 | NULL | NULL | NULL | 0 | b | +| public | KibanaSampleDataEcommerce | taxful_total_price | 1700 | false | -1 | -1 | -1 | 12 | NULL | NULL | NULL | 0 | b | +| public | KibanaSampleDataEcommerce | has_subscription | 16 | false | -1 | 1 | -1 | 13 | NULL | NULL | NULL | 0 | b | +| public | KibanaSampleDataEcommerce | is_male | 16 | true | -1 | 1 | -1 | 14 | NULL | NULL | Male users segment | 0 | b | +| public | KibanaSampleDataEcommerce | is_female | 16 | true | -1 | 1 | -1 | 15 | NULL | NULL | NULL | 0 | b | +| public | KibanaSampleDataEcommerce | __user | 25 | false | -1 | -1 | -1 | 16 | NULL | NULL | Virtual column for security context switching | 0 | b | +| public | KibanaSampleDataEcommerce | __cubeJoinField | 25 | false | -1 | -1 | -1 | 17 | NULL | NULL | Virtual column for joining cubes | 0 | b | +---------+---------------------------+--------------------+----------+------------+-----------+--------+-----------+--------+-------------+-------+-----------------------------------------------+-------------+---------+ diff --git a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__pgcatalog_pgattribute_postgres.snap b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__pgcatalog_pgattribute_postgres.snap index 5e10a475d81eb..df0aceb304c20 100644 Binary files a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__pgcatalog_pgattribute_postgres.snap and b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__pgcatalog_pgattribute_postgres.snap differ diff --git a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__pgcatalog_pgclass_postgres.snap b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__pgcatalog_pgclass_postgres.snap index 69953c2705ef9..e49f5cee79a95 100644 --- a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__pgcatalog_pgclass_postgres.snap +++ b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__pgcatalog_pgclass_postgres.snap @@ -6,9 +6,9 @@ expression: "execute_query(\"SELECT * FROM pg_catalog.pg_class\".to_string(),\nD | oid | relname | relnamespace | reltype | reloftype | relowner | relam | relfilenode | reltablespace | relpages | reltuples | relallvisible | reltoastrelid | relhasindex | relisshared | relpersistence | relkind | relnatts | relchecks | relhasrules | relhastriggers | relhassubclass | relrowsecurity | relforcerowsecurity | relispopulated | relreplident | relispartition | relrewrite | relfrozenxid | relminmxid | relacl | reloptions | relpartbound | relhasoids | +-------+---------------------------+--------------+---------+-----------+----------+-------+-------------+---------------+----------+-----------+---------------+---------------+-------------+-------------+----------------+---------+----------+-----------+-------------+----------------+----------------+----------------+---------------------+----------------+--------------+----------------+------------+--------------+------------+--------+------------+--------------+------------+ | 1259 | pg_class | 11 | 83 | 0 | 10 | 2 | 0 | 0 | 0 | -1 | 0 | 0 | false | false | p | r | 34 | 0 | false | false | false | false | false | true | p | false | 0 | 0 | 1 | NULL | NULL | NULL | false | -| 18000 | KibanaSampleDataEcommerce | 2200 | 18001 | 0 | 10 | 2 | 0 | 0 | 0 | -1 | 0 | 0 | false | false | p | r | 16 | 0 | false | false | false | false | false | true | p | false | 0 | 0 | 1 | NULL | NULL | NULL | false | -| 18019 | Logs | 2200 | 18020 | 0 | 10 | 2 | 0 | 0 | 0 | -1 | 0 | 0 | false | false | p | r | 7 | 0 | false | false | false | false | false | true | p | false | 0 | 0 | 1 | NULL | NULL | NULL | false | -| 18029 | NumberCube | 2200 | 18030 | 0 | 10 | 2 | 0 | 0 | 0 | -1 | 0 | 0 | false | false | p | r | 3 | 0 | false | false | false | false | false | true | p | false | 0 | 0 | 1 | NULL | NULL | NULL | false | -| 18035 | WideCube | 2200 | 18036 | 0 | 10 | 2 | 0 | 0 | 0 | -1 | 0 | 0 | false | false | p | r | 207 | 0 | false | false | false | false | false | true | p | false | 0 | 0 | 1 | NULL | NULL | NULL | false | -| 18245 | MultiTypeCube | 2200 | 18246 | 0 | 10 | 2 | 0 | 0 | 0 | -1 | 0 | 0 | false | false | p | r | 67 | 0 | false | false | false | false | false | true | p | false | 0 | 0 | 1 | NULL | NULL | NULL | false | +| 18000 | KibanaSampleDataEcommerce | 2200 | 18001 | 0 | 10 | 2 | 0 | 0 | 0 | -1 | 0 | 0 | false | false | p | r | 17 | 0 | false | false | false | false | false | true | p | false | 0 | 0 | 1 | NULL | NULL | NULL | false | +| 18020 | Logs | 2200 | 18021 | 0 | 10 | 2 | 0 | 0 | 0 | -1 | 0 | 0 | false | false | p | r | 7 | 0 | false | false | false | false | false | true | p | false | 0 | 0 | 1 | NULL | NULL | NULL | false | +| 18030 | NumberCube | 2200 | 18031 | 0 | 10 | 2 | 0 | 0 | 0 | -1 | 0 | 0 | false | false | p | r | 3 | 0 | false | false | false | false | false | true | p | false | 0 | 0 | 1 | NULL | NULL | NULL | false | +| 18036 | WideCube | 2200 | 18037 | 0 | 10 | 2 | 0 | 0 | 0 | -1 | 0 | 0 | false | false | p | r | 207 | 0 | false | false | false | false | false | true | p | false | 0 | 0 | 1 | NULL | NULL | NULL | false | +| 18246 | MultiTypeCube | 2200 | 18247 | 0 | 10 | 2 | 0 | 0 | 0 | -1 | 0 | 0 | false | false | p | r | 67 | 0 | false | false | false | false | false | true | p | false | 0 | 0 | 1 | NULL | NULL | NULL | false | +-------+---------------------------+--------------+---------+-----------+----------+-------+-------------+---------------+----------+-----------+---------------+---------------+-------------+-------------+----------------+---------+----------+-----------+-------------+----------------+----------------+----------------+---------------------+----------------+--------------+----------------+------------+--------------+------------+--------+------------+--------------+------------+ diff --git a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__pgcatalog_pgdescription_postgres.snap b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__pgcatalog_pgdescription_postgres.snap index a8c95f329dd65..8701368a7b634 100644 --- a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__pgcatalog_pgdescription_postgres.snap +++ b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__pgcatalog_pgdescription_postgres.snap @@ -7,82 +7,82 @@ expression: "execute_query(\"SELECT * FROM pg_catalog.pg_description\".to_string +--------+----------+----------+-------------------------------------------------------+ | 18000 | 1259 | 0 | Sample data for tracking eCommerce orders from Kibana | | 18000 | 1259 | 1 | Events count | -| 18000 | 1259 | 9 | Customer gender | -| 18000 | 1259 | 13 | Male users segment | -| 18000 | 1259 | 15 | Virtual column for security context switching | -| 18000 | 1259 | 16 | Virtual column for joining cubes | -| 18019 | 1259 | 6 | Virtual column for security context switching | -| 18019 | 1259 | 7 | Virtual column for joining cubes | -| 18029 | 1259 | 2 | Virtual column for security context switching | -| 18029 | 1259 | 3 | Virtual column for joining cubes | -| 18035 | 1259 | 206 | Virtual column for security context switching | -| 18035 | 1259 | 207 | Virtual column for joining cubes | -| 18245 | 1259 | 0 | Test cube with a little bit of everything | -| 18245 | 1259 | 1 | Test number measure 0 | -| 18245 | 1259 | 2 | Test max(string) measure 0 | -| 18245 | 1259 | 3 | Test max(time) measure 0 | -| 18245 | 1259 | 4 | Test number measure 1 | -| 18245 | 1259 | 5 | Test max(string) measure 1 | -| 18245 | 1259 | 6 | Test max(time) measure 1 | -| 18245 | 1259 | 7 | Test number measure 2 | -| 18245 | 1259 | 8 | Test max(string) measure 2 | -| 18245 | 1259 | 9 | Test max(time) measure 2 | -| 18245 | 1259 | 10 | Test number measure 3 | -| 18245 | 1259 | 11 | Test max(string) measure 3 | -| 18245 | 1259 | 12 | Test max(time) measure 3 | -| 18245 | 1259 | 13 | Test number measure 4 | -| 18245 | 1259 | 14 | Test max(string) measure 4 | -| 18245 | 1259 | 15 | Test max(time) measure 4 | -| 18245 | 1259 | 16 | Test number measure 5 | -| 18245 | 1259 | 17 | Test max(string) measure 5 | -| 18245 | 1259 | 18 | Test max(time) measure 5 | -| 18245 | 1259 | 19 | Test number measure 6 | -| 18245 | 1259 | 20 | Test max(string) measure 6 | -| 18245 | 1259 | 21 | Test max(time) measure 6 | -| 18245 | 1259 | 22 | Test number measure 7 | -| 18245 | 1259 | 23 | Test max(string) measure 7 | -| 18245 | 1259 | 24 | Test max(time) measure 7 | -| 18245 | 1259 | 25 | Test number measure 8 | -| 18245 | 1259 | 26 | Test max(string) measure 8 | -| 18245 | 1259 | 27 | Test max(time) measure 8 | -| 18245 | 1259 | 28 | Test number measure 9 | -| 18245 | 1259 | 29 | Test max(string) measure 9 | -| 18245 | 1259 | 30 | Test max(time) measure 9 | -| 18245 | 1259 | 31 | Test count measure | -| 18245 | 1259 | 32 | Test maxPrice measure | -| 18245 | 1259 | 33 | Test minPrice measure | -| 18245 | 1259 | 34 | Test avgPrice measure | -| 18245 | 1259 | 35 | Test countDistinct measure | -| 18245 | 1259 | 36 | Test numeric dimention 0 | -| 18245 | 1259 | 37 | Test string dimention 0 | -| 18245 | 1259 | 38 | Test time dimention 0 | -| 18245 | 1259 | 39 | Test numeric dimention 1 | -| 18245 | 1259 | 40 | Test string dimention 1 | -| 18245 | 1259 | 41 | Test time dimention 1 | -| 18245 | 1259 | 42 | Test numeric dimention 2 | -| 18245 | 1259 | 43 | Test string dimention 2 | -| 18245 | 1259 | 44 | Test time dimention 2 | -| 18245 | 1259 | 45 | Test numeric dimention 3 | -| 18245 | 1259 | 46 | Test string dimention 3 | -| 18245 | 1259 | 47 | Test time dimention 3 | -| 18245 | 1259 | 48 | Test numeric dimention 4 | -| 18245 | 1259 | 49 | Test string dimention 4 | -| 18245 | 1259 | 50 | Test time dimention 4 | -| 18245 | 1259 | 51 | Test numeric dimention 5 | -| 18245 | 1259 | 52 | Test string dimention 5 | -| 18245 | 1259 | 53 | Test time dimention 5 | -| 18245 | 1259 | 54 | Test numeric dimention 6 | -| 18245 | 1259 | 55 | Test string dimention 6 | -| 18245 | 1259 | 56 | Test time dimention 6 | -| 18245 | 1259 | 57 | Test numeric dimention 7 | -| 18245 | 1259 | 58 | Test string dimention 7 | -| 18245 | 1259 | 59 | Test time dimention 7 | -| 18245 | 1259 | 60 | Test numeric dimention 8 | -| 18245 | 1259 | 61 | Test string dimention 8 | -| 18245 | 1259 | 62 | Test time dimention 8 | -| 18245 | 1259 | 63 | Test numeric dimention 9 | -| 18245 | 1259 | 64 | Test string dimention 9 | -| 18245 | 1259 | 65 | Test time dimention 9 | -| 18245 | 1259 | 66 | Virtual column for security context switching | -| 18245 | 1259 | 67 | Virtual column for joining cubes | +| 18000 | 1259 | 10 | Customer gender | +| 18000 | 1259 | 14 | Male users segment | +| 18000 | 1259 | 16 | Virtual column for security context switching | +| 18000 | 1259 | 17 | Virtual column for joining cubes | +| 18020 | 1259 | 6 | Virtual column for security context switching | +| 18020 | 1259 | 7 | Virtual column for joining cubes | +| 18030 | 1259 | 2 | Virtual column for security context switching | +| 18030 | 1259 | 3 | Virtual column for joining cubes | +| 18036 | 1259 | 206 | Virtual column for security context switching | +| 18036 | 1259 | 207 | Virtual column for joining cubes | +| 18246 | 1259 | 0 | Test cube with a little bit of everything | +| 18246 | 1259 | 1 | Test number measure 0 | +| 18246 | 1259 | 2 | Test max(string) measure 0 | +| 18246 | 1259 | 3 | Test max(time) measure 0 | +| 18246 | 1259 | 4 | Test number measure 1 | +| 18246 | 1259 | 5 | Test max(string) measure 1 | +| 18246 | 1259 | 6 | Test max(time) measure 1 | +| 18246 | 1259 | 7 | Test number measure 2 | +| 18246 | 1259 | 8 | Test max(string) measure 2 | +| 18246 | 1259 | 9 | Test max(time) measure 2 | +| 18246 | 1259 | 10 | Test number measure 3 | +| 18246 | 1259 | 11 | Test max(string) measure 3 | +| 18246 | 1259 | 12 | Test max(time) measure 3 | +| 18246 | 1259 | 13 | Test number measure 4 | +| 18246 | 1259 | 14 | Test max(string) measure 4 | +| 18246 | 1259 | 15 | Test max(time) measure 4 | +| 18246 | 1259 | 16 | Test number measure 5 | +| 18246 | 1259 | 17 | Test max(string) measure 5 | +| 18246 | 1259 | 18 | Test max(time) measure 5 | +| 18246 | 1259 | 19 | Test number measure 6 | +| 18246 | 1259 | 20 | Test max(string) measure 6 | +| 18246 | 1259 | 21 | Test max(time) measure 6 | +| 18246 | 1259 | 22 | Test number measure 7 | +| 18246 | 1259 | 23 | Test max(string) measure 7 | +| 18246 | 1259 | 24 | Test max(time) measure 7 | +| 18246 | 1259 | 25 | Test number measure 8 | +| 18246 | 1259 | 26 | Test max(string) measure 8 | +| 18246 | 1259 | 27 | Test max(time) measure 8 | +| 18246 | 1259 | 28 | Test number measure 9 | +| 18246 | 1259 | 29 | Test max(string) measure 9 | +| 18246 | 1259 | 30 | Test max(time) measure 9 | +| 18246 | 1259 | 31 | Test count measure | +| 18246 | 1259 | 32 | Test maxPrice measure | +| 18246 | 1259 | 33 | Test minPrice measure | +| 18246 | 1259 | 34 | Test avgPrice measure | +| 18246 | 1259 | 35 | Test countDistinct measure | +| 18246 | 1259 | 36 | Test numeric dimention 0 | +| 18246 | 1259 | 37 | Test string dimention 0 | +| 18246 | 1259 | 38 | Test time dimention 0 | +| 18246 | 1259 | 39 | Test numeric dimention 1 | +| 18246 | 1259 | 40 | Test string dimention 1 | +| 18246 | 1259 | 41 | Test time dimention 1 | +| 18246 | 1259 | 42 | Test numeric dimention 2 | +| 18246 | 1259 | 43 | Test string dimention 2 | +| 18246 | 1259 | 44 | Test time dimention 2 | +| 18246 | 1259 | 45 | Test numeric dimention 3 | +| 18246 | 1259 | 46 | Test string dimention 3 | +| 18246 | 1259 | 47 | Test time dimention 3 | +| 18246 | 1259 | 48 | Test numeric dimention 4 | +| 18246 | 1259 | 49 | Test string dimention 4 | +| 18246 | 1259 | 50 | Test time dimention 4 | +| 18246 | 1259 | 51 | Test numeric dimention 5 | +| 18246 | 1259 | 52 | Test string dimention 5 | +| 18246 | 1259 | 53 | Test time dimention 5 | +| 18246 | 1259 | 54 | Test numeric dimention 6 | +| 18246 | 1259 | 55 | Test string dimention 6 | +| 18246 | 1259 | 56 | Test time dimention 6 | +| 18246 | 1259 | 57 | Test numeric dimention 7 | +| 18246 | 1259 | 58 | Test string dimention 7 | +| 18246 | 1259 | 59 | Test time dimention 7 | +| 18246 | 1259 | 60 | Test numeric dimention 8 | +| 18246 | 1259 | 61 | Test string dimention 8 | +| 18246 | 1259 | 62 | Test time dimention 8 | +| 18246 | 1259 | 63 | Test numeric dimention 9 | +| 18246 | 1259 | 64 | Test string dimention 9 | +| 18246 | 1259 | 65 | Test time dimention 9 | +| 18246 | 1259 | 66 | Virtual column for security context switching | +| 18246 | 1259 | 67 | Virtual column for joining cubes | +--------+----------+----------+-------------------------------------------------------+ diff --git a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__pgcatalog_pgshdescription_postgres.snap b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__pgcatalog_pgshdescription_postgres.snap new file mode 100644 index 0000000000000..ad8db5b2ea943 --- /dev/null +++ b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__pgcatalog_pgshdescription_postgres.snap @@ -0,0 +1,8 @@ +--- +source: cubesql/src/compile/mod.rs +expression: "execute_query(\"SELECT * FROM pg_catalog.pg_shdescription\".to_string(),\nDatabaseProtocol::PostgreSQL).await?" +--- ++--------+----------+-------------+ +| objoid | classoid | description | ++--------+----------+-------------+ ++--------+----------+-------------+ diff --git a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__pgcatalog_pgstatiousertables_postgres.snap b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__pgcatalog_pgstatiousertables_postgres.snap index 201fcc4f08115..07a623b032138 100644 --- a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__pgcatalog_pgstatiousertables_postgres.snap +++ b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__pgcatalog_pgstatiousertables_postgres.snap @@ -1,14 +1,13 @@ --- source: cubesql/src/compile/mod.rs -assertion_line: 9270 -expression: "execute_query(\"SELECT * FROM pg_catalog.pg_statio_user_tables ORDER BY relid ASC\".to_string(),\n DatabaseProtocol::PostgreSQL).await?" +expression: "execute_query(\"SELECT * FROM pg_catalog.pg_statio_user_tables ORDER BY relid ASC\".to_string(),\nDatabaseProtocol::PostgreSQL).await?" --- +-------+------------+---------------------------+----------------+---------------+---------------+--------------+-----------------+----------------+----------------+---------------+ | relid | schemaname | relname | heap_blks_read | heap_blks_hit | idx_blks_read | idx_blks_hit | toast_blks_read | toast_blks_hit | tidx_blks_read | tidx_blks_hit | +-------+------------+---------------------------+----------------+---------------+---------------+--------------+-----------------+----------------+----------------+---------------+ | 18000 | public | KibanaSampleDataEcommerce | 0 | 0 | 0 | 0 | NULL | NULL | NULL | NULL | -| 18019 | public | Logs | 0 | 0 | 0 | 0 | NULL | NULL | NULL | NULL | -| 18029 | public | NumberCube | 0 | 0 | 0 | 0 | NULL | NULL | NULL | NULL | -| 18035 | public | WideCube | 0 | 0 | 0 | 0 | NULL | NULL | NULL | NULL | -| 18245 | public | MultiTypeCube | 0 | 0 | 0 | 0 | NULL | NULL | NULL | NULL | +| 18020 | public | Logs | 0 | 0 | 0 | 0 | NULL | NULL | NULL | NULL | +| 18030 | public | NumberCube | 0 | 0 | 0 | 0 | NULL | NULL | NULL | NULL | +| 18036 | public | WideCube | 0 | 0 | 0 | 0 | NULL | NULL | NULL | NULL | +| 18246 | public | MultiTypeCube | 0 | 0 | 0 | 0 | NULL | NULL | NULL | NULL | +-------+------------+---------------------------+----------------+---------------+---------------+--------------+-----------------+----------------+----------------+---------------+ diff --git a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__pgcatalog_pgstats_postgres.snap b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__pgcatalog_pgstats_postgres.snap index 7a9bdbe7b15fb..4f7cf1587e23a 100644 --- a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__pgcatalog_pgstats_postgres.snap +++ b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__pgcatalog_pgstats_postgres.snap @@ -1,7 +1,6 @@ --- source: cubesql/src/compile/mod.rs -assertion_line: 9284 -expression: "execute_query(\"SELECT * FROM pg_catalog.pg_stats\".to_string(),\n DatabaseProtocol::PostgreSQL).await?" +expression: "execute_query(\"SELECT * FROM pg_catalog.pg_stats\".to_string(),\nDatabaseProtocol::PostgreSQL).await?" --- +------------+---------------------------+--------------------+-----------+-----------+-----------+------------+------------------+-------------------+------------------+-------------+-------------------+------------------------+----------------------+ | schemaname | tablename | attname | inherited | null_frac | avg_width | n_distinct | most_common_vals | most_common_freqs | histogram_bounds | correlation | most_common_elems | most_common_elem_freqs | elem_count_histogram | @@ -12,6 +11,7 @@ expression: "execute_query(\"SELECT * FROM pg_catalog.pg_stats\".to_string(),\n | public | KibanaSampleDataEcommerce | minPrice | false | 0 | 8 | 0 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | | public | KibanaSampleDataEcommerce | avgPrice | false | 0 | 8 | 0 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | | public | KibanaSampleDataEcommerce | countDistinct | false | 0 | 8 | 0 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | +| public | KibanaSampleDataEcommerce | id | false | 0 | 8 | 0 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | | public | KibanaSampleDataEcommerce | order_date | false | 0 | 8 | 0 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | | public | KibanaSampleDataEcommerce | last_mod | false | 0 | 8 | 0 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | | public | KibanaSampleDataEcommerce | customer_gender | false | 0 | 64 | 0 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | diff --git a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__pgcatalog_pgtype_postgres.snap b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__pgcatalog_pgtype_postgres.snap index 72196b441a7a5..15f6c2da4cae8 100644 --- a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__pgcatalog_pgtype_postgres.snap +++ b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__pgcatalog_pgtype_postgres.snap @@ -1,7 +1,6 @@ --- source: cubesql/src/compile/mod.rs -assertion_line: 8988 -expression: "execute_query(\"SELECT * FROM pg_catalog.pg_type ORDER BY oid ASC\".to_string(),\n DatabaseProtocol::PostgreSQL).await?" +expression: "execute_query(\"SELECT * FROM pg_catalog.pg_type ORDER BY oid ASC\".to_string(),\nDatabaseProtocol::PostgreSQL).await?" --- +-------+----------------------------+--------------+----------+--------+----------+---------+-------------+---------------+--------------+----------+----------+-----------------------------+---------+----------+-------------------+-----------+------------+---------+----------+-----------+------------+----------+------------+------------+-------------+-----------+----------+--------------+---------------+------------+--------+ | oid | typname | typnamespace | typowner | typlen | typbyval | typtype | typcategory | typisprefered | typisdefined | typdelim | typrelid | typsubscript | typelem | typarray | typinput | typoutput | typreceive | typsend | typmodin | typmodout | typanalyze | typalign | typstorage | typnotnull | typbasetype | typtypmod | typndims | typcollation | typdefaultbin | typdefault | typacl | @@ -92,12 +91,12 @@ expression: "execute_query(\"SELECT * FROM pg_catalog.pg_type ORDER BY oid ASC\" | 13410 | sql_identifier | 13000 | 10 | 64 | false | d | S | false | true | , | 0 | - | 0 | 0 | sql_identifierin | NULL | 0 | NULL | NULL | NULL | NULL | c | p | false | 19 | -1 | NULL | NULL | NULL | NULL | NULL | | 18001 | KibanaSampleDataEcommerce | 2200 | 10 | -1 | false | c | C | false | true | , | 18000 | - | 0 | 18002 | record_in | NULL | 0 | NULL | NULL | NULL | NULL | i | x | false | 0 | -1 | NULL | NULL | NULL | NULL | NULL | | 18002 | _KibanaSampleDataEcommerce | 2200 | 10 | -1 | false | b | A | false | true | , | 0 | array_subscript_handler | 18001 | 0 | record_in | NULL | 0 | NULL | NULL | NULL | NULL | d | x | false | 0 | -1 | NULL | NULL | NULL | NULL | NULL | -| 18020 | Logs | 2200 | 10 | -1 | false | c | C | false | true | , | 18019 | - | 0 | 18021 | record_in | NULL | 0 | NULL | NULL | NULL | NULL | i | x | false | 0 | -1 | NULL | NULL | NULL | NULL | NULL | -| 18021 | _Logs | 2200 | 10 | -1 | false | b | A | false | true | , | 0 | array_subscript_handler | 18020 | 0 | record_in | NULL | 0 | NULL | NULL | NULL | NULL | d | x | false | 0 | -1 | NULL | NULL | NULL | NULL | NULL | -| 18030 | NumberCube | 2200 | 10 | -1 | false | c | C | false | true | , | 18029 | - | 0 | 18031 | record_in | NULL | 0 | NULL | NULL | NULL | NULL | i | x | false | 0 | -1 | NULL | NULL | NULL | NULL | NULL | -| 18031 | _NumberCube | 2200 | 10 | -1 | false | b | A | false | true | , | 0 | array_subscript_handler | 18030 | 0 | record_in | NULL | 0 | NULL | NULL | NULL | NULL | d | x | false | 0 | -1 | NULL | NULL | NULL | NULL | NULL | -| 18036 | WideCube | 2200 | 10 | -1 | false | c | C | false | true | , | 18035 | - | 0 | 18037 | record_in | NULL | 0 | NULL | NULL | NULL | NULL | i | x | false | 0 | -1 | NULL | NULL | NULL | NULL | NULL | -| 18037 | _WideCube | 2200 | 10 | -1 | false | b | A | false | true | , | 0 | array_subscript_handler | 18036 | 0 | record_in | NULL | 0 | NULL | NULL | NULL | NULL | d | x | false | 0 | -1 | NULL | NULL | NULL | NULL | NULL | -| 18246 | MultiTypeCube | 2200 | 10 | -1 | false | c | C | false | true | , | 18245 | - | 0 | 18247 | record_in | NULL | 0 | NULL | NULL | NULL | NULL | i | x | false | 0 | -1 | NULL | NULL | NULL | NULL | NULL | -| 18247 | _MultiTypeCube | 2200 | 10 | -1 | false | b | A | false | true | , | 0 | array_subscript_handler | 18246 | 0 | record_in | NULL | 0 | NULL | NULL | NULL | NULL | d | x | false | 0 | -1 | NULL | NULL | NULL | NULL | NULL | +| 18021 | Logs | 2200 | 10 | -1 | false | c | C | false | true | , | 18020 | - | 0 | 18022 | record_in | NULL | 0 | NULL | NULL | NULL | NULL | i | x | false | 0 | -1 | NULL | NULL | NULL | NULL | NULL | +| 18022 | _Logs | 2200 | 10 | -1 | false | b | A | false | true | , | 0 | array_subscript_handler | 18021 | 0 | record_in | NULL | 0 | NULL | NULL | NULL | NULL | d | x | false | 0 | -1 | NULL | NULL | NULL | NULL | NULL | +| 18031 | NumberCube | 2200 | 10 | -1 | false | c | C | false | true | , | 18030 | - | 0 | 18032 | record_in | NULL | 0 | NULL | NULL | NULL | NULL | i | x | false | 0 | -1 | NULL | NULL | NULL | NULL | NULL | +| 18032 | _NumberCube | 2200 | 10 | -1 | false | b | A | false | true | , | 0 | array_subscript_handler | 18031 | 0 | record_in | NULL | 0 | NULL | NULL | NULL | NULL | d | x | false | 0 | -1 | NULL | NULL | NULL | NULL | NULL | +| 18037 | WideCube | 2200 | 10 | -1 | false | c | C | false | true | , | 18036 | - | 0 | 18038 | record_in | NULL | 0 | NULL | NULL | NULL | NULL | i | x | false | 0 | -1 | NULL | NULL | NULL | NULL | NULL | +| 18038 | _WideCube | 2200 | 10 | -1 | false | b | A | false | true | , | 0 | array_subscript_handler | 18037 | 0 | record_in | NULL | 0 | NULL | NULL | NULL | NULL | d | x | false | 0 | -1 | NULL | NULL | NULL | NULL | NULL | +| 18247 | MultiTypeCube | 2200 | 10 | -1 | false | c | C | false | true | , | 18246 | - | 0 | 18248 | record_in | NULL | 0 | NULL | NULL | NULL | NULL | i | x | false | 0 | -1 | NULL | NULL | NULL | NULL | NULL | +| 18248 | _MultiTypeCube | 2200 | 10 | -1 | false | b | A | false | true | , | 0 | array_subscript_handler | 18247 | 0 | record_in | NULL | 0 | NULL | NULL | NULL | NULL | d | x | false | 0 | -1 | NULL | NULL | NULL | NULL | NULL | +-------+----------------------------+--------------+----------+--------+----------+---------+-------------+---------------+--------------+----------+----------+-----------------------------+---------+----------+-------------------+-----------+------------+---------+----------+-----------+------------+----------+------------+------------+-------------+-----------+----------+--------------+---------------+------------+--------+ diff --git a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__redshift_svv_table_info.snap b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__redshift_svv_table_info.snap index c16e2f718da1c..483afec45ff44 100644 --- a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__redshift_svv_table_info.snap +++ b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__redshift_svv_table_info.snap @@ -1,14 +1,13 @@ --- source: cubesql/src/compile/mod.rs -assertion_line: 6643 -expression: "execute_query(\"SELECT * FROM svv_table_info ORDER BY table_id ASC\".to_string(),\n DatabaseProtocol::PostgreSQL).await?" +expression: "execute_query(\"SELECT * FROM svv_table_info ORDER BY table_id ASC\".to_string(),\nDatabaseProtocol::PostgreSQL).await?" --- +----------+--------+----------+---------------------------+---------+-----------+---------------+-------------+--------------+-------------+------+----------+-------+----------+-----------+----------+---------------+-----------+------------------------+------------+---------------------+ | database | schema | table_id | table | encoded | diststyle | sortkey1 | max_varchar | sortkey1_enc | sortkey_num | size | pct_used | empty | unsorted | stats_off | tbl_rows | skew_sortkey1 | skew_rows | estimated_visible_rows | risk_event | vacuum_sort_benefit | +----------+--------+----------+---------------------------+---------+-----------+---------------+-------------+--------------+-------------+------+----------+-------+----------+-----------+----------+---------------+-----------+------------------------+------------+---------------------+ | cubedb | public | 18000 | KibanaSampleDataEcommerce | N | AUTO(ALL) | AUTO(SORTKEY) | 0 | NULL | 0 | 5 | 0.0013 | 0 | NULL | 100 | 100000 | NULL | NULL | 100000 | NULL | NULL | -| cubedb | public | 18019 | Logs | N | AUTO(ALL) | AUTO(SORTKEY) | 0 | NULL | 0 | 5 | 0.0013 | 0 | NULL | 100 | 100000 | NULL | NULL | 100000 | NULL | NULL | -| cubedb | public | 18029 | NumberCube | N | AUTO(ALL) | AUTO(SORTKEY) | 0 | NULL | 0 | 5 | 0.0013 | 0 | NULL | 100 | 100000 | NULL | NULL | 100000 | NULL | NULL | -| cubedb | public | 18035 | WideCube | N | AUTO(ALL) | AUTO(SORTKEY) | 0 | NULL | 0 | 5 | 0.0013 | 0 | NULL | 100 | 100000 | NULL | NULL | 100000 | NULL | NULL | -| cubedb | public | 18245 | MultiTypeCube | N | AUTO(ALL) | AUTO(SORTKEY) | 0 | NULL | 0 | 5 | 0.0013 | 0 | NULL | 100 | 100000 | NULL | NULL | 100000 | NULL | NULL | +| cubedb | public | 18020 | Logs | N | AUTO(ALL) | AUTO(SORTKEY) | 0 | NULL | 0 | 5 | 0.0013 | 0 | NULL | 100 | 100000 | NULL | NULL | 100000 | NULL | NULL | +| cubedb | public | 18030 | NumberCube | N | AUTO(ALL) | AUTO(SORTKEY) | 0 | NULL | 0 | 5 | 0.0013 | 0 | NULL | 100 | 100000 | NULL | NULL | 100000 | NULL | NULL | +| cubedb | public | 18036 | WideCube | N | AUTO(ALL) | AUTO(SORTKEY) | 0 | NULL | 0 | 5 | 0.0013 | 0 | NULL | 100 | 100000 | NULL | NULL | 100000 | NULL | NULL | +| cubedb | public | 18246 | MultiTypeCube | N | AUTO(ALL) | AUTO(SORTKEY) | 0 | NULL | 0 | 5 | 0.0013 | 0 | NULL | 100 | 100000 | NULL | NULL | 100000 | NULL | NULL | +----------+--------+----------+---------------------------+---------+-----------+---------------+-------------+--------------+-------------+------+----------+-------+----------+-----------+----------+---------------+-----------+------------------------+------------+---------------------+ diff --git a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__test_sort_relations_0.snap b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__test_sort_relations_0.snap index ff733682184ea..df770cc7651fd 100644 --- a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__test_sort_relations_0.snap +++ b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__test_sort_relations_0.snap @@ -7,8 +7,8 @@ expression: "execute_query(\"select pg_class.oid as oid from pg_class order by p +-------+ | 1259 | | 18000 | -| 18019 | -| 18029 | -| 18035 | -| 18245 | +| 18020 | +| 18030 | +| 18036 | +| 18246 | +-------+ diff --git a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__test_sort_relations_1.snap b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__test_sort_relations_1.snap index 3da0a622c0558..4e3bae1a90c3e 100644 --- a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__test_sort_relations_1.snap +++ b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__test_sort_relations_1.snap @@ -7,8 +7,8 @@ expression: "execute_query(\"select * from (select pg_class.oid AS oid from pg_c +-------+ | 1259 | | 18000 | -| 18019 | -| 18029 | -| 18035 | -| 18245 | +| 18020 | +| 18030 | +| 18036 | +| 18246 | +-------+ diff --git a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__test_sort_relations_2.snap b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__test_sort_relations_2.snap index af8167a287527..cd8795044c9f7 100644 --- a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__test_sort_relations_2.snap +++ b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__test_sort_relations_2.snap @@ -7,8 +7,8 @@ expression: "execute_query(\"select * from (select oid from pg_class order by pg +-------+ | 1259 | | 18000 | -| 18019 | -| 18029 | -| 18035 | -| 18245 | +| 18020 | +| 18030 | +| 18036 | +| 18246 | +-------+ diff --git a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__test_sort_relations_3.snap b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__test_sort_relations_3.snap index 8326278645ef9..ad054eae4d281 100644 --- a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__test_sort_relations_3.snap +++ b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__test_sort_relations_3.snap @@ -7,8 +7,8 @@ expression: "execute_query(\"select t.oid as oid from (select oid as oid from pg +-------+ | 1259 | | 18000 | -| 18019 | -| 18029 | -| 18035 | -| 18245 | +| 18020 | +| 18030 | +| 18036 | +| 18246 | +-------+ diff --git a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__test_sort_relations_6.snap b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__test_sort_relations_6.snap index 401911e2934a0..2f74e870f20e6 100644 --- a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__test_sort_relations_6.snap +++ b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__test_sort_relations_6.snap @@ -7,8 +7,8 @@ expression: "execute_query(\"select pg_class.oid as oid from pg_class group by p +-------+ | 1259 | | 18000 | -| 18019 | -| 18029 | -| 18035 | -| 18245 | +| 18020 | +| 18030 | +| 18036 | +| 18246 | +-------+ diff --git a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__test_sort_relations_7.snap b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__test_sort_relations_7.snap index d06c8722b440a..9ee1dea9d1a99 100644 --- a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__test_sort_relations_7.snap +++ b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__test_sort_relations_7.snap @@ -7,8 +7,8 @@ expression: "execute_query(\"select * from (select oid from pg_class group by pg +-------+ | 1259 | | 18000 | -| 18019 | -| 18029 | -| 18035 | -| 18245 | +| 18020 | +| 18030 | +| 18036 | +| 18246 | +-------+ diff --git a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__thought_spot_table_columns.snap b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__thought_spot_table_columns.snap index ebec7d37ee693..9a824bbfb19e6 100644 --- a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__thought_spot_table_columns.snap +++ b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__thought_spot_table_columns.snap @@ -11,14 +11,15 @@ expression: "execute_query(\"SELECT * FROM ( SELECT current_database() AS TABLE_ | cubedb | public | KibanaSampleDataEcommerce | minPrice | 2 | numeric | -1 | NULL | 65531 | 10 | NULL | NULL | NULL | 2 | NULL | 65535 | 4 | NULL | NULL | NULL | NULL | 0 | NO | false | | cubedb | public | KibanaSampleDataEcommerce | avgPrice | 2 | numeric | -1 | NULL | 65531 | 10 | NULL | NULL | NULL | 2 | NULL | 65535 | 5 | NULL | NULL | NULL | NULL | 0 | NO | false | | cubedb | public | KibanaSampleDataEcommerce | countDistinct | -5 | int8 | 19 | NULL | 0 | 10 | NULL | NULL | NULL | -5 | NULL | 19 | 6 | NULL | NULL | NULL | NULL | 0 | NO | false | -| cubedb | public | KibanaSampleDataEcommerce | order_date | 93 | timestamp | 29 | NULL | 6 | 10 | 1 | NULL | NULL | 93 | NULL | 29 | 7 | YES | NULL | NULL | NULL | 0 | NO | false | -| cubedb | public | KibanaSampleDataEcommerce | last_mod | 93 | timestamp | 29 | NULL | 6 | 10 | 1 | NULL | NULL | 93 | NULL | 29 | 8 | YES | NULL | NULL | NULL | 0 | NO | false | -| cubedb | public | KibanaSampleDataEcommerce | customer_gender | 12 | text | 2147483647 | NULL | 0 | 10 | 1 | Customer gender | NULL | 12 | NULL | 2147483647 | 9 | YES | NULL | NULL | NULL | 0 | NO | false | -| cubedb | public | KibanaSampleDataEcommerce | notes | 12 | text | 2147483647 | NULL | 0 | 10 | 1 | NULL | NULL | 12 | NULL | 2147483647 | 10 | YES | NULL | NULL | NULL | 0 | NO | false | -| cubedb | public | KibanaSampleDataEcommerce | taxful_total_price | 2 | numeric | -1 | NULL | 65531 | 10 | 1 | NULL | NULL | 2 | NULL | 65535 | 11 | YES | NULL | NULL | NULL | 0 | NO | false | -| cubedb | public | KibanaSampleDataEcommerce | has_subscription | -7 | bool | 1 | NULL | 0 | 10 | 1 | NULL | NULL | -7 | NULL | 1 | 12 | YES | NULL | NULL | NULL | 0 | NO | false | -| cubedb | public | KibanaSampleDataEcommerce | is_male | -7 | bool | 1 | NULL | 0 | 10 | NULL | Male users segment | NULL | -7 | NULL | 1 | 13 | NULL | NULL | NULL | NULL | 0 | NO | false | -| cubedb | public | KibanaSampleDataEcommerce | is_female | -7 | bool | 1 | NULL | 0 | 10 | NULL | NULL | NULL | -7 | NULL | 1 | 14 | NULL | NULL | NULL | NULL | 0 | NO | false | -| cubedb | public | KibanaSampleDataEcommerce | __user | 12 | text | 2147483647 | NULL | 0 | 10 | 1 | Virtual column for security context switching | NULL | 12 | NULL | 2147483647 | 15 | YES | NULL | NULL | NULL | 0 | NO | false | -| cubedb | public | KibanaSampleDataEcommerce | __cubeJoinField | 12 | text | 2147483647 | NULL | 0 | 10 | 1 | Virtual column for joining cubes | NULL | 12 | NULL | 2147483647 | 16 | YES | NULL | NULL | NULL | 0 | NO | false | +| cubedb | public | KibanaSampleDataEcommerce | id | 2 | numeric | -1 | NULL | 65531 | 10 | 1 | NULL | NULL | 2 | NULL | 65535 | 7 | YES | NULL | NULL | NULL | 0 | NO | false | +| cubedb | public | KibanaSampleDataEcommerce | order_date | 93 | timestamp | 29 | NULL | 6 | 10 | 1 | NULL | NULL | 93 | NULL | 29 | 8 | YES | NULL | NULL | NULL | 0 | NO | false | +| cubedb | public | KibanaSampleDataEcommerce | last_mod | 93 | timestamp | 29 | NULL | 6 | 10 | 1 | NULL | NULL | 93 | NULL | 29 | 9 | YES | NULL | NULL | NULL | 0 | NO | false | +| cubedb | public | KibanaSampleDataEcommerce | customer_gender | 12 | text | 2147483647 | NULL | 0 | 10 | 1 | Customer gender | NULL | 12 | NULL | 2147483647 | 10 | YES | NULL | NULL | NULL | 0 | NO | false | +| cubedb | public | KibanaSampleDataEcommerce | notes | 12 | text | 2147483647 | NULL | 0 | 10 | 1 | NULL | NULL | 12 | NULL | 2147483647 | 11 | YES | NULL | NULL | NULL | 0 | NO | false | +| cubedb | public | KibanaSampleDataEcommerce | taxful_total_price | 2 | numeric | -1 | NULL | 65531 | 10 | 1 | NULL | NULL | 2 | NULL | 65535 | 12 | YES | NULL | NULL | NULL | 0 | NO | false | +| cubedb | public | KibanaSampleDataEcommerce | has_subscription | -7 | bool | 1 | NULL | 0 | 10 | 1 | NULL | NULL | -7 | NULL | 1 | 13 | YES | NULL | NULL | NULL | 0 | NO | false | +| cubedb | public | KibanaSampleDataEcommerce | is_male | -7 | bool | 1 | NULL | 0 | 10 | NULL | Male users segment | NULL | -7 | NULL | 1 | 14 | NULL | NULL | NULL | NULL | 0 | NO | false | +| cubedb | public | KibanaSampleDataEcommerce | is_female | -7 | bool | 1 | NULL | 0 | 10 | NULL | NULL | NULL | -7 | NULL | 1 | 15 | NULL | NULL | NULL | NULL | 0 | NO | false | +| cubedb | public | KibanaSampleDataEcommerce | __user | 12 | text | 2147483647 | NULL | 0 | 10 | 1 | Virtual column for security context switching | NULL | 12 | NULL | 2147483647 | 16 | YES | NULL | NULL | NULL | 0 | NO | false | +| cubedb | public | KibanaSampleDataEcommerce | __cubeJoinField | 12 | text | 2147483647 | NULL | 0 | 10 | 1 | Virtual column for joining cubes | NULL | 12 | NULL | 2147483647 | 17 | YES | NULL | NULL | NULL | 0 | NO | false | +-----------+-------------+---------------------------+--------------------+-----------+-----------+-------------+---------------+----------------+----------------+----------+-----------------------------------------------+------------+---------------+------------------+-------------------+------------------+-------------+---------------+--------------+-------------+------------------+------------------+--------------------+ diff --git a/rust/cubesql/cubesql/src/compile/test/mod.rs b/rust/cubesql/cubesql/src/compile/test/mod.rs index 9ded03081ede3..e711d9e9a591e 100644 --- a/rust/cubesql/cubesql/src/compile/test/mod.rs +++ b/rust/cubesql/cubesql/src/compile/test/mod.rs @@ -60,6 +60,11 @@ pub fn get_test_meta() -> Vec { title: None, r#type: V1CubeMetaType::Cube, dimensions: vec![ + CubeMetaDimension { + name: "KibanaSampleDataEcommerce.id".to_string(), + r#type: "number".to_string(), + ..CubeMetaDimension::default() + }, CubeMetaDimension { name: "KibanaSampleDataEcommerce.order_date".to_string(), r#type: "time".to_string(), diff --git a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__dbeaver_introspection_columns.snap b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__dbeaver_introspection_columns.snap new file mode 100644 index 0000000000000..4148f0d56245f Binary files /dev/null and b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__dbeaver_introspection_columns.snap differ diff --git a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__dbeaver_introspection_tables.snap b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__dbeaver_introspection_tables.snap new file mode 100644 index 0000000000000..6bffcd63e7a4c --- /dev/null +++ b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__dbeaver_introspection_tables.snap @@ -0,0 +1,13 @@ +--- +source: cubesql/src/compile/test/test_introspection.rs +expression: "execute_query(r#\"\n select c.oid,pg_catalog.pg_total_relation_size(c.oid) as total_rel_size,pg_catalog.pg_relation_size(c.oid) as rel_size\n FROM pg_class c\n WHERE c.relnamespace=2200\n ORDER BY c.oid\n \"#.to_string(),\nDatabaseProtocol::PostgreSQL).await?" +--- ++-------+----------------+----------+ +| oid | total_rel_size | rel_size | ++-------+----------------+----------+ +| 18000 | 8192 | 8192 | +| 18020 | 8192 | 8192 | +| 18030 | 8192 | 8192 | +| 18036 | 8192 | 8192 | +| 18246 | 8192 | 8192 | ++-------+----------------+----------+ diff --git a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__dbeaver_introspection_tables_with_descriptions.snap b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__dbeaver_introspection_tables_with_descriptions.snap new file mode 100644 index 0000000000000..6656934629127 --- /dev/null +++ b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__dbeaver_introspection_tables_with_descriptions.snap @@ -0,0 +1,13 @@ +--- +source: cubesql/src/compile/test/test_introspection.rs +expression: "execute_query(r#\"\n SELECT c.oid,c.*,d.description,pg_catalog.pg_get_expr(c.relpartbound, c.oid) as partition_expr, pg_catalog.pg_get_partkeydef(c.oid) as partition_key \n FROM pg_catalog.pg_class c\n LEFT OUTER JOIN pg_catalog.pg_description d ON d.objoid=c.oid AND d.objsubid=0 AND d.classoid='pg_class'::regclass\n WHERE c.relnamespace=2200 AND c.relkind not in ('i','I','c')\n ORDER BY c.oid\n \"#.to_string(),\nDatabaseProtocol::PostgreSQL).await?" +--- ++-------+-------+---------------------------+--------------+---------+-----------+----------+-------+-------------+---------------+----------+-----------+---------------+---------------+-------------+-------------+----------------+---------+----------+-----------+-------------+----------------+----------------+----------------+---------------------+----------------+--------------+----------------+------------+--------------+------------+--------+------------+--------------+------------+-------------------------------------------------------+----------------+---------------+ +| _oid | oid | relname | relnamespace | reltype | reloftype | relowner | relam | relfilenode | reltablespace | relpages | reltuples | relallvisible | reltoastrelid | relhasindex | relisshared | relpersistence | relkind | relnatts | relchecks | relhasrules | relhastriggers | relhassubclass | relrowsecurity | relforcerowsecurity | relispopulated | relreplident | relispartition | relrewrite | relfrozenxid | relminmxid | relacl | reloptions | relpartbound | relhasoids | description | partition_expr | partition_key | ++-------+-------+---------------------------+--------------+---------+-----------+----------+-------+-------------+---------------+----------+-----------+---------------+---------------+-------------+-------------+----------------+---------+----------+-----------+-------------+----------------+----------------+----------------+---------------------+----------------+--------------+----------------+------------+--------------+------------+--------+------------+--------------+------------+-------------------------------------------------------+----------------+---------------+ +| 18000 | 18000 | KibanaSampleDataEcommerce | 2200 | 18001 | 0 | 10 | 2 | 0 | 0 | 0 | -1 | 0 | 0 | false | false | p | r | 17 | 0 | false | false | false | false | false | true | p | false | 0 | 0 | 1 | NULL | NULL | NULL | false | Sample data for tracking eCommerce orders from Kibana | NULL | NULL | +| 18020 | 18020 | Logs | 2200 | 18021 | 0 | 10 | 2 | 0 | 0 | 0 | -1 | 0 | 0 | false | false | p | r | 7 | 0 | false | false | false | false | false | true | p | false | 0 | 0 | 1 | NULL | NULL | NULL | false | NULL | NULL | NULL | +| 18030 | 18030 | NumberCube | 2200 | 18031 | 0 | 10 | 2 | 0 | 0 | 0 | -1 | 0 | 0 | false | false | p | r | 3 | 0 | false | false | false | false | false | true | p | false | 0 | 0 | 1 | NULL | NULL | NULL | false | NULL | NULL | NULL | +| 18036 | 18036 | WideCube | 2200 | 18037 | 0 | 10 | 2 | 0 | 0 | 0 | -1 | 0 | 0 | false | false | p | r | 207 | 0 | false | false | false | false | false | true | p | false | 0 | 0 | 1 | NULL | NULL | NULL | false | NULL | NULL | NULL | +| 18246 | 18246 | MultiTypeCube | 2200 | 18247 | 0 | 10 | 2 | 0 | 0 | 0 | -1 | 0 | 0 | false | false | p | r | 67 | 0 | false | false | false | false | false | true | p | false | 0 | 0 | 1 | NULL | NULL | NULL | false | Test cube with a little bit of everything | NULL | NULL | ++-------+-------+---------------------------+--------------+---------+-----------+----------+-------+-------------+---------------+----------+-----------+---------------+---------------+-------------+-------------+----------------+---------+----------+-----------+-------------+----------------+----------------+----------------+---------------------+----------------+--------------+----------------+------------+--------------+------------+--------+------------+--------------+------------+-------------------------------------------------------+----------------+---------------+ diff --git a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__excel_exists_query.snap b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__excel_exists_query.snap index db36a09ccad04..fd4ae8f13a49c 100644 --- a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__excel_exists_query.snap +++ b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__excel_exists_query.snap @@ -11,14 +11,15 @@ expression: "execute_query(\"\n SELECT\n a.att | minPrice | 4 | 1700 | -1 | true | KibanaSampleDataEcommerce | public | false | false | NULL | 1700 | false | -1 | NULL | NULL | NULL | | avgPrice | 5 | 1700 | -1 | true | KibanaSampleDataEcommerce | public | false | false | NULL | 1700 | false | -1 | NULL | NULL | NULL | | countDistinct | 6 | 20 | -1 | true | KibanaSampleDataEcommerce | public | false | false | NULL | 20 | false | -1 | 64 | 0 | NULL | -| order_date | 7 | 1114 | -1 | false | KibanaSampleDataEcommerce | public | false | false | NULL | 1114 | false | -1 | NULL | NULL | 6 | -| last_mod | 8 | 1114 | -1 | false | KibanaSampleDataEcommerce | public | false | false | NULL | 1114 | false | -1 | NULL | NULL | 6 | -| customer_gender | 9 | 25 | -1 | false | KibanaSampleDataEcommerce | public | false | false | NULL | 25 | false | -1 | NULL | NULL | NULL | -| notes | 10 | 25 | -1 | false | KibanaSampleDataEcommerce | public | false | false | NULL | 25 | false | -1 | NULL | NULL | NULL | -| taxful_total_price | 11 | 1700 | -1 | false | KibanaSampleDataEcommerce | public | false | false | NULL | 1700 | false | -1 | NULL | NULL | NULL | -| has_subscription | 12 | 16 | -1 | false | KibanaSampleDataEcommerce | public | false | false | NULL | 16 | false | -1 | NULL | NULL | NULL | -| is_male | 13 | 16 | -1 | true | KibanaSampleDataEcommerce | public | false | false | NULL | 16 | false | -1 | NULL | NULL | NULL | -| is_female | 14 | 16 | -1 | true | KibanaSampleDataEcommerce | public | false | false | NULL | 16 | false | -1 | NULL | NULL | NULL | -| __user | 15 | 25 | -1 | false | KibanaSampleDataEcommerce | public | false | false | NULL | 25 | false | -1 | NULL | NULL | NULL | -| __cubeJoinField | 16 | 25 | -1 | false | KibanaSampleDataEcommerce | public | false | false | NULL | 25 | false | -1 | NULL | NULL | NULL | +| id | 7 | 1700 | -1 | false | KibanaSampleDataEcommerce | public | false | false | NULL | 1700 | false | -1 | NULL | NULL | NULL | +| order_date | 8 | 1114 | -1 | false | KibanaSampleDataEcommerce | public | false | false | NULL | 1114 | false | -1 | NULL | NULL | 6 | +| last_mod | 9 | 1114 | -1 | false | KibanaSampleDataEcommerce | public | false | false | NULL | 1114 | false | -1 | NULL | NULL | 6 | +| customer_gender | 10 | 25 | -1 | false | KibanaSampleDataEcommerce | public | false | false | NULL | 25 | false | -1 | NULL | NULL | NULL | +| notes | 11 | 25 | -1 | false | KibanaSampleDataEcommerce | public | false | false | NULL | 25 | false | -1 | NULL | NULL | NULL | +| taxful_total_price | 12 | 1700 | -1 | false | KibanaSampleDataEcommerce | public | false | false | NULL | 1700 | false | -1 | NULL | NULL | NULL | +| has_subscription | 13 | 16 | -1 | false | KibanaSampleDataEcommerce | public | false | false | NULL | 16 | false | -1 | NULL | NULL | NULL | +| is_male | 14 | 16 | -1 | true | KibanaSampleDataEcommerce | public | false | false | NULL | 16 | false | -1 | NULL | NULL | NULL | +| is_female | 15 | 16 | -1 | true | KibanaSampleDataEcommerce | public | false | false | NULL | 16 | false | -1 | NULL | NULL | NULL | +| __user | 16 | 25 | -1 | false | KibanaSampleDataEcommerce | public | false | false | NULL | 25 | false | -1 | NULL | NULL | NULL | +| __cubeJoinField | 17 | 25 | -1 | false | KibanaSampleDataEcommerce | public | false | false | NULL | 25 | false | -1 | NULL | NULL | NULL | +--------------------+--------------+----------+----------+--------+---------------------------+--------+-------+----------+----------+----------+-----------------+--------+-----------+-------+-------------------+ diff --git a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__excel_large_select_query.snap b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__excel_large_select_query.snap index 4d8a3a0f57060..36bd8bb894573 100644 --- a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__excel_large_select_query.snap +++ b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__excel_large_select_query.snap @@ -11,14 +11,15 @@ expression: "execute_query(\"\n SELECT\n na.ns | public | KibanaSampleDataEcommerce | minPrice | 4 | false | -1 | NULL | NULL | NULL | true | false | false | 0 | 0 | false | numeric | pg_catalog | NULL | NULL | NULL | NULL | | NULL | false | | public | KibanaSampleDataEcommerce | avgPrice | 5 | false | -1 | NULL | NULL | NULL | true | false | false | 0 | 0 | false | numeric | pg_catalog | NULL | NULL | NULL | NULL | | NULL | false | | public | KibanaSampleDataEcommerce | countDistinct | 6 | false | -1 | 64 | 0 | NULL | true | false | false | 0 | 0 | false | int8 | pg_catalog | NULL | NULL | NULL | NULL | | NULL | false | -| public | KibanaSampleDataEcommerce | order_date | 7 | true | -1 | NULL | NULL | 6 | false | false | false | 0 | 0 | false | timestamp | pg_catalog | NULL | NULL | NULL | NULL | | NULL | false | -| public | KibanaSampleDataEcommerce | last_mod | 8 | true | -1 | NULL | NULL | 6 | false | false | false | 0 | 0 | false | timestamp | pg_catalog | NULL | NULL | NULL | NULL | | NULL | false | -| public | KibanaSampleDataEcommerce | customer_gender | 9 | true | -1 | NULL | NULL | NULL | false | false | false | 0 | 0 | false | text | pg_catalog | NULL | Customer gender | NULL | NULL | | NULL | false | -| public | KibanaSampleDataEcommerce | notes | 10 | true | -1 | NULL | NULL | NULL | false | false | false | 0 | 0 | false | text | pg_catalog | NULL | NULL | NULL | NULL | | NULL | false | -| public | KibanaSampleDataEcommerce | taxful_total_price | 11 | true | -1 | NULL | NULL | NULL | false | false | false | 0 | 0 | false | numeric | pg_catalog | NULL | NULL | NULL | NULL | | NULL | false | -| public | KibanaSampleDataEcommerce | has_subscription | 12 | true | -1 | NULL | NULL | NULL | false | false | false | 0 | 0 | false | bool | pg_catalog | NULL | NULL | NULL | NULL | | NULL | false | -| public | KibanaSampleDataEcommerce | is_male | 13 | false | -1 | NULL | NULL | NULL | true | false | false | 0 | 0 | false | bool | pg_catalog | NULL | Male users segment | NULL | NULL | | NULL | false | -| public | KibanaSampleDataEcommerce | is_female | 14 | false | -1 | NULL | NULL | NULL | true | false | false | 0 | 0 | false | bool | pg_catalog | NULL | NULL | NULL | NULL | | NULL | false | -| public | KibanaSampleDataEcommerce | __user | 15 | true | -1 | NULL | NULL | NULL | false | false | false | 0 | 0 | false | text | pg_catalog | NULL | Virtual column for security context switching | NULL | NULL | | NULL | false | -| public | KibanaSampleDataEcommerce | __cubeJoinField | 16 | true | -1 | NULL | NULL | NULL | false | false | false | 0 | 0 | false | text | pg_catalog | NULL | Virtual column for joining cubes | NULL | NULL | | NULL | false | +| public | KibanaSampleDataEcommerce | id | 7 | true | -1 | NULL | NULL | NULL | false | false | false | 0 | 0 | false | numeric | pg_catalog | NULL | NULL | NULL | NULL | | NULL | false | +| public | KibanaSampleDataEcommerce | order_date | 8 | true | -1 | NULL | NULL | 6 | false | false | false | 0 | 0 | false | timestamp | pg_catalog | NULL | NULL | NULL | NULL | | NULL | false | +| public | KibanaSampleDataEcommerce | last_mod | 9 | true | -1 | NULL | NULL | 6 | false | false | false | 0 | 0 | false | timestamp | pg_catalog | NULL | NULL | NULL | NULL | | NULL | false | +| public | KibanaSampleDataEcommerce | customer_gender | 10 | true | -1 | NULL | NULL | NULL | false | false | false | 0 | 0 | false | text | pg_catalog | NULL | Customer gender | NULL | NULL | | NULL | false | +| public | KibanaSampleDataEcommerce | notes | 11 | true | -1 | NULL | NULL | NULL | false | false | false | 0 | 0 | false | text | pg_catalog | NULL | NULL | NULL | NULL | | NULL | false | +| public | KibanaSampleDataEcommerce | taxful_total_price | 12 | true | -1 | NULL | NULL | NULL | false | false | false | 0 | 0 | false | numeric | pg_catalog | NULL | NULL | NULL | NULL | | NULL | false | +| public | KibanaSampleDataEcommerce | has_subscription | 13 | true | -1 | NULL | NULL | NULL | false | false | false | 0 | 0 | false | bool | pg_catalog | NULL | NULL | NULL | NULL | | NULL | false | +| public | KibanaSampleDataEcommerce | is_male | 14 | false | -1 | NULL | NULL | NULL | true | false | false | 0 | 0 | false | bool | pg_catalog | NULL | Male users segment | NULL | NULL | | NULL | false | +| public | KibanaSampleDataEcommerce | is_female | 15 | false | -1 | NULL | NULL | NULL | true | false | false | 0 | 0 | false | bool | pg_catalog | NULL | NULL | NULL | NULL | | NULL | false | +| public | KibanaSampleDataEcommerce | __user | 16 | true | -1 | NULL | NULL | NULL | false | false | false | 0 | 0 | false | text | pg_catalog | NULL | Virtual column for security context switching | NULL | NULL | | NULL | false | +| public | KibanaSampleDataEcommerce | __cubeJoinField | 17 | true | -1 | NULL | NULL | NULL | false | false | false | 0 | 0 | false | text | pg_catalog | NULL | Virtual column for joining cubes | NULL | NULL | | NULL | false | +--------+---------------------------+--------------------+----------+----------+--------+-----------+-------+----------------+----------+-----------------+-----------+---------------+-----------+---------+-----------+------------+-------------------+-----------------------------------------------+---------+-----------+--------------+--------------+-------+ diff --git a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__excel_select_db_query.snap b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__excel_select_db_query.snap index 6c3c50c674549..f658e2674764c 100644 --- a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__excel_select_db_query.snap +++ b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__excel_select_db_query.snap @@ -5,9 +5,9 @@ expression: "execute_query(\"\n SELECT\n 'db' +----------+--------+---------------------------+-----------+---------+-------+------+---------+--------------+-----------+-------------------------------------------------------+--------------+----------------+------------+-------------------------+ | Database | Schema | Name | TableType | definer | Oid | ACL | HasOids | HasSubtables | RowNumber | Comment | ColumnNumber | TriggersNumber | Constraint | ColumnConstrainsIndexes | +----------+--------+---------------------------+-----------+---------+-------+------+---------+--------------+-----------+-------------------------------------------------------+--------------+----------------+------------+-------------------------+ -| db | public | KibanaSampleDataEcommerce | User | ovr | 18000 | NULL | true | false | -1 | Sample data for tracking eCommerce orders from Kibana | 16 | false | NULL | NULL | -| db | public | Logs | User | ovr | 18019 | NULL | true | false | -1 | NULL | 7 | false | NULL | NULL | -| db | public | MultiTypeCube | User | ovr | 18245 | NULL | true | false | -1 | Test cube with a little bit of everything | 67 | false | NULL | NULL | -| db | public | NumberCube | User | ovr | 18029 | NULL | true | false | -1 | NULL | 3 | false | NULL | NULL | -| db | public | WideCube | User | ovr | 18035 | NULL | true | false | -1 | NULL | 207 | false | NULL | NULL | +| db | public | KibanaSampleDataEcommerce | User | ovr | 18000 | NULL | true | false | -1 | Sample data for tracking eCommerce orders from Kibana | 17 | false | NULL | NULL | +| db | public | Logs | User | ovr | 18020 | NULL | true | false | -1 | NULL | 7 | false | NULL | NULL | +| db | public | MultiTypeCube | User | ovr | 18246 | NULL | true | false | -1 | Test cube with a little bit of everything | 67 | false | NULL | NULL | +| db | public | NumberCube | User | ovr | 18030 | NULL | true | false | -1 | NULL | 3 | false | NULL | NULL | +| db | public | WideCube | User | ovr | 18036 | NULL | true | false | -1 | NULL | 207 | false | NULL | NULL | +----------+--------+---------------------------+-----------+---------+-------+------+---------+--------------+-----------+-------------------------------------------------------+--------------+----------------+------------+-------------------------+ diff --git a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__google_sheets_pg_database_query.snap b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__google_sheets_pg_database_query.snap index 1505c416964fc..5871f95bb576d 100644 --- a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__google_sheets_pg_database_query.snap +++ b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__google_sheets_pg_database_query.snap @@ -11,14 +11,15 @@ expression: "execute_query(\"\n SELECT\n cl.re | KibanaSampleDataEcommerce | minPrice | 4 | false | false | false | numeric | -1 | NULL | NULL | NULL | | KibanaSampleDataEcommerce | avgPrice | 5 | false | false | false | numeric | -1 | NULL | NULL | NULL | | KibanaSampleDataEcommerce | countDistinct | 6 | false | false | false | int8 | -1 | 64 | 0 | NULL | -| KibanaSampleDataEcommerce | order_date | 7 | true | false | false | timestamp | -1 | NULL | NULL | 6 | -| KibanaSampleDataEcommerce | last_mod | 8 | true | false | false | timestamp | -1 | NULL | NULL | 6 | -| KibanaSampleDataEcommerce | customer_gender | 9 | true | false | false | text | -1 | NULL | NULL | NULL | -| KibanaSampleDataEcommerce | notes | 10 | true | false | false | text | -1 | NULL | NULL | NULL | -| KibanaSampleDataEcommerce | taxful_total_price | 11 | true | false | false | numeric | -1 | NULL | NULL | NULL | -| KibanaSampleDataEcommerce | has_subscription | 12 | true | false | false | bool | -1 | NULL | NULL | NULL | -| KibanaSampleDataEcommerce | is_male | 13 | false | false | false | bool | -1 | NULL | NULL | NULL | -| KibanaSampleDataEcommerce | is_female | 14 | false | false | false | bool | -1 | NULL | NULL | NULL | -| KibanaSampleDataEcommerce | __user | 15 | true | false | false | text | -1 | NULL | NULL | NULL | -| KibanaSampleDataEcommerce | __cubeJoinField | 16 | true | false | false | text | -1 | NULL | NULL | NULL | +| KibanaSampleDataEcommerce | id | 7 | true | false | false | numeric | -1 | NULL | NULL | NULL | +| KibanaSampleDataEcommerce | order_date | 8 | true | false | false | timestamp | -1 | NULL | NULL | 6 | +| KibanaSampleDataEcommerce | last_mod | 9 | true | false | false | timestamp | -1 | NULL | NULL | 6 | +| KibanaSampleDataEcommerce | customer_gender | 10 | true | false | false | text | -1 | NULL | NULL | NULL | +| KibanaSampleDataEcommerce | notes | 11 | true | false | false | text | -1 | NULL | NULL | NULL | +| KibanaSampleDataEcommerce | taxful_total_price | 12 | true | false | false | numeric | -1 | NULL | NULL | NULL | +| KibanaSampleDataEcommerce | has_subscription | 13 | true | false | false | bool | -1 | NULL | NULL | NULL | +| KibanaSampleDataEcommerce | is_male | 14 | false | false | false | bool | -1 | NULL | NULL | NULL | +| KibanaSampleDataEcommerce | is_female | 15 | false | false | false | bool | -1 | NULL | NULL | NULL | +| KibanaSampleDataEcommerce | __user | 16 | true | false | false | text | -1 | NULL | NULL | NULL | +| KibanaSampleDataEcommerce | __cubeJoinField | 17 | true | false | false | text | -1 | NULL | NULL | NULL | +---------------------------+--------------------+----------+----------+-------+-----------------+-----------+--------+-----------+-------+----------------+ diff --git a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__holistics_in_subquery_query.snap b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__holistics_in_subquery_query.snap index 17533608ab954..bf4436137d32e 100644 --- a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__holistics_in_subquery_query.snap +++ b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__holistics_in_subquery_query.snap @@ -12,6 +12,7 @@ expression: "execute_query(\"SELECT\\n n.nspname || '.' || c.relname AS | public.KibanaSampleDataEcommerce | countDistinct | bigint | | public.KibanaSampleDataEcommerce | customer_gender | text | | public.KibanaSampleDataEcommerce | has_subscription | boolean | +| public.KibanaSampleDataEcommerce | id | numeric | | public.KibanaSampleDataEcommerce | is_female | boolean | | public.KibanaSampleDataEcommerce | is_male | boolean | | public.KibanaSampleDataEcommerce | last_mod | timestamp without time zone | diff --git a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__metabase-2.snap b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__metabase-2.snap index ed4c9e5dc2a25..094f86868da68 100644 --- a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__metabase-2.snap +++ b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__metabase-2.snap @@ -11,6 +11,7 @@ expression: "execute_query(\"SELECT \\\n TABLE_SCHEMA TABLE_CAT, | db | NULL | KibanaSampleDataEcommerce | minPrice | 1111 | NUMERIC | 2147483647 | 65535 | 0 | 10 | 0 | | | 0 | 0 | 2147483647 | 0 | NO | NULL | NULL | NULL | NULL | NO | NO | | db | NULL | KibanaSampleDataEcommerce | avgPrice | 1111 | NUMERIC | 2147483647 | 65535 | 0 | 10 | 0 | | | 0 | 0 | 2147483647 | 0 | NO | NULL | NULL | NULL | NULL | NO | NO | | db | NULL | KibanaSampleDataEcommerce | countDistinct | 4 | INT | 2147483647 | 65535 | 0 | 10 | 0 | | | 0 | 0 | 2147483647 | 0 | NO | NULL | NULL | NULL | NULL | NO | NO | +| db | NULL | KibanaSampleDataEcommerce | id | 1111 | NUMERIC | 2147483647 | 65535 | 0 | 10 | 0 | | | 0 | 0 | 2147483647 | 0 | YES | NULL | NULL | NULL | NULL | NO | NO | | db | NULL | KibanaSampleDataEcommerce | order_date | 93 | DATETIME | NULL | 65535 | 0 | 10 | 0 | | | 0 | 0 | 2147483647 | 0 | YES | NULL | NULL | NULL | NULL | NO | NO | | db | NULL | KibanaSampleDataEcommerce | last_mod | 93 | DATETIME | NULL | 65535 | 0 | 10 | 0 | | | 0 | 0 | 2147483647 | 0 | YES | NULL | NULL | NULL | NULL | NO | NO | | db | NULL | KibanaSampleDataEcommerce | customer_gender | 12 | VARCHAR | 2147483647 | 65535 | 0 | 10 | 0 | | | 0 | 0 | 2147483647 | 0 | YES | NULL | NULL | NULL | NULL | NO | NO | diff --git a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__pg_get_expr_1.snap b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__pg_get_expr_1.snap index 628f12e8fd094..ac87ab14ddfb6 100644 --- a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__pg_get_expr_1.snap +++ b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__pg_get_expr_1.snap @@ -12,6 +12,7 @@ expression: "execute_query(\"\n SELECT\n attre | 18000 | countDistinct | NULL | | 18000 | customer_gender | NULL | | 18000 | has_subscription | NULL | +| 18000 | id | NULL | | 18000 | is_female | NULL | | 18000 | is_male | NULL | | 18000 | last_mod | NULL | @@ -21,288 +22,288 @@ expression: "execute_query(\"\n SELECT\n attre | 18000 | order_date | NULL | | 18000 | sumPrice | NULL | | 18000 | taxful_total_price | NULL | -| 18019 | __cubeJoinField | NULL | -| 18019 | __user | NULL | -| 18019 | agentCount | NULL | -| 18019 | agentCountApprox | NULL | -| 18019 | content | NULL | -| 18019 | id | NULL | -| 18019 | read | NULL | -| 18029 | __cubeJoinField | NULL | -| 18029 | __user | NULL | -| 18029 | someNumber | NULL | -| 18035 | __cubeJoinField | NULL | -| 18035 | __user | NULL | -| 18035 | avgPrice | NULL | -| 18035 | count | NULL | -| 18035 | countDistinct | NULL | -| 18035 | dim0 | NULL | -| 18035 | dim1 | NULL | -| 18035 | dim10 | NULL | -| 18035 | dim11 | NULL | -| 18035 | dim12 | NULL | -| 18035 | dim13 | NULL | -| 18035 | dim14 | NULL | -| 18035 | dim15 | NULL | -| 18035 | dim16 | NULL | -| 18035 | dim17 | NULL | -| 18035 | dim18 | NULL | -| 18035 | dim19 | NULL | -| 18035 | dim2 | NULL | -| 18035 | dim20 | NULL | -| 18035 | dim21 | NULL | -| 18035 | dim22 | NULL | -| 18035 | dim23 | NULL | -| 18035 | dim24 | NULL | -| 18035 | dim25 | NULL | -| 18035 | dim26 | NULL | -| 18035 | dim27 | NULL | -| 18035 | dim28 | NULL | -| 18035 | dim29 | NULL | -| 18035 | dim3 | NULL | -| 18035 | dim30 | NULL | -| 18035 | dim31 | NULL | -| 18035 | dim32 | NULL | -| 18035 | dim33 | NULL | -| 18035 | dim34 | NULL | -| 18035 | dim35 | NULL | -| 18035 | dim36 | NULL | -| 18035 | dim37 | NULL | -| 18035 | dim38 | NULL | -| 18035 | dim39 | NULL | -| 18035 | dim4 | NULL | -| 18035 | dim40 | NULL | -| 18035 | dim41 | NULL | -| 18035 | dim42 | NULL | -| 18035 | dim43 | NULL | -| 18035 | dim44 | NULL | -| 18035 | dim45 | NULL | -| 18035 | dim46 | NULL | -| 18035 | dim47 | NULL | -| 18035 | dim48 | NULL | -| 18035 | dim49 | NULL | -| 18035 | dim5 | NULL | -| 18035 | dim50 | NULL | -| 18035 | dim51 | NULL | -| 18035 | dim52 | NULL | -| 18035 | dim53 | NULL | -| 18035 | dim54 | NULL | -| 18035 | dim55 | NULL | -| 18035 | dim56 | NULL | -| 18035 | dim57 | NULL | -| 18035 | dim58 | NULL | -| 18035 | dim59 | NULL | -| 18035 | dim6 | NULL | -| 18035 | dim60 | NULL | -| 18035 | dim61 | NULL | -| 18035 | dim62 | NULL | -| 18035 | dim63 | NULL | -| 18035 | dim64 | NULL | -| 18035 | dim65 | NULL | -| 18035 | dim66 | NULL | -| 18035 | dim67 | NULL | -| 18035 | dim68 | NULL | -| 18035 | dim69 | NULL | -| 18035 | dim7 | NULL | -| 18035 | dim70 | NULL | -| 18035 | dim71 | NULL | -| 18035 | dim72 | NULL | -| 18035 | dim73 | NULL | -| 18035 | dim74 | NULL | -| 18035 | dim75 | NULL | -| 18035 | dim76 | NULL | -| 18035 | dim77 | NULL | -| 18035 | dim78 | NULL | -| 18035 | dim79 | NULL | -| 18035 | dim8 | NULL | -| 18035 | dim80 | NULL | -| 18035 | dim81 | NULL | -| 18035 | dim82 | NULL | -| 18035 | dim83 | NULL | -| 18035 | dim84 | NULL | -| 18035 | dim85 | NULL | -| 18035 | dim86 | NULL | -| 18035 | dim87 | NULL | -| 18035 | dim88 | NULL | -| 18035 | dim89 | NULL | -| 18035 | dim9 | NULL | -| 18035 | dim90 | NULL | -| 18035 | dim91 | NULL | -| 18035 | dim92 | NULL | -| 18035 | dim93 | NULL | -| 18035 | dim94 | NULL | -| 18035 | dim95 | NULL | -| 18035 | dim96 | NULL | -| 18035 | dim97 | NULL | -| 18035 | dim98 | NULL | -| 18035 | dim99 | NULL | -| 18035 | maxPrice | NULL | -| 18035 | measure0 | NULL | -| 18035 | measure1 | NULL | -| 18035 | measure10 | NULL | -| 18035 | measure11 | NULL | -| 18035 | measure12 | NULL | -| 18035 | measure13 | NULL | -| 18035 | measure14 | NULL | -| 18035 | measure15 | NULL | -| 18035 | measure16 | NULL | -| 18035 | measure17 | NULL | -| 18035 | measure18 | NULL | -| 18035 | measure19 | NULL | -| 18035 | measure2 | NULL | -| 18035 | measure20 | NULL | -| 18035 | measure21 | NULL | -| 18035 | measure22 | NULL | -| 18035 | measure23 | NULL | -| 18035 | measure24 | NULL | -| 18035 | measure25 | NULL | -| 18035 | measure26 | NULL | -| 18035 | measure27 | NULL | -| 18035 | measure28 | NULL | -| 18035 | measure29 | NULL | -| 18035 | measure3 | NULL | -| 18035 | measure30 | NULL | -| 18035 | measure31 | NULL | -| 18035 | measure32 | NULL | -| 18035 | measure33 | NULL | -| 18035 | measure34 | NULL | -| 18035 | measure35 | NULL | -| 18035 | measure36 | NULL | -| 18035 | measure37 | NULL | -| 18035 | measure38 | NULL | -| 18035 | measure39 | NULL | -| 18035 | measure4 | NULL | -| 18035 | measure40 | NULL | -| 18035 | measure41 | NULL | -| 18035 | measure42 | NULL | -| 18035 | measure43 | NULL | -| 18035 | measure44 | NULL | -| 18035 | measure45 | NULL | -| 18035 | measure46 | NULL | -| 18035 | measure47 | NULL | -| 18035 | measure48 | NULL | -| 18035 | measure49 | NULL | -| 18035 | measure5 | NULL | -| 18035 | measure50 | NULL | -| 18035 | measure51 | NULL | -| 18035 | measure52 | NULL | -| 18035 | measure53 | NULL | -| 18035 | measure54 | NULL | -| 18035 | measure55 | NULL | -| 18035 | measure56 | NULL | -| 18035 | measure57 | NULL | -| 18035 | measure58 | NULL | -| 18035 | measure59 | NULL | -| 18035 | measure6 | NULL | -| 18035 | measure60 | NULL | -| 18035 | measure61 | NULL | -| 18035 | measure62 | NULL | -| 18035 | measure63 | NULL | -| 18035 | measure64 | NULL | -| 18035 | measure65 | NULL | -| 18035 | measure66 | NULL | -| 18035 | measure67 | NULL | -| 18035 | measure68 | NULL | -| 18035 | measure69 | NULL | -| 18035 | measure7 | NULL | -| 18035 | measure70 | NULL | -| 18035 | measure71 | NULL | -| 18035 | measure72 | NULL | -| 18035 | measure73 | NULL | -| 18035 | measure74 | NULL | -| 18035 | measure75 | NULL | -| 18035 | measure76 | NULL | -| 18035 | measure77 | NULL | -| 18035 | measure78 | NULL | -| 18035 | measure79 | NULL | -| 18035 | measure8 | NULL | -| 18035 | measure80 | NULL | -| 18035 | measure81 | NULL | -| 18035 | measure82 | NULL | -| 18035 | measure83 | NULL | -| 18035 | measure84 | NULL | -| 18035 | measure85 | NULL | -| 18035 | measure86 | NULL | -| 18035 | measure87 | NULL | -| 18035 | measure88 | NULL | -| 18035 | measure89 | NULL | -| 18035 | measure9 | NULL | -| 18035 | measure90 | NULL | -| 18035 | measure91 | NULL | -| 18035 | measure92 | NULL | -| 18035 | measure93 | NULL | -| 18035 | measure94 | NULL | -| 18035 | measure95 | NULL | -| 18035 | measure96 | NULL | -| 18035 | measure97 | NULL | -| 18035 | measure98 | NULL | -| 18035 | measure99 | NULL | -| 18035 | minPrice | NULL | -| 18245 | __cubeJoinField | NULL | -| 18245 | __user | NULL | -| 18245 | avgPrice | NULL | -| 18245 | count | NULL | -| 18245 | countDistinct | NULL | -| 18245 | dim_date0 | NULL | -| 18245 | dim_date1 | NULL | -| 18245 | dim_date2 | NULL | -| 18245 | dim_date3 | NULL | -| 18245 | dim_date4 | NULL | -| 18245 | dim_date5 | NULL | -| 18245 | dim_date6 | NULL | -| 18245 | dim_date7 | NULL | -| 18245 | dim_date8 | NULL | -| 18245 | dim_date9 | NULL | -| 18245 | dim_num0 | NULL | -| 18245 | dim_num1 | NULL | -| 18245 | dim_num2 | NULL | -| 18245 | dim_num3 | NULL | -| 18245 | dim_num4 | NULL | -| 18245 | dim_num5 | NULL | -| 18245 | dim_num6 | NULL | -| 18245 | dim_num7 | NULL | -| 18245 | dim_num8 | NULL | -| 18245 | dim_num9 | NULL | -| 18245 | dim_str0 | NULL | -| 18245 | dim_str1 | NULL | -| 18245 | dim_str2 | NULL | -| 18245 | dim_str3 | NULL | -| 18245 | dim_str4 | NULL | -| 18245 | dim_str5 | NULL | -| 18245 | dim_str6 | NULL | -| 18245 | dim_str7 | NULL | -| 18245 | dim_str8 | NULL | -| 18245 | dim_str9 | NULL | -| 18245 | maxPrice | NULL | -| 18245 | measure_date0 | NULL | -| 18245 | measure_date1 | NULL | -| 18245 | measure_date2 | NULL | -| 18245 | measure_date3 | NULL | -| 18245 | measure_date4 | NULL | -| 18245 | measure_date5 | NULL | -| 18245 | measure_date6 | NULL | -| 18245 | measure_date7 | NULL | -| 18245 | measure_date8 | NULL | -| 18245 | measure_date9 | NULL | -| 18245 | measure_num0 | NULL | -| 18245 | measure_num1 | NULL | -| 18245 | measure_num2 | NULL | -| 18245 | measure_num3 | NULL | -| 18245 | measure_num4 | NULL | -| 18245 | measure_num5 | NULL | -| 18245 | measure_num6 | NULL | -| 18245 | measure_num7 | NULL | -| 18245 | measure_num8 | NULL | -| 18245 | measure_num9 | NULL | -| 18245 | measure_str0 | NULL | -| 18245 | measure_str1 | NULL | -| 18245 | measure_str2 | NULL | -| 18245 | measure_str3 | NULL | -| 18245 | measure_str4 | NULL | -| 18245 | measure_str5 | NULL | -| 18245 | measure_str6 | NULL | -| 18245 | measure_str7 | NULL | -| 18245 | measure_str8 | NULL | -| 18245 | measure_str9 | NULL | -| 18245 | minPrice | NULL | +| 18020 | __cubeJoinField | NULL | +| 18020 | __user | NULL | +| 18020 | agentCount | NULL | +| 18020 | agentCountApprox | NULL | +| 18020 | content | NULL | +| 18020 | id | NULL | +| 18020 | read | NULL | +| 18030 | __cubeJoinField | NULL | +| 18030 | __user | NULL | +| 18030 | someNumber | NULL | +| 18036 | __cubeJoinField | NULL | +| 18036 | __user | NULL | +| 18036 | avgPrice | NULL | +| 18036 | count | NULL | +| 18036 | countDistinct | NULL | +| 18036 | dim0 | NULL | +| 18036 | dim1 | NULL | +| 18036 | dim10 | NULL | +| 18036 | dim11 | NULL | +| 18036 | dim12 | NULL | +| 18036 | dim13 | NULL | +| 18036 | dim14 | NULL | +| 18036 | dim15 | NULL | +| 18036 | dim16 | NULL | +| 18036 | dim17 | NULL | +| 18036 | dim18 | NULL | +| 18036 | dim19 | NULL | +| 18036 | dim2 | NULL | +| 18036 | dim20 | NULL | +| 18036 | dim21 | NULL | +| 18036 | dim22 | NULL | +| 18036 | dim23 | NULL | +| 18036 | dim24 | NULL | +| 18036 | dim25 | NULL | +| 18036 | dim26 | NULL | +| 18036 | dim27 | NULL | +| 18036 | dim28 | NULL | +| 18036 | dim29 | NULL | +| 18036 | dim3 | NULL | +| 18036 | dim30 | NULL | +| 18036 | dim31 | NULL | +| 18036 | dim32 | NULL | +| 18036 | dim33 | NULL | +| 18036 | dim34 | NULL | +| 18036 | dim35 | NULL | +| 18036 | dim36 | NULL | +| 18036 | dim37 | NULL | +| 18036 | dim38 | NULL | +| 18036 | dim39 | NULL | +| 18036 | dim4 | NULL | +| 18036 | dim40 | NULL | +| 18036 | dim41 | NULL | +| 18036 | dim42 | NULL | +| 18036 | dim43 | NULL | +| 18036 | dim44 | NULL | +| 18036 | dim45 | NULL | +| 18036 | dim46 | NULL | +| 18036 | dim47 | NULL | +| 18036 | dim48 | NULL | +| 18036 | dim49 | NULL | +| 18036 | dim5 | NULL | +| 18036 | dim50 | NULL | +| 18036 | dim51 | NULL | +| 18036 | dim52 | NULL | +| 18036 | dim53 | NULL | +| 18036 | dim54 | NULL | +| 18036 | dim55 | NULL | +| 18036 | dim56 | NULL | +| 18036 | dim57 | NULL | +| 18036 | dim58 | NULL | +| 18036 | dim59 | NULL | +| 18036 | dim6 | NULL | +| 18036 | dim60 | NULL | +| 18036 | dim61 | NULL | +| 18036 | dim62 | NULL | +| 18036 | dim63 | NULL | +| 18036 | dim64 | NULL | +| 18036 | dim65 | NULL | +| 18036 | dim66 | NULL | +| 18036 | dim67 | NULL | +| 18036 | dim68 | NULL | +| 18036 | dim69 | NULL | +| 18036 | dim7 | NULL | +| 18036 | dim70 | NULL | +| 18036 | dim71 | NULL | +| 18036 | dim72 | NULL | +| 18036 | dim73 | NULL | +| 18036 | dim74 | NULL | +| 18036 | dim75 | NULL | +| 18036 | dim76 | NULL | +| 18036 | dim77 | NULL | +| 18036 | dim78 | NULL | +| 18036 | dim79 | NULL | +| 18036 | dim8 | NULL | +| 18036 | dim80 | NULL | +| 18036 | dim81 | NULL | +| 18036 | dim82 | NULL | +| 18036 | dim83 | NULL | +| 18036 | dim84 | NULL | +| 18036 | dim85 | NULL | +| 18036 | dim86 | NULL | +| 18036 | dim87 | NULL | +| 18036 | dim88 | NULL | +| 18036 | dim89 | NULL | +| 18036 | dim9 | NULL | +| 18036 | dim90 | NULL | +| 18036 | dim91 | NULL | +| 18036 | dim92 | NULL | +| 18036 | dim93 | NULL | +| 18036 | dim94 | NULL | +| 18036 | dim95 | NULL | +| 18036 | dim96 | NULL | +| 18036 | dim97 | NULL | +| 18036 | dim98 | NULL | +| 18036 | dim99 | NULL | +| 18036 | maxPrice | NULL | +| 18036 | measure0 | NULL | +| 18036 | measure1 | NULL | +| 18036 | measure10 | NULL | +| 18036 | measure11 | NULL | +| 18036 | measure12 | NULL | +| 18036 | measure13 | NULL | +| 18036 | measure14 | NULL | +| 18036 | measure15 | NULL | +| 18036 | measure16 | NULL | +| 18036 | measure17 | NULL | +| 18036 | measure18 | NULL | +| 18036 | measure19 | NULL | +| 18036 | measure2 | NULL | +| 18036 | measure20 | NULL | +| 18036 | measure21 | NULL | +| 18036 | measure22 | NULL | +| 18036 | measure23 | NULL | +| 18036 | measure24 | NULL | +| 18036 | measure25 | NULL | +| 18036 | measure26 | NULL | +| 18036 | measure27 | NULL | +| 18036 | measure28 | NULL | +| 18036 | measure29 | NULL | +| 18036 | measure3 | NULL | +| 18036 | measure30 | NULL | +| 18036 | measure31 | NULL | +| 18036 | measure32 | NULL | +| 18036 | measure33 | NULL | +| 18036 | measure34 | NULL | +| 18036 | measure35 | NULL | +| 18036 | measure36 | NULL | +| 18036 | measure37 | NULL | +| 18036 | measure38 | NULL | +| 18036 | measure39 | NULL | +| 18036 | measure4 | NULL | +| 18036 | measure40 | NULL | +| 18036 | measure41 | NULL | +| 18036 | measure42 | NULL | +| 18036 | measure43 | NULL | +| 18036 | measure44 | NULL | +| 18036 | measure45 | NULL | +| 18036 | measure46 | NULL | +| 18036 | measure47 | NULL | +| 18036 | measure48 | NULL | +| 18036 | measure49 | NULL | +| 18036 | measure5 | NULL | +| 18036 | measure50 | NULL | +| 18036 | measure51 | NULL | +| 18036 | measure52 | NULL | +| 18036 | measure53 | NULL | +| 18036 | measure54 | NULL | +| 18036 | measure55 | NULL | +| 18036 | measure56 | NULL | +| 18036 | measure57 | NULL | +| 18036 | measure58 | NULL | +| 18036 | measure59 | NULL | +| 18036 | measure6 | NULL | +| 18036 | measure60 | NULL | +| 18036 | measure61 | NULL | +| 18036 | measure62 | NULL | +| 18036 | measure63 | NULL | +| 18036 | measure64 | NULL | +| 18036 | measure65 | NULL | +| 18036 | measure66 | NULL | +| 18036 | measure67 | NULL | +| 18036 | measure68 | NULL | +| 18036 | measure69 | NULL | +| 18036 | measure7 | NULL | +| 18036 | measure70 | NULL | +| 18036 | measure71 | NULL | +| 18036 | measure72 | NULL | +| 18036 | measure73 | NULL | +| 18036 | measure74 | NULL | +| 18036 | measure75 | NULL | +| 18036 | measure76 | NULL | +| 18036 | measure77 | NULL | +| 18036 | measure78 | NULL | +| 18036 | measure79 | NULL | +| 18036 | measure8 | NULL | +| 18036 | measure80 | NULL | +| 18036 | measure81 | NULL | +| 18036 | measure82 | NULL | +| 18036 | measure83 | NULL | +| 18036 | measure84 | NULL | +| 18036 | measure85 | NULL | +| 18036 | measure86 | NULL | +| 18036 | measure87 | NULL | +| 18036 | measure88 | NULL | +| 18036 | measure89 | NULL | +| 18036 | measure9 | NULL | +| 18036 | measure90 | NULL | +| 18036 | measure91 | NULL | +| 18036 | measure92 | NULL | +| 18036 | measure93 | NULL | +| 18036 | measure94 | NULL | +| 18036 | measure95 | NULL | +| 18036 | measure96 | NULL | +| 18036 | measure97 | NULL | +| 18036 | measure98 | NULL | +| 18036 | measure99 | NULL | +| 18036 | minPrice | NULL | +| 18246 | __cubeJoinField | NULL | +| 18246 | __user | NULL | +| 18246 | avgPrice | NULL | +| 18246 | count | NULL | +| 18246 | countDistinct | NULL | +| 18246 | dim_date0 | NULL | +| 18246 | dim_date1 | NULL | +| 18246 | dim_date2 | NULL | +| 18246 | dim_date3 | NULL | +| 18246 | dim_date4 | NULL | +| 18246 | dim_date5 | NULL | +| 18246 | dim_date6 | NULL | +| 18246 | dim_date7 | NULL | +| 18246 | dim_date8 | NULL | +| 18246 | dim_date9 | NULL | +| 18246 | dim_num0 | NULL | +| 18246 | dim_num1 | NULL | +| 18246 | dim_num2 | NULL | +| 18246 | dim_num3 | NULL | +| 18246 | dim_num4 | NULL | +| 18246 | dim_num5 | NULL | +| 18246 | dim_num6 | NULL | +| 18246 | dim_num7 | NULL | +| 18246 | dim_num8 | NULL | +| 18246 | dim_num9 | NULL | +| 18246 | dim_str0 | NULL | +| 18246 | dim_str1 | NULL | +| 18246 | dim_str2 | NULL | +| 18246 | dim_str3 | NULL | +| 18246 | dim_str4 | NULL | +| 18246 | dim_str5 | NULL | +| 18246 | dim_str6 | NULL | +| 18246 | dim_str7 | NULL | +| 18246 | dim_str8 | NULL | +| 18246 | dim_str9 | NULL | +| 18246 | maxPrice | NULL | +| 18246 | measure_date0 | NULL | +| 18246 | measure_date1 | NULL | +| 18246 | measure_date2 | NULL | +| 18246 | measure_date3 | NULL | +| 18246 | measure_date4 | NULL | +| 18246 | measure_date5 | NULL | +| 18246 | measure_date6 | NULL | +| 18246 | measure_date7 | NULL | +| 18246 | measure_date8 | NULL | +| 18246 | measure_date9 | NULL | +| 18246 | measure_num0 | NULL | +| 18246 | measure_num1 | NULL | +| 18246 | measure_num2 | NULL | +| 18246 | measure_num3 | NULL | +| 18246 | measure_num4 | NULL | +| 18246 | measure_num5 | NULL | +| 18246 | measure_num6 | NULL | +| 18246 | measure_num7 | NULL | +| 18246 | measure_num8 | NULL | +| 18246 | measure_num9 | NULL | +| 18246 | measure_str0 | NULL | +| 18246 | measure_str1 | NULL | +| 18246 | measure_str2 | NULL | +| 18246 | measure_str3 | NULL | +| 18246 | measure_str4 | NULL | +| 18246 | measure_str5 | NULL | +| 18246 | measure_str6 | NULL | +| 18246 | measure_str7 | NULL | +| 18246 | measure_str8 | NULL | +| 18246 | measure_str9 | NULL | +| 18246 | minPrice | NULL | +----------+--------------------+---------+ diff --git a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__pg_get_expr_2.snap b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__pg_get_expr_2.snap index afe31d30a689c..03fc4b7a0aa6e 100644 --- a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__pg_get_expr_2.snap +++ b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__pg_get_expr_2.snap @@ -12,6 +12,7 @@ expression: "execute_query(\"\n SELECT\n attre | 18000 | countDistinct | NULL | | 18000 | customer_gender | NULL | | 18000 | has_subscription | NULL | +| 18000 | id | NULL | | 18000 | is_female | NULL | | 18000 | is_male | NULL | | 18000 | last_mod | NULL | @@ -21,288 +22,288 @@ expression: "execute_query(\"\n SELECT\n attre | 18000 | order_date | NULL | | 18000 | sumPrice | NULL | | 18000 | taxful_total_price | NULL | -| 18019 | __cubeJoinField | NULL | -| 18019 | __user | NULL | -| 18019 | agentCount | NULL | -| 18019 | agentCountApprox | NULL | -| 18019 | content | NULL | -| 18019 | id | NULL | -| 18019 | read | NULL | -| 18029 | __cubeJoinField | NULL | -| 18029 | __user | NULL | -| 18029 | someNumber | NULL | -| 18035 | __cubeJoinField | NULL | -| 18035 | __user | NULL | -| 18035 | avgPrice | NULL | -| 18035 | count | NULL | -| 18035 | countDistinct | NULL | -| 18035 | dim0 | NULL | -| 18035 | dim1 | NULL | -| 18035 | dim10 | NULL | -| 18035 | dim11 | NULL | -| 18035 | dim12 | NULL | -| 18035 | dim13 | NULL | -| 18035 | dim14 | NULL | -| 18035 | dim15 | NULL | -| 18035 | dim16 | NULL | -| 18035 | dim17 | NULL | -| 18035 | dim18 | NULL | -| 18035 | dim19 | NULL | -| 18035 | dim2 | NULL | -| 18035 | dim20 | NULL | -| 18035 | dim21 | NULL | -| 18035 | dim22 | NULL | -| 18035 | dim23 | NULL | -| 18035 | dim24 | NULL | -| 18035 | dim25 | NULL | -| 18035 | dim26 | NULL | -| 18035 | dim27 | NULL | -| 18035 | dim28 | NULL | -| 18035 | dim29 | NULL | -| 18035 | dim3 | NULL | -| 18035 | dim30 | NULL | -| 18035 | dim31 | NULL | -| 18035 | dim32 | NULL | -| 18035 | dim33 | NULL | -| 18035 | dim34 | NULL | -| 18035 | dim35 | NULL | -| 18035 | dim36 | NULL | -| 18035 | dim37 | NULL | -| 18035 | dim38 | NULL | -| 18035 | dim39 | NULL | -| 18035 | dim4 | NULL | -| 18035 | dim40 | NULL | -| 18035 | dim41 | NULL | -| 18035 | dim42 | NULL | -| 18035 | dim43 | NULL | -| 18035 | dim44 | NULL | -| 18035 | dim45 | NULL | -| 18035 | dim46 | NULL | -| 18035 | dim47 | NULL | -| 18035 | dim48 | NULL | -| 18035 | dim49 | NULL | -| 18035 | dim5 | NULL | -| 18035 | dim50 | NULL | -| 18035 | dim51 | NULL | -| 18035 | dim52 | NULL | -| 18035 | dim53 | NULL | -| 18035 | dim54 | NULL | -| 18035 | dim55 | NULL | -| 18035 | dim56 | NULL | -| 18035 | dim57 | NULL | -| 18035 | dim58 | NULL | -| 18035 | dim59 | NULL | -| 18035 | dim6 | NULL | -| 18035 | dim60 | NULL | -| 18035 | dim61 | NULL | -| 18035 | dim62 | NULL | -| 18035 | dim63 | NULL | -| 18035 | dim64 | NULL | -| 18035 | dim65 | NULL | -| 18035 | dim66 | NULL | -| 18035 | dim67 | NULL | -| 18035 | dim68 | NULL | -| 18035 | dim69 | NULL | -| 18035 | dim7 | NULL | -| 18035 | dim70 | NULL | -| 18035 | dim71 | NULL | -| 18035 | dim72 | NULL | -| 18035 | dim73 | NULL | -| 18035 | dim74 | NULL | -| 18035 | dim75 | NULL | -| 18035 | dim76 | NULL | -| 18035 | dim77 | NULL | -| 18035 | dim78 | NULL | -| 18035 | dim79 | NULL | -| 18035 | dim8 | NULL | -| 18035 | dim80 | NULL | -| 18035 | dim81 | NULL | -| 18035 | dim82 | NULL | -| 18035 | dim83 | NULL | -| 18035 | dim84 | NULL | -| 18035 | dim85 | NULL | -| 18035 | dim86 | NULL | -| 18035 | dim87 | NULL | -| 18035 | dim88 | NULL | -| 18035 | dim89 | NULL | -| 18035 | dim9 | NULL | -| 18035 | dim90 | NULL | -| 18035 | dim91 | NULL | -| 18035 | dim92 | NULL | -| 18035 | dim93 | NULL | -| 18035 | dim94 | NULL | -| 18035 | dim95 | NULL | -| 18035 | dim96 | NULL | -| 18035 | dim97 | NULL | -| 18035 | dim98 | NULL | -| 18035 | dim99 | NULL | -| 18035 | maxPrice | NULL | -| 18035 | measure0 | NULL | -| 18035 | measure1 | NULL | -| 18035 | measure10 | NULL | -| 18035 | measure11 | NULL | -| 18035 | measure12 | NULL | -| 18035 | measure13 | NULL | -| 18035 | measure14 | NULL | -| 18035 | measure15 | NULL | -| 18035 | measure16 | NULL | -| 18035 | measure17 | NULL | -| 18035 | measure18 | NULL | -| 18035 | measure19 | NULL | -| 18035 | measure2 | NULL | -| 18035 | measure20 | NULL | -| 18035 | measure21 | NULL | -| 18035 | measure22 | NULL | -| 18035 | measure23 | NULL | -| 18035 | measure24 | NULL | -| 18035 | measure25 | NULL | -| 18035 | measure26 | NULL | -| 18035 | measure27 | NULL | -| 18035 | measure28 | NULL | -| 18035 | measure29 | NULL | -| 18035 | measure3 | NULL | -| 18035 | measure30 | NULL | -| 18035 | measure31 | NULL | -| 18035 | measure32 | NULL | -| 18035 | measure33 | NULL | -| 18035 | measure34 | NULL | -| 18035 | measure35 | NULL | -| 18035 | measure36 | NULL | -| 18035 | measure37 | NULL | -| 18035 | measure38 | NULL | -| 18035 | measure39 | NULL | -| 18035 | measure4 | NULL | -| 18035 | measure40 | NULL | -| 18035 | measure41 | NULL | -| 18035 | measure42 | NULL | -| 18035 | measure43 | NULL | -| 18035 | measure44 | NULL | -| 18035 | measure45 | NULL | -| 18035 | measure46 | NULL | -| 18035 | measure47 | NULL | -| 18035 | measure48 | NULL | -| 18035 | measure49 | NULL | -| 18035 | measure5 | NULL | -| 18035 | measure50 | NULL | -| 18035 | measure51 | NULL | -| 18035 | measure52 | NULL | -| 18035 | measure53 | NULL | -| 18035 | measure54 | NULL | -| 18035 | measure55 | NULL | -| 18035 | measure56 | NULL | -| 18035 | measure57 | NULL | -| 18035 | measure58 | NULL | -| 18035 | measure59 | NULL | -| 18035 | measure6 | NULL | -| 18035 | measure60 | NULL | -| 18035 | measure61 | NULL | -| 18035 | measure62 | NULL | -| 18035 | measure63 | NULL | -| 18035 | measure64 | NULL | -| 18035 | measure65 | NULL | -| 18035 | measure66 | NULL | -| 18035 | measure67 | NULL | -| 18035 | measure68 | NULL | -| 18035 | measure69 | NULL | -| 18035 | measure7 | NULL | -| 18035 | measure70 | NULL | -| 18035 | measure71 | NULL | -| 18035 | measure72 | NULL | -| 18035 | measure73 | NULL | -| 18035 | measure74 | NULL | -| 18035 | measure75 | NULL | -| 18035 | measure76 | NULL | -| 18035 | measure77 | NULL | -| 18035 | measure78 | NULL | -| 18035 | measure79 | NULL | -| 18035 | measure8 | NULL | -| 18035 | measure80 | NULL | -| 18035 | measure81 | NULL | -| 18035 | measure82 | NULL | -| 18035 | measure83 | NULL | -| 18035 | measure84 | NULL | -| 18035 | measure85 | NULL | -| 18035 | measure86 | NULL | -| 18035 | measure87 | NULL | -| 18035 | measure88 | NULL | -| 18035 | measure89 | NULL | -| 18035 | measure9 | NULL | -| 18035 | measure90 | NULL | -| 18035 | measure91 | NULL | -| 18035 | measure92 | NULL | -| 18035 | measure93 | NULL | -| 18035 | measure94 | NULL | -| 18035 | measure95 | NULL | -| 18035 | measure96 | NULL | -| 18035 | measure97 | NULL | -| 18035 | measure98 | NULL | -| 18035 | measure99 | NULL | -| 18035 | minPrice | NULL | -| 18245 | __cubeJoinField | NULL | -| 18245 | __user | NULL | -| 18245 | avgPrice | NULL | -| 18245 | count | NULL | -| 18245 | countDistinct | NULL | -| 18245 | dim_date0 | NULL | -| 18245 | dim_date1 | NULL | -| 18245 | dim_date2 | NULL | -| 18245 | dim_date3 | NULL | -| 18245 | dim_date4 | NULL | -| 18245 | dim_date5 | NULL | -| 18245 | dim_date6 | NULL | -| 18245 | dim_date7 | NULL | -| 18245 | dim_date8 | NULL | -| 18245 | dim_date9 | NULL | -| 18245 | dim_num0 | NULL | -| 18245 | dim_num1 | NULL | -| 18245 | dim_num2 | NULL | -| 18245 | dim_num3 | NULL | -| 18245 | dim_num4 | NULL | -| 18245 | dim_num5 | NULL | -| 18245 | dim_num6 | NULL | -| 18245 | dim_num7 | NULL | -| 18245 | dim_num8 | NULL | -| 18245 | dim_num9 | NULL | -| 18245 | dim_str0 | NULL | -| 18245 | dim_str1 | NULL | -| 18245 | dim_str2 | NULL | -| 18245 | dim_str3 | NULL | -| 18245 | dim_str4 | NULL | -| 18245 | dim_str5 | NULL | -| 18245 | dim_str6 | NULL | -| 18245 | dim_str7 | NULL | -| 18245 | dim_str8 | NULL | -| 18245 | dim_str9 | NULL | -| 18245 | maxPrice | NULL | -| 18245 | measure_date0 | NULL | -| 18245 | measure_date1 | NULL | -| 18245 | measure_date2 | NULL | -| 18245 | measure_date3 | NULL | -| 18245 | measure_date4 | NULL | -| 18245 | measure_date5 | NULL | -| 18245 | measure_date6 | NULL | -| 18245 | measure_date7 | NULL | -| 18245 | measure_date8 | NULL | -| 18245 | measure_date9 | NULL | -| 18245 | measure_num0 | NULL | -| 18245 | measure_num1 | NULL | -| 18245 | measure_num2 | NULL | -| 18245 | measure_num3 | NULL | -| 18245 | measure_num4 | NULL | -| 18245 | measure_num5 | NULL | -| 18245 | measure_num6 | NULL | -| 18245 | measure_num7 | NULL | -| 18245 | measure_num8 | NULL | -| 18245 | measure_num9 | NULL | -| 18245 | measure_str0 | NULL | -| 18245 | measure_str1 | NULL | -| 18245 | measure_str2 | NULL | -| 18245 | measure_str3 | NULL | -| 18245 | measure_str4 | NULL | -| 18245 | measure_str5 | NULL | -| 18245 | measure_str6 | NULL | -| 18245 | measure_str7 | NULL | -| 18245 | measure_str8 | NULL | -| 18245 | measure_str9 | NULL | -| 18245 | minPrice | NULL | +| 18020 | __cubeJoinField | NULL | +| 18020 | __user | NULL | +| 18020 | agentCount | NULL | +| 18020 | agentCountApprox | NULL | +| 18020 | content | NULL | +| 18020 | id | NULL | +| 18020 | read | NULL | +| 18030 | __cubeJoinField | NULL | +| 18030 | __user | NULL | +| 18030 | someNumber | NULL | +| 18036 | __cubeJoinField | NULL | +| 18036 | __user | NULL | +| 18036 | avgPrice | NULL | +| 18036 | count | NULL | +| 18036 | countDistinct | NULL | +| 18036 | dim0 | NULL | +| 18036 | dim1 | NULL | +| 18036 | dim10 | NULL | +| 18036 | dim11 | NULL | +| 18036 | dim12 | NULL | +| 18036 | dim13 | NULL | +| 18036 | dim14 | NULL | +| 18036 | dim15 | NULL | +| 18036 | dim16 | NULL | +| 18036 | dim17 | NULL | +| 18036 | dim18 | NULL | +| 18036 | dim19 | NULL | +| 18036 | dim2 | NULL | +| 18036 | dim20 | NULL | +| 18036 | dim21 | NULL | +| 18036 | dim22 | NULL | +| 18036 | dim23 | NULL | +| 18036 | dim24 | NULL | +| 18036 | dim25 | NULL | +| 18036 | dim26 | NULL | +| 18036 | dim27 | NULL | +| 18036 | dim28 | NULL | +| 18036 | dim29 | NULL | +| 18036 | dim3 | NULL | +| 18036 | dim30 | NULL | +| 18036 | dim31 | NULL | +| 18036 | dim32 | NULL | +| 18036 | dim33 | NULL | +| 18036 | dim34 | NULL | +| 18036 | dim35 | NULL | +| 18036 | dim36 | NULL | +| 18036 | dim37 | NULL | +| 18036 | dim38 | NULL | +| 18036 | dim39 | NULL | +| 18036 | dim4 | NULL | +| 18036 | dim40 | NULL | +| 18036 | dim41 | NULL | +| 18036 | dim42 | NULL | +| 18036 | dim43 | NULL | +| 18036 | dim44 | NULL | +| 18036 | dim45 | NULL | +| 18036 | dim46 | NULL | +| 18036 | dim47 | NULL | +| 18036 | dim48 | NULL | +| 18036 | dim49 | NULL | +| 18036 | dim5 | NULL | +| 18036 | dim50 | NULL | +| 18036 | dim51 | NULL | +| 18036 | dim52 | NULL | +| 18036 | dim53 | NULL | +| 18036 | dim54 | NULL | +| 18036 | dim55 | NULL | +| 18036 | dim56 | NULL | +| 18036 | dim57 | NULL | +| 18036 | dim58 | NULL | +| 18036 | dim59 | NULL | +| 18036 | dim6 | NULL | +| 18036 | dim60 | NULL | +| 18036 | dim61 | NULL | +| 18036 | dim62 | NULL | +| 18036 | dim63 | NULL | +| 18036 | dim64 | NULL | +| 18036 | dim65 | NULL | +| 18036 | dim66 | NULL | +| 18036 | dim67 | NULL | +| 18036 | dim68 | NULL | +| 18036 | dim69 | NULL | +| 18036 | dim7 | NULL | +| 18036 | dim70 | NULL | +| 18036 | dim71 | NULL | +| 18036 | dim72 | NULL | +| 18036 | dim73 | NULL | +| 18036 | dim74 | NULL | +| 18036 | dim75 | NULL | +| 18036 | dim76 | NULL | +| 18036 | dim77 | NULL | +| 18036 | dim78 | NULL | +| 18036 | dim79 | NULL | +| 18036 | dim8 | NULL | +| 18036 | dim80 | NULL | +| 18036 | dim81 | NULL | +| 18036 | dim82 | NULL | +| 18036 | dim83 | NULL | +| 18036 | dim84 | NULL | +| 18036 | dim85 | NULL | +| 18036 | dim86 | NULL | +| 18036 | dim87 | NULL | +| 18036 | dim88 | NULL | +| 18036 | dim89 | NULL | +| 18036 | dim9 | NULL | +| 18036 | dim90 | NULL | +| 18036 | dim91 | NULL | +| 18036 | dim92 | NULL | +| 18036 | dim93 | NULL | +| 18036 | dim94 | NULL | +| 18036 | dim95 | NULL | +| 18036 | dim96 | NULL | +| 18036 | dim97 | NULL | +| 18036 | dim98 | NULL | +| 18036 | dim99 | NULL | +| 18036 | maxPrice | NULL | +| 18036 | measure0 | NULL | +| 18036 | measure1 | NULL | +| 18036 | measure10 | NULL | +| 18036 | measure11 | NULL | +| 18036 | measure12 | NULL | +| 18036 | measure13 | NULL | +| 18036 | measure14 | NULL | +| 18036 | measure15 | NULL | +| 18036 | measure16 | NULL | +| 18036 | measure17 | NULL | +| 18036 | measure18 | NULL | +| 18036 | measure19 | NULL | +| 18036 | measure2 | NULL | +| 18036 | measure20 | NULL | +| 18036 | measure21 | NULL | +| 18036 | measure22 | NULL | +| 18036 | measure23 | NULL | +| 18036 | measure24 | NULL | +| 18036 | measure25 | NULL | +| 18036 | measure26 | NULL | +| 18036 | measure27 | NULL | +| 18036 | measure28 | NULL | +| 18036 | measure29 | NULL | +| 18036 | measure3 | NULL | +| 18036 | measure30 | NULL | +| 18036 | measure31 | NULL | +| 18036 | measure32 | NULL | +| 18036 | measure33 | NULL | +| 18036 | measure34 | NULL | +| 18036 | measure35 | NULL | +| 18036 | measure36 | NULL | +| 18036 | measure37 | NULL | +| 18036 | measure38 | NULL | +| 18036 | measure39 | NULL | +| 18036 | measure4 | NULL | +| 18036 | measure40 | NULL | +| 18036 | measure41 | NULL | +| 18036 | measure42 | NULL | +| 18036 | measure43 | NULL | +| 18036 | measure44 | NULL | +| 18036 | measure45 | NULL | +| 18036 | measure46 | NULL | +| 18036 | measure47 | NULL | +| 18036 | measure48 | NULL | +| 18036 | measure49 | NULL | +| 18036 | measure5 | NULL | +| 18036 | measure50 | NULL | +| 18036 | measure51 | NULL | +| 18036 | measure52 | NULL | +| 18036 | measure53 | NULL | +| 18036 | measure54 | NULL | +| 18036 | measure55 | NULL | +| 18036 | measure56 | NULL | +| 18036 | measure57 | NULL | +| 18036 | measure58 | NULL | +| 18036 | measure59 | NULL | +| 18036 | measure6 | NULL | +| 18036 | measure60 | NULL | +| 18036 | measure61 | NULL | +| 18036 | measure62 | NULL | +| 18036 | measure63 | NULL | +| 18036 | measure64 | NULL | +| 18036 | measure65 | NULL | +| 18036 | measure66 | NULL | +| 18036 | measure67 | NULL | +| 18036 | measure68 | NULL | +| 18036 | measure69 | NULL | +| 18036 | measure7 | NULL | +| 18036 | measure70 | NULL | +| 18036 | measure71 | NULL | +| 18036 | measure72 | NULL | +| 18036 | measure73 | NULL | +| 18036 | measure74 | NULL | +| 18036 | measure75 | NULL | +| 18036 | measure76 | NULL | +| 18036 | measure77 | NULL | +| 18036 | measure78 | NULL | +| 18036 | measure79 | NULL | +| 18036 | measure8 | NULL | +| 18036 | measure80 | NULL | +| 18036 | measure81 | NULL | +| 18036 | measure82 | NULL | +| 18036 | measure83 | NULL | +| 18036 | measure84 | NULL | +| 18036 | measure85 | NULL | +| 18036 | measure86 | NULL | +| 18036 | measure87 | NULL | +| 18036 | measure88 | NULL | +| 18036 | measure89 | NULL | +| 18036 | measure9 | NULL | +| 18036 | measure90 | NULL | +| 18036 | measure91 | NULL | +| 18036 | measure92 | NULL | +| 18036 | measure93 | NULL | +| 18036 | measure94 | NULL | +| 18036 | measure95 | NULL | +| 18036 | measure96 | NULL | +| 18036 | measure97 | NULL | +| 18036 | measure98 | NULL | +| 18036 | measure99 | NULL | +| 18036 | minPrice | NULL | +| 18246 | __cubeJoinField | NULL | +| 18246 | __user | NULL | +| 18246 | avgPrice | NULL | +| 18246 | count | NULL | +| 18246 | countDistinct | NULL | +| 18246 | dim_date0 | NULL | +| 18246 | dim_date1 | NULL | +| 18246 | dim_date2 | NULL | +| 18246 | dim_date3 | NULL | +| 18246 | dim_date4 | NULL | +| 18246 | dim_date5 | NULL | +| 18246 | dim_date6 | NULL | +| 18246 | dim_date7 | NULL | +| 18246 | dim_date8 | NULL | +| 18246 | dim_date9 | NULL | +| 18246 | dim_num0 | NULL | +| 18246 | dim_num1 | NULL | +| 18246 | dim_num2 | NULL | +| 18246 | dim_num3 | NULL | +| 18246 | dim_num4 | NULL | +| 18246 | dim_num5 | NULL | +| 18246 | dim_num6 | NULL | +| 18246 | dim_num7 | NULL | +| 18246 | dim_num8 | NULL | +| 18246 | dim_num9 | NULL | +| 18246 | dim_str0 | NULL | +| 18246 | dim_str1 | NULL | +| 18246 | dim_str2 | NULL | +| 18246 | dim_str3 | NULL | +| 18246 | dim_str4 | NULL | +| 18246 | dim_str5 | NULL | +| 18246 | dim_str6 | NULL | +| 18246 | dim_str7 | NULL | +| 18246 | dim_str8 | NULL | +| 18246 | dim_str9 | NULL | +| 18246 | maxPrice | NULL | +| 18246 | measure_date0 | NULL | +| 18246 | measure_date1 | NULL | +| 18246 | measure_date2 | NULL | +| 18246 | measure_date3 | NULL | +| 18246 | measure_date4 | NULL | +| 18246 | measure_date5 | NULL | +| 18246 | measure_date6 | NULL | +| 18246 | measure_date7 | NULL | +| 18246 | measure_date8 | NULL | +| 18246 | measure_date9 | NULL | +| 18246 | measure_num0 | NULL | +| 18246 | measure_num1 | NULL | +| 18246 | measure_num2 | NULL | +| 18246 | measure_num3 | NULL | +| 18246 | measure_num4 | NULL | +| 18246 | measure_num5 | NULL | +| 18246 | measure_num6 | NULL | +| 18246 | measure_num7 | NULL | +| 18246 | measure_num8 | NULL | +| 18246 | measure_num9 | NULL | +| 18246 | measure_str0 | NULL | +| 18246 | measure_str1 | NULL | +| 18246 | measure_str2 | NULL | +| 18246 | measure_str3 | NULL | +| 18246 | measure_str4 | NULL | +| 18246 | measure_str5 | NULL | +| 18246 | measure_str6 | NULL | +| 18246 | measure_str7 | NULL | +| 18246 | measure_str8 | NULL | +| 18246 | measure_str9 | NULL | +| 18246 | minPrice | NULL | +----------+--------------------+---------+ diff --git a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__pg_truetypid_truetypmod.snap b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__pg_truetypid_truetypmod.snap index dc0396ac3648e..9aebeb3b88d4a 100644 --- a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__pg_truetypid_truetypmod.snap +++ b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__pg_truetypid_truetypmod.snap @@ -11,6 +11,7 @@ expression: "execute_query(\"\n SELECT\n a.att | 18000 | minPrice | numeric | 1700 | -1 | NULL | | 18000 | avgPrice | numeric | 1700 | -1 | NULL | | 18000 | countDistinct | int8 | 20 | -1 | 64 | +| 18000 | id | numeric | 1700 | -1 | NULL | | 18000 | order_date | timestamp | 1114 | -1 | NULL | | 18000 | last_mod | timestamp | 1114 | -1 | NULL | | 18000 | customer_gender | text | 25 | -1 | NULL | @@ -21,288 +22,288 @@ expression: "execute_query(\"\n SELECT\n a.att | 18000 | is_female | bool | 16 | -1 | NULL | | 18000 | __user | text | 25 | -1 | NULL | | 18000 | __cubeJoinField | text | 25 | -1 | NULL | -| 18019 | agentCount | int8 | 20 | -1 | 64 | -| 18019 | agentCountApprox | int8 | 20 | -1 | 64 | -| 18019 | id | numeric | 1700 | -1 | NULL | -| 18019 | read | bool | 16 | -1 | NULL | -| 18019 | content | text | 25 | -1 | NULL | -| 18019 | __user | text | 25 | -1 | NULL | -| 18019 | __cubeJoinField | text | 25 | -1 | NULL | -| 18029 | someNumber | numeric | 1700 | -1 | NULL | -| 18029 | __user | text | 25 | -1 | NULL | -| 18029 | __cubeJoinField | text | 25 | -1 | NULL | -| 18035 | measure0 | numeric | 1700 | -1 | NULL | -| 18035 | measure1 | numeric | 1700 | -1 | NULL | -| 18035 | measure2 | numeric | 1700 | -1 | NULL | -| 18035 | measure3 | numeric | 1700 | -1 | NULL | -| 18035 | measure4 | numeric | 1700 | -1 | NULL | -| 18035 | measure5 | numeric | 1700 | -1 | NULL | -| 18035 | measure6 | numeric | 1700 | -1 | NULL | -| 18035 | measure7 | numeric | 1700 | -1 | NULL | -| 18035 | measure8 | numeric | 1700 | -1 | NULL | -| 18035 | measure9 | numeric | 1700 | -1 | NULL | -| 18035 | measure10 | numeric | 1700 | -1 | NULL | -| 18035 | measure11 | numeric | 1700 | -1 | NULL | -| 18035 | measure12 | numeric | 1700 | -1 | NULL | -| 18035 | measure13 | numeric | 1700 | -1 | NULL | -| 18035 | measure14 | numeric | 1700 | -1 | NULL | -| 18035 | measure15 | numeric | 1700 | -1 | NULL | -| 18035 | measure16 | numeric | 1700 | -1 | NULL | -| 18035 | measure17 | numeric | 1700 | -1 | NULL | -| 18035 | measure18 | numeric | 1700 | -1 | NULL | -| 18035 | measure19 | numeric | 1700 | -1 | NULL | -| 18035 | measure20 | numeric | 1700 | -1 | NULL | -| 18035 | measure21 | numeric | 1700 | -1 | NULL | -| 18035 | measure22 | numeric | 1700 | -1 | NULL | -| 18035 | measure23 | numeric | 1700 | -1 | NULL | -| 18035 | measure24 | numeric | 1700 | -1 | NULL | -| 18035 | measure25 | numeric | 1700 | -1 | NULL | -| 18035 | measure26 | numeric | 1700 | -1 | NULL | -| 18035 | measure27 | numeric | 1700 | -1 | NULL | -| 18035 | measure28 | numeric | 1700 | -1 | NULL | -| 18035 | measure29 | numeric | 1700 | -1 | NULL | -| 18035 | measure30 | numeric | 1700 | -1 | NULL | -| 18035 | measure31 | numeric | 1700 | -1 | NULL | -| 18035 | measure32 | numeric | 1700 | -1 | NULL | -| 18035 | measure33 | numeric | 1700 | -1 | NULL | -| 18035 | measure34 | numeric | 1700 | -1 | NULL | -| 18035 | measure35 | numeric | 1700 | -1 | NULL | -| 18035 | measure36 | numeric | 1700 | -1 | NULL | -| 18035 | measure37 | numeric | 1700 | -1 | NULL | -| 18035 | measure38 | numeric | 1700 | -1 | NULL | -| 18035 | measure39 | numeric | 1700 | -1 | NULL | -| 18035 | measure40 | numeric | 1700 | -1 | NULL | -| 18035 | measure41 | numeric | 1700 | -1 | NULL | -| 18035 | measure42 | numeric | 1700 | -1 | NULL | -| 18035 | measure43 | numeric | 1700 | -1 | NULL | -| 18035 | measure44 | numeric | 1700 | -1 | NULL | -| 18035 | measure45 | numeric | 1700 | -1 | NULL | -| 18035 | measure46 | numeric | 1700 | -1 | NULL | -| 18035 | measure47 | numeric | 1700 | -1 | NULL | -| 18035 | measure48 | numeric | 1700 | -1 | NULL | -| 18035 | measure49 | numeric | 1700 | -1 | NULL | -| 18035 | measure50 | numeric | 1700 | -1 | NULL | -| 18035 | measure51 | numeric | 1700 | -1 | NULL | -| 18035 | measure52 | numeric | 1700 | -1 | NULL | -| 18035 | measure53 | numeric | 1700 | -1 | NULL | -| 18035 | measure54 | numeric | 1700 | -1 | NULL | -| 18035 | measure55 | numeric | 1700 | -1 | NULL | -| 18035 | measure56 | numeric | 1700 | -1 | NULL | -| 18035 | measure57 | numeric | 1700 | -1 | NULL | -| 18035 | measure58 | numeric | 1700 | -1 | NULL | -| 18035 | measure59 | numeric | 1700 | -1 | NULL | -| 18035 | measure60 | numeric | 1700 | -1 | NULL | -| 18035 | measure61 | numeric | 1700 | -1 | NULL | -| 18035 | measure62 | numeric | 1700 | -1 | NULL | -| 18035 | measure63 | numeric | 1700 | -1 | NULL | -| 18035 | measure64 | numeric | 1700 | -1 | NULL | -| 18035 | measure65 | numeric | 1700 | -1 | NULL | -| 18035 | measure66 | numeric | 1700 | -1 | NULL | -| 18035 | measure67 | numeric | 1700 | -1 | NULL | -| 18035 | measure68 | numeric | 1700 | -1 | NULL | -| 18035 | measure69 | numeric | 1700 | -1 | NULL | -| 18035 | measure70 | numeric | 1700 | -1 | NULL | -| 18035 | measure71 | numeric | 1700 | -1 | NULL | -| 18035 | measure72 | numeric | 1700 | -1 | NULL | -| 18035 | measure73 | numeric | 1700 | -1 | NULL | -| 18035 | measure74 | numeric | 1700 | -1 | NULL | -| 18035 | measure75 | numeric | 1700 | -1 | NULL | -| 18035 | measure76 | numeric | 1700 | -1 | NULL | -| 18035 | measure77 | numeric | 1700 | -1 | NULL | -| 18035 | measure78 | numeric | 1700 | -1 | NULL | -| 18035 | measure79 | numeric | 1700 | -1 | NULL | -| 18035 | measure80 | numeric | 1700 | -1 | NULL | -| 18035 | measure81 | numeric | 1700 | -1 | NULL | -| 18035 | measure82 | numeric | 1700 | -1 | NULL | -| 18035 | measure83 | numeric | 1700 | -1 | NULL | -| 18035 | measure84 | numeric | 1700 | -1 | NULL | -| 18035 | measure85 | numeric | 1700 | -1 | NULL | -| 18035 | measure86 | numeric | 1700 | -1 | NULL | -| 18035 | measure87 | numeric | 1700 | -1 | NULL | -| 18035 | measure88 | numeric | 1700 | -1 | NULL | -| 18035 | measure89 | numeric | 1700 | -1 | NULL | -| 18035 | measure90 | numeric | 1700 | -1 | NULL | -| 18035 | measure91 | numeric | 1700 | -1 | NULL | -| 18035 | measure92 | numeric | 1700 | -1 | NULL | -| 18035 | measure93 | numeric | 1700 | -1 | NULL | -| 18035 | measure94 | numeric | 1700 | -1 | NULL | -| 18035 | measure95 | numeric | 1700 | -1 | NULL | -| 18035 | measure96 | numeric | 1700 | -1 | NULL | -| 18035 | measure97 | numeric | 1700 | -1 | NULL | -| 18035 | measure98 | numeric | 1700 | -1 | NULL | -| 18035 | measure99 | numeric | 1700 | -1 | NULL | -| 18035 | count | int8 | 20 | -1 | 64 | -| 18035 | maxPrice | numeric | 1700 | -1 | NULL | -| 18035 | minPrice | numeric | 1700 | -1 | NULL | -| 18035 | avgPrice | numeric | 1700 | -1 | NULL | -| 18035 | countDistinct | int8 | 20 | -1 | 64 | -| 18035 | dim0 | numeric | 1700 | -1 | NULL | -| 18035 | dim1 | numeric | 1700 | -1 | NULL | -| 18035 | dim2 | numeric | 1700 | -1 | NULL | -| 18035 | dim3 | numeric | 1700 | -1 | NULL | -| 18035 | dim4 | numeric | 1700 | -1 | NULL | -| 18035 | dim5 | numeric | 1700 | -1 | NULL | -| 18035 | dim6 | numeric | 1700 | -1 | NULL | -| 18035 | dim7 | numeric | 1700 | -1 | NULL | -| 18035 | dim8 | numeric | 1700 | -1 | NULL | -| 18035 | dim9 | numeric | 1700 | -1 | NULL | -| 18035 | dim10 | numeric | 1700 | -1 | NULL | -| 18035 | dim11 | numeric | 1700 | -1 | NULL | -| 18035 | dim12 | numeric | 1700 | -1 | NULL | -| 18035 | dim13 | numeric | 1700 | -1 | NULL | -| 18035 | dim14 | numeric | 1700 | -1 | NULL | -| 18035 | dim15 | numeric | 1700 | -1 | NULL | -| 18035 | dim16 | numeric | 1700 | -1 | NULL | -| 18035 | dim17 | numeric | 1700 | -1 | NULL | -| 18035 | dim18 | numeric | 1700 | -1 | NULL | -| 18035 | dim19 | numeric | 1700 | -1 | NULL | -| 18035 | dim20 | numeric | 1700 | -1 | NULL | -| 18035 | dim21 | numeric | 1700 | -1 | NULL | -| 18035 | dim22 | numeric | 1700 | -1 | NULL | -| 18035 | dim23 | numeric | 1700 | -1 | NULL | -| 18035 | dim24 | numeric | 1700 | -1 | NULL | -| 18035 | dim25 | numeric | 1700 | -1 | NULL | -| 18035 | dim26 | numeric | 1700 | -1 | NULL | -| 18035 | dim27 | numeric | 1700 | -1 | NULL | -| 18035 | dim28 | numeric | 1700 | -1 | NULL | -| 18035 | dim29 | numeric | 1700 | -1 | NULL | -| 18035 | dim30 | numeric | 1700 | -1 | NULL | -| 18035 | dim31 | numeric | 1700 | -1 | NULL | -| 18035 | dim32 | numeric | 1700 | -1 | NULL | -| 18035 | dim33 | numeric | 1700 | -1 | NULL | -| 18035 | dim34 | numeric | 1700 | -1 | NULL | -| 18035 | dim35 | numeric | 1700 | -1 | NULL | -| 18035 | dim36 | numeric | 1700 | -1 | NULL | -| 18035 | dim37 | numeric | 1700 | -1 | NULL | -| 18035 | dim38 | numeric | 1700 | -1 | NULL | -| 18035 | dim39 | numeric | 1700 | -1 | NULL | -| 18035 | dim40 | numeric | 1700 | -1 | NULL | -| 18035 | dim41 | numeric | 1700 | -1 | NULL | -| 18035 | dim42 | numeric | 1700 | -1 | NULL | -| 18035 | dim43 | numeric | 1700 | -1 | NULL | -| 18035 | dim44 | numeric | 1700 | -1 | NULL | -| 18035 | dim45 | numeric | 1700 | -1 | NULL | -| 18035 | dim46 | numeric | 1700 | -1 | NULL | -| 18035 | dim47 | numeric | 1700 | -1 | NULL | -| 18035 | dim48 | numeric | 1700 | -1 | NULL | -| 18035 | dim49 | numeric | 1700 | -1 | NULL | -| 18035 | dim50 | numeric | 1700 | -1 | NULL | -| 18035 | dim51 | numeric | 1700 | -1 | NULL | -| 18035 | dim52 | numeric | 1700 | -1 | NULL | -| 18035 | dim53 | numeric | 1700 | -1 | NULL | -| 18035 | dim54 | numeric | 1700 | -1 | NULL | -| 18035 | dim55 | numeric | 1700 | -1 | NULL | -| 18035 | dim56 | numeric | 1700 | -1 | NULL | -| 18035 | dim57 | numeric | 1700 | -1 | NULL | -| 18035 | dim58 | numeric | 1700 | -1 | NULL | -| 18035 | dim59 | numeric | 1700 | -1 | NULL | -| 18035 | dim60 | numeric | 1700 | -1 | NULL | -| 18035 | dim61 | numeric | 1700 | -1 | NULL | -| 18035 | dim62 | numeric | 1700 | -1 | NULL | -| 18035 | dim63 | numeric | 1700 | -1 | NULL | -| 18035 | dim64 | numeric | 1700 | -1 | NULL | -| 18035 | dim65 | numeric | 1700 | -1 | NULL | -| 18035 | dim66 | numeric | 1700 | -1 | NULL | -| 18035 | dim67 | numeric | 1700 | -1 | NULL | -| 18035 | dim68 | numeric | 1700 | -1 | NULL | -| 18035 | dim69 | numeric | 1700 | -1 | NULL | -| 18035 | dim70 | numeric | 1700 | -1 | NULL | -| 18035 | dim71 | numeric | 1700 | -1 | NULL | -| 18035 | dim72 | numeric | 1700 | -1 | NULL | -| 18035 | dim73 | numeric | 1700 | -1 | NULL | -| 18035 | dim74 | numeric | 1700 | -1 | NULL | -| 18035 | dim75 | numeric | 1700 | -1 | NULL | -| 18035 | dim76 | numeric | 1700 | -1 | NULL | -| 18035 | dim77 | numeric | 1700 | -1 | NULL | -| 18035 | dim78 | numeric | 1700 | -1 | NULL | -| 18035 | dim79 | numeric | 1700 | -1 | NULL | -| 18035 | dim80 | numeric | 1700 | -1 | NULL | -| 18035 | dim81 | numeric | 1700 | -1 | NULL | -| 18035 | dim82 | numeric | 1700 | -1 | NULL | -| 18035 | dim83 | numeric | 1700 | -1 | NULL | -| 18035 | dim84 | numeric | 1700 | -1 | NULL | -| 18035 | dim85 | numeric | 1700 | -1 | NULL | -| 18035 | dim86 | numeric | 1700 | -1 | NULL | -| 18035 | dim87 | numeric | 1700 | -1 | NULL | -| 18035 | dim88 | numeric | 1700 | -1 | NULL | -| 18035 | dim89 | numeric | 1700 | -1 | NULL | -| 18035 | dim90 | numeric | 1700 | -1 | NULL | -| 18035 | dim91 | numeric | 1700 | -1 | NULL | -| 18035 | dim92 | numeric | 1700 | -1 | NULL | -| 18035 | dim93 | numeric | 1700 | -1 | NULL | -| 18035 | dim94 | numeric | 1700 | -1 | NULL | -| 18035 | dim95 | numeric | 1700 | -1 | NULL | -| 18035 | dim96 | numeric | 1700 | -1 | NULL | -| 18035 | dim97 | numeric | 1700 | -1 | NULL | -| 18035 | dim98 | numeric | 1700 | -1 | NULL | -| 18035 | dim99 | numeric | 1700 | -1 | NULL | -| 18035 | __user | text | 25 | -1 | NULL | -| 18035 | __cubeJoinField | text | 25 | -1 | NULL | -| 18245 | measure_num0 | numeric | 1700 | -1 | NULL | -| 18245 | measure_str0 | numeric | 1700 | -1 | NULL | -| 18245 | measure_date0 | numeric | 1700 | -1 | NULL | -| 18245 | measure_num1 | numeric | 1700 | -1 | NULL | -| 18245 | measure_str1 | numeric | 1700 | -1 | NULL | -| 18245 | measure_date1 | numeric | 1700 | -1 | NULL | -| 18245 | measure_num2 | numeric | 1700 | -1 | NULL | -| 18245 | measure_str2 | numeric | 1700 | -1 | NULL | -| 18245 | measure_date2 | numeric | 1700 | -1 | NULL | -| 18245 | measure_num3 | numeric | 1700 | -1 | NULL | -| 18245 | measure_str3 | numeric | 1700 | -1 | NULL | -| 18245 | measure_date3 | numeric | 1700 | -1 | NULL | -| 18245 | measure_num4 | numeric | 1700 | -1 | NULL | -| 18245 | measure_str4 | numeric | 1700 | -1 | NULL | -| 18245 | measure_date4 | numeric | 1700 | -1 | NULL | -| 18245 | measure_num5 | numeric | 1700 | -1 | NULL | -| 18245 | measure_str5 | numeric | 1700 | -1 | NULL | -| 18245 | measure_date5 | numeric | 1700 | -1 | NULL | -| 18245 | measure_num6 | numeric | 1700 | -1 | NULL | -| 18245 | measure_str6 | numeric | 1700 | -1 | NULL | -| 18245 | measure_date6 | numeric | 1700 | -1 | NULL | -| 18245 | measure_num7 | numeric | 1700 | -1 | NULL | -| 18245 | measure_str7 | numeric | 1700 | -1 | NULL | -| 18245 | measure_date7 | numeric | 1700 | -1 | NULL | -| 18245 | measure_num8 | numeric | 1700 | -1 | NULL | -| 18245 | measure_str8 | numeric | 1700 | -1 | NULL | -| 18245 | measure_date8 | numeric | 1700 | -1 | NULL | -| 18245 | measure_num9 | numeric | 1700 | -1 | NULL | -| 18245 | measure_str9 | numeric | 1700 | -1 | NULL | -| 18245 | measure_date9 | numeric | 1700 | -1 | NULL | -| 18245 | count | int8 | 20 | -1 | 64 | -| 18245 | maxPrice | numeric | 1700 | -1 | NULL | -| 18245 | minPrice | numeric | 1700 | -1 | NULL | -| 18245 | avgPrice | numeric | 1700 | -1 | NULL | -| 18245 | countDistinct | int8 | 20 | -1 | 64 | -| 18245 | dim_num0 | numeric | 1700 | -1 | NULL | -| 18245 | dim_str0 | text | 25 | -1 | NULL | -| 18245 | dim_date0 | timestamp | 1114 | -1 | NULL | -| 18245 | dim_num1 | numeric | 1700 | -1 | NULL | -| 18245 | dim_str1 | text | 25 | -1 | NULL | -| 18245 | dim_date1 | timestamp | 1114 | -1 | NULL | -| 18245 | dim_num2 | numeric | 1700 | -1 | NULL | -| 18245 | dim_str2 | text | 25 | -1 | NULL | -| 18245 | dim_date2 | timestamp | 1114 | -1 | NULL | -| 18245 | dim_num3 | numeric | 1700 | -1 | NULL | -| 18245 | dim_str3 | text | 25 | -1 | NULL | -| 18245 | dim_date3 | timestamp | 1114 | -1 | NULL | -| 18245 | dim_num4 | numeric | 1700 | -1 | NULL | -| 18245 | dim_str4 | text | 25 | -1 | NULL | -| 18245 | dim_date4 | timestamp | 1114 | -1 | NULL | -| 18245 | dim_num5 | numeric | 1700 | -1 | NULL | -| 18245 | dim_str5 | text | 25 | -1 | NULL | -| 18245 | dim_date5 | timestamp | 1114 | -1 | NULL | -| 18245 | dim_num6 | numeric | 1700 | -1 | NULL | -| 18245 | dim_str6 | text | 25 | -1 | NULL | -| 18245 | dim_date6 | timestamp | 1114 | -1 | NULL | -| 18245 | dim_num7 | numeric | 1700 | -1 | NULL | -| 18245 | dim_str7 | text | 25 | -1 | NULL | -| 18245 | dim_date7 | timestamp | 1114 | -1 | NULL | -| 18245 | dim_num8 | numeric | 1700 | -1 | NULL | -| 18245 | dim_str8 | text | 25 | -1 | NULL | -| 18245 | dim_date8 | timestamp | 1114 | -1 | NULL | -| 18245 | dim_num9 | numeric | 1700 | -1 | NULL | -| 18245 | dim_str9 | text | 25 | -1 | NULL | -| 18245 | dim_date9 | timestamp | 1114 | -1 | NULL | -| 18245 | __user | text | 25 | -1 | NULL | -| 18245 | __cubeJoinField | text | 25 | -1 | NULL | +| 18020 | agentCount | int8 | 20 | -1 | 64 | +| 18020 | agentCountApprox | int8 | 20 | -1 | 64 | +| 18020 | id | numeric | 1700 | -1 | NULL | +| 18020 | read | bool | 16 | -1 | NULL | +| 18020 | content | text | 25 | -1 | NULL | +| 18020 | __user | text | 25 | -1 | NULL | +| 18020 | __cubeJoinField | text | 25 | -1 | NULL | +| 18030 | someNumber | numeric | 1700 | -1 | NULL | +| 18030 | __user | text | 25 | -1 | NULL | +| 18030 | __cubeJoinField | text | 25 | -1 | NULL | +| 18036 | measure0 | numeric | 1700 | -1 | NULL | +| 18036 | measure1 | numeric | 1700 | -1 | NULL | +| 18036 | measure2 | numeric | 1700 | -1 | NULL | +| 18036 | measure3 | numeric | 1700 | -1 | NULL | +| 18036 | measure4 | numeric | 1700 | -1 | NULL | +| 18036 | measure5 | numeric | 1700 | -1 | NULL | +| 18036 | measure6 | numeric | 1700 | -1 | NULL | +| 18036 | measure7 | numeric | 1700 | -1 | NULL | +| 18036 | measure8 | numeric | 1700 | -1 | NULL | +| 18036 | measure9 | numeric | 1700 | -1 | NULL | +| 18036 | measure10 | numeric | 1700 | -1 | NULL | +| 18036 | measure11 | numeric | 1700 | -1 | NULL | +| 18036 | measure12 | numeric | 1700 | -1 | NULL | +| 18036 | measure13 | numeric | 1700 | -1 | NULL | +| 18036 | measure14 | numeric | 1700 | -1 | NULL | +| 18036 | measure15 | numeric | 1700 | -1 | NULL | +| 18036 | measure16 | numeric | 1700 | -1 | NULL | +| 18036 | measure17 | numeric | 1700 | -1 | NULL | +| 18036 | measure18 | numeric | 1700 | -1 | NULL | +| 18036 | measure19 | numeric | 1700 | -1 | NULL | +| 18036 | measure20 | numeric | 1700 | -1 | NULL | +| 18036 | measure21 | numeric | 1700 | -1 | NULL | +| 18036 | measure22 | numeric | 1700 | -1 | NULL | +| 18036 | measure23 | numeric | 1700 | -1 | NULL | +| 18036 | measure24 | numeric | 1700 | -1 | NULL | +| 18036 | measure25 | numeric | 1700 | -1 | NULL | +| 18036 | measure26 | numeric | 1700 | -1 | NULL | +| 18036 | measure27 | numeric | 1700 | -1 | NULL | +| 18036 | measure28 | numeric | 1700 | -1 | NULL | +| 18036 | measure29 | numeric | 1700 | -1 | NULL | +| 18036 | measure30 | numeric | 1700 | -1 | NULL | +| 18036 | measure31 | numeric | 1700 | -1 | NULL | +| 18036 | measure32 | numeric | 1700 | -1 | NULL | +| 18036 | measure33 | numeric | 1700 | -1 | NULL | +| 18036 | measure34 | numeric | 1700 | -1 | NULL | +| 18036 | measure35 | numeric | 1700 | -1 | NULL | +| 18036 | measure36 | numeric | 1700 | -1 | NULL | +| 18036 | measure37 | numeric | 1700 | -1 | NULL | +| 18036 | measure38 | numeric | 1700 | -1 | NULL | +| 18036 | measure39 | numeric | 1700 | -1 | NULL | +| 18036 | measure40 | numeric | 1700 | -1 | NULL | +| 18036 | measure41 | numeric | 1700 | -1 | NULL | +| 18036 | measure42 | numeric | 1700 | -1 | NULL | +| 18036 | measure43 | numeric | 1700 | -1 | NULL | +| 18036 | measure44 | numeric | 1700 | -1 | NULL | +| 18036 | measure45 | numeric | 1700 | -1 | NULL | +| 18036 | measure46 | numeric | 1700 | -1 | NULL | +| 18036 | measure47 | numeric | 1700 | -1 | NULL | +| 18036 | measure48 | numeric | 1700 | -1 | NULL | +| 18036 | measure49 | numeric | 1700 | -1 | NULL | +| 18036 | measure50 | numeric | 1700 | -1 | NULL | +| 18036 | measure51 | numeric | 1700 | -1 | NULL | +| 18036 | measure52 | numeric | 1700 | -1 | NULL | +| 18036 | measure53 | numeric | 1700 | -1 | NULL | +| 18036 | measure54 | numeric | 1700 | -1 | NULL | +| 18036 | measure55 | numeric | 1700 | -1 | NULL | +| 18036 | measure56 | numeric | 1700 | -1 | NULL | +| 18036 | measure57 | numeric | 1700 | -1 | NULL | +| 18036 | measure58 | numeric | 1700 | -1 | NULL | +| 18036 | measure59 | numeric | 1700 | -1 | NULL | +| 18036 | measure60 | numeric | 1700 | -1 | NULL | +| 18036 | measure61 | numeric | 1700 | -1 | NULL | +| 18036 | measure62 | numeric | 1700 | -1 | NULL | +| 18036 | measure63 | numeric | 1700 | -1 | NULL | +| 18036 | measure64 | numeric | 1700 | -1 | NULL | +| 18036 | measure65 | numeric | 1700 | -1 | NULL | +| 18036 | measure66 | numeric | 1700 | -1 | NULL | +| 18036 | measure67 | numeric | 1700 | -1 | NULL | +| 18036 | measure68 | numeric | 1700 | -1 | NULL | +| 18036 | measure69 | numeric | 1700 | -1 | NULL | +| 18036 | measure70 | numeric | 1700 | -1 | NULL | +| 18036 | measure71 | numeric | 1700 | -1 | NULL | +| 18036 | measure72 | numeric | 1700 | -1 | NULL | +| 18036 | measure73 | numeric | 1700 | -1 | NULL | +| 18036 | measure74 | numeric | 1700 | -1 | NULL | +| 18036 | measure75 | numeric | 1700 | -1 | NULL | +| 18036 | measure76 | numeric | 1700 | -1 | NULL | +| 18036 | measure77 | numeric | 1700 | -1 | NULL | +| 18036 | measure78 | numeric | 1700 | -1 | NULL | +| 18036 | measure79 | numeric | 1700 | -1 | NULL | +| 18036 | measure80 | numeric | 1700 | -1 | NULL | +| 18036 | measure81 | numeric | 1700 | -1 | NULL | +| 18036 | measure82 | numeric | 1700 | -1 | NULL | +| 18036 | measure83 | numeric | 1700 | -1 | NULL | +| 18036 | measure84 | numeric | 1700 | -1 | NULL | +| 18036 | measure85 | numeric | 1700 | -1 | NULL | +| 18036 | measure86 | numeric | 1700 | -1 | NULL | +| 18036 | measure87 | numeric | 1700 | -1 | NULL | +| 18036 | measure88 | numeric | 1700 | -1 | NULL | +| 18036 | measure89 | numeric | 1700 | -1 | NULL | +| 18036 | measure90 | numeric | 1700 | -1 | NULL | +| 18036 | measure91 | numeric | 1700 | -1 | NULL | +| 18036 | measure92 | numeric | 1700 | -1 | NULL | +| 18036 | measure93 | numeric | 1700 | -1 | NULL | +| 18036 | measure94 | numeric | 1700 | -1 | NULL | +| 18036 | measure95 | numeric | 1700 | -1 | NULL | +| 18036 | measure96 | numeric | 1700 | -1 | NULL | +| 18036 | measure97 | numeric | 1700 | -1 | NULL | +| 18036 | measure98 | numeric | 1700 | -1 | NULL | +| 18036 | measure99 | numeric | 1700 | -1 | NULL | +| 18036 | count | int8 | 20 | -1 | 64 | +| 18036 | maxPrice | numeric | 1700 | -1 | NULL | +| 18036 | minPrice | numeric | 1700 | -1 | NULL | +| 18036 | avgPrice | numeric | 1700 | -1 | NULL | +| 18036 | countDistinct | int8 | 20 | -1 | 64 | +| 18036 | dim0 | numeric | 1700 | -1 | NULL | +| 18036 | dim1 | numeric | 1700 | -1 | NULL | +| 18036 | dim2 | numeric | 1700 | -1 | NULL | +| 18036 | dim3 | numeric | 1700 | -1 | NULL | +| 18036 | dim4 | numeric | 1700 | -1 | NULL | +| 18036 | dim5 | numeric | 1700 | -1 | NULL | +| 18036 | dim6 | numeric | 1700 | -1 | NULL | +| 18036 | dim7 | numeric | 1700 | -1 | NULL | +| 18036 | dim8 | numeric | 1700 | -1 | NULL | +| 18036 | dim9 | numeric | 1700 | -1 | NULL | +| 18036 | dim10 | numeric | 1700 | -1 | NULL | +| 18036 | dim11 | numeric | 1700 | -1 | NULL | +| 18036 | dim12 | numeric | 1700 | -1 | NULL | +| 18036 | dim13 | numeric | 1700 | -1 | NULL | +| 18036 | dim14 | numeric | 1700 | -1 | NULL | +| 18036 | dim15 | numeric | 1700 | -1 | NULL | +| 18036 | dim16 | numeric | 1700 | -1 | NULL | +| 18036 | dim17 | numeric | 1700 | -1 | NULL | +| 18036 | dim18 | numeric | 1700 | -1 | NULL | +| 18036 | dim19 | numeric | 1700 | -1 | NULL | +| 18036 | dim20 | numeric | 1700 | -1 | NULL | +| 18036 | dim21 | numeric | 1700 | -1 | NULL | +| 18036 | dim22 | numeric | 1700 | -1 | NULL | +| 18036 | dim23 | numeric | 1700 | -1 | NULL | +| 18036 | dim24 | numeric | 1700 | -1 | NULL | +| 18036 | dim25 | numeric | 1700 | -1 | NULL | +| 18036 | dim26 | numeric | 1700 | -1 | NULL | +| 18036 | dim27 | numeric | 1700 | -1 | NULL | +| 18036 | dim28 | numeric | 1700 | -1 | NULL | +| 18036 | dim29 | numeric | 1700 | -1 | NULL | +| 18036 | dim30 | numeric | 1700 | -1 | NULL | +| 18036 | dim31 | numeric | 1700 | -1 | NULL | +| 18036 | dim32 | numeric | 1700 | -1 | NULL | +| 18036 | dim33 | numeric | 1700 | -1 | NULL | +| 18036 | dim34 | numeric | 1700 | -1 | NULL | +| 18036 | dim35 | numeric | 1700 | -1 | NULL | +| 18036 | dim36 | numeric | 1700 | -1 | NULL | +| 18036 | dim37 | numeric | 1700 | -1 | NULL | +| 18036 | dim38 | numeric | 1700 | -1 | NULL | +| 18036 | dim39 | numeric | 1700 | -1 | NULL | +| 18036 | dim40 | numeric | 1700 | -1 | NULL | +| 18036 | dim41 | numeric | 1700 | -1 | NULL | +| 18036 | dim42 | numeric | 1700 | -1 | NULL | +| 18036 | dim43 | numeric | 1700 | -1 | NULL | +| 18036 | dim44 | numeric | 1700 | -1 | NULL | +| 18036 | dim45 | numeric | 1700 | -1 | NULL | +| 18036 | dim46 | numeric | 1700 | -1 | NULL | +| 18036 | dim47 | numeric | 1700 | -1 | NULL | +| 18036 | dim48 | numeric | 1700 | -1 | NULL | +| 18036 | dim49 | numeric | 1700 | -1 | NULL | +| 18036 | dim50 | numeric | 1700 | -1 | NULL | +| 18036 | dim51 | numeric | 1700 | -1 | NULL | +| 18036 | dim52 | numeric | 1700 | -1 | NULL | +| 18036 | dim53 | numeric | 1700 | -1 | NULL | +| 18036 | dim54 | numeric | 1700 | -1 | NULL | +| 18036 | dim55 | numeric | 1700 | -1 | NULL | +| 18036 | dim56 | numeric | 1700 | -1 | NULL | +| 18036 | dim57 | numeric | 1700 | -1 | NULL | +| 18036 | dim58 | numeric | 1700 | -1 | NULL | +| 18036 | dim59 | numeric | 1700 | -1 | NULL | +| 18036 | dim60 | numeric | 1700 | -1 | NULL | +| 18036 | dim61 | numeric | 1700 | -1 | NULL | +| 18036 | dim62 | numeric | 1700 | -1 | NULL | +| 18036 | dim63 | numeric | 1700 | -1 | NULL | +| 18036 | dim64 | numeric | 1700 | -1 | NULL | +| 18036 | dim65 | numeric | 1700 | -1 | NULL | +| 18036 | dim66 | numeric | 1700 | -1 | NULL | +| 18036 | dim67 | numeric | 1700 | -1 | NULL | +| 18036 | dim68 | numeric | 1700 | -1 | NULL | +| 18036 | dim69 | numeric | 1700 | -1 | NULL | +| 18036 | dim70 | numeric | 1700 | -1 | NULL | +| 18036 | dim71 | numeric | 1700 | -1 | NULL | +| 18036 | dim72 | numeric | 1700 | -1 | NULL | +| 18036 | dim73 | numeric | 1700 | -1 | NULL | +| 18036 | dim74 | numeric | 1700 | -1 | NULL | +| 18036 | dim75 | numeric | 1700 | -1 | NULL | +| 18036 | dim76 | numeric | 1700 | -1 | NULL | +| 18036 | dim77 | numeric | 1700 | -1 | NULL | +| 18036 | dim78 | numeric | 1700 | -1 | NULL | +| 18036 | dim79 | numeric | 1700 | -1 | NULL | +| 18036 | dim80 | numeric | 1700 | -1 | NULL | +| 18036 | dim81 | numeric | 1700 | -1 | NULL | +| 18036 | dim82 | numeric | 1700 | -1 | NULL | +| 18036 | dim83 | numeric | 1700 | -1 | NULL | +| 18036 | dim84 | numeric | 1700 | -1 | NULL | +| 18036 | dim85 | numeric | 1700 | -1 | NULL | +| 18036 | dim86 | numeric | 1700 | -1 | NULL | +| 18036 | dim87 | numeric | 1700 | -1 | NULL | +| 18036 | dim88 | numeric | 1700 | -1 | NULL | +| 18036 | dim89 | numeric | 1700 | -1 | NULL | +| 18036 | dim90 | numeric | 1700 | -1 | NULL | +| 18036 | dim91 | numeric | 1700 | -1 | NULL | +| 18036 | dim92 | numeric | 1700 | -1 | NULL | +| 18036 | dim93 | numeric | 1700 | -1 | NULL | +| 18036 | dim94 | numeric | 1700 | -1 | NULL | +| 18036 | dim95 | numeric | 1700 | -1 | NULL | +| 18036 | dim96 | numeric | 1700 | -1 | NULL | +| 18036 | dim97 | numeric | 1700 | -1 | NULL | +| 18036 | dim98 | numeric | 1700 | -1 | NULL | +| 18036 | dim99 | numeric | 1700 | -1 | NULL | +| 18036 | __user | text | 25 | -1 | NULL | +| 18036 | __cubeJoinField | text | 25 | -1 | NULL | +| 18246 | measure_num0 | numeric | 1700 | -1 | NULL | +| 18246 | measure_str0 | numeric | 1700 | -1 | NULL | +| 18246 | measure_date0 | numeric | 1700 | -1 | NULL | +| 18246 | measure_num1 | numeric | 1700 | -1 | NULL | +| 18246 | measure_str1 | numeric | 1700 | -1 | NULL | +| 18246 | measure_date1 | numeric | 1700 | -1 | NULL | +| 18246 | measure_num2 | numeric | 1700 | -1 | NULL | +| 18246 | measure_str2 | numeric | 1700 | -1 | NULL | +| 18246 | measure_date2 | numeric | 1700 | -1 | NULL | +| 18246 | measure_num3 | numeric | 1700 | -1 | NULL | +| 18246 | measure_str3 | numeric | 1700 | -1 | NULL | +| 18246 | measure_date3 | numeric | 1700 | -1 | NULL | +| 18246 | measure_num4 | numeric | 1700 | -1 | NULL | +| 18246 | measure_str4 | numeric | 1700 | -1 | NULL | +| 18246 | measure_date4 | numeric | 1700 | -1 | NULL | +| 18246 | measure_num5 | numeric | 1700 | -1 | NULL | +| 18246 | measure_str5 | numeric | 1700 | -1 | NULL | +| 18246 | measure_date5 | numeric | 1700 | -1 | NULL | +| 18246 | measure_num6 | numeric | 1700 | -1 | NULL | +| 18246 | measure_str6 | numeric | 1700 | -1 | NULL | +| 18246 | measure_date6 | numeric | 1700 | -1 | NULL | +| 18246 | measure_num7 | numeric | 1700 | -1 | NULL | +| 18246 | measure_str7 | numeric | 1700 | -1 | NULL | +| 18246 | measure_date7 | numeric | 1700 | -1 | NULL | +| 18246 | measure_num8 | numeric | 1700 | -1 | NULL | +| 18246 | measure_str8 | numeric | 1700 | -1 | NULL | +| 18246 | measure_date8 | numeric | 1700 | -1 | NULL | +| 18246 | measure_num9 | numeric | 1700 | -1 | NULL | +| 18246 | measure_str9 | numeric | 1700 | -1 | NULL | +| 18246 | measure_date9 | numeric | 1700 | -1 | NULL | +| 18246 | count | int8 | 20 | -1 | 64 | +| 18246 | maxPrice | numeric | 1700 | -1 | NULL | +| 18246 | minPrice | numeric | 1700 | -1 | NULL | +| 18246 | avgPrice | numeric | 1700 | -1 | NULL | +| 18246 | countDistinct | int8 | 20 | -1 | 64 | +| 18246 | dim_num0 | numeric | 1700 | -1 | NULL | +| 18246 | dim_str0 | text | 25 | -1 | NULL | +| 18246 | dim_date0 | timestamp | 1114 | -1 | NULL | +| 18246 | dim_num1 | numeric | 1700 | -1 | NULL | +| 18246 | dim_str1 | text | 25 | -1 | NULL | +| 18246 | dim_date1 | timestamp | 1114 | -1 | NULL | +| 18246 | dim_num2 | numeric | 1700 | -1 | NULL | +| 18246 | dim_str2 | text | 25 | -1 | NULL | +| 18246 | dim_date2 | timestamp | 1114 | -1 | NULL | +| 18246 | dim_num3 | numeric | 1700 | -1 | NULL | +| 18246 | dim_str3 | text | 25 | -1 | NULL | +| 18246 | dim_date3 | timestamp | 1114 | -1 | NULL | +| 18246 | dim_num4 | numeric | 1700 | -1 | NULL | +| 18246 | dim_str4 | text | 25 | -1 | NULL | +| 18246 | dim_date4 | timestamp | 1114 | -1 | NULL | +| 18246 | dim_num5 | numeric | 1700 | -1 | NULL | +| 18246 | dim_str5 | text | 25 | -1 | NULL | +| 18246 | dim_date5 | timestamp | 1114 | -1 | NULL | +| 18246 | dim_num6 | numeric | 1700 | -1 | NULL | +| 18246 | dim_str6 | text | 25 | -1 | NULL | +| 18246 | dim_date6 | timestamp | 1114 | -1 | NULL | +| 18246 | dim_num7 | numeric | 1700 | -1 | NULL | +| 18246 | dim_str7 | text | 25 | -1 | NULL | +| 18246 | dim_date7 | timestamp | 1114 | -1 | NULL | +| 18246 | dim_num8 | numeric | 1700 | -1 | NULL | +| 18246 | dim_str8 | text | 25 | -1 | NULL | +| 18246 | dim_date8 | timestamp | 1114 | -1 | NULL | +| 18246 | dim_num9 | numeric | 1700 | -1 | NULL | +| 18246 | dim_str9 | text | 25 | -1 | NULL | +| 18246 | dim_date9 | timestamp | 1114 | -1 | NULL | +| 18246 | __user | text | 25 | -1 | NULL | +| 18246 | __cubeJoinField | text | 25 | -1 | NULL | +----------+--------------------+-----------+-------+--------+--------+ diff --git a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__powerbi_table_columns.snap b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__powerbi_table_columns.snap index c78ddb60697c8..5733917f0c10e 100644 --- a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__powerbi_table_columns.snap +++ b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__powerbi_table_columns.snap @@ -11,14 +11,15 @@ expression: "execute_query(\"select COLUMN_NAME, ORDINAL_POSITION, IS_NULLABLE, | minPrice | 4 | NO | numeric | | avgPrice | 5 | NO | numeric | | countDistinct | 6 | NO | bigint | -| order_date | 7 | YES | timestamp without time zone | -| last_mod | 8 | YES | timestamp without time zone | -| customer_gender | 9 | YES | text | -| notes | 10 | YES | text | -| taxful_total_price | 11 | YES | numeric | -| has_subscription | 12 | YES | boolean | -| is_male | 13 | NO | boolean | -| is_female | 14 | NO | boolean | -| __user | 15 | YES | text | -| __cubeJoinField | 16 | YES | text | +| id | 7 | YES | numeric | +| order_date | 8 | YES | timestamp without time zone | +| last_mod | 9 | YES | timestamp without time zone | +| customer_gender | 10 | YES | text | +| notes | 11 | YES | text | +| taxful_total_price | 12 | YES | numeric | +| has_subscription | 13 | YES | boolean | +| is_male | 14 | NO | boolean | +| is_female | 15 | NO | boolean | +| __user | 16 | YES | text | +| __cubeJoinField | 17 | YES | text | +--------------------+------------------+-------------+-----------------------------+ diff --git a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__sigma_computing_with_subquery_query.snap b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__sigma_computing_with_subquery_query.snap index 57c2822c9acdb..c0a3929182679 100644 --- a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__sigma_computing_with_subquery_query.snap +++ b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__sigma_computing_with_subquery_query.snap @@ -11,6 +11,7 @@ expression: "execute_query(\"\n with\n nsp as | minPrice | numeric | NULL | | avgPrice | numeric | NULL | | countDistinct | int8 | NULL | +| id | numeric | NULL | | order_date | timestamp | NULL | | last_mod | timestamp | NULL | | customer_gender | text | Customer gender | diff --git a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__sqlalchemy_new_conname_query.snap b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__sqlalchemy_new_conname_query.snap index 39066ea680e91..ef38211d7fe57 100644 --- a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__sqlalchemy_new_conname_query.snap +++ b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__sqlalchemy_new_conname_query.snap @@ -11,6 +11,7 @@ expression: "execute_query(r#\"SELECT\n a.attname,\n | minPrice | numeric | NULL | true | 18000 | NULL | | NULL | | avgPrice | numeric | NULL | true | 18000 | NULL | | NULL | | countDistinct | bigint | NULL | true | 18000 | NULL | | NULL | +| id | numeric | NULL | false | 18000 | NULL | | NULL | | order_date | timestamp without time zone | NULL | false | 18000 | NULL | | NULL | | last_mod | timestamp without time zone | NULL | false | 18000 | NULL | | NULL | | customer_gender | text | NULL | false | 18000 | Customer gender | | NULL | diff --git a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__superset_subquery.snap b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__superset_subquery.snap index 948c96230dcc4..2101771db62b2 100644 --- a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__superset_subquery.snap +++ b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__superset_subquery.snap @@ -11,14 +11,15 @@ expression: "execute_query(\"\n SELECT\n a.att | minPrice | numeric | NULL | true | 4 | 18000 | NULL | | | avgPrice | numeric | NULL | true | 5 | 18000 | NULL | | | countDistinct | bigint | NULL | true | 6 | 18000 | NULL | | -| order_date | timestamp without time zone | NULL | false | 7 | 18000 | NULL | | -| last_mod | timestamp without time zone | NULL | false | 8 | 18000 | NULL | | -| customer_gender | text | NULL | false | 9 | 18000 | Customer gender | | -| notes | text | NULL | false | 10 | 18000 | NULL | | -| taxful_total_price | numeric | NULL | false | 11 | 18000 | NULL | | -| has_subscription | boolean | NULL | false | 12 | 18000 | NULL | | -| is_male | boolean | NULL | true | 13 | 18000 | Male users segment | | -| is_female | boolean | NULL | true | 14 | 18000 | NULL | | -| __user | text | NULL | false | 15 | 18000 | Virtual column for security context switching | | -| __cubeJoinField | text | NULL | false | 16 | 18000 | Virtual column for joining cubes | | +| id | numeric | NULL | false | 7 | 18000 | NULL | | +| order_date | timestamp without time zone | NULL | false | 8 | 18000 | NULL | | +| last_mod | timestamp without time zone | NULL | false | 9 | 18000 | NULL | | +| customer_gender | text | NULL | false | 10 | 18000 | Customer gender | | +| notes | text | NULL | false | 11 | 18000 | NULL | | +| taxful_total_price | numeric | NULL | false | 12 | 18000 | NULL | | +| has_subscription | boolean | NULL | false | 13 | 18000 | NULL | | +| is_male | boolean | NULL | true | 14 | 18000 | Male users segment | | +| is_female | boolean | NULL | true | 15 | 18000 | NULL | | +| __user | text | NULL | false | 16 | 18000 | Virtual column for security context switching | | +| __cubeJoinField | text | NULL | false | 17 | 18000 | Virtual column for joining cubes | | +--------------------+-------------------------------------+---------+------------+--------+-----------+-----------------------------------------------+-----------+ diff --git a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__tableau_desktop_table_columns.snap b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__tableau_desktop_table_columns.snap index 9d2265b1bca93..a2362c64c6f40 100644 --- a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__tableau_desktop_table_columns.snap +++ b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__tableau_desktop_table_columns.snap @@ -11,14 +11,15 @@ expression: "execute_query(\"select\n n.nspname,\n | public | KibanaSampleDataEcommerce | minPrice | 1700 | numeric | 4 | -1 | -1 | true | false | r | 18000 | NULL | 0 | -1 | false | | public | KibanaSampleDataEcommerce | avgPrice | 1700 | numeric | 5 | -1 | -1 | true | false | r | 18000 | NULL | 0 | -1 | false | | public | KibanaSampleDataEcommerce | countDistinct | 20 | int8 | 6 | 8 | -1 | true | false | r | 18000 | NULL | 0 | -1 | false | -| public | KibanaSampleDataEcommerce | order_date | 1114 | timestamp | 7 | 8 | -1 | false | false | r | 18000 | NULL | 0 | -1 | false | -| public | KibanaSampleDataEcommerce | last_mod | 1114 | timestamp | 8 | 8 | -1 | false | false | r | 18000 | NULL | 0 | -1 | false | -| public | KibanaSampleDataEcommerce | customer_gender | 25 | text | 9 | -1 | -1 | false | false | r | 18000 | NULL | 0 | -1 | false | -| public | KibanaSampleDataEcommerce | notes | 25 | text | 10 | -1 | -1 | false | false | r | 18000 | NULL | 0 | -1 | false | -| public | KibanaSampleDataEcommerce | taxful_total_price | 1700 | numeric | 11 | -1 | -1 | false | false | r | 18000 | NULL | 0 | -1 | false | -| public | KibanaSampleDataEcommerce | has_subscription | 16 | bool | 12 | 1 | -1 | false | false | r | 18000 | NULL | 0 | -1 | false | -| public | KibanaSampleDataEcommerce | is_male | 16 | bool | 13 | 1 | -1 | true | false | r | 18000 | NULL | 0 | -1 | false | -| public | KibanaSampleDataEcommerce | is_female | 16 | bool | 14 | 1 | -1 | true | false | r | 18000 | NULL | 0 | -1 | false | -| public | KibanaSampleDataEcommerce | __user | 25 | text | 15 | -1 | -1 | false | false | r | 18000 | NULL | 0 | -1 | false | -| public | KibanaSampleDataEcommerce | __cubeJoinField | 25 | text | 16 | -1 | -1 | false | false | r | 18000 | NULL | 0 | -1 | false | +| public | KibanaSampleDataEcommerce | id | 1700 | numeric | 7 | -1 | -1 | false | false | r | 18000 | NULL | 0 | -1 | false | +| public | KibanaSampleDataEcommerce | order_date | 1114 | timestamp | 8 | 8 | -1 | false | false | r | 18000 | NULL | 0 | -1 | false | +| public | KibanaSampleDataEcommerce | last_mod | 1114 | timestamp | 9 | 8 | -1 | false | false | r | 18000 | NULL | 0 | -1 | false | +| public | KibanaSampleDataEcommerce | customer_gender | 25 | text | 10 | -1 | -1 | false | false | r | 18000 | NULL | 0 | -1 | false | +| public | KibanaSampleDataEcommerce | notes | 25 | text | 11 | -1 | -1 | false | false | r | 18000 | NULL | 0 | -1 | false | +| public | KibanaSampleDataEcommerce | taxful_total_price | 1700 | numeric | 12 | -1 | -1 | false | false | r | 18000 | NULL | 0 | -1 | false | +| public | KibanaSampleDataEcommerce | has_subscription | 16 | bool | 13 | 1 | -1 | false | false | r | 18000 | NULL | 0 | -1 | false | +| public | KibanaSampleDataEcommerce | is_male | 16 | bool | 14 | 1 | -1 | true | false | r | 18000 | NULL | 0 | -1 | false | +| public | KibanaSampleDataEcommerce | is_female | 16 | bool | 15 | 1 | -1 | true | false | r | 18000 | NULL | 0 | -1 | false | +| public | KibanaSampleDataEcommerce | __user | 25 | text | 16 | -1 | -1 | false | false | r | 18000 | NULL | 0 | -1 | false | +| public | KibanaSampleDataEcommerce | __cubeJoinField | 25 | text | 17 | -1 | -1 | false | false | r | 18000 | NULL | 0 | -1 | false | +---------+---------------------------+--------------------+----------+-----------+--------+--------+-----------+------------+-------------+---------+-------+--------------------------------+--------------------------------------------------------------------+-----------+------------+ diff --git a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__test_extended_table_introspection.snap b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__test_extended_table_introspection.snap index 1c618a1bd05c7..4057a5b64f4bb 100644 --- a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__test_extended_table_introspection.snap +++ b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__test_extended_table_introspection.snap @@ -5,7 +5,7 @@ expression: "execute_query(\"SELECT current_database() as TABLE_CAT,\\\n +-----------+-------------+---------------------------+-----------+--------------+------------+--------------+--------------------+-----------------+-------------------+--------------------------+----------------------+----------------------------+-----------------------------------+-----------------+---------------+--------------+---------------------------+------------+------------------------------+----------------------+---------------------------+--------------------------+------------------------+--------------------+----------+---------------+ | TABLE_CAT | TABLE_SCHEM | TABLE_NAME | ROW_COUNT | COLUMN_COUNT | TABLE_KIND | IS_PARTITION | PARTITION_STRATEGY | PARTITION_COUNT | PARENT_TABLE_NAME | PARTITIONED_PARENT_TABLE | PARTITION_CONSTRAINT | NUMBER_COLUMNS_IN_PART_KEY | COLUMNS_PARTICIPATING_IN_PART_KEY | VIEW_DEFINITION | table_catalog | table_schema | table_name | table_type | self_referencing_column_name | reference_generation | user_defined_type_catalog | user_defined_type_schema | user_defined_type_name | is_insertable_into | is_typed | commit_action | +-----------+-------------+---------------------------+-----------+--------------+------------+--------------+--------------------+-----------------+-------------------+--------------------------+----------------------+----------------------------+-----------------------------------+-----------------+---------------+--------------+---------------------------+------------+------------------------------+----------------------+---------------------------+--------------------------+------------------------+--------------------+----------+---------------+ -| cubedb | public | KibanaSampleDataEcommerce | NULL | 16 | r | false | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | cubedb | public | KibanaSampleDataEcommerce | BASE TABLE | | | | | | NO | NO | | +| cubedb | public | KibanaSampleDataEcommerce | NULL | 17 | r | false | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | cubedb | public | KibanaSampleDataEcommerce | BASE TABLE | | | | | | NO | NO | | | cubedb | public | Logs | NULL | 7 | r | false | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | cubedb | public | Logs | BASE TABLE | | | | | | NO | NO | | | cubedb | public | MultiTypeCube | NULL | 67 | r | false | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | cubedb | public | MultiTypeCube | BASE TABLE | | | | | | NO | NO | | | cubedb | public | NumberCube | NULL | 3 | r | false | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | cubedb | public | NumberCube | BASE TABLE | | | | | | NO | NO | | diff --git a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__test_metabase_v0_51_2_introspection_field_indoption.snap b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__test_metabase_v0_51_2_introspection_field_indoption.snap index 83aaa2ede496b..51bb47ca3699c 100644 --- a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__test_metabase_v0_51_2_introspection_field_indoption.snap +++ b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__test_metabase_v0_51_2_introspection_field_indoption.snap @@ -11,16 +11,17 @@ expression: "execute_query(r#\"\n SELECT\n c.column_name A | minPrice | numeric | 3 | public | KibanaSampleDataEcommerce | false | NULL | false | false | | avgPrice | numeric | 4 | public | KibanaSampleDataEcommerce | false | NULL | false | false | | countDistinct | int8 | 5 | public | KibanaSampleDataEcommerce | false | NULL | false | false | -| order_date | timestamp | 6 | public | KibanaSampleDataEcommerce | false | NULL | false | false | -| last_mod | timestamp | 7 | public | KibanaSampleDataEcommerce | false | NULL | false | false | -| customer_gender | text | 8 | public | KibanaSampleDataEcommerce | false | NULL | false | false | -| notes | text | 9 | public | KibanaSampleDataEcommerce | false | NULL | false | false | -| taxful_total_price | numeric | 10 | public | KibanaSampleDataEcommerce | false | NULL | false | false | -| has_subscription | bool | 11 | public | KibanaSampleDataEcommerce | false | NULL | false | false | -| is_male | bool | 12 | public | KibanaSampleDataEcommerce | false | NULL | false | false | -| is_female | bool | 13 | public | KibanaSampleDataEcommerce | false | NULL | false | false | -| __user | text | 14 | public | KibanaSampleDataEcommerce | false | NULL | false | false | -| __cubeJoinField | text | 15 | public | KibanaSampleDataEcommerce | false | NULL | false | false | +| id | numeric | 6 | public | KibanaSampleDataEcommerce | false | NULL | false | false | +| order_date | timestamp | 7 | public | KibanaSampleDataEcommerce | false | NULL | false | false | +| last_mod | timestamp | 8 | public | KibanaSampleDataEcommerce | false | NULL | false | false | +| customer_gender | text | 9 | public | KibanaSampleDataEcommerce | false | NULL | false | false | +| notes | text | 10 | public | KibanaSampleDataEcommerce | false | NULL | false | false | +| taxful_total_price | numeric | 11 | public | KibanaSampleDataEcommerce | false | NULL | false | false | +| has_subscription | bool | 12 | public | KibanaSampleDataEcommerce | false | NULL | false | false | +| is_male | bool | 13 | public | KibanaSampleDataEcommerce | false | NULL | false | false | +| is_female | bool | 14 | public | KibanaSampleDataEcommerce | false | NULL | false | false | +| __user | text | 15 | public | KibanaSampleDataEcommerce | false | NULL | false | false | +| __cubeJoinField | text | 16 | public | KibanaSampleDataEcommerce | false | NULL | false | false | | agentCount | int8 | 0 | public | Logs | false | NULL | false | false | | agentCountApprox | int8 | 1 | public | Logs | false | NULL | false | false | | id | numeric | 2 | public | Logs | false | NULL | false | false | diff --git a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__test_metabase_v0_51_8_introspection.snap b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__test_metabase_v0_51_8_introspection.snap index 166491e9c523e..69ab84b3a35b1 100644 --- a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__test_metabase_v0_51_8_introspection.snap +++ b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__test_metabase_v0_51_8_introspection.snap @@ -11,16 +11,17 @@ expression: "execute_query(r#\"\nselect\n \"c\".\"column_name\" as \"name\",\ | minPrice | numeric | 3 | public | KibanaSampleDataEcommerce | false | NULL | false | false | | avgPrice | numeric | 4 | public | KibanaSampleDataEcommerce | false | NULL | false | false | | countDistinct | int8 | 5 | public | KibanaSampleDataEcommerce | false | NULL | false | false | -| order_date | timestamp | 6 | public | KibanaSampleDataEcommerce | false | NULL | false | false | -| last_mod | timestamp | 7 | public | KibanaSampleDataEcommerce | false | NULL | false | false | -| customer_gender | text | 8 | public | KibanaSampleDataEcommerce | false | NULL | false | false | -| notes | text | 9 | public | KibanaSampleDataEcommerce | false | NULL | false | false | -| taxful_total_price | numeric | 10 | public | KibanaSampleDataEcommerce | false | NULL | false | false | -| has_subscription | bool | 11 | public | KibanaSampleDataEcommerce | false | NULL | false | false | -| is_male | bool | 12 | public | KibanaSampleDataEcommerce | false | NULL | false | false | -| is_female | bool | 13 | public | KibanaSampleDataEcommerce | false | NULL | false | false | -| __user | text | 14 | public | KibanaSampleDataEcommerce | false | NULL | false | false | -| __cubeJoinField | text | 15 | public | KibanaSampleDataEcommerce | false | NULL | false | false | +| id | numeric | 6 | public | KibanaSampleDataEcommerce | false | NULL | false | false | +| order_date | timestamp | 7 | public | KibanaSampleDataEcommerce | false | NULL | false | false | +| last_mod | timestamp | 8 | public | KibanaSampleDataEcommerce | false | NULL | false | false | +| customer_gender | text | 9 | public | KibanaSampleDataEcommerce | false | NULL | false | false | +| notes | text | 10 | public | KibanaSampleDataEcommerce | false | NULL | false | false | +| taxful_total_price | numeric | 11 | public | KibanaSampleDataEcommerce | false | NULL | false | false | +| has_subscription | bool | 12 | public | KibanaSampleDataEcommerce | false | NULL | false | false | +| is_male | bool | 13 | public | KibanaSampleDataEcommerce | false | NULL | false | false | +| is_female | bool | 14 | public | KibanaSampleDataEcommerce | false | NULL | false | false | +| __user | text | 15 | public | KibanaSampleDataEcommerce | false | NULL | false | false | +| __cubeJoinField | text | 16 | public | KibanaSampleDataEcommerce | false | NULL | false | false | | agentCount | int8 | 0 | public | Logs | false | NULL | false | false | | agentCountApprox | int8 | 1 | public | Logs | false | NULL | false | false | | id | numeric | 2 | public | Logs | false | NULL | false | false | diff --git a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__thoughtspot_table_introspection.snap b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__thoughtspot_table_introspection.snap index 631471621aeb1..49a292a5e1fc3 100644 --- a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__thoughtspot_table_introspection.snap +++ b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_introspection__thoughtspot_table_introspection.snap @@ -11,14 +11,15 @@ expression: "execute_query(r#\"\n SELECT *\n FROM | cubedb | public | KibanaSampleDataEcommerce | minPrice | 2 | numeric | -1 | NULL | 65531 | 10 | NULL | NULL | NULL | 2 | NULL | 65535 | 4 | NULL | NULL | NULL | NULL | 0 | NO | false | | cubedb | public | KibanaSampleDataEcommerce | avgPrice | 2 | numeric | -1 | NULL | 65531 | 10 | NULL | NULL | NULL | 2 | NULL | 65535 | 5 | NULL | NULL | NULL | NULL | 0 | NO | false | | cubedb | public | KibanaSampleDataEcommerce | countDistinct | -5 | int8 | 19 | NULL | 0 | 10 | NULL | NULL | NULL | -5 | NULL | 19 | 6 | NULL | NULL | NULL | NULL | 0 | NO | false | -| cubedb | public | KibanaSampleDataEcommerce | order_date | 93 | timestamp | 29 | NULL | 6 | 10 | 1 | NULL | NULL | 93 | NULL | 29 | 7 | YES | NULL | NULL | NULL | 0 | NO | false | -| cubedb | public | KibanaSampleDataEcommerce | last_mod | 93 | timestamp | 29 | NULL | 6 | 10 | 1 | NULL | NULL | 93 | NULL | 29 | 8 | YES | NULL | NULL | NULL | 0 | NO | false | -| cubedb | public | KibanaSampleDataEcommerce | customer_gender | 12 | text | 2147483647 | NULL | 0 | 10 | 1 | Customer gender | NULL | 12 | NULL | 2147483647 | 9 | YES | NULL | NULL | NULL | 0 | NO | false | -| cubedb | public | KibanaSampleDataEcommerce | notes | 12 | text | 2147483647 | NULL | 0 | 10 | 1 | NULL | NULL | 12 | NULL | 2147483647 | 10 | YES | NULL | NULL | NULL | 0 | NO | false | -| cubedb | public | KibanaSampleDataEcommerce | taxful_total_price | 2 | numeric | -1 | NULL | 65531 | 10 | 1 | NULL | NULL | 2 | NULL | 65535 | 11 | YES | NULL | NULL | NULL | 0 | NO | false | -| cubedb | public | KibanaSampleDataEcommerce | has_subscription | -7 | bool | 1 | NULL | 0 | 10 | 1 | NULL | NULL | -7 | NULL | 1 | 12 | YES | NULL | NULL | NULL | 0 | NO | false | -| cubedb | public | KibanaSampleDataEcommerce | is_male | -7 | bool | 1 | NULL | 0 | 10 | NULL | Male users segment | NULL | -7 | NULL | 1 | 13 | NULL | NULL | NULL | NULL | 0 | NO | false | -| cubedb | public | KibanaSampleDataEcommerce | is_female | -7 | bool | 1 | NULL | 0 | 10 | NULL | NULL | NULL | -7 | NULL | 1 | 14 | NULL | NULL | NULL | NULL | 0 | NO | false | -| cubedb | public | KibanaSampleDataEcommerce | __user | 12 | text | 2147483647 | NULL | 0 | 10 | 1 | Virtual column for security context switching | NULL | 12 | NULL | 2147483647 | 15 | YES | NULL | NULL | NULL | 0 | NO | false | -| cubedb | public | KibanaSampleDataEcommerce | __cubeJoinField | 12 | text | 2147483647 | NULL | 0 | 10 | 1 | Virtual column for joining cubes | NULL | 12 | NULL | 2147483647 | 16 | YES | NULL | NULL | NULL | 0 | NO | false | +| cubedb | public | KibanaSampleDataEcommerce | id | 2 | numeric | -1 | NULL | 65531 | 10 | 1 | NULL | NULL | 2 | NULL | 65535 | 7 | YES | NULL | NULL | NULL | 0 | NO | false | +| cubedb | public | KibanaSampleDataEcommerce | order_date | 93 | timestamp | 29 | NULL | 6 | 10 | 1 | NULL | NULL | 93 | NULL | 29 | 8 | YES | NULL | NULL | NULL | 0 | NO | false | +| cubedb | public | KibanaSampleDataEcommerce | last_mod | 93 | timestamp | 29 | NULL | 6 | 10 | 1 | NULL | NULL | 93 | NULL | 29 | 9 | YES | NULL | NULL | NULL | 0 | NO | false | +| cubedb | public | KibanaSampleDataEcommerce | customer_gender | 12 | text | 2147483647 | NULL | 0 | 10 | 1 | Customer gender | NULL | 12 | NULL | 2147483647 | 10 | YES | NULL | NULL | NULL | 0 | NO | false | +| cubedb | public | KibanaSampleDataEcommerce | notes | 12 | text | 2147483647 | NULL | 0 | 10 | 1 | NULL | NULL | 12 | NULL | 2147483647 | 11 | YES | NULL | NULL | NULL | 0 | NO | false | +| cubedb | public | KibanaSampleDataEcommerce | taxful_total_price | 2 | numeric | -1 | NULL | 65531 | 10 | 1 | NULL | NULL | 2 | NULL | 65535 | 12 | YES | NULL | NULL | NULL | 0 | NO | false | +| cubedb | public | KibanaSampleDataEcommerce | has_subscription | -7 | bool | 1 | NULL | 0 | 10 | 1 | NULL | NULL | -7 | NULL | 1 | 13 | YES | NULL | NULL | NULL | 0 | NO | false | +| cubedb | public | KibanaSampleDataEcommerce | is_male | -7 | bool | 1 | NULL | 0 | 10 | NULL | Male users segment | NULL | -7 | NULL | 1 | 14 | NULL | NULL | NULL | NULL | 0 | NO | false | +| cubedb | public | KibanaSampleDataEcommerce | is_female | -7 | bool | 1 | NULL | 0 | 10 | NULL | NULL | NULL | -7 | NULL | 1 | 15 | NULL | NULL | NULL | NULL | 0 | NO | false | +| cubedb | public | KibanaSampleDataEcommerce | __user | 12 | text | 2147483647 | NULL | 0 | 10 | 1 | Virtual column for security context switching | NULL | 12 | NULL | 2147483647 | 16 | YES | NULL | NULL | NULL | 0 | NO | false | +| cubedb | public | KibanaSampleDataEcommerce | __cubeJoinField | 12 | text | 2147483647 | NULL | 0 | 10 | 1 | Virtual column for joining cubes | NULL | 12 | NULL | 2147483647 | 17 | YES | NULL | NULL | NULL | 0 | NO | false | +-----------+-------------+---------------------------+--------------------+-----------+-----------+-------------+---------------+----------------+----------------+----------+-----------------------------------------------+------------+---------------+------------------+-------------------+------------------+-------------+---------------+--------------+-------------+------------------+------------------+--------------------+ diff --git a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_udfs__format_type.snap b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_udfs__format_type.snap index c3e33b0f7e788..e8e8fceeaf283 100644 --- a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_udfs__format_type.snap +++ b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_udfs__format_type.snap @@ -91,12 +91,12 @@ expression: "execute_query(\"\n SELECT\n t.oid | 13410 | sql_identifier | information_schema.sql_identifier(20) | information_schema.sql_identifier(5) | information_schema.sql_identifier(4) | information_schema.sql_identifier(0) | information_schema.sql_identifier | information_schema.sql_identifier | information_schema.sql_identifier(5) | | 18001 | KibanaSampleDataEcommerce | ??? | ??? | ??? | ??? | ??? | ??? | ??? | | 18002 | _KibanaSampleDataEcommerce | ??? | ??? | ??? | ??? | ??? | ??? | ??? | -| 18020 | Logs | ??? | ??? | ??? | ??? | ??? | ??? | ??? | -| 18021 | _Logs | ??? | ??? | ??? | ??? | ??? | ??? | ??? | -| 18030 | NumberCube | ??? | ??? | ??? | ??? | ??? | ??? | ??? | -| 18031 | _NumberCube | ??? | ??? | ??? | ??? | ??? | ??? | ??? | -| 18036 | WideCube | ??? | ??? | ??? | ??? | ??? | ??? | ??? | -| 18037 | _WideCube | ??? | ??? | ??? | ??? | ??? | ??? | ??? | -| 18246 | MultiTypeCube | ??? | ??? | ??? | ??? | ??? | ??? | ??? | -| 18247 | _MultiTypeCube | ??? | ??? | ??? | ??? | ??? | ??? | ??? | +| 18021 | Logs | ??? | ??? | ??? | ??? | ??? | ??? | ??? | +| 18022 | _Logs | ??? | ??? | ??? | ??? | ??? | ??? | ??? | +| 18031 | NumberCube | ??? | ??? | ??? | ??? | ??? | ??? | ??? | +| 18032 | _NumberCube | ??? | ??? | ??? | ??? | ??? | ??? | ??? | +| 18037 | WideCube | ??? | ??? | ??? | ??? | ??? | ??? | ??? | +| 18038 | _WideCube | ??? | ??? | ??? | ??? | ??? | ??? | ??? | +| 18247 | MultiTypeCube | ??? | ??? | ??? | ??? | ??? | ??? | ??? | +| 18248 | _MultiTypeCube | ??? | ??? | ??? | ??? | ??? | ??? | ??? | +-------+----------------------------+---------------------------------------+--------------------------------------+--------------------------------------+--------------------------------------+-----------------------------------+-----------------------------------+--------------------------------------+ diff --git a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_udfs__pg_datetime_precision_types.snap b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_udfs__pg_datetime_precision_types.snap index 896747bae6f8b..73700366ed59c 100644 --- a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_udfs__pg_datetime_precision_types.snap +++ b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_udfs__pg_datetime_precision_types.snap @@ -91,12 +91,12 @@ expression: "execute_query(\"\n SELECT t.oid, information_schema. | 13410 | NULL | | 18001 | NULL | | 18002 | NULL | -| 18020 | NULL | | 18021 | NULL | -| 18030 | NULL | +| 18022 | NULL | | 18031 | NULL | -| 18036 | NULL | +| 18032 | NULL | | 18037 | NULL | -| 18246 | NULL | +| 18038 | NULL | | 18247 | NULL | +| 18248 | NULL | +-------+------+ diff --git a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_udfs__pg_numeric_precision_types.snap b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_udfs__pg_numeric_precision_types.snap index 75ff68c3a2871..168341b356205 100644 --- a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_udfs__pg_numeric_precision_types.snap +++ b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_udfs__pg_numeric_precision_types.snap @@ -91,12 +91,12 @@ expression: "execute_query(\"\n SELECT t.oid, information_schema. | 13410 | NULL | | 18001 | NULL | | 18002 | NULL | -| 18020 | NULL | | 18021 | NULL | -| 18030 | NULL | +| 18022 | NULL | | 18031 | NULL | -| 18036 | NULL | +| 18032 | NULL | | 18037 | NULL | -| 18246 | NULL | +| 18038 | NULL | | 18247 | NULL | +| 18248 | NULL | +-------+-------+ diff --git a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_udfs__pg_numeric_scale_types.snap b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_udfs__pg_numeric_scale_types.snap index d62ff2abd02df..1cfbd9427e1ac 100644 --- a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_udfs__pg_numeric_scale_types.snap +++ b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_udfs__pg_numeric_scale_types.snap @@ -91,12 +91,12 @@ expression: "execute_query(\"\n SELECT t.oid, information_schema. | 13410 | NULL | | 18001 | NULL | | 18002 | NULL | -| 18020 | NULL | | 18021 | NULL | -| 18030 | NULL | +| 18022 | NULL | | 18031 | NULL | -| 18036 | NULL | +| 18032 | NULL | | 18037 | NULL | -| 18246 | NULL | +| 18038 | NULL | | 18247 | NULL | +| 18248 | NULL | +-------+------+ diff --git a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_udfs__pg_total_relation_size.snap b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_udfs__pg_total_relation_size.snap index 9e019631d7bc2..c0c717d2e7da4 100644 --- a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_udfs__pg_total_relation_size.snap +++ b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_udfs__pg_total_relation_size.snap @@ -7,8 +7,8 @@ expression: "execute_query(\"SELECT\n oid,\n +-------+---------------------------+---------+ | 1259 | pg_class | 8192 | | 18000 | KibanaSampleDataEcommerce | 8192 | -| 18019 | Logs | 8192 | -| 18029 | NumberCube | 8192 | -| 18035 | WideCube | 8192 | -| 18245 | MultiTypeCube | 8192 | +| 18020 | Logs | 8192 | +| 18030 | NumberCube | 8192 | +| 18036 | WideCube | 8192 | +| 18246 | MultiTypeCube | 8192 | +-------+---------------------------+---------+ diff --git a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_udfs__pg_type_is_visible.snap b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_udfs__pg_type_is_visible.snap index ff5ff3af99ee3..f2f0b0738c8c2 100644 --- a/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_udfs__pg_type_is_visible.snap +++ b/rust/cubesql/cubesql/src/compile/test/snapshots/cubesql__compile__test__test_udfs__pg_type_is_visible.snap @@ -91,12 +91,12 @@ expression: "execute_query(\"\n SELECT t.oid, t.typname, n.nspnam | 13410 | sql_identifier | information_schema | false | | 18001 | KibanaSampleDataEcommerce | public | true | | 18002 | _KibanaSampleDataEcommerce | public | true | -| 18020 | Logs | public | true | -| 18021 | _Logs | public | true | -| 18030 | NumberCube | public | true | -| 18031 | _NumberCube | public | true | -| 18036 | WideCube | public | true | -| 18037 | _WideCube | public | true | -| 18246 | MultiTypeCube | public | true | -| 18247 | _MultiTypeCube | public | true | +| 18021 | Logs | public | true | +| 18022 | _Logs | public | true | +| 18031 | NumberCube | public | true | +| 18032 | _NumberCube | public | true | +| 18037 | WideCube | public | true | +| 18038 | _WideCube | public | true | +| 18247 | MultiTypeCube | public | true | +| 18248 | _MultiTypeCube | public | true | +-------+----------------------------+--------------------+------------+ diff --git a/rust/cubesql/cubesql/src/compile/test/test_cube_join.rs b/rust/cubesql/cubesql/src/compile/test/test_cube_join.rs index f0dc5d2f648ce..789f6e560472d 100644 --- a/rust/cubesql/cubesql/src/compile/test/test_cube_join.rs +++ b/rust/cubesql/cubesql/src/compile/test/test_cube_join.rs @@ -169,6 +169,7 @@ async fn test_join_three_cubes() { "NumberCube.someNumber".to_string(), ]), dimensions: Some(vec![ + "KibanaSampleDataEcommerce.id".to_string(), "KibanaSampleDataEcommerce.order_date".to_string(), "KibanaSampleDataEcommerce.last_mod".to_string(), "KibanaSampleDataEcommerce.customer_gender".to_string(), diff --git a/rust/cubesql/cubesql/src/compile/test/test_introspection.rs b/rust/cubesql/cubesql/src/compile/test/test_introspection.rs index 0a4f3b9fc0f24..cafc287b5e2f5 100644 --- a/rust/cubesql/cubesql/src/compile/test/test_introspection.rs +++ b/rust/cubesql/cubesql/src/compile/test/test_introspection.rs @@ -899,6 +899,55 @@ async fn dbeaver_introspection() -> Result<(), CubeError> { .await? ); + insta::assert_snapshot!( + "dbeaver_introspection_tables_with_descriptions", + // NOTE: order by added manually to avoid random snapshot order + execute_query( + r#" + SELECT c.oid,c.*,d.description,pg_catalog.pg_get_expr(c.relpartbound, c.oid) as partition_expr, pg_catalog.pg_get_partkeydef(c.oid) as partition_key + FROM pg_catalog.pg_class c + LEFT OUTER JOIN pg_catalog.pg_description d ON d.objoid=c.oid AND d.objsubid=0 AND d.classoid='pg_class'::regclass + WHERE c.relnamespace=2200 AND c.relkind not in ('i','I','c') + ORDER BY c.oid + "#.to_string(), + DatabaseProtocol::PostgreSQL + ) + .await? + ); + + insta::assert_snapshot!( + "dbeaver_introspection_tables", + // NOTE: order by added manually to avoid random snapshot order + execute_query( + r#" + select c.oid,pg_catalog.pg_total_relation_size(c.oid) as total_rel_size,pg_catalog.pg_relation_size(c.oid) as rel_size + FROM pg_class c + WHERE c.relnamespace=2200 + ORDER BY c.oid + "#.to_string(), + DatabaseProtocol::PostgreSQL + ) + .await? + ); + + insta::assert_snapshot!( + "dbeaver_introspection_columns", + execute_query( + r#" + SELECT c.relname,a.*,pg_catalog.pg_get_expr(ad.adbin, ad.adrelid, true) as def_value,dsc.description,dep.objid + FROM pg_catalog.pg_attribute a + INNER JOIN pg_catalog.pg_class c ON (a.attrelid=c.oid) + LEFT OUTER JOIN pg_catalog.pg_attrdef ad ON (a.attrelid=ad.adrelid AND a.attnum = ad.adnum) + LEFT OUTER JOIN pg_catalog.pg_description dsc ON (c.oid=dsc.objoid AND a.attnum = dsc.objsubid) + LEFT OUTER JOIN pg_depend dep on dep.refobjid = a.attrelid AND dep.deptype = 'i' and dep.refobjsubid = a.attnum and dep.classid = dep.refclassid + WHERE NOT a.attisdropped AND c.relkind not in ('i','I','c') AND c.oid=18000 + ORDER BY a.attnum + "#.to_string(), + DatabaseProtocol::PostgreSQL + ) + .await? + ); + Ok(()) } diff --git a/rust/cubesql/cubesql/src/sql/postgres/shim.rs b/rust/cubesql/cubesql/src/sql/postgres/shim.rs index 6636bba18a31f..adf1c53a1f11b 100644 --- a/rust/cubesql/cubesql/src/sql/postgres/shim.rs +++ b/rust/cubesql/cubesql/src/sql/postgres/shim.rs @@ -1117,13 +1117,21 @@ impl AsyncPostgresShim { if let Some(qtrace) = qtrace { qtrace.push_statement(&query); } - self.prepare_statement(parse.name, Ok(query), false, qtrace, span_id.clone()) - .await?; + self.prepare_statement( + parse.name, + Ok(query), + &parse.param_types, + false, + qtrace, + span_id.clone(), + ) + .await?; } Err(err) => { self.prepare_statement( parse.name, Err(parse.query.to_string()), + &parse.param_types, false, qtrace, span_id.clone(), @@ -1143,6 +1151,7 @@ impl AsyncPostgresShim { &mut self, name: String, query: Result, + param_types: &[u32], from_sql: bool, qtrace: &mut Option, span_id: Option>, @@ -1170,7 +1179,7 @@ impl AsyncPostgresShim { let (pstmt, result) = match query { Ok(query) => { - let stmt_finder = PostgresStatementParamsFinder::new(); + let stmt_finder = PostgresStatementParamsFinder::new(param_types); let parameters: Vec = stmt_finder .find(&query)? .into_iter() @@ -1703,8 +1712,15 @@ impl AsyncPostgresShim { _ => *statement, }; - self.prepare_statement(name.value, Ok(statement), true, qtrace, span_id.clone()) - .await?; + self.prepare_statement( + name.value, + Ok(statement), + &[], + true, + qtrace, + span_id.clone(), + ) + .await?; let plan = QueryPlan::MetaOk(StatusFlags::empty(), CommandCompletion::Prepare); diff --git a/rust/cubesql/cubesql/src/sql/statement.rs b/rust/cubesql/cubesql/src/sql/statement.rs index 77ef0743a4827..aec18178e24e5 100644 --- a/rust/cubesql/cubesql/src/sql/statement.rs +++ b/rust/cubesql/cubesql/src/sql/statement.rs @@ -2,7 +2,7 @@ use itertools::Itertools; use log::trace; use pg_srv::{ protocol::{ErrorCode, ErrorResponse}, - BindValue, PgType, + BindValue, PgType, PgTypeId, }; use sqlparser::ast::{ self, ArrayAgg, Expr, Function, FunctionArg, FunctionArgExpr, Ident, ObjectName, Value, @@ -13,6 +13,7 @@ use std::{collections::HashMap, error::Error}; use super::types::ColumnType; use crate::sql::shim::ConnectionError; +#[derive(Debug)] enum PlaceholderType { String, Number, @@ -521,14 +522,16 @@ impl FoundParameter { } #[derive(Debug)] -pub struct PostgresStatementParamsFinder { - parameters: HashMap, +pub struct PostgresStatementParamsFinder<'t> { + parameters: HashMap, + types: &'t [u32], } -impl PostgresStatementParamsFinder { - pub fn new() -> Self { +impl<'t> PostgresStatementParamsFinder<'t> { + pub fn new(types: &'t [u32]) -> Self { Self { parameters: HashMap::new(), + types, } } @@ -544,7 +547,7 @@ impl PostgresStatementParamsFinder { } } -impl<'ast> Visitor<'ast, ConnectionError> for PostgresStatementParamsFinder { +impl<'ast, 't> Visitor<'ast, ConnectionError> for PostgresStatementParamsFinder<'t> { fn visit_value( &mut self, v: &mut ast::Value, @@ -554,8 +557,15 @@ impl<'ast> Visitor<'ast, ConnectionError> for PostgresStatementParamsFinder { Value::Placeholder(name) => { let position = self.extract_placeholder_index(&name)?; + let coltype = self + .types + .get(position) + .and_then(|pg_type_oid| PgTypeId::from_oid(*pg_type_oid)) + .and_then(|pg_type| ColumnType::from_pg_tid(pg_type).ok()) + .unwrap_or_else(|| pt.to_coltype()); + self.parameters - .insert(position.to_string(), FoundParameter::new(pt.to_coltype())); + .insert(position, FoundParameter::new(coltype)); } _ => {} }; @@ -650,6 +660,8 @@ impl<'ast> Visitor<'ast, ConnectionError> for StatementPlaceholderReplacer { placeholder_type: PlaceholderType, ) -> Result<(), ConnectionError> { match &value { + // NOTE: it does not do any harm if a numeric placeholder is replaced with a string, + // this will be handled with Bind anyway ast::Value::Placeholder(_) => { *value = match placeholder_type { PlaceholderType::String => { @@ -1238,7 +1250,7 @@ mod tests { ) -> Result<(), CubeError> { let stmts = Parser::parse_sql(&PostgreSqlDialect {}, &input).unwrap(); - let finder = PostgresStatementParamsFinder::new(); + let finder = PostgresStatementParamsFinder::new(&[]); let result = finder.find(&stmts[0]).unwrap(); assert_eq!(result, expected); diff --git a/rust/cubesql/cubesql/src/sql/types.rs b/rust/cubesql/cubesql/src/sql/types.rs index f294e5540fa05..9df4e1670440a 100644 --- a/rust/cubesql/cubesql/src/sql/types.rs +++ b/rust/cubesql/cubesql/src/sql/types.rs @@ -1,4 +1,4 @@ -use crate::compile::CommandCompletion; +use crate::{compile::CommandCompletion, CubeError}; use bitflags::bitflags; use datafusion::arrow::datatypes::{DataType, Field, IntervalUnit, TimeUnit}; use pg_srv::{protocol::CommandComplete, PgTypeId}; @@ -24,6 +24,26 @@ pub enum ColumnType { } impl ColumnType { + pub fn from_pg_tid(pg_type_oid: PgTypeId) -> Result { + match pg_type_oid { + PgTypeId::TEXT | PgTypeId::VARCHAR => Ok(ColumnType::String), + PgTypeId::FLOAT8 => Ok(ColumnType::Double), + PgTypeId::BOOL => Ok(ColumnType::Boolean), + PgTypeId::INT2 => Ok(ColumnType::Int8), + PgTypeId::INT4 => Ok(ColumnType::Int32), + PgTypeId::INT8 => Ok(ColumnType::Int64), + PgTypeId::BYTEA => Ok(ColumnType::Blob), + PgTypeId::DATE => Ok(ColumnType::Date(false)), + PgTypeId::INTERVAL => Ok(ColumnType::Interval(IntervalUnit::MonthDayNano)), + PgTypeId::TIMESTAMP | PgTypeId::TIMESTAMPTZ => Ok(ColumnType::Timestamp), + PgTypeId::NUMERIC => Ok(ColumnType::Decimal(38, 10)), + _ => Err(CubeError::internal(format!( + "Unable to convert PostgreSQL type oid {} to ColumnType", + pg_type_oid as u32 + ))), + } + } + pub fn to_pg_tid(&self) -> PgTypeId { match self { ColumnType::Blob => PgTypeId::BYTEA, diff --git a/rust/cubesql/package.json b/rust/cubesql/package.json index 0737f236c788e..26f4f71f7d64b 100644 --- a/rust/cubesql/package.json +++ b/rust/cubesql/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-backend/cubesql", - "version": "1.3.35", + "version": "1.3.36", "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 cff6431000f33..39d04db2a9904 100644 --- a/rust/cubesqlplanner/Cargo.lock +++ b/rust/cubesqlplanner/Cargo.lock @@ -664,7 +664,7 @@ dependencies = [ [[package]] name = "cube-ext" version = "1.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=637003a448a98bbc5e1585d0f01cc19ba9d50668#637003a448a98bbc5e1585d0f01cc19ba9d50668" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6#7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6" dependencies = [ "arrow", "chrono", @@ -777,7 +777,7 @@ dependencies = [ [[package]] name = "datafusion" version = "7.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=637003a448a98bbc5e1585d0f01cc19ba9d50668#637003a448a98bbc5e1585d0f01cc19ba9d50668" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6#7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6" dependencies = [ "ahash 0.7.8", "arrow", @@ -810,7 +810,7 @@ dependencies = [ [[package]] name = "datafusion-common" version = "7.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=637003a448a98bbc5e1585d0f01cc19ba9d50668#637003a448a98bbc5e1585d0f01cc19ba9d50668" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6#7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6" dependencies = [ "arrow", "ordered-float 2.10.1", @@ -821,7 +821,7 @@ dependencies = [ [[package]] name = "datafusion-data-access" version = "1.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=637003a448a98bbc5e1585d0f01cc19ba9d50668#637003a448a98bbc5e1585d0f01cc19ba9d50668" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6#7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6" dependencies = [ "async-trait", "chrono", @@ -834,7 +834,7 @@ dependencies = [ [[package]] name = "datafusion-expr" version = "7.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=637003a448a98bbc5e1585d0f01cc19ba9d50668#637003a448a98bbc5e1585d0f01cc19ba9d50668" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6#7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6" dependencies = [ "ahash 0.7.8", "arrow", @@ -845,7 +845,7 @@ dependencies = [ [[package]] name = "datafusion-physical-expr" version = "7.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=637003a448a98bbc5e1585d0f01cc19ba9d50668#637003a448a98bbc5e1585d0f01cc19ba9d50668" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6#7803f7e1cb8fa3d7b25451de35b8765e1ce4a3f6" dependencies = [ "ahash 0.7.8", "arrow", diff --git a/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/cube_definition.rs b/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/cube_definition.rs index 03b7331893578..2bf22f9719e37 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/cube_definition.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/cube_definition.rs @@ -16,6 +16,8 @@ pub struct CubeDefinitionStatic { pub sql_alias: Option, #[serde(rename = "isView")] pub is_view: Option, + #[serde(rename = "calendar")] + pub is_calendar: Option, } #[nativebridge::native_bridge(CubeDefinitionStatic)] diff --git a/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/dimension_definition.rs b/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/dimension_definition.rs index 9283854f7a45b..4765e8b6eba3b 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/dimension_definition.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/dimension_definition.rs @@ -1,9 +1,11 @@ use super::case_definition::{CaseDefinition, NativeCaseDefinition}; use super::geo_item::{GeoItem, NativeGeoItem}; use super::member_sql::{MemberSql, NativeMemberSql}; +use crate::cube_bridge::timeshift_definition::{NativeTimeShiftDefinition, TimeShiftDefinition}; use cubenativeutils::wrappers::serializer::{ NativeDeserialize, NativeDeserializer, NativeSerialize, }; +use cubenativeutils::wrappers::NativeArray; use cubenativeutils::wrappers::NativeContextHolder; use cubenativeutils::wrappers::NativeObjectHandle; use cubenativeutils::CubeError; @@ -38,4 +40,7 @@ pub trait DimensionDefinition { #[nbridge(field, optional)] fn longitude(&self) -> Result>, CubeError>; + + #[nbridge(field, vec, optional)] + fn time_shift(&self) -> Result>>, CubeError>; } diff --git a/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/driver_tools.rs b/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/driver_tools.rs index 47bb919030e0c..d11cd5c8ad073 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/driver_tools.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/driver_tools.rs @@ -31,6 +31,7 @@ pub trait DriverTools { fn hll_merge(&self, sql: String) -> Result; fn hll_cardinality_merge(&self, sql: String) -> Result; fn count_distinct_approx(&self, sql: String) -> Result; + fn support_generated_series_for_custom_td(&self) -> Result; fn date_bin( &self, interval: String, diff --git a/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/evaluator.rs b/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/evaluator.rs index 14b3c3d239cb9..9baa01e1bd35a 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/evaluator.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/evaluator.rs @@ -64,4 +64,16 @@ pub trait CubeEvaluator { &self, cube_name: String, ) -> Result>, CubeError>; + #[nbridge(optional)] + fn pre_aggregation_description_by_name( + &self, + cube_name: String, + name: String, + ) -> Result>, CubeError>; + #[nbridge(vec)] + fn evaluate_rollup_references( + &self, + cube: String, + sql: Rc, + ) -> Result, CubeError>; } diff --git a/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/mod.rs b/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/mod.rs index c0c6295b367af..69286f9c1a44b 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/mod.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/mod.rs @@ -30,3 +30,4 @@ pub mod segment_definition; pub mod sql_templates_render; pub mod sql_utils; pub mod struct_with_sql_member; +pub mod timeshift_definition; diff --git a/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/pre_aggregation_description.rs b/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/pre_aggregation_description.rs index 72ffd10662151..aaf650503f00b 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/pre_aggregation_description.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/pre_aggregation_description.rs @@ -32,4 +32,7 @@ pub trait PreAggregationDescription { #[nbridge(field, optional)] fn time_dimension_reference(&self) -> Result>, CubeError>; + + #[nbridge(field, optional)] + fn rollup_references(&self) -> Result>, CubeError>; } diff --git a/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/timeshift_definition.rs b/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/timeshift_definition.rs new file mode 100644 index 0000000000000..1f507831188c9 --- /dev/null +++ b/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/timeshift_definition.rs @@ -0,0 +1,23 @@ +use super::member_sql::{MemberSql, NativeMemberSql}; +use cubenativeutils::wrappers::serializer::{ + NativeDeserialize, NativeDeserializer, NativeSerialize, +}; +use cubenativeutils::wrappers::NativeContextHolder; +use cubenativeutils::wrappers::NativeObjectHandle; +use cubenativeutils::CubeError; +use serde::{Deserialize, Serialize}; +use std::any::Any; +use std::rc::Rc; + +#[derive(Deserialize, Serialize, Clone, Debug, PartialEq, Eq, Hash)] +pub struct TimeShiftDefinitionStatic { + pub interval: String, + #[serde(rename = "type")] + pub timeshift_type: String, +} + +#[nativebridge::native_bridge(TimeShiftDefinitionStatic)] +pub trait TimeShiftDefinition { + #[nbridge(field, optional)] + fn sql(&self) -> Result>, CubeError>; +} diff --git a/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/multistage/common.rs b/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/multistage/common.rs index 7a3b86859b438..5ca1ddd776f6a 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/multistage/common.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/multistage/common.rs @@ -53,9 +53,6 @@ impl PrettyPrint for MultiStageAppliedState { } result.println("time_shifts:", &state); - if let Some(common) = &self.time_shifts().common_time_shift { - result.println(&format!("- common: {}", common.to_sql()), &details_state); - } for (_, time_shift) in self.time_shifts().dimensions_shifts.iter() { result.println( &format!( diff --git a/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/multistage/leaf_measure.rs b/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/multistage/leaf_measure.rs index 394c79125451c..214ab412fb8d8 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/multistage/leaf_measure.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/multistage/leaf_measure.rs @@ -22,12 +22,9 @@ impl PrettyPrint for MultiStageLeafMeasure { if self.render_measure_for_ungrouped { result.println("render_measure_for_ungrouped: true", &state); } - if !self.time_shifts.dimensions_shifts.is_empty() { + if !self.time_shifts.is_empty() { result.println("time_shifts:", &state); let details_state = state.new_level(); - if let Some(common) = &self.time_shifts.common_time_shift { - result.println(&format!("- common: {}", common.to_sql()), &details_state); - } for (_, time_shift) in self.time_shifts.dimensions_shifts.iter() { result.println( &format!( diff --git a/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/optimizers/pre_aggregation/compiled_pre_aggregation.rs b/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/optimizers/pre_aggregation/compiled_pre_aggregation.rs index e47d5bfd2805b..291b7e1b69ff1 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/optimizers/pre_aggregation/compiled_pre_aggregation.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/optimizers/pre_aggregation/compiled_pre_aggregation.rs @@ -1,14 +1,40 @@ -use crate::cube_bridge::member_sql::MemberSql; -use crate::cube_bridge::pre_aggregation_description::PreAggregationDescription; -use crate::planner::query_tools::QueryTools; -use crate::planner::sql_evaluator::MemberSymbol; -use cubenativeutils::CubeError; +use crate::planner::sql_evaluator::{MemberSymbol, SqlCall}; use std::fmt::Debug; use std::rc::Rc; + +#[derive(Clone)] +pub struct PreAggregationJoinItem { + pub from: PreAggregationTable, + pub to: PreAggregationTable, + pub from_members: Vec>, + pub to_members: Vec>, + pub on_sql: Rc, +} + +#[derive(Clone)] +pub struct PreAggregationJoin { + pub root: PreAggregationTable, + pub items: Vec, +} + +#[derive(Clone)] +pub struct PreAggregationTable { + pub cube_name: String, + pub name: String, + pub alias: Option, +} + +#[derive(Clone)] +pub enum PreAggregationSource { + Table(PreAggregationTable), + Join(PreAggregationJoin), +} + #[derive(Clone)] pub struct CompiledPreAggregation { pub cube_name: String, pub name: String, + pub source: Rc, pub granularity: Option, pub external: Option, pub measures: Vec>, @@ -34,104 +60,3 @@ impl Debug for CompiledPreAggregation { .finish() } } - -impl CompiledPreAggregation { - pub fn try_new( - query_tools: Rc, - cube_name: &String, - description: Rc, - ) -> Result, CubeError> { - let static_data = description.static_data(); - let measures = if let Some(refs) = description.measure_references()? { - Self::symbols_from_ref(query_tools.clone(), cube_name, refs, Self::check_is_measure)? - } else { - Vec::new() - }; - let dimensions = if let Some(refs) = description.dimension_references()? { - Self::symbols_from_ref( - query_tools.clone(), - cube_name, - refs, - Self::check_is_dimension, - )? - } else { - Vec::new() - }; - let time_dimensions = if let Some(refs) = description.time_dimension_reference()? { - let dims = Self::symbols_from_ref( - query_tools.clone(), - cube_name, - refs, - Self::check_is_time_dimension, - )?; - /* if dims.len() != 1 { - return Err(CubeError::user(format!( - "Pre aggregation should contains only one time dimension" - ))); - } */ - vec![(dims[0].clone(), static_data.granularity.clone())] //TODO remove unwrap - } else { - Vec::new() - }; - let allow_non_strict_date_range_match = description - .static_data() - .allow_non_strict_date_range_match - .unwrap_or(false); - let res = Rc::new(Self { - name: static_data.name.clone(), - cube_name: cube_name.clone(), - granularity: static_data.granularity.clone(), - external: static_data.external, - measures, - dimensions, - time_dimensions, - allow_non_strict_date_range_match, - }); - Ok(res) - } - - fn symbols_from_ref Result<(), CubeError>>( - query_tools: Rc, - cube_name: &String, - ref_func: Rc, - check_type_fn: F, - ) -> Result>, CubeError> { - let evaluator_compiler_cell = query_tools.evaluator_compiler().clone(); - let mut evaluator_compiler = evaluator_compiler_cell.borrow_mut(); - let sql_call = evaluator_compiler.compile_sql_call(cube_name, ref_func)?; - let mut res = Vec::new(); - for symbol in sql_call.get_dependencies().iter() { - check_type_fn(&symbol)?; - res.push(symbol.clone()); - } - Ok(res) - } - - fn check_is_measure(symbol: &MemberSymbol) -> Result<(), CubeError> { - symbol - .as_measure() - .map_err(|_| CubeError::user(format!("Pre-aggregation measure must be a measure")))?; - Ok(()) - } - - fn check_is_dimension(symbol: &MemberSymbol) -> Result<(), CubeError> { - symbol.as_dimension().map_err(|_| { - CubeError::user(format!("Pre-aggregation dimension must be a dimension")) - })?; - Ok(()) - } - - fn check_is_time_dimension(symbol: &MemberSymbol) -> Result<(), CubeError> { - let dimension = symbol.as_dimension().map_err(|_| { - CubeError::user(format!( - "Pre-aggregation time dimension must be a dimension" - )) - })?; - if dimension.dimension_type() != "time" { - return Err(CubeError::user(format!( - "Pre-aggregation time dimension must be a dimension" - ))); - } - Ok(()) - } -} diff --git a/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/optimizers/pre_aggregation/mod.rs b/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/optimizers/pre_aggregation/mod.rs index a3fbe777d9fe0..51c2da6e499db 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/optimizers/pre_aggregation/mod.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/optimizers/pre_aggregation/mod.rs @@ -4,6 +4,7 @@ mod measure_matcher; mod optimizer; mod original_sql_collector; mod original_sql_optimizer; +mod pre_aggregations_compiler; pub use compiled_pre_aggregation::*; use dimension_matcher::*; @@ -11,3 +12,4 @@ use measure_matcher::*; pub use optimizer::*; pub use original_sql_collector::*; pub use original_sql_optimizer::*; +pub use pre_aggregations_compiler::*; diff --git a/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/optimizers/pre_aggregation/optimizer.rs b/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/optimizers/pre_aggregation/optimizer.rs index 1fff70496060f..c812c57e3cdca 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/optimizers/pre_aggregation/optimizer.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/optimizers/pre_aggregation/optimizer.rs @@ -1,3 +1,4 @@ +use super::PreAggregationsCompiler; use super::*; use crate::logical_plan::*; use crate::plan::FilterItem; @@ -43,22 +44,9 @@ impl PreAggregationOptimizer { let mut cube_names_collector = CubeNamesCollector::new(); cube_names_collector.collect(&plan)?; let cube_names = cube_names_collector.result(); + let mut compiler = PreAggregationsCompiler::try_new(self.query_tools.clone(), &cube_names)?; - let mut compiled_pre_aggregations = Vec::new(); - for cube_name in cube_names.iter() { - let pre_aggregations = self - .query_tools - .cube_evaluator() - .pre_aggregations_for_cube_as_array(cube_name.clone())?; - for pre_aggregation in pre_aggregations.iter() { - let compiled = CompiledPreAggregation::try_new( - self.query_tools.clone(), - cube_name, - pre_aggregation.clone(), - )?; - compiled_pre_aggregations.push(compiled); - } - } + let compiled_pre_aggregations = compiler.compile_all_pre_aggregations()?; for pre_aggregation in compiled_pre_aggregations.iter() { let new_query = self.try_rewrite_query(plan.clone(), pre_aggregation)?; @@ -413,51 +401,44 @@ impl PreAggregationOptimizer { &mut self, pre_aggregation: &Rc, ) -> Result, CubeError> { - let pre_aggregation_obj = self.query_tools.base_tools().get_pre_aggregation_by_name( + /* let pre_aggregation_obj = self.query_tools.base_tools().get_pre_aggregation_by_name( pre_aggregation.cube_name.clone(), pre_aggregation.name.clone(), - )?; - if let Some(table_name) = &pre_aggregation_obj.static_data().table_name { - let schema = LogicalSchema { - time_dimensions: vec![], - dimensions: pre_aggregation - .dimensions - .iter() - .cloned() - .chain( - pre_aggregation - .time_dimensions - .iter() - .map(|(d, _)| d.clone()), - ) - .collect(), - measures: pre_aggregation.measures.to_vec(), - multiplied_measures: HashSet::new(), - }; - let pre_aggregation = PreAggregation { - name: pre_aggregation.name.clone(), - time_dimensions: pre_aggregation.time_dimensions.clone(), - dimensions: pre_aggregation.dimensions.clone(), - measures: pre_aggregation.measures.clone(), - schema: Rc::new(schema), - external: pre_aggregation.external.unwrap_or_default(), - granularity: pre_aggregation.granularity.clone(), - table_name: table_name.clone(), - cube_name: pre_aggregation.cube_name.clone(), - pre_aggregation_obj, - }; - let result = Rc::new(pre_aggregation); - self.used_pre_aggregations.insert( - (result.cube_name.clone(), result.name.clone()), - result.clone(), - ); - Ok(result) - } else { - Err(CubeError::internal(format!( - "Cannot find pre aggregation object for cube {} and name {}", - pre_aggregation.cube_name, pre_aggregation.name - ))) - } + )?; */ + //if let Some(table_name) = &pre_aggregation_obj.static_data().table_name { + let schema = LogicalSchema { + time_dimensions: vec![], + dimensions: pre_aggregation + .dimensions + .iter() + .cloned() + .chain( + pre_aggregation + .time_dimensions + .iter() + .map(|(d, _)| d.clone()), + ) + .collect(), + measures: pre_aggregation.measures.to_vec(), + multiplied_measures: HashSet::new(), + }; + let pre_aggregation = PreAggregation { + name: pre_aggregation.name.clone(), + time_dimensions: pre_aggregation.time_dimensions.clone(), + dimensions: pre_aggregation.dimensions.clone(), + measures: pre_aggregation.measures.clone(), + schema: Rc::new(schema), + external: pre_aggregation.external.unwrap_or_default(), + granularity: pre_aggregation.granularity.clone(), + source: pre_aggregation.source.clone(), + cube_name: pre_aggregation.cube_name.clone(), + }; + let result = Rc::new(pre_aggregation); + self.used_pre_aggregations.insert( + (result.cube_name.clone(), result.name.clone()), + result.clone(), + ); + Ok(result) } fn is_schema_and_filters_match( diff --git a/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/optimizers/pre_aggregation/original_sql_optimizer.rs b/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/optimizers/pre_aggregation/original_sql_optimizer.rs index 4bd5c1ea078d3..4edb5beb33007 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/optimizers/pre_aggregation/original_sql_optimizer.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/optimizers/pre_aggregation/original_sql_optimizer.rs @@ -1,3 +1,4 @@ +use super::PreAggregationsCompiler; use super::*; use crate::logical_plan::*; use crate::planner::query_tools::QueryTools; @@ -352,25 +353,11 @@ impl OriginalSqlOptimizer { let res = if let Some(found_pre_aggregation) = self.foud_pre_aggregations.get(cube_name) { Some(found_pre_aggregation.clone()) } else { - let pre_aggregations = self - .query_tools - .cube_evaluator() - .pre_aggregations_for_cube_as_array(cube_name.clone())?; - if let Some(found_pre_aggregation) = pre_aggregations - .iter() - .find(|p| p.static_data().pre_aggregation_type == "originalSql") - { - let compiled = CompiledPreAggregation::try_new( - self.query_tools.clone(), - cube_name, - found_pre_aggregation.clone(), - )?; - self.foud_pre_aggregations - .insert(cube_name.clone(), compiled.clone()); - Some(compiled) - } else { - None - } + let mut compiler = PreAggregationsCompiler::try_new( + self.query_tools.clone(), + &vec![cube_name.clone()], + )?; + compiler.compile_origin_sql_pre_aggregation(&cube_name)? }; Ok(res) } diff --git a/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/optimizers/pre_aggregation/pre_aggregations_compiler.rs b/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/optimizers/pre_aggregation/pre_aggregations_compiler.rs new file mode 100644 index 0000000000000..b97b8a529907f --- /dev/null +++ b/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/optimizers/pre_aggregation/pre_aggregations_compiler.rs @@ -0,0 +1,370 @@ +use super::CompiledPreAggregation; +use super::PreAggregationSource; +use crate::cube_bridge::join_hints::JoinHintItem; +use crate::cube_bridge::member_sql::MemberSql; +use crate::cube_bridge::pre_aggregation_description::PreAggregationDescription; +use crate::logical_plan::PreAggregationJoin; +use crate::logical_plan::PreAggregationJoinItem; +use crate::logical_plan::PreAggregationTable; +use crate::planner::planners::JoinPlanner; +use crate::planner::planners::ResolvedJoinItem; +use crate::planner::query_tools::QueryTools; +use crate::planner::sql_evaluator::collectors::collect_cube_names_from_symbols; +use crate::planner::sql_evaluator::MemberSymbol; +use cubenativeutils::CubeError; +use itertools::Itertools; +use std::collections::HashMap; +use std::fmt::Debug; +use std::rc::Rc; + +#[derive(Debug, Clone, Hash, PartialEq, Eq)] +pub struct PreAggregationFullName { + pub cube_name: String, + pub name: String, +} + +impl PreAggregationFullName { + pub fn from_string(name: &str) -> Result { + let parts = name.split('.').collect_vec(); + if parts.len() != 2 { + Err(CubeError::user(format!( + "Invalid pre-aggregation name: {}", + name + ))) + } else { + Ok(Self { + cube_name: parts[0].to_string(), + name: parts[1].to_string(), + }) + } + } + + pub fn new(cube_name: String, name: String) -> Self { + Self { cube_name, name } + } +} + +pub struct PreAggregationsCompiler { + query_tools: Rc, + descriptions: Rc)>>, + compiled_cache: HashMap>, +} + +impl PreAggregationsCompiler { + pub fn try_new( + query_tools: Rc, + cube_names: &Vec, + ) -> Result { + let mut descriptions = Vec::new(); + for cube_name in cube_names.iter() { + let pre_aggregations = query_tools + .cube_evaluator() + .pre_aggregations_for_cube_as_array(cube_name.clone())?; + for pre_aggregation in pre_aggregations.iter() { + let full_name = PreAggregationFullName::new( + cube_name.clone(), + pre_aggregation.static_data().name.clone(), + ); + descriptions.push((full_name, pre_aggregation.clone())); + } + } + Ok(Self { + query_tools, + descriptions: Rc::new(descriptions), + compiled_cache: HashMap::new(), + }) + } + + pub fn compile_pre_aggregation( + &mut self, + name: &PreAggregationFullName, + ) -> Result, CubeError> { + if let Some(compiled) = self.compiled_cache.get(&name) { + return Ok(compiled.clone()); + } + + let description = if let Some((_, description)) = + self.descriptions.clone().iter().find(|(n, _)| n == name) + { + description.clone() + } else { + if let Some(descr) = self + .query_tools + .cube_evaluator() + .pre_aggregation_description_by_name(name.cube_name.clone(), name.name.clone())? + { + descr + } else { + return Err(CubeError::internal(format!( + "Undefined pre-aggregation {}.{}", + name.cube_name, name.name + ))); + } + }; + + let static_data = description.static_data(); + let measures = if let Some(refs) = description.measure_references()? { + Self::symbols_from_ref( + self.query_tools.clone(), + &name.cube_name, + refs, + Self::check_is_measure, + )? + } else { + Vec::new() + }; + let dimensions = if let Some(refs) = description.dimension_references()? { + Self::symbols_from_ref( + self.query_tools.clone(), + &name.cube_name, + refs, + Self::check_is_dimension, + )? + } else { + Vec::new() + }; + let time_dimensions = if let Some(refs) = description.time_dimension_reference()? { + let dims = Self::symbols_from_ref( + self.query_tools.clone(), + &name.cube_name, + refs, + Self::check_is_time_dimension, + )?; + vec![(dims[0].clone(), static_data.granularity.clone())] + } else { + Vec::new() + }; + let allow_non_strict_date_range_match = description + .static_data() + .allow_non_strict_date_range_match + .unwrap_or(false); + let rollups = if let Some(refs) = description.rollup_references()? { + let r = self + .query_tools + .cube_evaluator() + .evaluate_rollup_references(name.cube_name.clone(), refs)?; + r + } else { + Vec::new() + }; + + let source = if static_data.pre_aggregation_type == "rollupJoin" { + PreAggregationSource::Join(self.build_join_source(&measures, &dimensions, &rollups)?) + } else { + PreAggregationSource::Table(PreAggregationTable { + cube_name: name.cube_name.clone(), + name: name.name.clone(), + alias: static_data.sql_alias.clone(), + }) + }; + + let res = Rc::new(CompiledPreAggregation { + name: static_data.name.clone(), + cube_name: name.cube_name.clone(), + source: Rc::new(source), + granularity: static_data.granularity.clone(), + external: static_data.external, + measures, + dimensions, + time_dimensions, + allow_non_strict_date_range_match, + }); + self.compiled_cache.insert(name.clone(), res.clone()); + Ok(res) + } + + fn build_join_source( + &mut self, + measures: &Vec>, + dimensions: &Vec>, + rollups: &Vec, + ) -> Result { + let all_symbols = measures + .iter() + .cloned() + .chain(dimensions.iter().cloned()) + .collect_vec(); + let pre_aggr_join_hints = collect_cube_names_from_symbols(&all_symbols)? + .into_iter() + .map(|v| JoinHintItem::Single(v)) + .collect_vec(); + + let join_planner = JoinPlanner::new(self.query_tools.clone()); + let pre_aggrs_for_join = rollups + .iter() + .map(|item| -> Result<_, CubeError> { + self.compile_pre_aggregation(&PreAggregationFullName::from_string(item)?) + }) + .collect::, _>>()?; + + let target_joins = join_planner.resolve_join_members_by_hints(&pre_aggr_join_hints)?; + let mut existing_joins = vec![]; + for join_pre_aggr in pre_aggrs_for_join.iter() { + let all_symbols = join_pre_aggr + .measures + .iter() + .cloned() + .chain(join_pre_aggr.dimensions.iter().cloned()) + .collect_vec(); + let join_pre_aggr_join_hints = collect_cube_names_from_symbols(&all_symbols)? + .into_iter() + .map(|v| JoinHintItem::Single(v)) + .collect_vec(); + existing_joins.append( + &mut join_planner.resolve_join_members_by_hints(&join_pre_aggr_join_hints)?, + ); + } + + let not_existing_joins = target_joins + .into_iter() + .filter(|join| { + !existing_joins + .iter() + .any(|existing| existing.is_same_as(join)) + }) + .collect_vec(); + + if not_existing_joins.is_empty() { + return Err(CubeError::user(format!("Nothing to join in rollup join. Target joins are included in existing rollup joins"))); + } + + let items = not_existing_joins + .iter() + .map(|item| self.make_pre_aggregation_join_item(&pre_aggrs_for_join, item)) + .collect::, _>>()?; + let res = PreAggregationJoin { + root: items[0].from.clone(), + items, + }; + Ok(res) + } + + fn make_pre_aggregation_join_item( + &self, + pre_aggrs_for_join: &Vec>, + join_item: &ResolvedJoinItem, + ) -> Result { + let from_pre_aggr = + self.find_pre_aggregation_for_join(pre_aggrs_for_join, &join_item.from_members)?; + let to_pre_aggr = + self.find_pre_aggregation_for_join(pre_aggrs_for_join, &join_item.to_members)?; + + let from_table = match from_pre_aggr.source.as_ref() { + PreAggregationSource::Table(t) => t.clone(), + PreAggregationSource::Join(_) => { + return Err(CubeError::user(format!("Rollup join can't be nested"))); + } + }; + let to_table = match to_pre_aggr.source.as_ref() { + PreAggregationSource::Table(t) => t.clone(), + PreAggregationSource::Join(_) => { + return Err(CubeError::user(format!("Rollup join can't be nested"))); + } + }; + let res = PreAggregationJoinItem { + from: from_table, + to: to_table, + from_members: join_item.from_members.clone(), + to_members: join_item.to_members.clone(), + on_sql: join_item.on_sql.clone(), + }; + Ok(res) + } + + fn find_pre_aggregation_for_join( + &self, + pre_aggrs_for_join: &Vec>, + members: &Vec>, + ) -> Result, CubeError> { + let found_pre_aggr = pre_aggrs_for_join + .iter() + .filter(|pa| { + members + .iter() + .all(|m| pa.dimensions.iter().any(|pa_m| m == pa_m)) + }) + .collect_vec(); + if found_pre_aggr.is_empty() { + return Err(CubeError::user(format!( + "No rollups found that can be used for rollup join" + ))); + } + if found_pre_aggr.len() > 1 { + return Err(CubeError::user(format!( + "Multiple rollups found that can be used for rollup join" + ))); + } + + Ok(found_pre_aggr[0].clone()) + } + + pub fn compile_all_pre_aggregations( + &mut self, + ) -> Result>, CubeError> { + let mut result = Vec::new(); + for (name, _) in self.descriptions.clone().iter() { + result.push(self.compile_pre_aggregation(&name)?); + } + Ok(result) + } + + pub fn compile_origin_sql_pre_aggregation( + &mut self, + cube_name: &String, + ) -> Result>, CubeError> { + let res = if let Some((name, _)) = self.descriptions.clone().iter().find(|(name, descr)| { + &name.cube_name == cube_name + && &descr.static_data().pre_aggregation_type == "originalSql" + }) { + Some(self.compile_pre_aggregation(name)?) + } else { + None + }; + Ok(res) + } + + fn symbols_from_ref Result<(), CubeError>>( + query_tools: Rc, + cube_name: &String, + ref_func: Rc, + check_type_fn: F, + ) -> Result>, CubeError> { + let evaluator_compiler_cell = query_tools.evaluator_compiler().clone(); + let mut evaluator_compiler = evaluator_compiler_cell.borrow_mut(); + let sql_call = evaluator_compiler.compile_sql_call(cube_name, ref_func)?; + let mut res = Vec::new(); + for symbol in sql_call.get_dependencies().iter() { + check_type_fn(&symbol)?; + res.push(symbol.clone()); + } + Ok(res) + } + + fn check_is_measure(symbol: &MemberSymbol) -> Result<(), CubeError> { + symbol + .as_measure() + .map_err(|_| CubeError::user(format!("Pre-aggregation measure must be a measure")))?; + Ok(()) + } + + fn check_is_dimension(symbol: &MemberSymbol) -> Result<(), CubeError> { + symbol.as_dimension().map_err(|_| { + CubeError::user(format!("Pre-aggregation dimension must be a dimension")) + })?; + Ok(()) + } + + fn check_is_time_dimension(symbol: &MemberSymbol) -> Result<(), CubeError> { + let dimension = symbol.as_dimension().map_err(|_| { + CubeError::user(format!( + "Pre-aggregation time dimension must be a dimension" + )) + })?; + if dimension.dimension_type() != "time" { + return Err(CubeError::user(format!( + "Pre-aggregation time dimension must be a dimension" + ))); + } + Ok(()) + } +} diff --git a/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/pre_aggregation.rs b/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/pre_aggregation.rs index 85ec32be2fbc4..d61a8facc853d 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/pre_aggregation.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/pre_aggregation.rs @@ -1,5 +1,5 @@ +use super::pre_aggregation::PreAggregationSource; use super::*; -use crate::cube_bridge::pre_aggregation_obj::PreAggregationObj; use crate::planner::sql_evaluator::MemberSymbol; use itertools::Itertools; use std::rc::Rc; @@ -12,9 +12,8 @@ pub struct PreAggregation { pub time_dimensions: Vec<(Rc, Option)>, pub external: bool, pub granularity: Option, - pub table_name: String, + pub source: Rc, pub cube_name: String, - pub pre_aggregation_obj: Rc, } impl PrettyPrint for PreAggregation { @@ -23,7 +22,20 @@ impl PrettyPrint for PreAggregation { let state = state.new_level(); result.println(&format!("name: {}", self.name), &state); result.println(&format!("cube_name: {}", self.cube_name), &state); - result.println(&format!("table_name: {}", self.table_name), &state); + result.println(&format!("source:"), &state); + match self.source.as_ref() { + PreAggregationSource::Table(table) => { + let state = state.new_level(); + result.println( + &format!("table: {}.{}", table.cube_name, table.name), + &state, + ); + } + PreAggregationSource::Join(_) => { + let state = state.new_level(); + result.println(&format!("rollup join"), &state); + } + } result.println(&format!("external: {}", self.external), &state); result.println( &format!( diff --git a/rust/cubesqlplanner/cubesqlplanner/src/physical_plan_builder/builder.rs b/rust/cubesqlplanner/cubesqlplanner/src/physical_plan_builder/builder.rs index 2c66e0977b4a6..0d739f697e215 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/physical_plan_builder/builder.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/physical_plan_builder/builder.rs @@ -5,17 +5,19 @@ use crate::planner::planners::multi_stage::TimeShiftState; use crate::planner::query_properties::OrderByItem; use crate::planner::query_tools::QueryTools; use crate::planner::sql_evaluator::sql_nodes::SqlNodesFactory; -use crate::planner::sql_evaluator::MemberSymbol; +use crate::planner::sql_evaluator::symbols::CalendarDimensionTimeShift; use crate::planner::sql_evaluator::ReferencesBuilder; +use crate::planner::sql_evaluator::{DimensionTimeShift, MemberSymbol}; use crate::planner::sql_templates::PlanSqlTemplates; use crate::planner::BaseMemberHelper; use crate::planner::SqlJoinCondition; use crate::planner::{BaseMember, MemberSymbolRef}; use cubenativeutils::CubeError; -use itertools::Itertools; +use itertools::{Either, Itertools}; use std::collections::HashMap; use std::collections::HashSet; use std::rc::Rc; + const TOTAL_COUNT: &str = "total_count"; const ORIGINAL_QUERY: &str = "original_query"; @@ -31,7 +33,35 @@ struct PhysicalPlanBuilderContext { impl PhysicalPlanBuilderContext { pub fn make_sql_nodes_factory(&self) -> SqlNodesFactory { let mut factory = SqlNodesFactory::new(); - factory.set_time_shifts(self.time_shifts.clone()); + + let (time_shifts, calendar_time_shifts): ( + HashMap, + HashMap, + ) = self + .time_shifts + .dimensions_shifts + .iter() + .partition_map(|(key, shift)| { + if let Ok(dimension) = shift.dimension.as_dimension() { + if let Some((dim_key, cts)) = + dimension.calendar_time_shift_for_interval(&shift.interval) + { + return Either::Right((dim_key.clone(), cts.clone())); + } else if let Some(calendar_pk) = dimension.time_shift_pk() { + let mut shift = shift.clone(); + shift.interval = shift.interval.inverse(); + return Either::Left((calendar_pk.full_name(), shift.clone())); + } + } + Either::Left((key.clone(), shift.clone())) + }); + + let common_time_shifts = TimeShiftState { + dimensions_shifts: time_shifts, + }; + + factory.set_time_shifts(common_time_shifts); + factory.set_calendar_time_shifts(calendar_time_shifts); factory.set_count_approx_as_state(self.render_measure_as_state); factory.set_ungrouped_measure(self.render_measure_for_ungrouped); factory.set_original_sql_pre_aggregations(self.original_sql_pre_aggregations.clone()); @@ -185,16 +215,11 @@ impl PhysicalPlanBuilder { fn process_pre_aggregation( &self, pre_aggregation: &Rc, - _context: &PhysicalPlanBuilderContext, + context: &PhysicalPlanBuilderContext, measure_references: &mut HashMap, dimensions_references: &mut HashMap, ) -> Result, CubeError> { let mut pre_aggregation_schema = Schema::empty(); - let pre_aggregation_alias = PlanSqlTemplates::memeber_alias_name( - &pre_aggregation.cube_name, - &pre_aggregation.name, - &None, - ); for dim in pre_aggregation.dimensions.iter() { let alias = BaseMemberHelper::default_alias( &dim.cube_name(), @@ -204,7 +229,7 @@ impl PhysicalPlanBuilder { )?; dimensions_references.insert( dim.full_name(), - QualifiedColumnName::new(Some(pre_aggregation_alias.clone()), alias.clone()), + QualifiedColumnName::new(None, alias.clone()), ); pre_aggregation_schema.add_column(SchemaColumn::new(alias, Some(dim.full_name()))); } @@ -217,7 +242,7 @@ impl PhysicalPlanBuilder { )?; dimensions_references.insert( dim.full_name(), - QualifiedColumnName::new(Some(pre_aggregation_alias.clone()), alias.clone()), + QualifiedColumnName::new(None, alias.clone()), ); pre_aggregation_schema.add_column(SchemaColumn::new(alias, Some(dim.full_name()))); } @@ -230,18 +255,78 @@ impl PhysicalPlanBuilder { )?; measure_references.insert( meas.full_name(), - QualifiedColumnName::new(Some(pre_aggregation_alias.clone()), alias.clone()), + QualifiedColumnName::new(None, alias.clone()), ); pre_aggregation_schema.add_column(SchemaColumn::new(alias, Some(meas.full_name()))); } - let from = From::new_from_table_reference( - pre_aggregation.table_name.clone(), - Rc::new(pre_aggregation_schema), - Some(pre_aggregation_alias), - ); + let from = self.make_pre_aggregation_source( + &pre_aggregation.source, + context, + measure_references, + dimensions_references, + )?; + Ok(from) + } + + fn make_pre_aggregation_source( + &self, + source: &Rc, + _context: &PhysicalPlanBuilderContext, + _measure_references: &mut HashMap, + dimensions_references: &mut HashMap, + ) -> Result, CubeError> { + let from = match source.as_ref() { + PreAggregationSource::Table(table) => { + let table_source = self.make_pre_aggregation_table_source(table)?; + From::new(FromSource::Single(table_source)) + } + PreAggregationSource::Join(join) => { + let root_table_source = self.make_pre_aggregation_table_source(&join.root)?; + let mut join_builder = JoinBuilder::new(root_table_source); + for item in join.items.iter() { + let to_table_source = self.make_pre_aggregation_table_source(&item.to)?; + let condition = + SqlJoinCondition::try_new(self.query_tools.clone(), item.on_sql.clone())?; + let on = JoinCondition::new_base_join(condition); + join_builder.left_join_aliased_source(to_table_source, on); + for member in item.from_members.iter().chain(item.to_members.iter()) { + let alias = BaseMemberHelper::default_alias( + &member.cube_name(), + &member.name(), + &None, + self.query_tools.clone(), + )?; + dimensions_references.insert( + member.full_name(), + QualifiedColumnName::new(None, alias.clone()), + ); + } + } + let from = From::new_from_join(join_builder.build()); + from + } + }; Ok(from) } + fn make_pre_aggregation_table_source( + &self, + table: &PreAggregationTable, + ) -> Result { + let name = table.alias.clone().unwrap_or_else(|| table.name.clone()); + let table_name = self + .query_tools + .base_tools() + .pre_aggregation_table_name(table.cube_name.clone(), name.clone())?; + let alias = PlanSqlTemplates::memeber_alias_name(&table.cube_name, &name, &None); + let res = SingleAliasedSource::new_from_table_reference( + table_name, + Rc::new(Schema::empty()), + Some(alias), + ); + Ok(res) + } + fn build_full_key_aggregate_query( &self, logical_plan: &FullKeyAggregateQuery, @@ -965,8 +1050,9 @@ impl PhysicalPlanBuilder { )); }; - let ts_date_range = if self.plan_sql_templates.supports_generated_time_series() - && granularity_obj.is_predefined_granularity() + let ts_date_range = if self + .plan_sql_templates + .supports_generated_time_series(granularity_obj.is_predefined_granularity())? { if let Some(date_range) = time_dimension_symbol .get_range_for_time_series(date_range, self.query_tools.timezone())? diff --git a/rust/cubesqlplanner/cubesqlplanner/src/plan/builder/join.rs b/rust/cubesqlplanner/cubesqlplanner/src/plan/builder/join.rs index db8914b71a647..733888b9bc663 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/plan/builder/join.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/plan/builder/join.rs @@ -47,6 +47,14 @@ impl JoinBuilder { )) } + pub fn left_join_aliased_source(&mut self, source: SingleAliasedSource, on: JoinCondition) { + self.joins.push(JoinItem { + from: source, + on, + join_type: JoinType::Left, + }); + } + pub fn left_join_subselect(&mut self, subquery: Rc