diff --git a/.github/actions/integration/elasticsearch.sh b/.github/actions/integration/elasticsearch.sh
deleted file mode 100755
index a8e992bd1e48a..0000000000000
--- a/.github/actions/integration/elasticsearch.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/bash
-set -eo pipefail
-
-# Debug log for test containers
-export DEBUG=testcontainers
-
-export TEST_ELASTIC_OPENDISTRO_VERSION=1.13.1
-
-echo "::group::ElasticSearch Open Distro ${TEST_ELASTIC_OPENDISTRO_VERSION}";
-docker pull amazon/opendistro-for-elasticsearch:${TEST_ELASTIC_OPENDISTRO_VERSION}
-yarn lerna run --concurrency 1 --stream --no-prefix integration:elastic
-echo "::endgroup::"
diff --git a/.github/labeler.yml b/.github/labeler.yml
index 4ba956abe5a3f..2c1f7027c041e 100644
--- a/.github/labeler.yml
+++ b/.github/labeler.yml
@@ -44,10 +44,6 @@ driver:duckdb:
- changed-files:
- any-glob-to-any-file: packages/cubejs-duckdb-driver/**/*
-driver:elasticsearch:
-- changed-files:
- - any-glob-to-any-file: packages/cubejs-elasticsearch-driver/**/*
-
driver:firebolt:
- changed-files:
- any-glob-to-any-file: packages/cubejs-firebolt-driver/**/*
diff --git a/.github/workflows/bridge-tests.yml b/.github/workflows/bridge-tests.yml
index 30469aa1df583..cb6e2348b9dd1 100644
--- a/.github/workflows/bridge-tests.yml
+++ b/.github/workflows/bridge-tests.yml
@@ -36,7 +36,7 @@ jobs:
- name: Install Node.js
uses: actions/setup-node@v4
with:
- node-version: 22.x
+ node-version: 24.x
- name: Set Yarn version
run: yarn policies set-version v1.22.22
- name: Get yarn cache directory path
diff --git a/.github/workflows/drivers-tests.yml b/.github/workflows/drivers-tests.yml
index 8c5825bb1ad91..11f6bcb41c6e9 100644
--- a/.github/workflows/drivers-tests.yml
+++ b/.github/workflows/drivers-tests.yml
@@ -62,7 +62,7 @@ on:
use_tesseract_sql_planner:
description: 'Enable TESSERACT_SQL_PLANNER?'
required: true
- default: 'false'
+ default: 'true'
type: choice
options:
- 'true'
@@ -98,12 +98,12 @@ jobs:
name: Build native Linux ${{ matrix.node-version }} ${{ matrix.target }} Python ${{ matrix.python-version }}
strategy:
matrix:
- node-version: [ 22 ]
+ node-version: [ 24.18.0 ]
python-version: [ "fallback" ]
target: [ "x86_64-unknown-linux-gnu" ]
fail-fast: false
container:
- image: cubejs/rust-cross:${{ matrix.target }}-15082024
+ image: cubejs/rust-cross:${{ matrix.target }}-31072025
steps:
- name: Checkout
@@ -280,38 +280,38 @@ jobs:
- snowflake-export-bucket-azure-via-storage-integration
- snowflake-export-bucket-gcs
- snowflake-export-bucket-gcs-prefix
- use_tesseract_sql_planner: [ false ]
+ use_tesseract_sql_planner: [ true ]
include:
- database: postgres
- use_tesseract_sql_planner: true
+ use_tesseract_sql_planner: false
- database: snowflake
- use_tesseract_sql_planner: true
+ use_tesseract_sql_planner: false
- database: redshift
- use_tesseract_sql_planner: true
+ use_tesseract_sql_planner: false
- database: bigquery-export-bucket-gcs
- use_tesseract_sql_planner: true
+ use_tesseract_sql_planner: false
- database: athena-export-bucket-s3
- use_tesseract_sql_planner: true
+ use_tesseract_sql_planner: false
- database: databricks-jdbc
- use_tesseract_sql_planner: true
+ use_tesseract_sql_planner: false
- database: mysql
- use_tesseract_sql_planner: true
+ use_tesseract_sql_planner: false
- database: clickhouse
- use_tesseract_sql_planner: true
+ use_tesseract_sql_planner: false
- database: mssql
- use_tesseract_sql_planner: true
+ use_tesseract_sql_planner: false
- database: oracle
- use_tesseract_sql_planner: true
+ use_tesseract_sql_planner: false
fail-fast: false
steps:
- name: Checkout
uses: actions/checkout@v4
- - name: Install Node.js 22.x
+ - name: Install Node.js
uses: actions/setup-node@v4
with:
- node-version: 22.x
+ node-version-file: '.nvmrc'
- name: Configure `yarn`
run: yarn policies set-version v1.22.22
diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml
index b58f3b75adde8..ab0c6d65571d5 100644
--- a/.github/workflows/master.yml
+++ b/.github/workflows/master.yml
@@ -45,7 +45,7 @@ jobs:
timeout-minutes: 60
name: Build Linux Native backend for Dev image
container:
- image: cubejs/rust-cross:x86_64-unknown-linux-gnu-15082024-python-3.11
+ image: cubejs/rust-cross:x86_64-unknown-linux-gnu-31072025-python-3.13
steps:
- name: Checkout
@@ -64,10 +64,10 @@ jobs:
workspaces: ./rust/cubesql -> target
key: cubesql-x86_64-unknown-linux-gnu
shared-key: cubesql-x86_64-unknown-linux-gnu
- - name: Install Node.js 22
+ - name: Install Node.js 24
uses: actions/setup-node@v4
with:
- node-version: 22
+ node-version: 24
- name: Install Yarn
run: npm install -g yarn
- name: Set Yarn version
@@ -77,14 +77,14 @@ jobs:
run: npm install -g cargo-cp-artifact@0.1
- name: Build native (with Python)
env:
- PYO3_PYTHON: python3.11
+ PYO3_PYTHON: python3.13
CARGO_BUILD_TARGET: x86_64-unknown-linux-gnu
working-directory: ./packages/cubejs-backend-native
run: yarn run native:build-debug-python
- name: Store build artifact for dev image
uses: actions/upload-artifact@v4
with:
- name: "native-linux-x64-glibc-3.11.node" # this name is referenced below in docker-image-dev
+ name: "native-linux-x64-glibc-3.13.node" # this name is referenced below in docker-image-dev
path: ./packages/cubejs-backend-native/index.node
overwrite: true
@@ -99,7 +99,7 @@ jobs:
- name: Download backend-native artifact
uses: actions/download-artifact@v4
with:
- name: "native-linux-x64-glibc-3.11.node" # this name is referenced in above in native_linux
+ name: "native-linux-x64-glibc-3.13.node" # this name is referenced in above in native_linux
path: ./packages/cubejs-backend-native/
- name: Login to DockerHub
uses: docker/login-action@v3
diff --git a/.github/workflows/post-release.yml b/.github/workflows/post-release.yml
index 13663db586b1f..25bcfa04d0f77 100644
--- a/.github/workflows/post-release.yml
+++ b/.github/workflows/post-release.yml
@@ -28,7 +28,7 @@ jobs:
strategy:
fail-fast: false
matrix:
- node-version: [22.x]
+ node-version: [24.x]
steps:
- name: Checkout
uses: actions/checkout@v4
@@ -106,10 +106,10 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4
- - name: Install Node.js 22.x
+ - name: Install Node.js 24.x
uses: actions/setup-node@v4
with:
- node-version: 22.x
+ node-version: 24.x
- name: Restore lerna
uses: actions/cache@v4
with:
@@ -170,10 +170,10 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4
- - name: Install Node.js 22.x
+ - name: Install Node.js 24.x
uses: actions/setup-node@v4
with:
- node-version: 22.x
+ node-version: 24.x
- name: Restore lerna
uses: actions/cache@v4
with:
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index a78142e6bfd52..92d806deee2b3 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -27,10 +27,10 @@ jobs:
# override: true # this is by default on
rustflags: ""
components: rustfmt
- - name: Install Node.js 22.x
+ - name: Install Node.js 24.x
uses: actions/setup-node@v4
with:
- node-version: 22.x
+ node-version: 24.x
registry-url: 'https://registry.npmjs.org/'
- name: Upgrade npm for OIDC support
run: npm install -g npm@11.7.0
@@ -75,8 +75,8 @@ jobs:
name: Build native Linux ${{ matrix.node-version }} ${{ matrix.target }} Python ${{ matrix.python-version }}
strategy:
matrix:
- node-version: [22]
- python-version: ["3.9", "3.10", "3.11", "3.12", "fallback"]
+ node-version: [24]
+ python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "fallback"]
target: ["x86_64-unknown-linux-gnu", "aarch64-unknown-linux-gnu"]
include:
- target: x86_64-unknown-linux-gnu
@@ -89,7 +89,7 @@ jobs:
package_target_libc: glibc
fail-fast: false
container:
- image: cubejs/rust-cross:${{ matrix.target }}-15082024${{ matrix.python-version != 'fallback' && format('-python-{0}', matrix.python-version) || '' }}
+ image: cubejs/rust-cross:${{ matrix.target }}-31072025${{ matrix.python-version != 'fallback' && format('-python-{0}', matrix.python-version) || '' }}
permissions:
contents: write
steps:
@@ -154,9 +154,9 @@ jobs:
name: Build ${{ matrix.os-version }} ${{ matrix.target }} ${{ matrix.node-version }} Python ${{ matrix.python-version }}
strategy:
matrix:
- node-version: [22.x]
+ node-version: [24.x]
target: ["x86_64-apple-darwin", "aarch64-apple-darwin"]
- python-version: ["3.9", "3.10", "3.11", "3.12", "fallback"]
+ python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "fallback"]
include:
- target: x86_64-apple-darwin
os-version: macos-15-intel
@@ -243,7 +243,7 @@ jobs:
name: Build ${{ matrix.os-version }} ${{ matrix.node-version }} Python ${{ matrix.python-version }}
strategy:
matrix:
- node-version: [22.x]
+ node-version: [24.x]
python-version: ["fallback"]
os-version: [windows-2022]
include:
@@ -596,13 +596,13 @@ jobs:
# Please use minimal possible version of ubuntu, because it produces constraint on glibc
- os: ubuntu-22.04
target: x86_64-unknown-linux-gnu
- image: cubejs/rust-cross:x86_64-unknown-linux-gnu-15082024
+ image: cubejs/rust-cross:x86_64-unknown-linux-gnu-31072025
executable_name: cubestored
strip: true
compress: false
- os: ubuntu-22.04
target: x86_64-unknown-linux-musl
- image: cubejs/rust-cross:x86_64-unknown-linux-musl-15082024
+ image: cubejs/rust-cross:x86_64-unknown-linux-musl-31072025
executable_name: cubestored
strip: true
# cubestored: CantPackException: bad DT_HASH nbucket=0x344 len=0x1890
@@ -729,7 +729,7 @@ jobs:
run: vcpkg integrate install; vcpkg install openssl:x64-windows
- name: Instal LLVM for Windows
if: ${{ startsWith(matrix.os, 'windows') }}
- run: choco install -y --force llvm --version 18.1.6
+ run: choco install -y --force llvm --version 22.1.0
- name: Set Env Variables for Windows
uses: allenevans/set-env@v4.0.0
if: ${{ startsWith(matrix.os, 'windows') }}
diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml
index 7b7291256fc79..418483142ec66 100644
--- a/.github/workflows/push.yml
+++ b/.github/workflows/push.yml
@@ -40,7 +40,7 @@ on:
env:
# Current user version for Python. Should be aligned between build-native & docker-dev
- PYTHON_VERSION_CURRENT: 3.11
+ PYTHON_VERSION_CURRENT: 3.13
jobs:
latest-tag-sha:
@@ -75,10 +75,12 @@ jobs:
strategy:
matrix:
# Current docker version + next LTS
- # TODO: Add 24 after it's been released
- node-version: [22.x]
+ # TODO: Re-add 26.x after cubejs-duckdb-driver migrates off the frozen `duckdb`
+ # package (no prebuilt binaries for Node.js 26)
+ # node-version: [24.x, 26.x]
+ node-version: [24.x]
# Don't forget to update build-native-release
- python-version: [3.11]
+ python-version: [3.13]
fail-fast: false
steps:
@@ -134,16 +136,16 @@ jobs:
- name: Lerna test
run: yarn lerna run --concurrency 1 --stream --no-prefix unit
- name: Fix lcov paths
- if: (matrix.node-version == '22.x')
+ if: (matrix.node-version == '24.x')
run: |
./.github/actions/codecov-fix.sh
- name: Combine all fixed LCOV files
- if: (matrix.node-version == '22.x')
+ if: (matrix.node-version == '24.x')
run: |
echo "" > ./combined-unit.lcov
find ./packages -type f -name lcov.fixed.info -exec cat {} + >> ./combined-unit.lcov || true
- name: Upload coverage artifact
- if: (matrix.node-version == '22.x')
+ if: (matrix.node-version == '24.x')
uses: actions/upload-artifact@v4
with:
name: coverage-unit
@@ -165,10 +167,10 @@ jobs:
# override: true # this is by default on
rustflags: ""
components: rustfmt
- - name: Install Node.js 22.x
+ - name: Install Node.js 24.x
uses: actions/setup-node@v4
with:
- node-version: 22.x
+ node-version: 24.x
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "dir=$(yarn cache dir)" >> "$GITHUB_OUTPUT"
@@ -237,7 +239,7 @@ jobs:
timeout-minutes: 60
if: (needs['latest-tag-sha'].outputs.sha != github.sha)
container:
- image: cubejs/rust-cross:x86_64-unknown-linux-gnu-15082024
+ image: cubejs/rust-cross:x86_64-unknown-linux-gnu-31072025
steps:
- name: Checkout
uses: actions/checkout@v4
@@ -273,10 +275,10 @@ jobs:
strategy:
matrix:
# Don't forget to align with PYTHON_VERSION_CURRENT
- python-version: [ 3.11 ]
+ python-version: [ 3.13 ]
fail-fast: false
container:
- image: cubejs/rust-cross:x86_64-unknown-linux-gnu-15082024-python-${{ matrix.python-version }}
+ image: cubejs/rust-cross:x86_64-unknown-linux-gnu-31072025-python-${{ matrix.python-version }}
steps:
- name: Checkout
uses: actions/checkout@v4
@@ -294,10 +296,10 @@ jobs:
workspaces: ./packages/cubejs-backend-native
key: native-${{ runner.OS }}-x86_64-unknown-linux-gnu
shared-key: native-${{ runner.OS }}-x86_64-unknown-linux-gnu
- - name: Install Node.js 22
+ - name: Install Node.js 24
uses: actions/setup-node@v4
with:
- node-version: 22
+ node-version: 24
- name: Install Yarn
run: npm install -g yarn
- name: Set Yarn version
@@ -326,7 +328,7 @@ jobs:
strategy:
matrix:
- node-version: [22.x]
+ node-version: [24.x]
fail-fast: false
steps:
@@ -403,34 +405,37 @@ jobs:
strategy:
matrix:
- node-version: [22.x]
+ # TODO: Re-add 26.x after cubejs-duckdb-driver migrates off the frozen `duckdb`
+ # package (no prebuilt binaries for Node.js 26)
+ # node-version: [24.x, 26.x]
+ node-version: [24.x]
# Vertica tests are disabled because around 20.08.2025 someone
# totally removed all vertica-ce docker repository from dockerhub.
# @see https://github.com/vertica/vertica-containers/issues/64
db: [
'athena', 'bigquery', 'snowflake', 'trino',
- 'clickhouse', 'druid', 'elasticsearch', 'mssql', 'mysql', 'postgres', 'prestodb',
+ 'clickhouse', 'druid', 'mssql', 'mysql', 'postgres', 'prestodb',
'mysql-aurora-serverless', 'crate', 'mongobi', 'firebolt',
# 'dremio' # Commented out because of flaky integration tests
# 'vertica'
]
- use_tesseract_sql_planner: [ false ]
+ use_tesseract_sql_planner: [ true ]
include:
- db: postgres
- node-version: 22.x
- use_tesseract_sql_planner: true
+ node-version: 24.x
+ use_tesseract_sql_planner: false
- db: mssql
- node-version: 22.x
- use_tesseract_sql_planner: true
+ node-version: 24.x
+ use_tesseract_sql_planner: false
- db: firebolt
node-version: 22.x
- use_tesseract_sql_planner: true
+ use_tesseract_sql_planner: false
- db: mysql
node-version: 22.x
- use_tesseract_sql_planner: true
+ use_tesseract_sql_planner: false
- db: clickhouse
node-version: 22.x
- use_tesseract_sql_planner: true
+ use_tesseract_sql_planner: false
fail-fast: false
steps:
@@ -497,7 +502,6 @@ jobs:
(!contains(env.CLOUD_DATABASES, matrix.db))
env:
CUBEJS_TESSERACT_SQL_PLANNER: ${{ matrix.use_tesseract_sql_planner }}
- CUBEJS_TESSERACT_PRE_AGGREGATIONS: ${{ matrix.use_tesseract_sql_planner }}
# Firebolt Integration
DRIVERS_TESTS_FIREBOLT_CUBEJS_FIREBOLT_ENGINE_NAME: ${{ secrets.DRIVERS_TESTS_FIREBOLT_CUBEJS_FIREBOLT_ENGINE_NAME }}
@@ -521,13 +525,16 @@ jobs:
DRIVERS_TESTS_SNOWFLAKE_CUBEJS_DB_USER: ${{ secrets.DRIVERS_TESTS_CUBEJS_DB_SNOWFLAKE_USER }}
DRIVERS_TESTS_SNOWFLAKE_CUBEJS_DB_PASS: ${{ secrets.DRIVERS_TESTS_CUBEJS_DB_SNOWFLAKE_PASS }}
- name: Fix lcov paths
+ if: (matrix.node-version == '24.x')
run: |
./.github/actions/codecov-fix.sh
- name: Combine all fixed LCOV files
+ if: (matrix.node-version == '24.x')
run: |
echo "" > ./combined-integration-${{ matrix.db }}-${{ matrix.use_tesseract_sql_planner }}.lcov
find ./packages -type f -name lcov.fixed.info -exec cat {} + >> ./combined-integration-${{ matrix.db }}-${{ matrix.use_tesseract_sql_planner }}.lcov || true
- name: Upload coverage artifact
+ if: (matrix.node-version == '24.x')
uses: actions/upload-artifact@v4
with:
name: coverage-integration-${{ matrix.db }}-${{ matrix.use_tesseract_sql_planner }}
@@ -541,8 +548,8 @@ jobs:
strategy:
matrix:
- node-version: [ 22.x ]
- python-version: [ 3.11 ]
+ node-version: [ 24.x ]
+ python-version: [ 3.13 ]
use_tesseract_sql_planner: [ true, false ]
fail-fast: false
@@ -605,7 +612,6 @@ jobs:
timeout-minutes: 30
env:
CUBEJS_TESSERACT_SQL_PLANNER: ${{ matrix.use_tesseract_sql_planner }}
- CUBEJS_TESSERACT_PRE_AGGREGATIONS: ${{ matrix.use_tesseract_sql_planner }}
run: ./.github/actions/smoke.sh
docker-image-latest-set-tag:
@@ -636,7 +642,7 @@ jobs:
- 5000:5000
strategy:
matrix:
- node-version: [ 22 ]
+ node-version: [ 24 ]
target: [ "x86_64-unknown-linux-gnu" ]
dockerfile:
- dev.Dockerfile
diff --git a/.github/workflows/rust-cubesql.yml b/.github/workflows/rust-cubesql.yml
index 860285a48a759..a5a089855b97b 100644
--- a/.github/workflows/rust-cubesql.yml
+++ b/.github/workflows/rust-cubesql.yml
@@ -22,7 +22,7 @@ jobs:
timeout-minutes: 20
name: Check fmt/clippy
container:
- image: cubejs/rust-cross:x86_64-unknown-linux-gnu-15082024
+ image: cubejs/rust-cross:x86_64-unknown-linux-gnu-31072025
steps:
- name: Checkout
@@ -120,14 +120,16 @@ jobs:
strategy:
matrix:
# Current used version + 1 LTS
- # TODO: Add 24 after it's been released (don't forget to uncomment excludes below!)
- node-version: [22]
- python-version: ["3.9", "3.10", "3.11", "3.12", "fallback"]
+ # TODO: Re-add 26 after cubejs-duckdb-driver migrates off the frozen `duckdb`
+ # package (no prebuilt binaries for Node.js 26, don't forget to uncomment excludes below!)
+ # node-version: [24, 26]
+ node-version: [24]
+ python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "fallback"]
target: ["x86_64-unknown-linux-gnu", "aarch64-unknown-linux-gnu"]
# minimize number of jobs
exclude:
-# TODO: uncomment after adding v24
-# - node-version: 22
+# TODO: uncomment after re-adding v26
+# - node-version: 26
# target: "aarch64-unknown-linux-gnu"
- python-version: 3.10
target: "aarch64-unknown-linux-gnu"
@@ -135,7 +137,7 @@ jobs:
target: "aarch64-unknown-linux-gnu"
fail-fast: false
container:
- image: cubejs/rust-cross:${{ matrix.target }}-15082024${{ matrix.python-version != 'fallback' && format('-python-{0}', matrix.python-version) || '' }}
+ image: cubejs/rust-cross:${{ matrix.target }}-31072025${{ matrix.python-version != 'fallback' && format('-python-{0}', matrix.python-version) || '' }}
steps:
- name: Checkout
@@ -225,7 +227,7 @@ jobs:
strategy:
matrix:
# We do not need to test under all versions, we do it under linux
- node-version: [22.x]
+ node-version: [24.x]
target: ["x86_64-apple-darwin", "aarch64-apple-darwin"]
include:
- target: x86_64-apple-darwin
@@ -240,6 +242,9 @@ jobs:
- target: x86_64-apple-darwin
os-version: macos-15-intel
python-version: "3.12"
+ - target: x86_64-apple-darwin
+ os-version: macos-15-intel
+ python-version: "3.13"
- target: x86_64-apple-darwin
os-version: macos-15-intel
python-version: "fallback"
@@ -323,7 +328,7 @@ jobs:
strategy:
matrix:
# We do not need to test under all versions, we do it under linux
- node-version: [22.x]
+ node-version: [24.x]
os-version: [windows-2022]
python-version: ["fallback"]
fail-fast: false
diff --git a/.github/workflows/rust-cubestore-master.yml b/.github/workflows/rust-cubestore-master.yml
index b4deccbab7e6a..88dbace7749e9 100644
--- a/.github/workflows/rust-cubestore-master.yml
+++ b/.github/workflows/rust-cubestore-master.yml
@@ -211,7 +211,7 @@ jobs:
run: vcpkg integrate install; vcpkg install openssl:x64-windows
- name: Instal LLVM for Windows
if: ${{ startsWith(matrix.os, 'windows') }}
- run: choco install -y --force llvm --version 18.1.6
+ run: choco install -y --force llvm --version 22.1.0
- name: Set Env Variables for Windows
uses: allenevans/set-env@v4.0.0
if: ${{ startsWith(matrix.os, 'windows') }}
@@ -264,13 +264,13 @@ jobs:
# Please use minimal possible version of ubuntu, because it produces constraint on glibc
- os: ubuntu-22.04
target: x86_64-unknown-linux-gnu
- image: cubejs/rust-cross:x86_64-unknown-linux-gnu-15082024
+ image: cubejs/rust-cross:x86_64-unknown-linux-gnu-31072025
executable_name: cubestored
strip: true
compress: false
- os: ubuntu-22.04
target: x86_64-unknown-linux-musl
- image: cubejs/rust-cross:x86_64-unknown-linux-musl-15082024
+ image: cubejs/rust-cross:x86_64-unknown-linux-musl-31072025
executable_name: cubestored
strip: true
# cubestored: CantPackException: bad DT_HASH nbucket=0x344 len=0x1890
diff --git a/.github/workflows/rust-cubestore.yml b/.github/workflows/rust-cubestore.yml
index c76e7e8c0f444..6e55bee599df1 100644
--- a/.github/workflows/rust-cubestore.yml
+++ b/.github/workflows/rust-cubestore.yml
@@ -28,7 +28,7 @@ jobs:
matrix:
rust: [nightly-2025-08-01]
container:
- image: cubejs/rust-builder:bookworm-llvm-18
+ image: cubejs/rust-builder:trixie-llvm-22
env:
RUST: ${{ matrix.rust }}
steps:
@@ -150,7 +150,7 @@ jobs:
run: vcpkg integrate install; vcpkg install openssl:x64-windows
- name: Instal LLVM for Windows
if: ${{ startsWith(matrix.os, 'windows') }}
- run: choco install -y --force llvm --version 18.1.6
+ run: choco install -y --force llvm --version 22.1.0
- name: Set Env Variables for Windows
uses: allenevans/set-env@v4.0.0
if: ${{ startsWith(matrix.os, 'windows') }}
@@ -203,13 +203,13 @@ jobs:
# Please use minimal possible version of ubuntu, because it produces constraint on glibc
- os: ubuntu-22.04
target: x86_64-unknown-linux-gnu
- image: cubejs/rust-cross:x86_64-unknown-linux-gnu-15082024
+ image: cubejs/rust-cross:x86_64-unknown-linux-gnu-31072025
executable_name: cubestored
strip: true
compress: false
- os: ubuntu-22.04
target: x86_64-unknown-linux-musl
- image: cubejs/rust-cross:x86_64-unknown-linux-musl-15082024
+ image: cubejs/rust-cross:x86_64-unknown-linux-musl-31072025
executable_name: cubestored
strip: true
# cubestored: CantPackException: bad DT_HASH nbucket=0x344 len=0x1890
diff --git a/.nvmrc b/.nvmrc
index 85e502778f623..ca5c350055ccb 100644
--- a/.nvmrc
+++ b/.nvmrc
@@ -1 +1 @@
-22.22.0
+24.18.0
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0e468f94c9707..8e72f0b76c06e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,55 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+# [1.7.0](https://github.com/cube-js/cube/compare/v1.6.67...v1.7.0) (2026-07-06)
+
+### Bug Fixes
+
+- **mysql-driver:** Use string for decimal values ([4f2d3b9](https://github.com/cube-js/cube/commit/4f2d3b9416834ab87dbf84b24bed1e132bf2e512))
+
+- feat(query-orchestrator)!: Increase default continueWaitTimeout from 5s to 10s ([4625173](https://github.com/cube-js/cube/commit/462517392432a2e5c244af73c305fbb2bc543f4f))
+- fix(cubeorchestrator)!: Serialize all numeric query results as JSON strings, fix #1879 ([bd88651](https://github.com/cube-js/cube/commit/bd8865113889b5153ed837c3dc51bc6bca5d3585)), closes [#1879](https://github.com/cube-js/cube/issues/1879)
+- feat(docker)!: Upgrade OpenJDK from 17 to 21 ([9d00c83](https://github.com/cube-js/cube/commit/9d00c83b4af7f749dfb5329d93fe8b2f165edcda))
+- feat(docker)!: Upgrade Python from 3.11 to 3.13 ([f3875ec](https://github.com/cube-js/cube/commit/f3875ec1826dcae4c489c68a6e3b7a2f06569200))
+- feat(server-core)!: Remove deprecated dbType option (#11045) ([08a2a6b](https://github.com/cube-js/cube/commit/08a2a6b37efb450377383fbb0e5041fff106cff2)), closes [#11045](https://github.com/cube-js/cube/issues/11045)
+- feat!: Remove deprecated context_to_roles configuration option (#11055) ([41d42d6](https://github.com/cube-js/cube/commit/41d42d669486e763ad984fda5e64e33438baa5a4)), closes [#11055](https://github.com/cube-js/cube/issues/11055)
+- feat(api-gateway)!: Remove deprecated renewQuery parameter (#11050) ([c2b8888](https://github.com/cube-js/cube/commit/c2b888885d6640c5a14ee49f1057fefdf703ead3)), closes [#11050](https://github.com/cube-js/cube/issues/11050)
+- feat!: Remove deprecated CUBEJS_SCHEDULED_REFRESH_CONCURRENCY env variable (#11048) ([44fee72](https://github.com/cube-js/cube/commit/44fee72ac84f630427e4a2038797fec20b8d018c)), closes [#11048](https://github.com/cube-js/cube/issues/11048)
+- feat(schema-compiler)!: Remove deprecated running_total measure type (#11044) ([f45ea45](https://github.com/cube-js/cube/commit/f45ea456e4c3bfdc3663f8c992c911fdc9ed3730)), closes [#11044](https://github.com/cube-js/cube/issues/11044)
+- feat!: remove deprecated Elasticsearch driver ([99c98ad](https://github.com/cube-js/cube/commit/99c98adb8f94d78b7add5f36c4f2dfc684876831))
+
+### Features
+
+- **cubeorchestrator:** Use Arrow format for CubeStore response format ([78ddac2](https://github.com/cube-js/cube/commit/78ddac22db3258f2f2cf60bb772ae90aa1cb0282)), closes [#1705](https://github.com/cube-js/cube/issues/1705)
+- **cubestore:** Upgrade docker image to Debian trixie and LLVM 22 ([1cb96ce](https://github.com/cube-js/cube/commit/1cb96ce2c788bd416c50bf6476c5533b403a44fa))
+- **docker:** Upgrade Debian to Trixie ([45b2967](https://github.com/cube-js/cube/commit/45b2967499c5323d6164ab3915c2ede69185e55a))
+- **docker:** Upgrade Node.js to v24 (24.18.0) ([93ff587](https://github.com/cube-js/cube/commit/93ff587457dba70801d84051b5c26efc44dfbd96))
+- **mysql-driver:** Migrate driver to mysql2 library, thanks [@nathanfallet](https://github.com/nathanfallet) ([553b7ef](https://github.com/cube-js/cube/commit/553b7ef98f1fdf050013aaa81ab629bcc3bbeddc))
+- **native:** Initial support for Python 3.13 ([#9930](https://github.com/cube-js/cube/issues/9930)) ([f91a237](https://github.com/cube-js/cube/commit/f91a23728614dde9b9dc28b4e2a4662439670428))
+
+### BREAKING CHANGES
+
+- The default `continueWaitTimeout` changes from 5 to 10
+ seconds. Deployments relying on the previous 5s default will now wait up
+ to 10s before returning `Continue wait`. Set `continueWaitTimeout: 5`
+ explicitly in orchestratorOptions/queueOptions to keep the old behavior.
+- All numeric values in query results are now serialized
+ as JSON strings regardless of the data source driver. Previously the
+ JSON type of numeric values varied by driver (string or number).
+ Clients that relied on receiving JSON numbers must parse the string
+ values instead.
+- The -jdk image now runs Java 21. JDBC drivers and custom JARs
+ must be compatible with OpenJDK 21.
+- Users who install custom Python packages into the Cube image
+ (e.g. for Python/Jinja data models) must target Python 3.13. Packages built for
+ 3.11 will not load.
+- CreateOptions.dbType has been removed. Use driverFactory instead.
+- The context_to_roles (contextToRoles) configuration option has been removed. It was deprecated in v1.6.4. Use context_to_groups (contextToGroups) instead.
+- The `renewQuery` parameter of the `/v1/load` REST endpoint and the GraphQL `cube` query has been removed. Use the `cache` parameter instead: `cache: 'must-revalidate'` replaces `renewQuery: true`, and the default `stale-if-slow` replaces `renewQuery: false`.
+- The CUBEJS_SCHEDULED_REFRESH_CONCURRENCY environment variable has been removed. It was deprecated in v1.2.7. Use CUBEJS_SCHEDULED_REFRESH_QUERIES_PER_APP_ID instead.
+- The running_total measure type has been removed. Data models that use `type: running_total` will now fail validation. Replace them with a rolling_window measure using an unbounded trailing window.
+- The Elasticsearch driver has been removed. It was deprecated in v1.6.0. There is no drop-in replacement.
+
## [1.6.67](https://github.com/cube-js/cube/compare/v1.6.66...v1.6.67) (2026-07-06)
### Bug Fixes
diff --git a/CLAUDE.md b/CLAUDE.md
index db985ff947ba3..d390d624cce7e 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -87,7 +87,7 @@ yarn dev # Start the Mintlify dev server
3. **API Gateway**: Provides REST, GraphQL, and SQL APIs
4. **CubeSQL**: Postgres-compatible SQL interface (Rust)
5. **CubeStore**: Distributed OLAP storage engine (Rust)
-6. **Tesseract**: Native SQL planner (Rust) located in `/rust/cube/cubesqlplanner` - enabled via `CUBESQL_SQL_PUSH_DOWN=true` environment variable
+6. **Tesseract**: Native SQL planner (Rust) located in `/rust/cube/cubesqlplanner` - the default planner; set `CUBEJS_TESSERACT_SQL_PLANNER=false` to fall back to the deprecated legacy planner. Tesseract pre-aggregation planning follows this flag and cannot be toggled independently
### Package Management
- Uses Yarn workspaces with Lerna for package management
diff --git a/DEPRECATION.md b/DEPRECATION.md
index e1ea79ecd51a4..144218e4f3e9a 100644
--- a/DEPRECATION.md
+++ b/DEPRECATION.md
@@ -52,23 +52,24 @@ features:
| Removed | [Node.js 12](#nodejs-12) | v0.29.0 | v0.32.0 |
| Deprecated | [`CUBEJS_EXTERNAL_DEFAULT` and `CUBEJS_SCHEDULED_REFRESH_DEFAULT`](#cubejs_external_default-and-cubejs_scheduled_refresh_default) | v0.30.0 | |
| Deprecated | [Using external databases for pre-aggregations](#using-external-databases-for-pre-aggregations) | v0.30.0 | |
-| Deprecated | [`dbType`](#dbtype) | v0.30.30 | |
+| Removed | [`dbType`](#dbtype) | v0.30.30 | v1.7.0 |
| Removed | [Serverless Deployments](#serverless-deployments) | v0.31.64 | v0.35.0 |
| Removed | [Node.js 14](#nodejs-14) | v0.32.0 | v0.35.0 |
| Removed | [Using Redis for in-memory cache and queue](#using-redis-for-in-memory-cache-and-queue) | v0.32.0 | v0.36.0 |
| Deprecated | [`SECURITY_CONTEXT`](#security_context) | v0.33.0 | |
-| Deprecated | [`running_total` measure type](#running_total-measure-type) | v0.33.39 | |
+| Removed | [`running_total` measure type](#running_total-measure-type) | v0.33.39 | v1.7.0 |
| Removed | [Top-level `includes` parameter in views](#top-level-includes-parameter-in-views) | v0.34.34 | v1.3.0 |
| Removed | [Node.js 16](#nodejs-16) | v0.35.0 | v0.36.0 |
| Removed | [MySQL-based SQL API](#mysql-based-sql-api) | v0.35.0 | v0.35.0 |
| Removed | [`initApp` hook](#initapp-hook) | v0.35.0 | v0.35.0 |
| Removed | [`/v1/run-scheduled-refresh` REST API endpoint](#v1run-scheduled-refresh-rest-api-endpoint) | v0.35.0 | v0.36.0 |
| Removed | [Node.js 18](#nodejs-18) | v0.36.0 | v1.3.0 |
-| Deprecated | [`CUBEJS_SCHEDULED_REFRESH_CONCURRENCY`](#cubejs_scheduled_refresh_concurrency) | v1.2.7 | |
-| Deprecated | [Node.js 20](#nodejs-20) | v1.3.0 | |
-| Deprecated | [`renewQuery` parameter of the `/v1/load` endpoint](#renewquery-parameter-of-the-v1load-endpoint) | v1.3.73 | |
-| Deprecated | [Elasticsearch driver](#elasticsearch-driver) | v1.6.0 | |
-| Deprecated | [`context_to_roles`](#context-to-roles) | v1.6.4 | |
+| Removed | [`CUBEJS_SCHEDULED_REFRESH_CONCURRENCY`](#cubejs_scheduled_refresh_concurrency) | v1.2.7 | v1.7.0 |
+| Removed | [Node.js 20](#nodejs-20) | v1.3.0 | v1.7.0 |
+| Removed | [`renewQuery` parameter of the `/v1/load` endpoint](#renewquery-parameter-of-the-v1load-endpoint) | v1.3.73 | v1.7.0 |
+| Removed | [Elasticsearch driver](#elasticsearch-driver) | v1.6.0 | v1.7.0 |
+| Removed | [`context_to_roles`](#context-to-roles) | v1.6.4 | v1.7.0 |
+| Deprecated | [Node.js 22](#nodejs-22) | v1.7.0 | |
### Node.js 8
@@ -312,9 +313,11 @@ recommend [using Cube Store as a solution][ref-caching-in-prod].
**Deprecated in Release: v0.30.30**
-Using `dbType` is now deprecated, and we recommend using
-[`driverFactory`][self-driver-factory] to return a `DriverConfig` object
-instead.
+**Removed in Release: v1.7.0**
+
+`dbType` has been removed. Passing `CreateOptions.dbType` now throws an error.
+Use [`driverFactory`][self-driver-factory] to return a `DriverConfig` object
+(`{ type, ... }`) instead, or set the `CUBEJS_DB_TYPE` environment variable.
### Serverless Deployments
@@ -348,9 +351,11 @@ instead.
**Deprecated in Release: v0.33.39**
-The `running_total` measure type is now deprecated, and we recommend using
+**Removed in Release: v1.7.0**
+
+The `running_total` measure type has been removed. Use a
[`rolling_window`](https://cube.dev/docs/product/data-modeling/reference/measures#rolling_window)
-to calculate running totals instead.
+with an `unbounded` trailing window to calculate running totals instead.
### Top-level `includes` parameter in views
@@ -401,6 +406,8 @@ no more updates. Please upgrade to Node.js 20 or higher.
**Deprecated in Release: v1.2.7**
+**Removed in Release: v1.7.0**
+
This environment variable was renamed to [`CUBEJS_SCHEDULED_REFRESH_QUERIES_PER_APP_ID`](https://cube.dev/docs/reference/configuration/environment-variables#cubejs_scheduled_refresh_queries_per_app_id). Please use the new name.
### Node.js 18
@@ -411,27 +418,39 @@ This environment variable was renamed to [`CUBEJS_SCHEDULED_REFRESH_QUERIES_PER_
### Node.js 20
-**Deprecated in Release: v1.3.0**
+**Removed in Release: v1.7.0**
-Node.js 20 is in maintenance mode from [November 22, 2024][link-nodejs-eol]. This means
-no more new features, only security updates. Please upgrade to Node.js 22 or higher.
+Node.js 20 reached [End of Life on April 30, 2026][link-nodejs-eol]. This means
+no more updates. Please upgrade to Node.js 22 or higher.
### `renewQuery` parameter of the `/v1/load` endpoint
**Deprecated in Release: v1.3.73**
-This parameter is deprecated and will be removed in future releases. See [cache control](https://cube.dev/docs/product/apis-integrations/rest-api#cache-control)
-options and use the new `cache` parameter of the `/v1/load` endpoint instead.
+**Removed in Release: v1.7.0**
+
+This parameter has been removed. See [cache control](https://cube.dev/docs/product/apis-integrations/rest-api#cache-control)
+options and use the `cache` parameter of the `/v1/load` endpoint instead.
### Elasticsearch driver
**Deprecated in Release: v1.6.0**
-The Elasticsearch driver is deprecated and will be removed in a future release.
+**Removed in Release: v1.7.0**
+
+The Elasticsearch driver has been removed.
### `context_to_roles`
**Deprecated in Release: v1.6.4**
-The `context_to_roles` configuration option is deprecated and will be removed in a future
-release. Please use `context_to_groups` instead.
\ No newline at end of file
+**Removed in Release: v1.7.0**
+
+The `context_to_roles` configuration option has been removed. Please use `context_to_groups` instead.
+
+### Node.js 22
+
+**Deprecated in Release: v1.7.0**
+
+Node.js 22 is in maintenance mode from [October 21, 2025][link-nodejs-eol]. This means
+no more new features, only security updates. Please upgrade to Node.js 24 or higher.
diff --git a/docs-mintlify/admin/connect-to-data/data-sources/elasticsearch.mdx b/docs-mintlify/admin/connect-to-data/data-sources/elasticsearch.mdx
deleted file mode 100644
index ec4544d7707f0..0000000000000
--- a/docs-mintlify/admin/connect-to-data/data-sources/elasticsearch.mdx
+++ /dev/null
@@ -1,75 +0,0 @@
----
-title: Elasticsearch
-description: The driver for Elasticsearch is community-supported and is not maintained by Cube or the database vendor.
----
-
-
-
-The driver for Elasticsearch is community-supported and is not maintained by Cube or the database vendor.
-
-
-
-
-
-Elasticsearch driver is deprecated and will be removed in a future release.
-
-
-
-## Prerequisites
-
-To connect to an [Elasticsearch][elasticsearch] database, use [`CUBEJS_DB_URL`](/reference/configuration/environment-variables#cubejs_db_url)
-with the username and password embedded in the URL, if required.
-
-
-
-If you're not using [Elastic Cloud][elastic-cloud], you **must** specify
-[`CUBEJS_DB_ELASTIC_QUERY_FORMAT`](/reference/configuration/environment-variables#cubejs_db_elastic_query_format).
-
-
-
-## Setup
-
-### Manual
-
-For a self-hosted Elasticsearch instance, add the following to a `.env` file in
-your Cube project:
-
-```dotenv
-CUBEJS_DB_TYPE=elasticsearch
-CUBEJS_DB_URL=https://my.elasticsearch.host:9200
-CUBEJS_DB_ELASTIC_QUERY_FORMAT=json
-```
-
-For an Elasticsearch instanced hosted by [Elastic.co][elastic-co], add the
-following to a `.env` file in your Cube project:
-
-```dotenv
-CUBEJS_DB_TYPE=elasticsearch
-CUBEJS_DB_URL=https://my.elasticsearch.host:9200
-CUBEJS_DB_ELASTIC_APIKEY_ID=VuaCfGcBCdbkQm-e5aOx
-CUBEJS_DB_ELASTIC_APIKEY_KEY=ui2lp2axTNmsyakw9tvNnw
-```
-
-## Environment Variables
-
-| Environment Variable | Description | Possible Values | Required |
-| -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------- | :------: |
-| [`CUBEJS_DB_URL`](/reference/configuration/environment-variables#cubejs_db_url) | The URL for a database | A valid database URL for Elasticsearch | ✅ |
-| [`CUBEJS_DB_ELASTIC_QUERY_FORMAT`](/reference/configuration/environment-variables#cubejs_db_elastic_query_format) | By default, queries return data in JDBC format, but you can also return data in standard Elasticsearch JDBC, JSON, CSV, YAML or raw formats (only JSON and JDBC are currently supported) | `json`, `jdbc` | ❌ |
-| [`CUBEJS_DB_ELASTIC_OPENDISTRO`](/reference/configuration/environment-variables#cubejs_db_elastic_opendistro) | If `true`, then use the Open Distro for Elasticsearch | `true`, `false` | ❌ |
-| [`CUBEJS_DB_ELASTIC_APIKEY_ID`](/reference/configuration/environment-variables#cubejs_db_elastic_apikey_id) | [ID of the API key from elastic.co][elastic-docs-api-keys] | A valid Elastic.co API key ID | ❌ |
-| [`CUBEJS_DB_ELASTIC_APIKEY_KEY`](/reference/configuration/environment-variables#cubejs_db_elastic_apikey_key) | [Value of the API key from elastic.co][elastic-docs-api-keys] | A valid Elastic.co API key value | ❌ |
-| [`CUBEJS_DB_MAX_POOL`](/reference/configuration/environment-variables#cubejs_db_max_pool) | The maximum number of concurrent database connections to pool. Default is `8` | A valid number | ❌ |
-| [`CUBEJS_CONCURRENCY`](/reference/configuration/environment-variables#cubejs_concurrency) | The number of [concurrent queries][ref-data-source-concurrency] to the data source | A valid number | ❌ |
-
-[ref-data-source-concurrency]: /admin/connect-to-data/concurrency#data-source-concurrency
-## SSL
-
-Cube does not require any additional configuration to enable SSL as
-Elasticsearch connections are made over HTTPS.
-
-[elastic-co]: https://elastic.co/
-[elastic-cloud]: https://cloud.elastic.co/
-[elasticsearch]: https://www.elastic.co/elasticsearch/
-[elastic-docs-api-keys]:
- https://www.elastic.co/guide/en/kibana/master/api-keys.html#create-api-key
diff --git a/docs-mintlify/admin/connect-to-data/data-sources/index.mdx b/docs-mintlify/admin/connect-to-data/data-sources/index.mdx
index 49fa42ffbcc8b..d29cab0553b8f 100644
--- a/docs-mintlify/admin/connect-to-data/data-sources/index.mdx
+++ b/docs-mintlify/admin/connect-to-data/data-sources/index.mdx
@@ -107,9 +107,6 @@ sources.
## Other data sources
-
- Connect to Elasticsearch.
-
Connect to MongoDB.
diff --git a/docs-mintlify/admin/deployment/providers/aws.mdx b/docs-mintlify/admin/deployment/providers/aws.mdx
index f63a75aa218eb..88731f57fe4f2 100644
--- a/docs-mintlify/admin/deployment/providers/aws.mdx
+++ b/docs-mintlify/admin/deployment/providers/aws.mdx
@@ -21,7 +21,6 @@ Cube Cloud integrates with the following [data sources](/admin/connect-to-data/d
- [Amazon Athena](/admin/connect-to-data/data-sources/aws-athena)
- [Postgres](/admin/connect-to-data/data-sources/postgres), [Microsoft SQL Server](/admin/connect-to-data/data-sources/ms-sql), [MySQL](/admin/connect-to-data/data-sources/mysql), and [Oracle](/admin/connect-to-data/data-sources/oracle) on [Amazon RDS](https://aws.amazon.com/rds/)
- [Hive / SparkSQL](/admin/connect-to-data/data-sources/hive), [Presto](/admin/connect-to-data/data-sources/presto), and [Trino](/admin/connect-to-data/data-sources/trino) on [Amazon EMR](https://aws.amazon.com/emr/)
-- [Elasticsearch](/admin/connect-to-data/data-sources/elasticsearch) on [Amazon OpenSearch Service](https://aws.amazon.com/opensearch-service/)
- [Parquet, CSV, and JSON files](/admin/connect-to-data/data-sources/duckdb) on [Amazon S3](https://aws.amazon.com/s3/)
## Data visualization tools
diff --git a/docs-mintlify/docs.json b/docs-mintlify/docs.json
index 3e44f5d77961e..709735ceb3a57 100644
--- a/docs-mintlify/docs.json
+++ b/docs-mintlify/docs.json
@@ -245,7 +245,6 @@
"admin/connect-to-data/data-sources/databricks-jdbc",
"admin/connect-to-data/data-sources/druid",
"admin/connect-to-data/data-sources/duckdb",
- "admin/connect-to-data/data-sources/elasticsearch",
"admin/connect-to-data/data-sources/firebolt",
"admin/connect-to-data/data-sources/google-bigquery",
"admin/connect-to-data/data-sources/hive",
diff --git a/docs-mintlify/docs/data-modeling/concepts/calendar-cubes.mdx b/docs-mintlify/docs/data-modeling/concepts/calendar-cubes.mdx
index a7f952f0f68fa..6752eb65647af 100644
--- a/docs-mintlify/docs/data-modeling/concepts/calendar-cubes.mdx
+++ b/docs-mintlify/docs/data-modeling/concepts/calendar-cubes.mdx
@@ -13,8 +13,7 @@ the default granularities of time dimensions.
Calendar cubes are powered by Tesseract, the [next-generation data modeling
-engine][link-tesseract]. Tesseract is currently in preview. Use the
-[`CUBEJS_TESSERACT_SQL_PLANNER`](/reference/configuration/environment-variables#cubejs_tesseract_sql_planner) environment variable to enable it.
+engine][link-tesseract]. In versions before v1.7.0, it was not enabled by default.
diff --git a/docs-mintlify/docs/data-modeling/data-access-policies.mdx b/docs-mintlify/docs/data-modeling/data-access-policies.mdx
index a5a811cdabaef..77fbd1d47461d 100644
--- a/docs-mintlify/docs/data-modeling/data-access-policies.mdx
+++ b/docs-mintlify/docs/data-modeling/data-access-policies.mdx
@@ -773,7 +773,6 @@ cube(`orders`, {
[ref-mls-public]: /docs/data-modeling/access-control/member-level-security#managing-member-level-access
[ref-sec-ctx]: /docs/data-modeling/access-control/context
[ref-ref-dap]: /reference/data-modeling/data-access-policies
-[ref-ref-dap-role]: /reference/data-modeling/data-access-policies#role
[ref-ref-dap-masking]: /reference/data-modeling/data-access-policies#member-masking
[ref-ref-mask-dim]: /reference/data-modeling/dimensions#mask
[ref-core-data-apis]: /reference/core-data-apis
\ No newline at end of file
diff --git a/docs-mintlify/docs/data-modeling/measures.mdx b/docs-mintlify/docs/data-modeling/measures.mdx
index 22a889d1d37fd..11d1b15416888 100644
--- a/docs-mintlify/docs/data-modeling/measures.mdx
+++ b/docs-mintlify/docs/data-modeling/measures.mdx
@@ -210,9 +210,7 @@ CTEs in the generated SQL query.
Multi-stage measures are powered by Tesseract, the [next-generation data
-modeling engine][link-tesseract]. Tesseract is currently in preview. Use the
-[`CUBEJS_TESSERACT_SQL_PLANNER`][ref-tesseract-env] environment variable to
-enable it.
+modeling engine][link-tesseract]. In versions before v1.7.0, it was not enabled by default.
diff --git a/docs-mintlify/docs/data-modeling/multi-fact-views.mdx b/docs-mintlify/docs/data-modeling/multi-fact-views.mdx
index d957b1d535f27..102d5f91b1948 100644
--- a/docs-mintlify/docs/data-modeling/multi-fact-views.mdx
+++ b/docs-mintlify/docs/data-modeling/multi-fact-views.mdx
@@ -43,9 +43,7 @@ No fanout, no manual workarounds.
Multi-fact views are powered by Tesseract, the [next-generation data modeling
-engine][link-tesseract]. Tesseract is currently in preview. Use the
-[`CUBEJS_TESSERACT_SQL_PLANNER`][ref-tesseract-env] environment variable to
-enable it.
+engine][link-tesseract]. In versions before v1.7.0, it was not enabled by default.
diff --git a/docs-mintlify/docs/pre-aggregations/matching-pre-aggregations.mdx b/docs-mintlify/docs/pre-aggregations/matching-pre-aggregations.mdx
index 0697c613b7466..e96b03c3b6d68 100644
--- a/docs-mintlify/docs/pre-aggregations/matching-pre-aggregations.mdx
+++ b/docs-mintlify/docs/pre-aggregations/matching-pre-aggregations.mdx
@@ -115,10 +115,7 @@ requiring a single pre-aggregation that covers the whole query.
Matching separate pre-aggregations to multi-fact and multi-stage subqueries is
-powered by Tesseract, the [next-generation data modeling engine][link-tesseract].
-Tesseract is currently in preview. Use the
-[`CUBEJS_TESSERACT_SQL_PLANNER`][ref-tesseract-env] environment variable to
-enable it.
+powered by Tesseract, the [next-generation data modeling engine][link-tesseract]. In versions before v1.7.0, it was not enabled by default.
diff --git a/docs-mintlify/recipes/data-modeling/period-over-period.mdx b/docs-mintlify/recipes/data-modeling/period-over-period.mdx
index e0052ae572217..dec13d92e64fa 100644
--- a/docs-mintlify/recipes/data-modeling/period-over-period.mdx
+++ b/docs-mintlify/recipes/data-modeling/period-over-period.mdx
@@ -22,8 +22,7 @@ these measures and uses them in a calculation, e.g., divides or subtracts them.
Multi-stage calculations are powered by Tesseract, the [next-generation data modeling
-engine][link-tesseract]. Tesseract is currently in preview. Use the
-[`CUBEJS_TESSERACT_SQL_PLANNER`](/reference/configuration/environment-variables#cubejs_tesseract_sql_planner) environment variable to enable it.
+engine][link-tesseract]. In versions before v1.7.0, it was not enabled by default.
diff --git a/docs-mintlify/recipes/data-modeling/share-of-total.mdx b/docs-mintlify/recipes/data-modeling/share-of-total.mdx
index 5b84327ba9a0f..a2cc3a8ed5029 100644
--- a/docs-mintlify/recipes/data-modeling/share-of-total.mdx
+++ b/docs-mintlify/recipes/data-modeling/share-of-total.mdx
@@ -66,9 +66,7 @@ back and groups by the query's dimensions as usual.
Multi-stage calculations are powered by Tesseract, the [next-generation data
-modeling engine][link-tesseract]. Tesseract is currently in preview. Use the
-[`CUBEJS_TESSERACT_SQL_PLANNER`](/reference/configuration/environment-variables#cubejs_tesseract_sql_planner)
-environment variable to enable it.
+modeling engine][link-tesseract]. In versions before v1.7.0, it was not enabled by default.
diff --git a/docs-mintlify/recipes/data-modeling/xirr.mdx b/docs-mintlify/recipes/data-modeling/xirr.mdx
index e2da7ca1a89ae..9b5f2f5eeb965 100644
--- a/docs-mintlify/recipes/data-modeling/xirr.mdx
+++ b/docs-mintlify/recipes/data-modeling/xirr.mdx
@@ -29,8 +29,7 @@ Consequently, queries that don't hit pre-aggregations would fail with the follow
Multi-stage calculations are powered by Tesseract, the [next-generation data modeling
-engine][link-tesseract]. Tesseract is currently in preview. Use the
-[`CUBEJS_TESSERACT_SQL_PLANNER`](/reference/configuration/environment-variables#cubejs_tesseract_sql_planner) environment variable to enable it.
+engine][link-tesseract]. In versions before v1.7.0, it was not enabled by default.
diff --git a/docs-mintlify/reference/configuration/config.mdx b/docs-mintlify/reference/configuration/config.mdx
index 164e21e353403..36786b1a3f46e 100644
--- a/docs-mintlify/reference/configuration/config.mdx
+++ b/docs-mintlify/reference/configuration/config.mdx
@@ -487,7 +487,7 @@ You can pass this object to set advanced options for the query orchestrator.
| Option | Description | Default Value |
|------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------|
-| `continueWaitTimeout` | Long polling interval in seconds, maximum is 90 | `5` |
+| `continueWaitTimeout` | Long polling interval in seconds, maximum is 90 | `10` |
| `rollupOnlyMode` | When enabled, an error will be thrown if a query can't be served from a pre-aggregation (rollup) | `false` |
| `queryCacheOptions` | Query cache options for DB queries | `{}` |
| `queryCacheOptions.refreshKeyRenewalThreshold` | Time in seconds to cache the result of [`refresh_key`][ref-schema-cube-ref-refresh-key] check | `defined by DB dialect` |
@@ -1485,70 +1485,6 @@ module.exports = {
-## Deprecated
-
-### `dbType`
-
-
-
-`dbType` is deprecated and will be removed in a future release.
-Use [`driverFactory`][self-driver-factory] instead.
-
-
-
-Data source type. Called only once per [`appId`][self-opts-ctx-to-appid].
-
-```javascript
-module.exports = {
- // string
- dbType: 'snowflake',
-
- // function
- dbType: ({ securityContext }) => 'databricks'
-}
-```
-
-Either `string` or `function` could be passed. Providing a `Function` allows
-to dynamically select a database type depending on the security context.
-Usually used for [multitenancy][ref-multitenancy].
-
-If not defined, Cube will lookup for environment variable
-[`CUBEJS_DB_TYPE`](/reference/configuration/environment-variables#cubejs_db_type) to resolve the data source type.
-
-### `context_to_roles`
-
-
-
-`context_to_roles` is deprecated and will be removed in a future release.
-Use [`context_to_groups`](#context_to_groups) instead.
-
-
-
-Used by [access policies][ref-dap]. This option is used to derive a list of
-[data access roles][ref-dap-roles] from the [security context][ref-sec-ctx].
-
-
-
-```python title="Python"
-from cube import config
-
-@config('context_to_roles')
-def context_to_roles(ctx: dict) -> list[str]:
- return ctx['securityContext'].get('roles', ['default'])
-```
-
-```javascript title="JavaScript"
-
-module.exports = {
- contextToRoles: ({ securityContext }) => {
- return securityContext.roles || ['default']
- }
-}
-```
-
-
-
-
[gh-jsonwebtoken-algs]:
https://github.com/auth0/node-jsonwebtoken#algorithms-supported
[link-express-cors-opts]:
@@ -1568,7 +1504,6 @@ module.exports = {
[ref-sec-ctx]: /docs/data-modeling/access-control/context
[self-pre-aggregations-schema]: #pre_aggregations_schema
[self-opts-ctx-to-appid]: #context_to_app_id
-[self-driver-factory]: #driver_factory
[ref-schema-ref-datasource]: /reference/data-modeling/cube#data_source
[self-repofactory]: #repository_factory
[ref-exec-environment-globals]: /docs/data-modeling/dynamic/schema-execution-environment#nodejs-globals-processenv-consolelog-and-others
diff --git a/docs-mintlify/reference/configuration/environment-variables.mdx b/docs-mintlify/reference/configuration/environment-variables.mdx
index 6bf869d010021..fc6914f04a9e2 100644
--- a/docs-mintlify/reference/configuration/environment-variables.mdx
+++ b/docs-mintlify/reference/configuration/environment-variables.mdx
@@ -154,12 +154,6 @@ it should be adjusted accordingly.
| ------------------------------------ | ---------------------- | --------------------- |
| A valid number of concurrent queries | 10 | 10 |
-
-
-Previously, this environment variable was named `CUBEJS_SCHEDULED_REFRESH_CONCURRENCY`.
-
-
-
## `CUBEJS_CUBESTORE_HOST`
The hostname of the Cube Store deployment
@@ -430,42 +424,6 @@ A flag to use credentials chain for secrets for S3 connections.
| ----------------------------------------------------- | ---------------------- | --------------------- |
| `true`, `false` | `false` | `false` |
-## `CUBEJS_DB_ELASTIC_APIKEY_ID`
-
-The [ID of the API key from elastic.co][elastic-docs-api-keys]. Required when
-using Elastic Cloud.
-
-| Possible Values | Default in Development | Default in Production |
-| ----------------------------- | ---------------------- | --------------------- |
-| A valid Elastic.co API key ID | N/A | N/A |
-
-## `CUBEJS_DB_ELASTIC_APIKEY_KEY`
-
-The [API key from elastic.co][elastic-docs-api-keys]. Required when using
-Elastic Cloud.
-
-| Possible Values | Default in Development | Default in Production |
-| -------------------------- | ---------------------- | --------------------- |
-| A valid Elastic.co API key | N/A | N/A |
-
-## `CUBEJS_DB_ELASTIC_OPENDISTRO`
-
-If `true`, then use the Open Distro for Elasticsearch.
-
-| Possible Values | Default in Development | Default in Production |
-| --------------- | ---------------------- | --------------------- |
-| `true`, `false` | N/A | N/A |
-
-## `CUBEJS_DB_ELASTIC_QUERY_FORMAT`
-
-By default, queries return data in JDBC format, but you can also return data in
-standard Elasticsearch JDBC, JSON, CSV, YAML or raw formats (only JSON and JDBC
-are currently supported).
-
-| Possible Values | Default in Development | Default in Production |
-| --------------- | ---------------------- | --------------------- |
-| `json`, `jdbc` | N/A | N/A |
-
## `CUBEJS_DB_EXPORT_BUCKET`
The name of a bucket in cloud storage to store the database export snapshots.
@@ -1709,18 +1667,18 @@ If `true`, then use WebSocket for data fetching.
## `CUBEJS_TESSERACT_SQL_PLANNER`
-If `true`, enables Tesseract, the [next-generation data modeling engine][link-tesseract].
-Tesseract powers [multi-stage calculations][ref-multi-stage-calculations].
+Enables Tesseract, the [next-generation data modeling engine][link-tesseract],
+which is the default SQL planner and powers
+[multi-stage calculations][ref-multi-stage-calculations]. In versions before v1.7.0,
+Tesseract was not enabled by default. Set to `false` to fall back to the legacy
+planner, which is deprecated and will be removed in the near future.
| Possible Values | Default in Development | Default in Production |
| --------------- | ---------------------- | --------------------- |
-| `true`, `false` | `false` | `false` |
-
-
-
-Tesseract is currently in preview.
+| `true`, `false` | `true` | `true` |
-
+Tesseract-based pre-aggregation matching and planning follows this flag and cannot be
+toggled independently.
## `CUBESTORE_AWS_ACCESS_KEY_ID`
@@ -2122,8 +2080,6 @@ The port for a Cube deployment to listen to API connections on.
https://docs.databricks.com/data/databricks-file-system.html#mount-object-storage-to-dbfs
[databricks-docs-pat]:
https://docs.databricks.com/dev-tools/api/latest/authentication.html#token-management
-[elastic-docs-api-keys]:
- https://www.elastic.co/guide/en/kibana/master/api-keys.html#create-api-key
[firebolt-docs-account-name]:
https://docs.firebolt.io/managing-your-account/concepts-and-terminology.html#firebolt-account
[firebolt-docs-engine-name]:
diff --git a/docs-mintlify/reference/core-data-apis/graphql-api/reference.mdx b/docs-mintlify/reference/core-data-apis/graphql-api/reference.mdx
index 4dfa238678fc3..eba1746674fcb 100644
--- a/docs-mintlify/reference/core-data-apis/graphql-api/reference.mdx
+++ b/docs-mintlify/reference/core-data-apis/graphql-api/reference.mdx
@@ -40,7 +40,6 @@ object with query metadata:
- **`timezone` (`String`):** The [time zone][ref-time-zone] for your query. You can set the
desired time zone in the [TZ Database Name](https://en.wikipedia.org/wiki/Tz_database)
format, e.g., `America/Los_Angeles`.
-- **`renewQuery` (`Boolean`):** If `renewQuery` is set to `true`, Cube will renew all `refreshKey` for queries and query results in the foreground. The default value is `false`.
- **`ungrouped` (`Boolean`):** If set to `true`, Cube will run an
[ungrouped query][ref-ungrouped-query].
diff --git a/docs-mintlify/reference/core-data-apis/rest-api/query-format.mdx b/docs-mintlify/reference/core-data-apis/rest-api/query-format.mdx
index 987211d938cd8..98e09ee27e031 100644
--- a/docs-mintlify/reference/core-data-apis/rest-api/query-format.mdx
+++ b/docs-mintlify/reference/core-data-apis/rest-api/query-format.mdx
@@ -45,23 +45,6 @@ The default value is `false`.
- `timezone`: A [time zone][ref-time-zone] for your query. You can set the
desired time zone in the [TZ Database Name](https://en.wikipedia.org/wiki/Tz_database)
format, e.g., `America/Los_Angeles`.
-- `renewQuery`: If `renewQuery` is set to `true`, Cube will renew all
- [`refreshKey`][ref-schema-ref-preaggs-refreshkey] for queries and query
- results in the foreground. However, if the
- [`refreshKey`][ref-schema-ref-preaggs-refreshkey] (or
- [`refreshKey.every`][ref-schema-ref-preaggs-refreshkey-every]) doesn't
- indicate that there's a need for an update this setting has no effect. The
- default value is `false`.
-
-
-
-Cube provides only eventual consistency guarantee. Using a small
-[`refreshKey.every`][ref-schema-ref-preaggs-refreshkey-every] value together
-with `renewQuery` to achieve immediate consistency can lead to endless
-refresh loops and overall system instability.
-
-
-
- `ungrouped`: If set to `true`, Cube will run an [ungrouped
query][ref-ungrouped-query].
- `joinHints`: Query-time [join hints][ref-join-hints], provided as an array of
@@ -745,8 +728,6 @@ the array contains a single string. See [`inDateRange`](#indaterange) and
[Date filters in logical operators](#date-filters-in-logical-operators).
[ref-client-core-resultset-drilldown]: /reference/javascript-sdk/reference/cubejs-client-core#drilldown
-[ref-schema-ref-preaggs-refreshkey]: /reference/data-modeling/pre-aggregations#refresh_key
-[ref-schema-ref-preaggs-refreshkey-every]: /reference/data-modeling/pre-aggregations#every
[ref-schema-ref-preaggs-dimensions]: /reference/data-modeling/pre-aggregations#dimensions
[ref-schema-ref-preaggs-time-dimension]: /reference/data-modeling/pre-aggregations#time_dimension
[ref-relative-date-range]: #relative-date-range
diff --git a/docs-mintlify/reference/data-modeling/dimensions.mdx b/docs-mintlify/reference/data-modeling/dimensions.mdx
index 6d18691e1bc61..bcbc4de73fcd0 100644
--- a/docs-mintlify/reference/data-modeling/dimensions.mdx
+++ b/docs-mintlify/reference/data-modeling/dimensions.mdx
@@ -930,8 +930,7 @@ a dimension. A dimension can only have one type.
`switch` dimensions are powered by Tesseract, the [next-generation data modeling
-engine][link-tesseract]. Tesseract is currently in preview. Use the
-[`CUBEJS_TESSERACT_SQL_PLANNER`](/reference/configuration/environment-variables#cubejs_tesseract_sql_planner) environment variable to enable it.
+engine][link-tesseract]. In versions before v1.7.0, it was not enabled by default.
diff --git a/docs-mintlify/reference/data-modeling/measures.mdx b/docs-mintlify/reference/data-modeling/measures.mdx
index 80fb96c84da3c..3c5da051b5e57 100644
--- a/docs-mintlify/reference/data-modeling/measures.mdx
+++ b/docs-mintlify/reference/data-modeling/measures.mdx
@@ -380,8 +380,7 @@ a measure. A measure can only have one type.
The `number_agg` type is only available in Tesseract, the [next-generation data modeling
-engine][link-tesseract]. Tesseract is currently in preview. Use the
-[`CUBEJS_TESSERACT_SQL_PLANNER`](/reference/configuration/environment-variables#cubejs_tesseract_sql_planner) environment variable to enable it.
+engine][link-tesseract]. In versions before v1.7.0, it was not enabled by default.
@@ -462,9 +461,7 @@ with a provided date range. It is used to calculate the minimum and maximum valu
for the series of time windows.
With Tesseract, the [next-generation data modeling engine][link-tesseract],
-rolling window calculations don't require the date range for the time dimension.
-Tesseract is currently in preview. Use the [`CUBEJS_TESSERACT_SQL_PLANNER`](/reference/configuration/environment-variables#cubejs_tesseract_sql_planner)
-environment variable to enable it.
+rolling window calculations don't require the date range for the time dimension. In versions before v1.7.0, Tesseract was not enabled by default.
@@ -1186,8 +1183,7 @@ calculated based on the value of a [`switch` dimension][ref-switch-dimensions].
`case` measures are powered by Tesseract, the [next-generation data modeling
-engine][link-tesseract]. Tesseract is currently in preview. Use the
-[`CUBEJS_TESSERACT_SQL_PLANNER`](/reference/configuration/environment-variables#cubejs_tesseract_sql_planner) environment variable to enable it.
+engine][link-tesseract]. In versions before v1.7.0, it was not enabled by default.
diff --git a/docs-mintlify/reference/javascript-sdk/reference/cubejs-client-core.mdx b/docs-mintlify/reference/javascript-sdk/reference/cubejs-client-core.mdx
index dd34fc532d727..ca8bd6bdce097 100644
--- a/docs-mintlify/reference/javascript-sdk/reference/cubejs-client-core.mdx
+++ b/docs-mintlify/reference/javascript-sdk/reference/cubejs-client-core.mdx
@@ -979,7 +979,6 @@ limit? | number |
measures? | string[] |
offset? | number |
order? | [TQueryOrderObject](#tqueryorderobject) | [TQueryOrderArray](#tqueryorderarray) |
-renewQuery? | boolean |
segments? | string[] |
timeDimensions? | [TimeDimension](#timedimension)[] |
timezone? | string |
diff --git a/docs/content/product/administration/deployment/providers/aws.mdx b/docs/content/product/administration/deployment/providers/aws.mdx
index b2eb06a1ceb5c..d771ac75122cc 100644
--- a/docs/content/product/administration/deployment/providers/aws.mdx
+++ b/docs/content/product/administration/deployment/providers/aws.mdx
@@ -18,7 +18,6 @@ Cube Cloud integrates with the following [data sources](/product/configuration/d
- [Amazon Athena](/product/configuration/data-sources/aws-athena)
- [Postgres](/product/configuration/data-sources/postgres), [Microsoft SQL Server](/product/configuration/data-sources/ms-sql), [MySQL](/product/configuration/data-sources/mysql), and [Oracle](/product/configuration/data-sources/oracle) on [Amazon RDS](https://aws.amazon.com/rds/)
- [Hive / SparkSQL](/product/configuration/data-sources/hive), [Presto](/product/configuration/data-sources/presto), and [Trino](/product/configuration/data-sources/trino) on [Amazon EMR](https://aws.amazon.com/emr/)
-- [Elasticsearch](/product/configuration/data-sources/elasticsearch) on [Amazon OpenSearch Service](https://aws.amazon.com/opensearch-service/)
- [Parquet, CSV, and JSON files](/product/configuration/data-sources/duckdb) on [Amazon S3](https://aws.amazon.com/s3/)
## Data visualization tools
diff --git a/docs/content/product/administration/pricing.mdx b/docs/content/product/administration/pricing.mdx
index 9a051a24c7193..541a922848558 100644
--- a/docs/content/product/administration/pricing.mdx
+++ b/docs/content/product/administration/pricing.mdx
@@ -88,7 +88,7 @@ terms][ref-enterprise-tier-support], and [limits][ref-cloud-limits].
mission-critical production deployments with security and compliance needs.**
It offers everything in the [Enterprise product tier](#enterprise) as well as
-unlimited pre-aggregation sizes, and support for kSQL and Elasticsearch. Cube
+unlimited pre-aggregation sizes, and support for kSQL. Cube
Cloud provides a 99.995% uptime SLA for this product tier.
You can review its [pricing][cube-pricing], [support
diff --git a/docs/content/product/apis-integrations/core-data-apis/graphql-api/reference.mdx b/docs/content/product/apis-integrations/core-data-apis/graphql-api/reference.mdx
index 66fc15c81ff9c..323317348f092 100644
--- a/docs/content/product/apis-integrations/core-data-apis/graphql-api/reference.mdx
+++ b/docs/content/product/apis-integrations/core-data-apis/graphql-api/reference.mdx
@@ -27,7 +27,6 @@ query {
- **`timezone` (`String`):** The [time zone][ref-time-zone] for your query. You can set the
desired time zone in the [TZ Database Name](https://en.wikipedia.org/wiki/Tz_database)
format, e.g., `America/Los_Angeles`.
-- **`renewQuery` (`Boolean`):** If `renewQuery` is set to `true`, Cube will renew all `refreshKey` for queries and query results in the foreground. The default value is `false`.
- **`ungrouped` (`Boolean`):** If set to `true`, Cube will run an
[ungrouped query][ref-ungrouped-query].
diff --git a/docs/content/product/apis-integrations/core-data-apis/rest-api/query-format.mdx b/docs/content/product/apis-integrations/core-data-apis/rest-api/query-format.mdx
index 32405961d0d7c..712788ff3582f 100644
--- a/docs/content/product/apis-integrations/core-data-apis/rest-api/query-format.mdx
+++ b/docs/content/product/apis-integrations/core-data-apis/rest-api/query-format.mdx
@@ -42,23 +42,6 @@ The default value is `false`.
- `timezone`: A [time zone][ref-time-zone] for your query. You can set the
desired time zone in the [TZ Database Name](https://en.wikipedia.org/wiki/Tz_database)
format, e.g., `America/Los_Angeles`.
-- `renewQuery`: If `renewQuery` is set to `true`, Cube will renew all
- [`refreshKey`][ref-schema-ref-preaggs-refreshkey] for queries and query
- results in the foreground. However, if the
- [`refreshKey`][ref-schema-ref-preaggs-refreshkey] (or
- [`refreshKey.every`][ref-schema-ref-preaggs-refreshkey-every]) doesn't
- indicate that there's a need for an update this setting has no effect. The
- default value is `false`.
-
-
-
-Cube provides only eventual consistency guarantee. Using a small
-[`refreshKey.every`][ref-schema-ref-preaggs-refreshkey-every] value together
-with `renewQuery` to achieve immediate consistency can lead to endless
-refresh loops and overall system instability.
-
-
-
- `ungrouped`: If set to `true`, Cube will run an [ungrouped
query][ref-ungrouped-query].
- `joinHints`: Query-time [join hints][ref-join-hints], provided as an array of
@@ -672,10 +655,6 @@ refer to its documentation for more examples.
[ref-client-core-resultset-drilldown]: /product/apis-integrations/javascript-sdk/reference/cubejs-client-core#drilldown
-[ref-schema-ref-preaggs-refreshkey]:
- /product/data-modeling/reference/pre-aggregations#refresh_key
-[ref-schema-ref-preaggs-refreshkey-every]:
- /product/data-modeling/reference/pre-aggregations#every
[ref-schema-ref-preaggs-dimensions]:
/product/data-modeling/reference/pre-aggregations#dimensions
[ref-schema-ref-preaggs-time-dimension]:
diff --git a/docs/content/product/auth/data-access-policies.mdx b/docs/content/product/auth/data-access-policies.mdx
index 076b2173efc76..5d6bfa8376860 100644
--- a/docs/content/product/auth/data-access-policies.mdx
+++ b/docs/content/product/auth/data-access-policies.mdx
@@ -569,7 +569,6 @@ cube(`orders`, {
[ref-mls-public]: /product/auth/member-level-security#managing-member-level-access
[ref-sec-ctx]: /product/auth/context
[ref-ref-dap]: /product/data-modeling/reference/data-access-policies
-[ref-ref-dap-role]: /product/data-modeling/reference/data-access-policies#role
[ref-ref-dap-masking]: /product/data-modeling/reference/data-access-policies#member-masking
[ref-ref-mask-dim]: /product/data-modeling/reference/dimensions#mask
[ref-core-data-apis]: /product/apis-integrations/core-data-apis
\ No newline at end of file
diff --git a/docs/content/product/configuration/data-sources/_meta.js b/docs/content/product/configuration/data-sources/_meta.js
index d17eb6899dfd6..73d391bcda7de 100644
--- a/docs/content/product/configuration/data-sources/_meta.js
+++ b/docs/content/product/configuration/data-sources/_meta.js
@@ -6,7 +6,6 @@ export default {
"databricks-jdbc": "Databricks",
"druid": "Druid",
"duckdb": "DuckDB / MotherDuck",
- "elasticsearch": "Elasticsearch",
"firebolt": "Firebolt",
"google-bigquery": "Google BigQuery",
"hive": "Hive / SparkSQL",
diff --git a/docs/content/product/configuration/data-sources/elasticsearch.mdx b/docs/content/product/configuration/data-sources/elasticsearch.mdx
deleted file mode 100644
index ec26d00c30955..0000000000000
--- a/docs/content/product/configuration/data-sources/elasticsearch.mdx
+++ /dev/null
@@ -1,69 +0,0 @@
-# Elasticsearch
-
-
-
-
-
-Elasticsearch driver is deprecated and will be removed in a future release.
-
-
-
-## Prerequisites
-
-To connect to an [Elasticsearch][elasticsearch] database, use CUBEJS_DB_URL
-with the username and password embedded in the URL, if required.
-
-
-
-If you're not using [Elastic Cloud][elastic-cloud], you **must** specify
-CUBEJS_DB_ELASTIC_QUERY_FORMAT.
-
-
-
-## Setup
-
-### Manual
-
-For a self-hosted Elasticsearch instance, add the following to a `.env` file in
-your Cube project:
-
-```dotenv
-CUBEJS_DB_TYPE=elasticsearch
-CUBEJS_DB_URL=https://my.elasticsearch.host:9200
-CUBEJS_DB_ELASTIC_QUERY_FORMAT=json
-```
-
-For an Elasticsearch instanced hosted by [Elastic.co][elastic-co], add the
-following to a `.env` file in your Cube project:
-
-```dotenv
-CUBEJS_DB_TYPE=elasticsearch
-CUBEJS_DB_URL=https://my.elasticsearch.host:9200
-CUBEJS_DB_ELASTIC_APIKEY_ID=VuaCfGcBCdbkQm-e5aOx
-CUBEJS_DB_ELASTIC_APIKEY_KEY=ui2lp2axTNmsyakw9tvNnw
-```
-
-## Environment Variables
-
-| Environment Variable | Description | Possible Values | Required |
-| -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------- | :------: |
-| CUBEJS_DB_URL | The URL for a database | A valid database URL for Elasticsearch | ✅ |
-| CUBEJS_DB_ELASTIC_QUERY_FORMAT | By default, queries return data in JDBC format, but you can also return data in standard Elasticsearch JDBC, JSON, CSV, YAML or raw formats (only JSON and JDBC are currently supported) | `json`, `jdbc` | ❌ |
-| CUBEJS_DB_ELASTIC_OPENDISTRO | If `true`, then use the Open Distro for Elasticsearch | `true`, `false` | ❌ |
-| CUBEJS_DB_ELASTIC_APIKEY_ID | [ID of the API key from elastic.co][elastic-docs-api-keys] | A valid Elastic.co API key ID | ❌ |
-| CUBEJS_DB_ELASTIC_APIKEY_KEY | [Value of the API key from elastic.co][elastic-docs-api-keys] | A valid Elastic.co API key value | ❌ |
-| CUBEJS_DB_MAX_POOL | The maximum number of concurrent database connections to pool. Default is `8` | A valid number | ❌ |
-| CUBEJS_CONCURRENCY | The number of [concurrent queries][ref-data-source-concurrency] to the data source | A valid number | ❌ |
-
-[ref-data-source-concurrency]: /product/configuration/concurrency#data-source-concurrency
-
-## SSL
-
-Cube does not require any additional configuration to enable SSL as
-Elasticsearch connections are made over HTTPS.
-
-[elastic-co]: https://elastic.co/
-[elastic-cloud]: https://cloud.elastic.co/
-[elasticsearch]: https://www.elastic.co/elasticsearch/
-[elastic-docs-api-keys]:
- https://www.elastic.co/guide/en/kibana/master/api-keys.html#create-api-key
diff --git a/docs/content/product/configuration/data-sources/index.mdx b/docs/content/product/configuration/data-sources/index.mdx
index f575c35d2544f..45e055d44539a 100644
--- a/docs/content/product/configuration/data-sources/index.mdx
+++ b/docs/content/product/configuration/data-sources/index.mdx
@@ -158,11 +158,6 @@ sources.
## Other data sources
-
CUBEJS_DB_HOST will be ignored.
### Connecting to MySQL 8
-MySQL 8 uses a new default authentication plugin (`caching_sha2_password`)
-whereas previous version used `mysql_native_password`. Please
-[see this answer on StackOverflow](https://stackoverflow.com/a/50377944)
-for a workaround.
-
-
-
-For additional details, check the [relevant issue](https://github.com/cube-js/cube/issues/3525) on GitHub.
-
-
+MySQL 8 is fully supported and uses the new default authentication plugin
+(`caching_sha2_password`). No additional configuration is required.
[mysql]: https://www.mysql.com/
[ref-caching-using-preaggs-build-strats]:
diff --git a/docs/content/product/configuration/reference/config.mdx b/docs/content/product/configuration/reference/config.mdx
index be97effe48988..cb14a821415e8 100644
--- a/docs/content/product/configuration/reference/config.mdx
+++ b/docs/content/product/configuration/reference/config.mdx
@@ -446,7 +446,7 @@ You can pass this object to set advanced options for the query orchestrator.
| Option | Description | Default Value |
|------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------|
-| `continueWaitTimeout` | Long polling interval in seconds, maximum is 90 | `5` |
+| `continueWaitTimeout` | Long polling interval in seconds, maximum is 90 | `10` |
| `rollupOnlyMode` | When enabled, an error will be thrown if a query can't be served from a pre-aggregation (rollup) | `false` |
| `queryCacheOptions` | Query cache options for DB queries | `{}` |
| `queryCacheOptions.refreshKeyRenewalThreshold` | Time in seconds to cache the result of [`refresh_key`][ref-schema-cube-ref-refresh-key] check | `defined by DB dialect` |
@@ -1474,40 +1474,6 @@ Usually used for [multitenancy][ref-multitenancy].
If not defined, Cube will lookup for environment variable
CUBEJS_DB_TYPE to resolve the data source type.
-### `context_to_roles`
-
-
-
-`context_to_roles` is deprecated and will be removed in a future release.
-Use [`context_to_groups`](#context_to_groups) instead.
-
-
-
-Used by [access policies][ref-dap]. This option is used to derive a list of
-[data access roles][ref-dap-roles] from the [security context][ref-sec-ctx].
-
-
-
-```python
-from cube import config
-
-@config('context_to_roles')
-def context_to_roles(ctx: dict) -> list[str]:
- return ctx['securityContext'].get('roles', ['default'])
-```
-
-```javascript
-
-module.exports = {
- contextToRoles: ({ securityContext }) => {
- return securityContext.roles || ['default']
- }
-}
-```
-
-
-
-
[gh-jsonwebtoken-algs]:
https://github.com/auth0/node-jsonwebtoken#algorithms-supported
[link-express-cors-opts]:
diff --git a/docs/content/product/configuration/reference/environment-variables.mdx b/docs/content/product/configuration/reference/environment-variables.mdx
index 17e645b46ad98..59fb380794456 100644
--- a/docs/content/product/configuration/reference/environment-variables.mdx
+++ b/docs/content/product/configuration/reference/environment-variables.mdx
@@ -151,12 +151,6 @@ it should be adjusted accordingly.
| ------------------------------------ | ---------------------- | --------------------- |
| A valid number of concurrent queries | 10 | 10 |
-
-
-Previously, this environment variable was named CUBEJS_SCHEDULED_REFRESH_CONCURRENCY.
-
-
-
## `CUBEJS_CUBESTORE_HOST`
The hostname of the Cube Store deployment
@@ -416,42 +410,6 @@ A flag to use credentials chain for secrets for S3 connections.
| ----------------------------------------------------- | ---------------------- | --------------------- |
| `true`, `false` | `false` | `false` |
-## `CUBEJS_DB_ELASTIC_APIKEY_ID`
-
-The [ID of the API key from elastic.co][elastic-docs-api-keys]. Required when
-using Elastic Cloud.
-
-| Possible Values | Default in Development | Default in Production |
-| ----------------------------- | ---------------------- | --------------------- |
-| A valid Elastic.co API key ID | N/A | N/A |
-
-## `CUBEJS_DB_ELASTIC_APIKEY_KEY`
-
-The [API key from elastic.co][elastic-docs-api-keys]. Required when using
-Elastic Cloud.
-
-| Possible Values | Default in Development | Default in Production |
-| -------------------------- | ---------------------- | --------------------- |
-| A valid Elastic.co API key | N/A | N/A |
-
-## `CUBEJS_DB_ELASTIC_OPENDISTRO`
-
-If `true`, then use the Open Distro for Elasticsearch.
-
-| Possible Values | Default in Development | Default in Production |
-| --------------- | ---------------------- | --------------------- |
-| `true`, `false` | N/A | N/A |
-
-## `CUBEJS_DB_ELASTIC_QUERY_FORMAT`
-
-By default, queries return data in JDBC format, but you can also return data in
-standard Elasticsearch JDBC, JSON, CSV, YAML or raw formats (only JSON and JDBC
-are currently supported).
-
-| Possible Values | Default in Development | Default in Production |
-| --------------- | ---------------------- | --------------------- |
-| `json`, `jdbc` | N/A | N/A |
-
## `CUBEJS_DB_EXPORT_BUCKET`
The name of a bucket in cloud storage to store the database export snapshots.
@@ -1516,18 +1474,18 @@ If `true`, then use WebSocket for data fetching.
## `CUBEJS_TESSERACT_SQL_PLANNER`
-If `true`, enables Tesseract, the [next-generation data modeling engine][link-tesseract].
-Tesseract powers [multi-stage calculations][ref-multi-stage-calculations].
+Enables Tesseract, the [next-generation data modeling engine][link-tesseract],
+which is the default SQL planner and powers
+[multi-stage calculations][ref-multi-stage-calculations]. In versions before v1.7.0,
+Tesseract was not enabled by default. Set to `false` to fall back to the legacy
+planner, which is deprecated and will be removed in the near future.
| Possible Values | Default in Development | Default in Production |
| --------------- | ---------------------- | --------------------- |
-| `true`, `false` | `false` | `false` |
-
-
-
-Tesseract is currently in preview.
+| `true`, `false` | `true` | `true` |
-
+Tesseract-based pre-aggregation matching and planning follows this flag and cannot be
+toggled independently.
## `CUBESTORE_AWS_ACCESS_KEY_ID`
@@ -1875,8 +1833,6 @@ The port for a Cube deployment to listen to API connections on.
https://docs.databricks.com/data/databricks-file-system.html#mount-object-storage-to-dbfs
[databricks-docs-pat]:
https://docs.databricks.com/dev-tools/api/latest/authentication.html#token-management
-[elastic-docs-api-keys]:
- https://www.elastic.co/guide/en/kibana/master/api-keys.html#create-api-key
[firebolt-docs-account-name]:
https://docs.firebolt.io/managing-your-account/concepts-and-terminology.html#firebolt-account
[firebolt-docs-engine-name]:
diff --git a/docs/content/product/data-modeling/concepts/calendar-cubes.mdx b/docs/content/product/data-modeling/concepts/calendar-cubes.mdx
index 22ee578c23514..7e666baf8a966 100644
--- a/docs/content/product/data-modeling/concepts/calendar-cubes.mdx
+++ b/docs/content/product/data-modeling/concepts/calendar-cubes.mdx
@@ -10,8 +10,7 @@ the default granularities of time dimensions.
Calendar cubes are powered by Tesseract, the [next-generation data modeling
-engine][link-tesseract]. Tesseract is currently in preview. Use the
-CUBEJS_TESSERACT_SQL_PLANNER environment variable to enable it.
+engine][link-tesseract]. In versions before v1.7.0, it was not enabled by default.
diff --git a/docs/content/product/data-modeling/concepts/multi-fact-queries.mdx b/docs/content/product/data-modeling/concepts/multi-fact-queries.mdx
index 5c4df921fd423..d946ecdcc2842 100644
--- a/docs/content/product/data-modeling/concepts/multi-fact-queries.mdx
+++ b/docs/content/product/data-modeling/concepts/multi-fact-queries.mdx
@@ -9,8 +9,7 @@ common dimensions.
Multi-fact queries are powered by Tesseract, the [next-generation data modeling
-engine][link-tesseract]. Tesseract is currently in preview. Use the
-CUBEJS_TESSERACT_SQL_PLANNER environment variable to enable it.
+engine][link-tesseract]. In versions before v1.7.0, it was not enabled by default.
diff --git a/docs/content/product/data-modeling/concepts/multi-stage-calculations.mdx b/docs/content/product/data-modeling/concepts/multi-stage-calculations.mdx
index 8aad5d477ebeb..d444ee230e655 100644
--- a/docs/content/product/data-modeling/concepts/multi-stage-calculations.mdx
+++ b/docs/content/product/data-modeling/concepts/multi-stage-calculations.mdx
@@ -11,8 +11,7 @@ aggregated data. Each stage results in one or more [common table expressions][li
Multi-stage calculations are powered by Tesseract, the [next-generation data modeling
-engine][link-tesseract]. Tesseract is currently in preview. Use the
-CUBEJS_TESSERACT_SQL_PLANNER environment variable to enable it.
+engine][link-tesseract]. In versions before v1.7.0, it was not enabled by default.
diff --git a/docs/content/product/data-modeling/recipes/period-over-period.mdx b/docs/content/product/data-modeling/recipes/period-over-period.mdx
index e872e549649a5..c325df1507ed6 100644
--- a/docs/content/product/data-modeling/recipes/period-over-period.mdx
+++ b/docs/content/product/data-modeling/recipes/period-over-period.mdx
@@ -19,8 +19,7 @@ these measures and uses them in a calculation, e.g., divides or subtracts them.
Multi-stage calculations are powered by Tesseract, the [next-generation data modeling
-engine][link-tesseract]. Tesseract is currently in preview. Use the
-CUBEJS_TESSERACT_SQL_PLANNER environment variable to enable it.
+engine][link-tesseract]. In versions before v1.7.0, it was not enabled by default.
diff --git a/docs/content/product/data-modeling/recipes/xirr.mdx b/docs/content/product/data-modeling/recipes/xirr.mdx
index 9aff36e1bc3b5..1057142991385 100644
--- a/docs/content/product/data-modeling/recipes/xirr.mdx
+++ b/docs/content/product/data-modeling/recipes/xirr.mdx
@@ -25,8 +25,7 @@ Consequently, queries that don't hit pre-aggregations would fail with the follow
Multi-stage calculations are powered by Tesseract, the [next-generation data modeling
-engine][link-tesseract]. Tesseract is currently in preview. Use the
-CUBEJS_TESSERACT_SQL_PLANNER environment variable to enable it.
+engine][link-tesseract]. In versions before v1.7.0, it was not enabled by default.
diff --git a/docs/content/product/data-modeling/reference/measures.mdx b/docs/content/product/data-modeling/reference/measures.mdx
index 1a2c817469e19..b32817091f36c 100644
--- a/docs/content/product/data-modeling/reference/measures.mdx
+++ b/docs/content/product/data-modeling/reference/measures.mdx
@@ -396,9 +396,7 @@ with a provided date range. It is used to calculate the minimum and maximum valu
for the series of time windows.
With Tesseract, the [next-generation data modeling engine][link-tesseract],
-rolling window calculations don't require the date range for the time dimension.
-Tesseract is currently in preview. Use the CUBEJS_TESSERACT_SQL_PLANNER
-environment variable to enable it.
+rolling window calculations don't require the date range for the time dimension. In versions before v1.7.0, Tesseract was not enabled by default.
@@ -1056,8 +1054,7 @@ calculated based on the value of a [`switch` dimension][ref-switch-dimensions].
`case` measures are powered by Tesseract, the [next-generation data modeling
-engine][link-tesseract]. Tesseract is currently in preview. Use the
-CUBEJS_TESSERACT_SQL_PLANNER environment variable to enable it.
+engine][link-tesseract]. In versions before v1.7.0, it was not enabled by default.
diff --git a/docs/content/product/data-modeling/reference/types-and-formats.mdx b/docs/content/product/data-modeling/reference/types-and-formats.mdx
index e6011881eb927..f7ba64198d789 100644
--- a/docs/content/product/data-modeling/reference/types-and-formats.mdx
+++ b/docs/content/product/data-modeling/reference/types-and-formats.mdx
@@ -209,8 +209,7 @@ in the `sql` parameter that isn't covered by standard measure types like `sum`,
The `number_agg` type is only available in Tesseract, the [next-generation data modeling
-engine][link-tesseract]. Tesseract is currently in preview. Use the
-CUBEJS_TESSERACT_SQL_PLANNER environment variable to enable it.
+engine][link-tesseract]. In versions before v1.7.0, it was not enabled by default.
@@ -881,8 +880,7 @@ particularly useful for defining [`case` measures][ref-case-measures].
`switch` dimensions are powered by Tesseract, the [next-generation data modeling
-engine][link-tesseract]. Tesseract is currently in preview. Use the
-CUBEJS_TESSERACT_SQL_PLANNER environment variable to enable it.
+engine][link-tesseract]. In versions before v1.7.0, it was not enabled by default.
diff --git a/docs/redirects-new-docs.json b/docs/redirects-new-docs.json
index 1999ea8ccb53f..9ee3fbbd1d357 100644
--- a/docs/redirects-new-docs.json
+++ b/docs/redirects-new-docs.json
@@ -1234,11 +1234,6 @@
"destination": "https://docs.cube.dev/admin/connect-to-data/data-sources/firebolt",
"permanent": true
},
- {
- "source": "/config/databases/elasticsearch",
- "destination": "https://docs.cube.dev/admin/connect-to-data/data-sources/elasticsearch",
- "permanent": true
- },
{
"source": "/config/databases/druid",
"destination": "https://docs.cube.dev/admin/connect-to-data/data-sources/druid",
@@ -3069,11 +3064,6 @@
"destination": "https://docs.cube.dev/admin/connect-to-data/data-sources/duckdb",
"permanent": true
},
- {
- "source": "/product/configuration/data-sources/elasticsearch",
- "destination": "https://docs.cube.dev/admin/connect-to-data/data-sources/elasticsearch",
- "permanent": true
- },
{
"source": "/product/configuration/data-sources/firebolt",
"destination": "https://docs.cube.dev/admin/connect-to-data/data-sources/firebolt",
diff --git a/docs/redirects.json b/docs/redirects.json
index 4b2c6a92362d1..caa2169923786 100644
--- a/docs/redirects.json
+++ b/docs/redirects.json
@@ -1234,11 +1234,6 @@
"destination": "/product/configuration/data-sources/firebolt",
"permanent": true
},
- {
- "source": "/config/databases/elasticsearch",
- "destination": "/product/configuration/data-sources/elasticsearch",
- "permanent": true
- },
{
"source": "/config/databases/druid",
"destination": "/product/configuration/data-sources/druid",
diff --git a/lerna.json b/lerna.json
index f4e4783e098a3..aed4e25e6abd9 100644
--- a/lerna.json
+++ b/lerna.json
@@ -1,5 +1,5 @@
{
- "version": "1.6.67",
+ "version": "1.7.0",
"npmClient": "yarn",
"command": {
"bootstrap": {
diff --git a/package.json b/package.json
index b2fa0414be60d..a7c17a9587f89 100644
--- a/package.json
+++ b/package.json
@@ -68,7 +68,7 @@
"resolutions": {
"es5-ext": "0.10.53",
"lodash": "^4.17.0",
- "@types/node": "^20",
+ "@types/node": "^22",
"@types/ramda": "0.27.40",
"thrift": "0.20.0"
},
diff --git a/packages/cubejs-api-gateway/CHANGELOG.md b/packages/cubejs-api-gateway/CHANGELOG.md
index 4d984d6509d6c..5177339ec4369 100644
--- a/packages/cubejs-api-gateway/CHANGELOG.md
+++ b/packages/cubejs-api-gateway/CHANGELOG.md
@@ -3,6 +3,20 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+# [1.7.0](https://github.com/cube-js/cube/compare/v1.6.67...v1.7.0) (2026-07-06)
+
+- fix(cubeorchestrator)!: Serialize all numeric query results as JSON strings, fix #1879 ([bd88651](https://github.com/cube-js/cube/commit/bd8865113889b5153ed837c3dc51bc6bca5d3585)), closes [#1879](https://github.com/cube-js/cube/issues/1879)
+- feat(api-gateway)!: Remove deprecated renewQuery parameter (#11050) ([c2b8888](https://github.com/cube-js/cube/commit/c2b888885d6640c5a14ee49f1057fefdf703ead3)), closes [#11050](https://github.com/cube-js/cube/issues/11050)
+
+### BREAKING CHANGES
+
+- All numeric values in query results are now serialized
+ as JSON strings regardless of the data source driver. Previously the
+ JSON type of numeric values varied by driver (string or number).
+ Clients that relied on receiving JSON numbers must parse the string
+ values instead.
+- The `renewQuery` parameter of the `/v1/load` REST endpoint and the GraphQL `cube` query has been removed. Use the `cache` parameter instead: `cache: 'must-revalidate'` replaces `renewQuery: true`, and the default `stale-if-slow` replaces `renewQuery: false`.
+
## [1.6.67](https://github.com/cube-js/cube/compare/v1.6.66...v1.6.67) (2026-07-06)
### Features
diff --git a/packages/cubejs-api-gateway/package.json b/packages/cubejs-api-gateway/package.json
index 65f2d2619125b..177c06e13cea5 100644
--- a/packages/cubejs-api-gateway/package.json
+++ b/packages/cubejs-api-gateway/package.json
@@ -2,14 +2,14 @@
"name": "@cubejs-backend/api-gateway",
"description": "Cube API Gateway",
"author": "Cube Dev, Inc.",
- "version": "1.6.67",
+ "version": "1.7.0",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
"directory": "packages/cubejs-api-gateway"
},
"engines": {
- "node": "^14.0.0 || ^16.0.0 || >=17.0.0"
+ "node": ">=20.0.0"
},
"main": "dist/src/index.js",
"typings": "dist/src/index.d.ts",
@@ -27,9 +27,9 @@
"dist/src/*"
],
"dependencies": {
- "@cubejs-backend/native": "1.6.67",
- "@cubejs-backend/query-orchestrator": "1.6.67",
- "@cubejs-backend/shared": "1.6.67",
+ "@cubejs-backend/native": "1.7.0",
+ "@cubejs-backend/query-orchestrator": "1.7.0",
+ "@cubejs-backend/shared": "1.7.0",
"@ungap/structured-clone": "^0.3.4",
"assert-never": "^1.4.0",
"body-parser": "^1.19.0",
@@ -53,7 +53,7 @@
"zod": "^4.1.13"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.6.67",
+ "@cubejs-backend/linter": "1.7.0",
"@types/express": "^4.17.21",
"@types/jest": "^29",
"@types/jsonwebtoken": "^9.0.2",
diff --git a/packages/cubejs-api-gateway/src/graphql.ts b/packages/cubejs-api-gateway/src/graphql.ts
index b3a8d89fc714f..4a328d1cd6a02 100644
--- a/packages/cubejs-api-gateway/src/graphql.ts
+++ b/packages/cubejs-api-gateway/src/graphql.ts
@@ -363,7 +363,7 @@ function parseDates(result: any) {
}
export function getJsonQuery(metaConfig: any, args: Record, infos: GraphQLResolveInfo) {
- const { where, limit, offset, timezone, orderBy, renewQuery, ungrouped, cache } = args;
+ const { where, limit, offset, timezone, orderBy, ungrouped, cache } = args;
const measures: string[] = [];
const dimensions: string[] = [];
@@ -460,7 +460,6 @@ export function getJsonQuery(metaConfig: any, args: Record, infos:
...(offset && { offset }),
...(timezone && { timezone }),
...(filters.length && { filters }),
- ...(renewQuery && { renewQuery }),
...(cache && { cache }),
...(ungrouped && { ungrouped }),
};
@@ -639,7 +638,6 @@ export function makeSchema(metaConfig: any): GraphQLSchema {
limit: intArg(),
offset: intArg(),
timezone: stringArg(),
- renewQuery: booleanArg(),
cache: stringArg(),
ungrouped: booleanArg(),
orderBy: arg({
diff --git a/packages/cubejs-api-gateway/src/query.js b/packages/cubejs-api-gateway/src/query.js
index a3dda0f78837d..0407857f6b5d3 100644
--- a/packages/cubejs-api-gateway/src/query.js
+++ b/packages/cubejs-api-gateway/src/query.js
@@ -187,8 +187,6 @@ const querySchema = Joi.object().keys({
limit: Joi.number().integer().strict().min(0),
offset: Joi.number().integer().strict().min(0),
total: Joi.boolean(),
- // @deprecated
- renewQuery: Joi.boolean(),
cacheMode: Joi.valid('stale-if-slow', 'stale-while-revalidate', 'must-revalidate', 'no-cache'),
cache: Joi.valid('stale-if-slow', 'stale-while-revalidate', 'must-revalidate', 'no-cache'),
ungrouped: Joi.boolean(),
@@ -395,19 +393,12 @@ function parseInputMemberExpression(expression) {
function normalizeQueryCacheMode(query, cacheMode) {
if (cacheMode !== undefined) {
query.cacheMode = cacheMode;
- } else if (!query.cache && query?.renewQuery !== undefined) {
- // TODO: Drop this when renewQuery will be removed
- query.cacheMode = query.renewQuery === true
- ? 'must-revalidate'
- : 'stale-if-slow';
} else if (!query.cache) {
query.cacheMode = 'stale-if-slow';
} else {
query.cacheMode = query.cache;
}
- // TODO: Drop this when renewQuery will be removed
- query.renewQuery = undefined;
query.cache = undefined;
return query;
diff --git a/packages/cubejs-api-gateway/src/types/query.ts b/packages/cubejs-api-gateway/src/types/query.ts
index 26b0e26e263da..7b42fd7c046d7 100644
--- a/packages/cubejs-api-gateway/src/types/query.ts
+++ b/packages/cubejs-api-gateway/src/types/query.ts
@@ -140,8 +140,6 @@ interface Query {
totalQuery?: boolean;
order?: any;
timezone?: string;
- // @deprecated
- renewQuery?: boolean;
cacheMode?: CacheMode; // used after query normalization
cache?: CacheMode; // Used in public interface
ungrouped?: boolean;
diff --git a/packages/cubejs-api-gateway/src/types/request.ts b/packages/cubejs-api-gateway/src/types/request.ts
index 8478d008354a2..9b78a1afda503 100644
--- a/packages/cubejs-api-gateway/src/types/request.ts
+++ b/packages/cubejs-api-gateway/src/types/request.ts
@@ -121,7 +121,6 @@ type BaseRequest = {
};
type RequestQuery = Record | Record[] & {
- renewQuery?: boolean;
cacheMode?: CacheMode;
};
diff --git a/packages/cubejs-api-gateway/test/index.test.ts b/packages/cubejs-api-gateway/test/index.test.ts
index 6c2f9c27311d7..15fc50a0d4ed7 100644
--- a/packages/cubejs-api-gateway/test/index.test.ts
+++ b/packages/cubejs-api-gateway/test/index.test.ts
@@ -211,7 +211,7 @@ describe('API Gateway', () => {
.expect(200);
console.log(res.body);
- expect(res.body && res.body.data).toStrictEqual([{ 'Foo.bar': 42 }]);
+ expect(res.body && res.body.data).toStrictEqual([{ 'Foo.bar': '42' }]);
expect(queryRewrite.mock.calls.length).toEqual(1);
});
@@ -252,7 +252,7 @@ describe('API Gateway', () => {
.expect(200);
console.log(res.body);
- expect(res.body && res.body.data).toStrictEqual([{ 'Foo.bar': 42 }]);
+ expect(res.body && res.body.data).toStrictEqual([{ 'Foo.bar': '42' }]);
expect(queryRewrite.mock.calls.length).toEqual(1);
});
@@ -300,7 +300,7 @@ describe('API Gateway', () => {
.expect(200);
console.log(res.body);
- expect(res.body && res.body.data).toStrictEqual([{ 'Foo.bar': 42 }]);
+ expect(res.body && res.body.data).toStrictEqual([{ 'Foo.bar': '42' }]);
expect(queryRewrite.mock.calls.length).toEqual(1);
});
@@ -315,7 +315,7 @@ describe('API Gateway', () => {
.set('Authorization', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.e30.t-IDcSemACt8x4iTMCda8Yhe3iZaWbvV5XKSTbuAn0M')
.expect(200);
console.log(res.body);
- expect(res.body && res.body.data).toStrictEqual([{ 'Foo.bar': 42 }]);
+ expect(res.body && res.body.data).toStrictEqual([{ 'Foo.bar': '42' }]);
});
test('custom granularities in annotation from timeDimensions', async () => {
@@ -328,7 +328,7 @@ describe('API Gateway', () => {
.set('Authorization', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.e30.t-IDcSemACt8x4iTMCda8Yhe3iZaWbvV5XKSTbuAn0M')
.expect(200);
console.log(res.body);
- expect(res.body && res.body.data).toStrictEqual([{ 'Foo.bar': 42 }]);
+ expect(res.body && res.body.data).toStrictEqual([{ 'Foo.bar': '42' }]);
expect(res.body.annotation.timeDimensions['Foo.timeGranularities.half_year_by_1st_april'])
.toStrictEqual({
granularity: {
@@ -350,7 +350,7 @@ describe('API Gateway', () => {
.set('Authorization', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.e30.t-IDcSemACt8x4iTMCda8Yhe3iZaWbvV5XKSTbuAn0M')
.expect(200);
console.log(res.body);
- expect(res.body && res.body.data).toStrictEqual([{ 'Foo.bar': 42 }]);
+ expect(res.body && res.body.data).toStrictEqual([{ 'Foo.bar': '42' }]);
expect(res.body.annotation.timeDimensions['Foo.timeGranularities.half_year_by_1st_april'])
.toStrictEqual({
granularity: {
@@ -851,7 +851,7 @@ describe('API Gateway', () => {
measures: ['Foo.bar'],
timeDimensions: [{ dimension: 'Foo.time', granularity: 'day' }],
},
- data: [{ 'Foo.bar': 42 }],
+ data: [{ 'Foo.bar': '42' }],
});
});
});
diff --git a/packages/cubejs-athena-driver/CHANGELOG.md b/packages/cubejs-athena-driver/CHANGELOG.md
index b5b16992555bc..62278bbe1b7db 100644
--- a/packages/cubejs-athena-driver/CHANGELOG.md
+++ b/packages/cubejs-athena-driver/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+# [1.7.0](https://github.com/cube-js/cube/compare/v1.6.67...v1.7.0) (2026-07-06)
+
+**Note:** Version bump only for package @cubejs-backend/athena-driver
+
## [1.6.67](https://github.com/cube-js/cube/compare/v1.6.66...v1.6.67) (2026-07-06)
**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 abaa4be8541f9..80e89371e6c19 100644
--- a/packages/cubejs-athena-driver/package.json
+++ b/packages/cubejs-athena-driver/package.json
@@ -2,14 +2,14 @@
"name": "@cubejs-backend/athena-driver",
"description": "Cube.js Athena database driver",
"author": "Cube Dev, Inc.",
- "version": "1.6.67",
+ "version": "1.7.0",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
"directory": "packages/cubejs-athena-driver"
},
"engines": {
- "node": "^14.0.0 || ^16.0.0 || >=17.0.0"
+ "node": ">=20.0.0"
},
"scripts": {
"build": "rm -rf dist && npm run tsc",
@@ -30,13 +30,13 @@
"dependencies": {
"@aws-sdk/client-athena": "^3.22.0",
"@aws-sdk/credential-providers": "^3.22.0",
- "@cubejs-backend/base-driver": "1.6.67",
- "@cubejs-backend/shared": "1.6.67",
+ "@cubejs-backend/base-driver": "1.7.0",
+ "@cubejs-backend/shared": "1.7.0",
"sqlstring": "^2.3.1"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.6.67",
- "@cubejs-backend/testing-shared": "1.6.67",
+ "@cubejs-backend/linter": "1.7.0",
+ "@cubejs-backend/testing-shared": "1.7.0",
"@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 227b2d0a72a12..e8af2e9c664cb 100644
--- a/packages/cubejs-backend-cloud/CHANGELOG.md
+++ b/packages/cubejs-backend-cloud/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+# [1.7.0](https://github.com/cube-js/cube/compare/v1.6.67...v1.7.0) (2026-07-06)
+
+**Note:** Version bump only for package @cubejs-backend/cloud
+
## [1.6.67](https://github.com/cube-js/cube/compare/v1.6.66...v1.6.67) (2026-07-06)
**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 ec12ebf5472a8..27005e3e3e54f 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.6.67",
+ "version": "1.7.0",
"description": "Cube Cloud package",
"main": "dist/src/index.js",
"typings": "dist/src/index.d.ts",
@@ -18,7 +18,7 @@
"dist/src/*"
],
"engines": {
- "node": "^14.0.0 || ^16.0.0 || >=17.0.0"
+ "node": ">=20.0.0"
},
"author": "Cube Dev, Inc.",
"repository": {
@@ -30,7 +30,7 @@
"devDependencies": {
"@babel/core": "^7.24.5",
"@babel/preset-env": "^7.24.5",
- "@cubejs-backend/linter": "1.6.67",
+ "@cubejs-backend/linter": "1.7.0",
"@types/fs-extra": "^9.0.8",
"@types/jest": "^29",
"jest": "^29",
@@ -38,7 +38,7 @@
},
"dependencies": {
"@cubejs-backend/dotenv": "^9.0.2",
- "@cubejs-backend/shared": "1.6.67",
+ "@cubejs-backend/shared": "1.7.0",
"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 d5f4b45c4a3cd..320f30aa7cd33 100644
--- a/packages/cubejs-backend-maven/CHANGELOG.md
+++ b/packages/cubejs-backend-maven/CHANGELOG.md
@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+# [1.7.0](https://github.com/cube-js/cube/compare/v1.6.67...v1.7.0) (2026-07-06)
+
+**Note:** Version bump only for package @cubejs-backend/maven
+
## [1.6.67](https://github.com/cube-js/cube/compare/v1.6.66...v1.6.67) (2026-07-06)
**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 1e9f16e603ace..95c15d83aa1f6 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.6.67",
+ "version": "1.7.0",
"license": "Apache-2.0",
"repository": {
"type": "git",
@@ -10,7 +10,7 @@
"directory": "packages/cubejs-druid-driver"
},
"engines": {
- "node": "^14.0.0 || ^16.0.0 || >=17.0.0"
+ "node": ">=20.0.0"
},
"bin": {
"maven-resolve": "bin/maven-resolve"
@@ -31,14 +31,14 @@
"dist/src/*"
],
"dependencies": {
- "@cubejs-backend/shared": "1.6.67",
+ "@cubejs-backend/shared": "1.7.0",
"source-map-support": "^0.5.19",
"xmlbuilder2": "^2.4.0"
},
"devDependencies": {
- "@cubejs-backend/linter": "1.6.67",
+ "@cubejs-backend/linter": "1.7.0",
"@types/jest": "^29",
- "@types/node": "^20",
+ "@types/node": "^22",
"jest": "^29",
"typescript": "~5.2.2"
},
diff --git a/packages/cubejs-backend-native/.gitignore b/packages/cubejs-backend-native/.gitignore
index 67cbee8dc09f3..214ec7423edc4 100644
--- a/packages/cubejs-backend-native/.gitignore
+++ b/packages/cubejs-backend-native/.gitignore
@@ -7,4 +7,5 @@ index.node
**/.DS_Store
npm-debug.log
benchmarks/result.txt
-test/__pycache__/
\ No newline at end of file
+test/__pycache__/
+test/subdir_for_test/__pycache__/
diff --git a/packages/cubejs-backend-native/CHANGELOG.md b/packages/cubejs-backend-native/CHANGELOG.md
index 223a39a8cc856..51d26d642e945 100644
--- a/packages/cubejs-backend-native/CHANGELOG.md
+++ b/packages/cubejs-backend-native/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.7.0](https://github.com/cube-js/cube/compare/v1.6.67...v1.7.0) (2026-07-06)
+
+- feat(server-core)!: Remove deprecated dbType option (#11045) ([08a2a6b](https://github.com/cube-js/cube/commit/08a2a6b37efb450377383fbb0e5041fff106cff2)), closes [#11045](https://github.com/cube-js/cube/issues/11045)
+- feat!: Remove deprecated context_to_roles configuration option (#11055) ([41d42d6](https://github.com/cube-js/cube/commit/41d42d669486e763ad984fda5e64e33438baa5a4)), closes [#11055](https://github.com/cube-js/cube/issues/11055)
+
+### Features
+
+- **cubeorchestrator:** Use Arrow format for CubeStore response format ([78ddac2](https://github.com/cube-js/cube/commit/78ddac22db3258f2f2cf60bb772ae90aa1cb0282)), closes [#1705](https://github.com/cube-js/cube/issues/1705)
+- **native:** Initial support for Python 3.13 ([#9930](https://github.com/cube-js/cube/issues/9930)) ([f91a237](https://github.com/cube-js/cube/commit/f91a23728614dde9b9dc28b4e2a4662439670428))
+
+### BREAKING CHANGES
+
+- CreateOptions.dbType has been removed. Use driverFactory instead.
+- The context_to_roles (contextToRoles) configuration option has been removed. It was deprecated in v1.6.4. Use context_to_groups (contextToGroups) instead.
+
## [1.6.67](https://github.com/cube-js/cube/compare/v1.6.66...v1.6.67) (2026-07-06)
**Note:** Version bump only for package @cubejs-backend/native
diff --git a/packages/cubejs-backend-native/Cargo.lock b/packages/cubejs-backend-native/Cargo.lock
index b52628243878d..401f79adc4bee 100644
--- a/packages/cubejs-backend-native/Cargo.lock
+++ b/packages/cubejs-backend-native/Cargo.lock
@@ -45,9 +45,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
dependencies = [
"cfg-if",
+ "const-random",
+ "getrandom 0.2.11",
"once_cell",
"version_check",
- "zerocopy",
+ "zerocopy 0.7.32",
]
[[package]]
@@ -65,12 +67,6 @@ version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5"
-[[package]]
-name = "android-tzdata"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
-
[[package]]
name = "android_system_properties"
version = "0.1.5"
@@ -115,11 +111,11 @@ dependencies = [
"comfy-table 5.0.1",
"csv",
"flatbuffers 2.1.2",
- "half",
+ "half 1.8.2",
"hex",
"indexmap 1.9.3",
"lazy_static",
- "lexical-core",
+ "lexical-core 0.8.5",
"multiversion",
"num",
"rand",
@@ -130,6 +126,180 @@ dependencies = [
"serde_json",
]
+[[package]]
+name = "arrow"
+version = "58.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "378530e55cd479eda3c14eb345310799717e6f76d0c332041e8487022166b471"
+dependencies = [
+ "arrow-arith",
+ "arrow-array",
+ "arrow-buffer",
+ "arrow-cast",
+ "arrow-data",
+ "arrow-ipc",
+ "arrow-ord",
+ "arrow-row",
+ "arrow-schema",
+ "arrow-select",
+ "arrow-string",
+]
+
+[[package]]
+name = "arrow-arith"
+version = "58.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0ab212d2c1886e802f51c5212d78ebbcbb0bec980fff9dadc1eb8d45cd0b738"
+dependencies = [
+ "arrow-array",
+ "arrow-buffer",
+ "arrow-data",
+ "arrow-schema",
+ "chrono",
+ "num-traits",
+]
+
+[[package]]
+name = "arrow-array"
+version = "58.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfd33d3e92f207444098c75b42de99d329562be0cf686b307b097cc52b4e999e"
+dependencies = [
+ "ahash 0.8.11",
+ "arrow-buffer",
+ "arrow-data",
+ "arrow-schema",
+ "chrono",
+ "half 2.7.1",
+ "hashbrown 0.17.0",
+ "num-complex",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "arrow-buffer"
+version = "58.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c6cd424c2693bcdbc150d843dc9d4d137dd2de4782ce6df491ad11a3a0416c0"
+dependencies = [
+ "bytes",
+ "half 2.7.1",
+ "num-bigint",
+ "num-traits",
+]
+
+[[package]]
+name = "arrow-cast"
+version = "58.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c5aefb56a2c02e9e2b30746241058b85f8983f0fcff2ba0c6d09006e1cded7f"
+dependencies = [
+ "arrow-array",
+ "arrow-buffer",
+ "arrow-data",
+ "arrow-ord",
+ "arrow-schema",
+ "arrow-select",
+ "atoi",
+ "base64 0.22.1",
+ "chrono",
+ "half 2.7.1",
+ "lexical-core 1.0.6",
+ "num-traits",
+ "ryu",
+]
+
+[[package]]
+name = "arrow-data"
+version = "58.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c88210023a2bfee1896af366309a3028fc3bcbd6515fa29a7990ee1baa08ee0"
+dependencies = [
+ "arrow-buffer",
+ "arrow-schema",
+ "half 2.7.1",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "arrow-ipc"
+version = "58.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "238438f0834483703d88896db6fe5a7138b2230debc31b34c0336c2996e3c64f"
+dependencies = [
+ "arrow-array",
+ "arrow-buffer",
+ "arrow-data",
+ "arrow-schema",
+ "arrow-select",
+ "flatbuffers 25.12.19",
+]
+
+[[package]]
+name = "arrow-ord"
+version = "58.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bffd8fd2579286a5d63bac898159873e5094a79009940bcb42bbfce4f19f1d0"
+dependencies = [
+ "arrow-array",
+ "arrow-buffer",
+ "arrow-data",
+ "arrow-schema",
+ "arrow-select",
+]
+
+[[package]]
+name = "arrow-row"
+version = "58.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bab5994731204603c73ba69267616c50f80780774c6bb0476f1f830625115e0c"
+dependencies = [
+ "arrow-array",
+ "arrow-buffer",
+ "arrow-data",
+ "arrow-schema",
+ "half 2.7.1",
+]
+
+[[package]]
+name = "arrow-schema"
+version = "58.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f633dbfdf39c039ada1bf9e34c694816eb71fbb7dc78f613993b7245e078a1ed"
+
+[[package]]
+name = "arrow-select"
+version = "58.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8cd065c54172ac787cf3f2f8d4107e0d3fdc26edba76fdf4f4cc170258942222"
+dependencies = [
+ "ahash 0.8.11",
+ "arrow-array",
+ "arrow-buffer",
+ "arrow-data",
+ "arrow-schema",
+ "num-traits",
+]
+
+[[package]]
+name = "arrow-string"
+version = "58.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29dd7cda3ab9692f43a2e4acc444d760cc17b12bb6d8232ddf64e9bab7c06b42"
+dependencies = [
+ "arrow-array",
+ "arrow-buffer",
+ "arrow-data",
+ "arrow-schema",
+ "arrow-select",
+ "memchr",
+ "num-traits",
+ "regex",
+ "regex-syntax 0.8.5",
+]
+
[[package]]
name = "async-channel"
version = "2.1.1"
@@ -187,6 +357,15 @@ dependencies = [
"syn 2.0.98",
]
+[[package]]
+name = "atoi"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528"
+dependencies = [
+ "num-traits",
+]
+
[[package]]
name = "atty"
version = "0.2.14"
@@ -465,17 +644,16 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
[[package]]
name = "chrono"
-version = "0.4.39"
+version = "0.4.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825"
+checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0"
dependencies = [
- "android-tzdata",
"iana-time-zone",
"js-sys",
"num-traits",
"serde",
"wasm-bindgen",
- "windows-targets 0.52.0",
+ "windows-link",
]
[[package]]
@@ -574,6 +752,26 @@ dependencies = [
"crossbeam-utils",
]
+[[package]]
+name = "const-random"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359"
+dependencies = [
+ "const-random-macro",
+]
+
+[[package]]
+name = "const-random-macro"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e"
+dependencies = [
+ "getrandom 0.2.11",
+ "once_cell",
+ "tiny-keccak",
+]
+
[[package]]
name = "constant_time_eq"
version = "0.3.0"
@@ -659,6 +857,12 @@ dependencies = [
"winapi",
]
+[[package]]
+name = "crunchy"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5"
+
[[package]]
name = "crypto-common"
version = "0.1.6"
@@ -693,9 +897,9 @@ dependencies = [
[[package]]
name = "cube-ext"
version = "1.0.0"
-source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=1a849d723be7a13dfe4cbb83a574d5da735e885f#1a849d723be7a13dfe4cbb83a574d5da735e885f"
+source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=c7e685599fefdf0692d44ac7c2f6aebd6b927bc0#c7e685599fefdf0692d44ac7c2f6aebd6b927bc0"
dependencies = [
- "arrow",
+ "arrow 13.0.0",
"chrono",
"datafusion-common",
"datafusion-expr",
@@ -742,7 +946,7 @@ dependencies = [
"neon",
"once_cell",
"pyo3",
- "pyo3-asyncio",
+ "pyo3-async-runtimes",
"serde",
"serde_json",
"simple_logger",
@@ -774,6 +978,7 @@ name = "cubeorchestrator"
version = "0.1.0"
dependencies = [
"anyhow",
+ "arrow 58.3.0",
"chrono",
"cubeshared",
"indexmap 2.14.0",
@@ -868,10 +1073,10 @@ checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2"
[[package]]
name = "datafusion"
version = "7.0.0"
-source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=1a849d723be7a13dfe4cbb83a574d5da735e885f#1a849d723be7a13dfe4cbb83a574d5da735e885f"
+source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=c7e685599fefdf0692d44ac7c2f6aebd6b927bc0#c7e685599fefdf0692d44ac7c2f6aebd6b927bc0"
dependencies = [
"ahash 0.7.8",
- "arrow",
+ "arrow 13.0.0",
"async-trait",
"chrono",
"datafusion-common",
@@ -901,9 +1106,9 @@ dependencies = [
[[package]]
name = "datafusion-common"
version = "7.0.0"
-source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=1a849d723be7a13dfe4cbb83a574d5da735e885f#1a849d723be7a13dfe4cbb83a574d5da735e885f"
+source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=c7e685599fefdf0692d44ac7c2f6aebd6b927bc0#c7e685599fefdf0692d44ac7c2f6aebd6b927bc0"
dependencies = [
- "arrow",
+ "arrow 13.0.0",
"ordered-float 2.10.1",
"parquet",
"sqlparser",
@@ -912,7 +1117,7 @@ dependencies = [
[[package]]
name = "datafusion-data-access"
version = "1.0.0"
-source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=1a849d723be7a13dfe4cbb83a574d5da735e885f#1a849d723be7a13dfe4cbb83a574d5da735e885f"
+source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=c7e685599fefdf0692d44ac7c2f6aebd6b927bc0#c7e685599fefdf0692d44ac7c2f6aebd6b927bc0"
dependencies = [
"async-trait",
"chrono",
@@ -925,10 +1130,10 @@ dependencies = [
[[package]]
name = "datafusion-expr"
version = "7.0.0"
-source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=1a849d723be7a13dfe4cbb83a574d5da735e885f#1a849d723be7a13dfe4cbb83a574d5da735e885f"
+source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=c7e685599fefdf0692d44ac7c2f6aebd6b927bc0#c7e685599fefdf0692d44ac7c2f6aebd6b927bc0"
dependencies = [
"ahash 0.7.8",
- "arrow",
+ "arrow 13.0.0",
"datafusion-common",
"sqlparser",
]
@@ -936,10 +1141,10 @@ dependencies = [
[[package]]
name = "datafusion-physical-expr"
version = "7.0.0"
-source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=1a849d723be7a13dfe4cbb83a574d5da735e885f#1a849d723be7a13dfe4cbb83a574d5da735e885f"
+source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=c7e685599fefdf0692d44ac7c2f6aebd6b927bc0#c7e685599fefdf0692d44ac7c2f6aebd6b927bc0"
dependencies = [
"ahash 0.7.8",
- "arrow",
+ "arrow 13.0.0",
"blake2",
"blake3",
"chrono",
@@ -1306,6 +1511,18 @@ version = "1.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7"
+[[package]]
+name = "half"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b"
+dependencies = [
+ "cfg-if",
+ "crunchy",
+ "num-traits",
+ "zerocopy 0.8.27",
+]
+
[[package]]
name = "hashbrown"
version = "0.12.3"
@@ -1358,6 +1575,12 @@ version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+[[package]]
+name = "heck"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
+
[[package]]
name = "hermit-abi"
version = "0.1.19"
@@ -1772,11 +1995,24 @@ version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2cde5de06e8d4c2faabc400238f9ae1c74d5412d03a7bd067645ccbc47070e46"
dependencies = [
- "lexical-parse-float",
- "lexical-parse-integer",
- "lexical-util",
- "lexical-write-float",
- "lexical-write-integer",
+ "lexical-parse-float 0.8.5",
+ "lexical-parse-integer 0.8.6",
+ "lexical-util 0.8.5",
+ "lexical-write-float 0.8.5",
+ "lexical-write-integer 0.8.5",
+]
+
+[[package]]
+name = "lexical-core"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d8d125a277f807e55a77304455eb7b1cb52f2b18c143b60e766c120bd64a594"
+dependencies = [
+ "lexical-parse-float 1.0.6",
+ "lexical-parse-integer 1.0.6",
+ "lexical-util 1.0.7",
+ "lexical-write-float 1.0.6",
+ "lexical-write-integer 1.0.6",
]
[[package]]
@@ -1785,21 +2021,40 @@ version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "683b3a5ebd0130b8fb52ba0bdc718cc56815b6a097e28ae5a6997d0ad17dc05f"
dependencies = [
- "lexical-parse-integer",
- "lexical-util",
+ "lexical-parse-integer 0.8.6",
+ "lexical-util 0.8.5",
"static_assertions",
]
+[[package]]
+name = "lexical-parse-float"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52a9f232fbd6f550bc0137dcb5f99ab674071ac2d690ac69704593cb4abbea56"
+dependencies = [
+ "lexical-parse-integer 1.0.6",
+ "lexical-util 1.0.7",
+]
+
[[package]]
name = "lexical-parse-integer"
version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d0994485ed0c312f6d965766754ea177d07f9c00c9b82a5ee62ed5b47945ee9"
dependencies = [
- "lexical-util",
+ "lexical-util 0.8.5",
"static_assertions",
]
+[[package]]
+name = "lexical-parse-integer"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a7a039f8fb9c19c996cd7b2fcce303c1b2874fe1aca544edc85c4a5f8489b34"
+dependencies = [
+ "lexical-util 1.0.7",
+]
+
[[package]]
name = "lexical-util"
version = "0.8.5"
@@ -1809,27 +2064,52 @@ dependencies = [
"static_assertions",
]
+[[package]]
+name = "lexical-util"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2604dd126bb14f13fb5d1bd6a66155079cb9fa655b37f875b3a742c705dbed17"
+
[[package]]
name = "lexical-write-float"
version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "accabaa1c4581f05a3923d1b4cfd124c329352288b7b9da09e766b0668116862"
dependencies = [
- "lexical-util",
- "lexical-write-integer",
+ "lexical-util 0.8.5",
+ "lexical-write-integer 0.8.5",
"static_assertions",
]
+[[package]]
+name = "lexical-write-float"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50c438c87c013188d415fbabbb1dceb44249ab81664efbd31b14ae55dabb6361"
+dependencies = [
+ "lexical-util 1.0.7",
+ "lexical-write-integer 1.0.6",
+]
+
[[package]]
name = "lexical-write-integer"
version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e1b6f3d1f4422866b68192d62f77bc5c700bee84f3069f2469d7bc8c77852446"
dependencies = [
- "lexical-util",
+ "lexical-util 0.8.5",
"static_assertions",
]
+[[package]]
+name = "lexical-write-integer"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "409851a618475d2d5796377cad353802345cba92c867d9fbcde9cf4eac4e14df"
+dependencies = [
+ "lexical-util 1.0.7",
+]
+
[[package]]
name = "libc"
version = "0.2.177"
@@ -1933,9 +2213,9 @@ dependencies = [
[[package]]
name = "memchr"
-version = "2.6.4"
+version = "2.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
+checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
[[package]]
name = "memo-map"
@@ -2096,20 +2376,19 @@ dependencies = [
[[package]]
name = "num-bigint"
-version = "0.4.4"
+version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0"
+checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
dependencies = [
- "autocfg",
"num-integer",
"num-traits",
]
[[package]]
name = "num-complex"
-version = "0.4.4"
+version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214"
+checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
dependencies = [
"num-traits",
]
@@ -2122,11 +2401,10 @@ checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
[[package]]
name = "num-integer"
-version = "0.1.45"
+version = "0.1.46"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
dependencies = [
- "autocfg",
"num-traits",
]
@@ -2155,11 +2433,12 @@ dependencies = [
[[package]]
name = "num-traits"
-version = "0.2.17"
+version = "0.2.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
+checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
dependencies = [
"autocfg",
+ "libm",
]
[[package]]
@@ -2248,7 +2527,7 @@ name = "parquet"
version = "13.0.0"
source = "git+https://github.com/cube-js/arrow-rs.git?rev=de57e9799dcfde7bdd02885e63b65e3499f192e5#de57e9799dcfde7bdd02885e63b65e3499f192e5"
dependencies = [
- "arrow",
+ "arrow 13.0.0",
"base64 0.13.1",
"byteorder",
"chrono",
@@ -2508,15 +2787,16 @@ dependencies = [
[[package]]
name = "pyo3"
-version = "0.20.0"
+version = "0.22.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "04e8453b658fe480c3e70c8ed4e3d3ec33eb74988bd186561b0cc66b85c3bc4b"
+checksum = "f402062616ab18202ae8319da13fa4279883a2b8a9d9f83f20dbade813ce1884"
dependencies = [
"cfg-if",
"indoc",
"libc",
"memoffset",
- "parking_lot",
+ "once_cell",
+ "portable-atomic",
"pyo3-build-config",
"pyo3-ffi",
"pyo3-macros",
@@ -2524,35 +2804,35 @@ dependencies = [
]
[[package]]
-name = "pyo3-asyncio"
-version = "0.20.0"
+name = "pyo3-async-runtimes"
+version = "0.22.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ea6b68e93db3622f3bb3bf363246cf948ed5375afe7abff98ccbdd50b184995"
+checksum = "2529f0be73ffd2be0cc43c013a640796558aa12d7ca0aab5cc14f375b4733031"
dependencies = [
"futures",
"once_cell",
"pin-project-lite",
"pyo3",
- "pyo3-asyncio-macros",
+ "pyo3-async-runtimes-macros",
"tokio",
]
[[package]]
-name = "pyo3-asyncio-macros"
-version = "0.20.0"
+name = "pyo3-async-runtimes-macros"
+version = "0.22.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "56c467178e1da6252c95c29ecf898b133f742e9181dca5def15dc24e19d45a39"
+checksum = "22c26fd8e9fc19f53f0c1e00bf61471de6789f7eb263056f7f944a9cceb5823e"
dependencies = [
"proc-macro2",
"quote",
- "syn 1.0.109",
+ "syn 2.0.98",
]
[[package]]
name = "pyo3-build-config"
-version = "0.20.0"
+version = "0.22.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a96fe70b176a89cff78f2fa7b3c930081e163d5379b4dcdf993e3ae29ca662e5"
+checksum = "b14b5775b5ff446dd1056212d778012cbe8a0fbffd368029fd9e25b514479c38"
dependencies = [
"once_cell",
"target-lexicon",
@@ -2560,9 +2840,9 @@ dependencies = [
[[package]]
name = "pyo3-ffi"
-version = "0.20.0"
+version = "0.22.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "214929900fd25e6604661ed9cf349727c8920d47deff196c4e28165a6ef2a96b"
+checksum = "9ab5bcf04a2cdcbb50c7d6105de943f543f9ed92af55818fd17b660390fc8636"
dependencies = [
"libc",
"pyo3-build-config",
@@ -2570,9 +2850,9 @@ dependencies = [
[[package]]
name = "pyo3-macros"
-version = "0.20.0"
+version = "0.22.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dac53072f717aa1bfa4db832b39de8c875b7c7af4f4a6fe93cdbf9264cf8383b"
+checksum = "0fd24d897903a9e6d80b968368a34e1525aeb719d568dba8b3d4bfa5dc67d453"
dependencies = [
"proc-macro2",
"pyo3-macros-backend",
@@ -2582,12 +2862,13 @@ dependencies = [
[[package]]
name = "pyo3-macros-backend"
-version = "0.20.0"
+version = "0.22.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7774b5a8282bd4f25f803b1f0d945120be959a36c72e08e7cd031c792fdfd424"
+checksum = "36c011a03ba1e50152b4b394b479826cad97e7a21eb52df179cd91ac411cbfbe"
dependencies = [
- "heck 0.4.1",
+ "heck 0.5.0",
"proc-macro2",
+ "pyo3-build-config",
"quote",
"syn 2.0.98",
]
@@ -3365,9 +3646,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
[[package]]
name = "target-lexicon"
-version = "0.12.12"
+version = "0.12.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "14c39fd04924ca3a864207c66fc2cd7d22d7c016007f9ce846cbb9326331930a"
+checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
[[package]]
name = "tempfile"
@@ -3478,6 +3759,15 @@ dependencies = [
"time-core",
]
+[[package]]
+name = "tiny-keccak"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
+dependencies = [
+ "crunchy",
+]
+
[[package]]
name = "tinystr"
version = "0.7.6"
@@ -4044,6 +4334,12 @@ dependencies = [
"windows-targets 0.48.5",
]
+[[package]]
+name = "windows-link"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
+
[[package]]
name = "windows-sys"
version = "0.48.0"
@@ -4255,7 +4551,16 @@ version = "0.7.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be"
dependencies = [
- "zerocopy-derive",
+ "zerocopy-derive 0.7.32",
+]
+
+[[package]]
+name = "zerocopy"
+version = "0.8.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c"
+dependencies = [
+ "zerocopy-derive 0.8.27",
]
[[package]]
@@ -4269,6 +4574,17 @@ dependencies = [
"syn 2.0.98",
]
+[[package]]
+name = "zerocopy-derive"
+version = "0.8.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.98",
+]
+
[[package]]
name = "zerofrom"
version = "0.1.5"
diff --git a/packages/cubejs-backend-native/Cargo.toml b/packages/cubejs-backend-native/Cargo.toml
index 5801a68f9d259..60e9defdcfa8b 100644
--- a/packages/cubejs-backend-native/Cargo.toml
+++ b/packages/cubejs-backend-native/Cargo.toml
@@ -34,11 +34,8 @@ log-reroute = "0.1"
minijinja = { version = "1", features = ["json", "loader"] }
once_cell = "1.10"
# python
-pyo3 = { version = "0.20.0", features = [], optional = true }
-pyo3-asyncio = { version = "0.20.0", features = [
- "tokio-runtime",
- "attributes",
-], optional = true }
+pyo3 = { version = "0.22.6", optional = true }
+pyo3-async-runtimes = { version = "0.22.0", features = ["tokio-runtime", "attributes"], optional = true }
serde = { version = "1.0.217", features = ["derive"] }
serde_json = "1.0.127"
simple_logger = "1.7.0"
@@ -55,7 +52,7 @@ features = ["napi-1", "napi-4", "napi-6", "futures"]
default = ["neon-entrypoint", "async-log"]
neon-debug = []
neon-entrypoint = []
-python = ["pyo3", "pyo3-asyncio"]
+python = ["pyo3", "pyo3-async-runtimes"]
async-log = ["log_nonblock"]
# Exposes `__testBridge_*` endpoints used by the bridge regression test
# harness. Off by default — never enable in production builds.
diff --git a/packages/cubejs-backend-native/benchmarks/fixtures/config-async.py b/packages/cubejs-backend-native/benchmarks/fixtures/config-async.py
index a14a6608d9448..53682050db7cd 100644
--- a/packages/cubejs-backend-native/benchmarks/fixtures/config-async.py
+++ b/packages/cubejs-backend-native/benchmarks/fixtures/config-async.py
@@ -95,14 +95,6 @@ async def logger(msg, params):
pass
-@config
-async def context_to_roles(ctx):
- # Removed print statements for benchmarking
- return [
- "admin",
- ]
-
-
@config
async def context_to_groups(ctx):
# Removed print statements for benchmarking
diff --git a/packages/cubejs-backend-native/benchmarks/fixtures/config.py b/packages/cubejs-backend-native/benchmarks/fixtures/config.py
index b00cce6560e3e..3bab1a5baf764 100644
--- a/packages/cubejs-backend-native/benchmarks/fixtures/config.py
+++ b/packages/cubejs-backend-native/benchmarks/fixtures/config.py
@@ -95,14 +95,6 @@ def logger(msg, params):
pass
-@config
-def context_to_roles(ctx):
- # Removed print statements for benchmarking
- return [
- "admin",
- ]
-
-
@config
def context_to_groups(ctx):
# Removed print statements for benchmarking
diff --git a/packages/cubejs-backend-native/js/index.ts b/packages/cubejs-backend-native/js/index.ts
index b5dbf3cdc4ad2..24715c926b0e0 100644
--- a/packages/cubejs-backend-native/js/index.ts
+++ b/packages/cubejs-backend-native/js/index.ts
@@ -535,7 +535,6 @@ export interface PyConfiguration {
contextToApiScopes?: () => Promise
scheduledRefreshContexts?: (ctx: unknown) => Promise
scheduledRefreshTimeZones?: (ctx: unknown) => Promise
- contextToRoles?: (ctx: unknown) => Promise
contextToGroups?: (ctx: unknown) => Promise
}
diff --git a/packages/cubejs-backend-native/package.json b/packages/cubejs-backend-native/package.json
index 93881e829f0ae..94cdc5b0d3450 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.6.67",
+ "version": "1.7.0",
"author": "Cube Dev, Inc.",
"description": "Native module for Cube.js (binding to Rust codebase)",
"main": "dist/js/index.js",
@@ -33,15 +33,15 @@
"lint:fix": "eslint --fix test/ js/ --ext .ts"
},
"engines": {
- "node": "^14.0.0 || ^16.0.0 || >=17.0.0"
+ "node": ">=20.0.0"
},
"files": [
"dist/js"
],
"devDependencies": {
- "@cubejs-backend/linter": "1.6.67",
+ "@cubejs-backend/linter": "1.7.0",
"@types/jest": "^29",
- "@types/node": "^20",
+ "@types/node": "^22",
"cargo-cp-artifact": "^0.1.9",
"jest": "^29",
"jest-bench": "^29",
@@ -50,8 +50,8 @@
"uuid": "^8.3.2"
},
"dependencies": {
- "@cubejs-backend/cubesql": "1.6.67",
- "@cubejs-backend/shared": "1.6.67",
+ "@cubejs-backend/cubesql": "1.7.0",
+ "@cubejs-backend/shared": "1.7.0",
"@cubejs-infra/post-installer": "^0.0.7"
},
"resources": {
@@ -61,6 +61,7 @@
"value": [
"libpython",
[
+ "3.13",
"3.12",
"3.11",
"3.10",
diff --git a/packages/cubejs-backend-native/python/cube/src/__init__.py b/packages/cubejs-backend-native/python/cube/src/__init__.py
index f779f8d13864f..c793af0869056 100644
--- a/packages/cubejs-backend-native/python/cube/src/__init__.py
+++ b/packages/cubejs-backend-native/python/cube/src/__init__.py
@@ -65,7 +65,6 @@ class Configuration:
context_to_cube_store_router_id: Union[str, Callable[[RequestContext], str]]
driver_factory: Callable[[RequestContext], Dict]
external_driver_factory: Callable[[RequestContext], Dict]
- db_type: Union[str, Callable[[RequestContext], str]]
check_auth: Callable
check_sql_auth: Callable
can_switch_sql_user: Callable
@@ -77,7 +76,6 @@ class Configuration:
semantic_layer_sync: Union[Dict, Callable[[], Dict]]
pre_aggregations_schema: Union[Callable[[RequestContext], str], str]
orchestrator_options: Union[Dict, Callable[[RequestContext], Dict]]
- context_to_roles: Callable[[RequestContext], list[str]]
context_to_groups: Callable[[RequestContext], list[str]]
fast_reload: bool
@@ -114,7 +112,6 @@ def __init__(self):
self.context_to_cube_store_router_id = None
self.driver_factory = None
self.external_driver_factory = None
- self.db_type = None
self.check_auth = None
self.check_sql_auth = None
self.can_switch_sql_user = None
@@ -128,7 +125,6 @@ def __init__(self):
self.semantic_layer_sync = None
self.pre_aggregations_schema = None
self.orchestrator_options = None
- self.context_to_roles = None
self.context_to_groups = None
self.fast_reload = None
diff --git a/packages/cubejs-backend-native/src/cross/clrepr.rs b/packages/cubejs-backend-native/src/cross/clrepr.rs
index 1326c7b9c780c..2c30694dde6a4 100644
--- a/packages/cubejs-backend-native/src/cross/clrepr.rs
+++ b/packages/cubejs-backend-native/src/cross/clrepr.rs
@@ -10,6 +10,8 @@ use neon::prelude::*;
use neon::result::Throw;
use neon::types::JsDate;
#[cfg(feature = "python")]
+use pyo3::Python;
+#[cfg(feature = "python")]
use std::cell::RefCell;
use std::collections::hash_map::{IntoIter, Iter, Keys};
use std::collections::HashMap;
@@ -96,9 +98,9 @@ pub enum StringType {
Safe,
}
-/// Cross language representation is abstraction to transfer values between
+/// Cross-language representation is an abstraction to transfer values between
/// JavaScript and Python across Rust. Converting between two different languages requires
-/// to use Context which is available on the call (one for python and one for js), which result as
+/// using Context which is available on the call (one for python and one for js), which results as
/// blocking.
#[derive(Debug, Clone)]
pub enum CLRepr {
@@ -240,7 +242,7 @@ impl CLRepr {
#[cfg(feature = "python")]
if from.is_a::(cx) {
let ref_wrap = from.downcast_or_throw::(cx)?;
- let fun = ref_wrap.borrow().get_fun().clone();
+ let fun = Python::with_gil(|py| ref_wrap.borrow().get_fun().clone_ref(py));
return Ok(CLRepr::PythonRef(PythonRef::PyFunction(fun)));
}
diff --git a/packages/cubejs-backend-native/src/cross/clrepr_python.rs b/packages/cubejs-backend-native/src/cross/clrepr_python.rs
index 387aa42eb1025..34e2a8301ba54 100644
--- a/packages/cubejs-backend-native/src/cross/clrepr_python.rs
+++ b/packages/cubejs-backend-native/src/cross/clrepr_python.rs
@@ -3,12 +3,14 @@ use crate::cross::{CLRepr, CLReprObjectKind, StringType};
use crate::python::utils::PyAnyHelpers;
use pyo3::exceptions::{PyException, PyNotImplementedError, PyTypeError};
use pyo3::types::{
- PyBool, PyComplex, PyDate, PyDateTime, PyDelta, PyDict, PyFloat, PyFrame, PyFrozenSet,
- PyFunction, PyInt, PyList, PySequence, PySet, PyString, PyTraceback, PyTuple,
+ PyAnyMethods, PyBool, PyBoolMethods, PyComplex, PyDate, PyDateTime, PyDelta, PyDict,
+ PyDictMethods, PyFloat, PyFloatMethods, PyFrame, PyFrozenSet, PyFunction, PyInt, PyList,
+ PyListMethods, PySequence, PySet, PySetMethods, PyString, PyTraceback, PyTuple, PyTupleMethods,
+ PyTypeMethods,
};
-use pyo3::{Py, PyAny, PyErr, PyObject, Python, ToPyObject};
+use pyo3::{Bound, Py, PyAny, PyErr, PyObject, Python, ToPyObject};
-#[derive(Debug, Clone)]
+#[derive(Debug)]
pub enum PythonRef {
PyObject(PyObject),
PyFunction(Py),
@@ -17,9 +19,19 @@ pub enum PythonRef {
PyExternalFunction(Py),
}
+impl Clone for PythonRef {
+ fn clone(&self) -> Self {
+ Python::with_gil(|py| match self {
+ PythonRef::PyObject(obj) => PythonRef::PyObject(obj.clone_ref(py)),
+ PythonRef::PyFunction(fun) => PythonRef::PyFunction(fun.clone_ref(py)),
+ PythonRef::PyExternalFunction(fun) => PythonRef::PyExternalFunction(fun.clone_ref(py)),
+ })
+ }
+}
+
impl CLRepr {
/// Convert python value to CLRepr
- pub fn from_python_ref(v: &PyAny) -> Result {
+ pub fn from_python_ref(v: &Bound<'_, PyAny>) -> Result {
if v.is_none() {
return Ok(Self::Null);
}
@@ -31,7 +43,7 @@ impl CLRepr {
StringType::Normal
};
- Self::String(v.to_string(), string_type)
+ Self::String(v.str()?.to_string(), string_type)
} else if v.get_type().is_subclass_of::()? {
Self::Bool(v.downcast::()?.is_true())
} else if v.get_type().is_subclass_of::()? {
@@ -48,7 +60,7 @@ impl CLRepr {
if k.get_type().is_subclass_of::()? {
let key_str = k.downcast::()?;
- obj.insert(key_str.to_string(), Self::from_python_ref(v)?);
+ obj.insert(key_str.to_string(), Self::from_python_ref(&v)?);
}
}
@@ -58,7 +70,7 @@ impl CLRepr {
let mut r = Vec::with_capacity(l.len());
for v in l.iter() {
- r.push(Self::from_python_ref(v)?);
+ r.push(Self::from_python_ref(&v)?);
}
Self::Array(r)
@@ -67,7 +79,7 @@ impl CLRepr {
let mut r = Vec::with_capacity(l.len());
for v in l.iter() {
- r.push(Self::from_python_ref(v)?);
+ r.push(Self::from_python_ref(&v)?);
}
Self::Array(r)
@@ -76,12 +88,12 @@ impl CLRepr {
let mut r = Vec::with_capacity(l.len());
for v in l.iter() {
- r.push(Self::from_python_ref(v)?);
+ r.push(Self::from_python_ref(&v)?);
}
Self::Tuple(r)
} else if v.get_type().is_subclass_of::()? {
- let fun: Py = v.downcast::()?.into();
+ let fun: Py = v.downcast::()?.clone().unbind();
Self::PythonRef(PythonRef::PyFunction(fun))
} else if v.get_type().is_subclass_of::()? {
@@ -140,12 +152,12 @@ impl CLRepr {
)));
} else {
// Fallback to PyObject, it will lead to throw error in the JS side
- Self::PythonRef(PythonRef::PyObject(v.into()))
+ Self::PythonRef(PythonRef::PyObject(v.clone().unbind()))
})
}
- fn into_py_dict_impl(obj: CLReprObject, py: Python<'_>) -> Result<&PyDict, PyErr> {
- let r = PyDict::new(py);
+ fn into_py_dict_impl(obj: CLReprObject, py: Python<'_>) -> Result, PyErr> {
+ let r = PyDict::new_bound(py);
for (k, v) in obj.into_iter() {
r.set_item(k, Self::into_py_impl(v, py)?)?;
@@ -156,11 +168,11 @@ impl CLRepr {
fn into_py_impl(from: CLRepr, py: Python) -> Result {
Ok(match from {
- CLRepr::String(v, _) => PyString::new(py, &v).to_object(py),
- CLRepr::Bool(v) => PyBool::new(py, v).to_object(py),
- CLRepr::Float(v) => PyFloat::new(py, v).to_object(py),
+ CLRepr::String(v, _) => PyString::new_bound(py, &v).to_object(py),
+ CLRepr::Bool(v) => PyBool::new_bound(py, v).to_object(py),
+ CLRepr::Float(v) => PyFloat::new_bound(py, v).to_object(py),
CLRepr::Int(v) => {
- let py_int: &PyInt = unsafe { py.from_owned_ptr(pyo3::ffi::PyLong_FromLong(v)) };
+ let py_int = unsafe { Bound::from_owned_ptr(py, pyo3::ffi::PyLong_FromLong(v)) };
py_int.to_object(py)
}
@@ -171,7 +183,7 @@ impl CLRepr {
elements.push(Self::into_py_impl(el, py)?);
}
- PyList::new(py, elements).to_object(py)
+ PyList::new_bound(py, elements).to_object(py)
}
CLRepr::Tuple(arr) => {
let mut elements = Vec::with_capacity(arr.len());
@@ -180,7 +192,7 @@ impl CLRepr {
elements.push(Self::into_py_impl(el, py)?);
}
- PyTuple::new(py, elements).to_object(py)
+ PyTuple::new_bound(py, elements).to_object(py)
}
CLRepr::Object(obj) => {
let r = Self::into_py_dict_impl(obj, py)?;
@@ -213,7 +225,7 @@ impl CLRepr {
})
}
- pub fn into_py_dict(self, py: Python<'_>) -> Result<&PyDict, PyErr> {
+ pub fn into_py_dict(self, py: Python<'_>) -> Result, PyErr> {
Ok(match self {
CLRepr::Object(obj) => Self::into_py_dict_impl(obj, py)?,
other => {
diff --git a/packages/cubejs-backend-native/src/cross/py_in_js.rs b/packages/cubejs-backend-native/src/cross/py_in_js.rs
index 2d1626d3f3060..fad7fe2dbd40b 100644
--- a/packages/cubejs-backend-native/src/cross/py_in_js.rs
+++ b/packages/cubejs-backend-native/src/cross/py_in_js.rs
@@ -2,7 +2,7 @@ use crate::cross::CLRepr;
use crate::python::runtime::py_runtime;
use neon::prelude::*;
use pyo3::types::PyFunction;
-use pyo3::Py;
+use pyo3::{Py, Python};
use std::cell::RefCell;
pub struct JsPyFunctionWrapper {
@@ -43,7 +43,7 @@ pub fn cl_repr_py_function_wrapper(mut cx: FunctionContext) -> JsResult r,
Err(err) => return cx.throw_error(format!("Unable to init python runtime: {:?}", err)),
diff --git a/packages/cubejs-backend-native/src/orchestrator.rs b/packages/cubejs-backend-native/src/orchestrator.rs
index dd8b0a9994802..cce0910fed1c5 100644
--- a/packages/cubejs-backend-native/src/orchestrator.rs
+++ b/packages/cubejs-backend-native/src/orchestrator.rs
@@ -132,8 +132,11 @@ impl ResultWrapper {
fn db_primitive_to_field_value(value: &DBResponsePrimitive) -> FieldValue<'_> {
match value {
DBResponsePrimitive::String(s) => FieldValue::String(Cow::Borrowed(s)),
- DBResponsePrimitive::Number(n) => FieldValue::Number(*n),
+ DBResponsePrimitive::Int64(n) => FieldValue::Number(*n as f64),
+ DBResponsePrimitive::UInt64(n) => FieldValue::Number(*n as f64),
+ DBResponsePrimitive::Float64(n) => FieldValue::Number(*n),
DBResponsePrimitive::Boolean(b) => FieldValue::Bool(*b),
+ DBResponsePrimitive::Timestamp(_) => FieldValue::String(Cow::Owned(value.to_string())),
DBResponsePrimitive::Uncommon(v) => FieldValue::String(Cow::Owned(
serde_json::to_string(&v).unwrap_or_else(|_| v.to_string()),
)),
diff --git a/packages/cubejs-backend-native/src/python/cube_config.rs b/packages/cubejs-backend-native/src/python/cube_config.rs
index 0dcb71a44531f..aa9a5f38afe25 100644
--- a/packages/cubejs-backend-native/src/python/cube_config.rs
+++ b/packages/cubejs-backend-native/src/python/cube_config.rs
@@ -1,6 +1,7 @@
use convert_case::{Case, Casing};
use neon::prelude::*;
-use pyo3::{PyAny, PyResult};
+use pyo3::types::PyAnyMethods;
+use pyo3::{Bound, PyAny, PyResult};
use crate::cross::{CLRepr, CLReprObject, CLReprObjectKind};
@@ -51,9 +52,7 @@ impl CubeConfigPy {
"context_to_app_id",
"context_to_orchestrator_id",
"context_to_cube_store_router_id",
- "context_to_roles",
"context_to_groups",
- "db_type",
"driver_factory",
"extend_context",
"external_driver_factory",
@@ -69,10 +68,10 @@ impl CubeConfigPy {
]
}
- pub fn attr(&mut self, config_module: &PyAny, key: &str) -> PyResult<()> {
+ pub fn attr(&mut self, config_module: &Bound<'_, PyAny>, key: &str) -> PyResult<()> {
let v = config_module.getattr(key)?;
if !v.is_none() {
- let value = CLRepr::from_python_ref(v)?;
+ let value = CLRepr::from_python_ref(&v)?;
self.properties.insert(key.to_case(Case::Camel), value);
};
diff --git a/packages/cubejs-backend-native/src/python/entry.rs b/packages/cubejs-backend-native/src/python/entry.rs
index 6305a0ab77502..161a75b9f6c0b 100644
--- a/packages/cubejs-backend-native/src/python/entry.rs
+++ b/packages/cubejs-backend-native/src/python/entry.rs
@@ -6,18 +6,19 @@ use crate::python::runtime::py_runtime_init;
use neon::prelude::*;
use pyo3::exceptions::PyException;
use pyo3::prelude::*;
-use pyo3::types::{PyDict, PyFunction, PyList, PyString, PyTuple};
+use pyo3::types::{PyAnyMethods, PyDict, PyFunction, PyList, PyString, PyTuple};
use std::path::Path;
fn extend_sys_path(py: Python, file_name: &String) -> PyResult<()> {
- let sys_path = py.import("sys")?.getattr("path")?.downcast::()?;
+ let binding = py.import_bound("sys")?.getattr("path")?;
+ let sys_path = binding.downcast::()?;
let config_dir = Path::new(&file_name)
.parent()
.unwrap_or_else(|| Path::new("."));
let config_dir_str = config_dir.to_str().unwrap_or(".");
- sys_path.insert(0, PyString::new(py, config_dir_str))?;
+ sys_path.insert(0, PyString::new_bound(py, config_dir_str))?;
Ok(())
}
@@ -40,9 +41,10 @@ fn python_load_config(mut cx: FunctionContext) -> JsResult {
env!("CARGO_MANIFEST_DIR"),
"/python/cube/src/__init__.py"
));
- PyModule::from_code(py, cube_code, "__init__.py", "cube")?;
+ PyModule::from_code_bound(py, cube_code, "__init__.py", "cube")?;
- let config_module = PyModule::from_code(py, &file_content_arg, &options_file_name, "")?;
+ let config_module =
+ PyModule::from_code_bound(py, &file_content_arg, &options_file_name, "")?;
let settings_py = if config_module.hasattr("config")? {
config_module.getattr("config")?
} else {
@@ -60,7 +62,7 @@ fn python_load_config(mut cx: FunctionContext) -> JsResult {
let mut cube_conf = CubeConfigPy::new();
for attr_name in cube_conf.get_attrs() {
- cube_conf.attr(settings_py, attr_name)?;
+ cube_conf.attr(&settings_py, attr_name)?;
}
Ok(cube_conf)
@@ -90,9 +92,9 @@ fn python_load_model(mut cx: FunctionContext) -> JsResult {
env!("CARGO_MANIFEST_DIR"),
"/python/cube/src/__init__.py"
));
- PyModule::from_code(py, cube_code, "__init__.py", "cube")?;
+ PyModule::from_code_bound(py, cube_code, "__init__.py", "cube")?;
- let model_module = PyModule::from_code(py, &model_content, &model_file_name, "")?;
+ let model_module = PyModule::from_code_bound(py, &model_content, &model_file_name, "")?;
let mut collected_functions = CLReprObject::new(CLReprObjectKind::Object);
let mut collected_variables = CLReprObject::new(CLReprObjectKind::Object);
@@ -101,48 +103,55 @@ fn python_load_model(mut cx: FunctionContext) -> JsResult {
if model_module.hasattr("template")? {
let template = model_module.getattr("template")?;
- let functions = template.getattr("functions")?.downcast::()?;
+ let functions_attr = template.getattr("functions")?;
+ let functions = functions_attr.downcast::()?;
for (local_key, local_value) in functions.iter() {
if local_value.is_instance_of::() {
- let fun: Py = local_value.downcast::()?.into();
+ let fun: Py =
+ local_value.downcast::()?.clone().unbind();
collected_functions.insert(
- local_key.to_string(),
+ local_key.str()?.to_string(),
CLRepr::PythonRef(PythonRef::PyExternalFunction(fun)),
);
}
}
- let variables = template.getattr("variables")?.downcast::()?;
+ let variables_attr = template.getattr("variables")?;
+ let variables = variables_attr.downcast::()?;
for (local_key, local_value) in variables.iter() {
- collected_variables
- .insert(local_key.to_string(), CLRepr::from_python_ref(local_value)?);
+ collected_variables.insert(
+ local_key.str()?.to_string(),
+ CLRepr::from_python_ref(&local_value)?,
+ );
}
- let filters = template.getattr("filters")?.downcast::()?;
+ let filters_attr = template.getattr("filters")?;
+ let filters = filters_attr.downcast::()?;
for (local_key, local_value) in filters.iter() {
- let fun: Py = local_value.downcast::()?.into();
+ let fun: Py = local_value.downcast::()?.clone().unbind();
collected_filters.insert(
- local_key.to_string(),
+ local_key.str()?.to_string(),
CLRepr::PythonRef(PythonRef::PyExternalFunction(fun)),
);
}
} else {
// backward compatibility, was used in private preview, not as Public API
// TODO: Remove after 1.4
- let inspect_module = py.import("inspect")?;
+ let inspect_module = py.import_bound("inspect")?;
let args = (model_module, inspect_module.getattr("isfunction")?);
- let functions_with_names = inspect_module
- .call_method1("getmembers", args)?
- .downcast::()?;
+ let getmembers_result = inspect_module.call_method1("getmembers", args)?;
+ let functions_with_names = getmembers_result.downcast::()?;
for function_details in functions_with_names.iter() {
let function_details = function_details.downcast::()?;
- let fun_name = function_details.get_item(0)?.downcast::()?;
- let fun = function_details.get_item(1)?.downcast::()?;
+ let fun_name_item = function_details.get_item(0)?;
+ let fun_name = fun_name_item.downcast::()?;
+ let fun_item = function_details.get_item(1)?;
+ let fun = fun_item.downcast::()?;
let has_attr = fun.hasattr("cube_context_func")?;
if has_attr {
- let fun: Py = fun.into();
+ let fun: Py = fun.clone().unbind();
collected_functions.insert(
fun_name.to_string(),
CLRepr::PythonRef(PythonRef::PyExternalFunction(fun)),
diff --git a/packages/cubejs-backend-native/src/python/neon_py.rs b/packages/cubejs-backend-native/src/python/neon_py.rs
index c2049195574f8..573583aff5cdf 100644
--- a/packages/cubejs-backend-native/src/python/neon_py.rs
+++ b/packages/cubejs-backend-native/src/python/neon_py.rs
@@ -5,7 +5,7 @@ pub(crate) fn format_python_error(py_err: PyErr) -> String {
let err = format!("Python error: {}", py_err);
let bt = Python::with_gil(move |py| -> PyResult