diff --git a/.github/label-actions.yml b/.github/label-actions.yml
index 33ba840b80..cb7792b1ce 100644
--- a/.github/label-actions.yml
+++ b/.github/label-actions.yml
@@ -1,5 +1,6 @@
"help wanted":
comment: |
- If you are interested in working on this issue, please leave a comment below and we will be happy to assign the issue to you.
- If this is the first time you are contributing a Pull Request to Cube.js, please check our [contribution guidelines](https://github.com/cube-js/cube/blob/master/CONTRIBUTING.md).
- You can also post any questions while contributing in the #contributors channel in the [Cube.js Slack](https://slack.cube.dev/).
+ If you are interested in working on this issue, please provide go ahead and provide PR for that.
+ We'd be happy to review it and merge it.
+ If this is the first time you are contributing a Pull Request to Cube, please check our [contribution guidelines](https://github.com/cube-js/cube/blob/master/CONTRIBUTING.md).
+ You can also post any questions while contributing in the #contributors channel in the [Cube Slack](https://slack.cube.dev/).
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c6857f4154..fb97f7e902 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,83 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+
+### Bug Fixes
+
+* Bump max connect retries for Cube Store ([00a6ec0](https://github.com/cube-js/cube/commit/00a6ec034c2d5dff8c66647b7ec6cae39c0237ba))
+* **client-core:** incorrect index in movePivotItem ([#6684](https://github.com/cube-js/cube/issues/6684)) Thanks to [@telunc](https://github.com/telunc)! ([82217b2](https://github.com/cube-js/cube/commit/82217b28a012158cd8a978fd2e1ad15746ddeae0))
+* **cubesql:** Allow different `Timestamp` types in `DATEDIFF` ([de9ef08](https://github.com/cube-js/cube/commit/de9ef081cae21f551a38219bb64749e08e7ca6fc))
+* **cubesql:** Incorrect CASE WHEN generated during ungrouped filtered count ([#7859](https://github.com/cube-js/cube/issues/7859)) ([f970937](https://github.com/cube-js/cube/commit/f9709376e5dadfbcbffe9a65dfa9f0ea16df7bab)), closes [#7858](https://github.com/cube-js/cube/issues/7858)
+* **cubesql:** Prioritize ungrouped aggregate scans over ungrouped projection scans so most of the members can be pushed down without wrapping ([#7865](https://github.com/cube-js/cube/issues/7865)) ([addde0d](https://github.com/cube-js/cube/commit/addde0d373f01e69485b8a0333850917ffad9a2d))
+* **cubesql:** Remove excessive limit on inner wrapped queries ([#7864](https://github.com/cube-js/cube/issues/7864)) ([b97268f](https://github.com/cube-js/cube/commit/b97268fe5caf55c5b7806c597b9f7b75410f6ba4))
+
+
+### Features
+
+* **cubesql:** In subquery support ([#7851](https://github.com/cube-js/cube/issues/7851)) ([8e2a3ec](https://github.com/cube-js/cube/commit/8e2a3ecc348c4ab9e6a5ab038c46fcf7f4c3dfcc))
+* **cubesql:** Support split and SUM(1) ([16e2ee0](https://github.com/cube-js/cube/commit/16e2ee0d290c502f796891e137556aad2275e52d))
+
+
+
+
+
+## [0.34.59](https://github.com/cube-js/cube/compare/v0.34.58...v0.34.59) (2024-02-28)
+
+
+### Bug Fixes
+
+* **cubesql:** Replace only simple ungrouped measures in projections to avoid aggregate over aggregate statements ([#7852](https://github.com/cube-js/cube/issues/7852)) ([fa2a89b](https://github.com/cube-js/cube/commit/fa2a89b89f91c8eba175130fca33975200690288))
+* Ungrouped filtered count should contain `CASE WHEN` statement bu… ([#7853](https://github.com/cube-js/cube/issues/7853)) ([8c37a40](https://github.com/cube-js/cube/commit/8c37a407b9d8c8f97dab51c9e0e97067c91ff90e))
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+
+### Bug Fixes
+
+* **clickhouse-driver:** Correct support for Enum8/16 ([#7814](https://github.com/cube-js/cube/issues/7814)) ([db37fc3](https://github.com/cube-js/cube/commit/db37fc3b0f24511bd9ae3a319b5755c102bb3358))
+* **cubesql:** Ambiguous reference in case of same two 16 char prefixes are in query ([5051f66](https://github.com/cube-js/cube/commit/5051f663b4142735ee1cc455936300f765de62a7))
+* **cubesql:** Continue wait error is being thrown to users ([cb2376c](https://github.com/cube-js/cube/commit/cb2376c1d2cc0a86aa329072fb2ec02ddadfeaf8))
+
+
+### Features
+
+* **materialize-driver:** Add cluster option to Materialize driver ([#7773](https://github.com/cube-js/cube/issues/7773)) Thanks [@bobbyiliev](https://github.com/bobbyiliev)! ([917004e](https://github.com/cube-js/cube/commit/917004ebccfeb6509a08e5b9b51e1ae8542cf0af))
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+
+### Bug Fixes
+
+* **cubesql:** `ungrouped` query can be routed to Cube Store ([#7810](https://github.com/cube-js/cube/issues/7810)) ([b122837](https://github.com/cube-js/cube/commit/b122837de9cd4fcaca4ddc0e7f85ff695de09483))
+* **cubesql:** Can't find rewrite due to AST node limit reached for remaining non-equivalent date and timestamp constant folding rules ([b79f697](https://github.com/cube-js/cube/commit/b79f69739e2b8cb74cfc86db72fa7157dd723960))
+* **cubesql:** More readable error message during SQL generation ([d9a7194](https://github.com/cube-js/cube/commit/d9a719479d6ca00ef5b2b511677cd777ceb131e7))
+* **cubesql:** Support `Z` postfix in `Timestamp` response transformation ([c013c91](https://github.com/cube-js/cube/commit/c013c913bbeb8dabacc508240ab94956f1172a8b))
+* **cubesql:** Timestamp equals filter support ([754a0df](https://github.com/cube-js/cube/commit/754a0df3a20cae5269e961649a01fb5047906645))
+* **cubesql:** writerOrChannel.resolve is not a function ([abc95e2](https://github.com/cube-js/cube/commit/abc95e259c82894aea63371e468c98d640b4d42e))
+
+
+### Features
+
+* **cubesql:** `WHERE` SQL push down ([#7808](https://github.com/cube-js/cube/issues/7808)) ([98b5709](https://github.com/cube-js/cube/commit/98b570946905586f16a502f83b0a1cf8e4aa92a6))
+* **cubesql:** Allow replacement of aggregation functions in SQL push down ([#7811](https://github.com/cube-js/cube/issues/7811)) ([97fa757](https://github.com/cube-js/cube/commit/97fa757a0d22e6d7d9432d686005765b28271f7c))
+* **cubesql:** Support placeholders in `OFFSET`, `FETCH ...` ([60aad90](https://github.com/cube-js/cube/commit/60aad90a237800f4471bb4efa10ec590b50e19fe))
+* **cubesql:** Support temporary tables ([7022611](https://github.com/cube-js/cube/commit/702261156fc3748fc7d3103f28bd4f4648fd4e0b))
+* **duckdb-driver:** Add support for local fs duckdb database path ([#7799](https://github.com/cube-js/cube/issues/7799)) ([77cc883](https://github.com/cube-js/cube/commit/77cc883a3d73d37730a82ecf9128b8929abb2ca3))
+
+
+
+
+
## [0.34.56](https://github.com/cube-js/cube/compare/v0.34.55...v0.34.56) (2024-02-20)
diff --git a/docs/pages/product/caching/lambda-pre-aggregations.mdx b/docs/pages/product/caching/lambda-pre-aggregations.mdx
index aa6309691f..6d4ad3d675 100644
--- a/docs/pages/product/caching/lambda-pre-aggregations.mdx
+++ b/docs/pages/product/caching/lambda-pre-aggregations.mdx
@@ -130,6 +130,11 @@ data comes from a [streaming pre-aggregation][streaming-pre-agg].
You can use lambda pre-aggregations to combine data from multiple
pre-aggregations, where one pre-aggregation can have batch data and another
streaming.
+Please note that build ranges of all rollups referenced by lambda rollup should have enough intersection between each other that anticipates partition build times for those rollups.
+Cube will maximize the coverage of the requested date range by partitions from different rollups.
+The first rollup in a list of referenced rollups that has a fully built partition for a particular date range will be used to serve this date range.
+The last rollup in a list will be used to cover the remaining uncovered part of a date range.
+Partitions of the last rollup will be used even if not completely built.
diff --git a/docs/pages/product/configuration/_meta.js b/docs/pages/product/configuration/_meta.js
index 2d698500d2..e6485428a4 100644
--- a/docs/pages/product/configuration/_meta.js
+++ b/docs/pages/product/configuration/_meta.js
@@ -1,6 +1,5 @@
module.exports = {
"data-sources": "Data sources",
"visualization-tools": "Visualization tools",
- "vpc": "VPC",
"advanced": "Advanced"
}
\ No newline at end of file
diff --git a/docs/pages/product/configuration/data-sources/duckdb.mdx b/docs/pages/product/configuration/data-sources/duckdb.mdx
index d41f6afc2a..38ca7009ba 100644
--- a/docs/pages/product/configuration/data-sources/duckdb.mdx
+++ b/docs/pages/product/configuration/data-sources/duckdb.mdx
@@ -62,6 +62,7 @@ deployment][ref-demo-deployment] in Cube Cloud.
| `CUBEJS_DB_DUCKDB_MEMORY_LIMIT` | The maximum memory limit for DuckDB. Equivalent to `SET memory_limit=`. Default is 75% of available RAM | A valid memory limit | ❌ | ✅ |
| `CUBEJS_DB_DUCKDB_SCHEMA` | The [default search schema][link-duckdb-configuration-ref] | A valid schema name | ❌ | ✅ |
| `CUBEJS_DB_DUCKDB_MOTHERDUCK_TOKEN` | The service token to use for connections to MotherDuck | A valid [MotherDuck service token][motherduck-docs-svc-token] | ❌ | ✅ |
+| `CUBEJS_DB_DUCKDB_DATABASE_PATH` | The database filepath to use for connection to a local database. | A valid duckdb database file path | ❌ | ✅ |
| `CUBEJS_DB_DUCKDB_S3_ACCESS_KEY_ID` | The Access Key ID to use for database connections | A valid Access Key ID | ❌ | ✅ |
| `CUBEJS_DB_DUCKDB_S3_SECRET_ACCESS_KEY` | The Secret Access Key to use for database connections | A valid Secret Access Key | ❌ | ✅ |
| `CUBEJS_DB_DUCKDB_S3_ENDPOINT` | The S3 endpoint | A valid [S3 endpoint][duckdb-docs-s3-import] | ✅ | ✅ |
diff --git a/docs/pages/product/configuration/data-sources/materialize.mdx b/docs/pages/product/configuration/data-sources/materialize.mdx
index f2edcd5d1c..2cc27019d8 100644
--- a/docs/pages/product/configuration/data-sources/materialize.mdx
+++ b/docs/pages/product/configuration/data-sources/materialize.mdx
@@ -29,19 +29,21 @@ CUBEJS_DB_PORT=6875
CUBEJS_DB_NAME=materialize
CUBEJS_DB_USER=materialize
CUBEJS_DB_PASS=materialize
+CUBEJS_DB_MATERIALIZE_CLUSTER=quickstart
```
## Environment Variables
-| Environment Variable | Description | Possible Values | Required |
-| -------------------- | ----------------------------------------------------------------------------------- | ------------------------- | :------: |
-| `CUBEJS_DB_HOST` | The host URL for a database | A valid database host URL | ✅ |
-| `CUBEJS_DB_PORT` | The port for the database connection | A valid port number | ✅ |
-| `CUBEJS_DB_NAME` | The name of the database to connect to | A valid database name | ✅ |
-| `CUBEJS_DB_USER` | The username used to connect to the database | A valid database username | ✅ |
-| `CUBEJS_DB_PASS` | The password used to connect to the database | A valid database password | ✅ |
-| `CUBEJS_CONCURRENCY` | The number of concurrent connections each queue has to the database. Default is `2` | A valid number | ❌ |
-| `CUBEJS_DB_MAX_POOL` | The maximum number of concurrent database connections to pool. Default is `8` | A valid number | ❌ |
+| Environment Variable | Description | Possible Values | Required |
+| -------------------------------- | ----------------------------------------------------------------------------------- | ------------------------- | :------: |
+| `CUBEJS_DB_HOST` | The host URL for a database | A valid database host URL | ✅ |
+| `CUBEJS_DB_PORT` | The port for the database connection | A valid port number | ✅ |
+| `CUBEJS_DB_NAME` | The name of the database to connect to | A valid database name | ✅ |
+| `CUBEJS_DB_USER` | The username used to connect to the database | A valid database username | ✅ |
+| `CUBEJS_DB_PASS` | The password used to connect to the database | A valid database password | ✅ |
+| `CUBEJS_CONCURRENCY` | The number of concurrent connections each queue has to the database. Default is `2` | A valid number | ❌ |
+| `CUBEJS_DB_MAX_POOL` | The maximum number of concurrent database connections to pool. Default is `8` | A valid number | ❌ |
+| `CUBEJS_DB_MATERIALIZE_CLUSTER` | The name of the Materialize cluster to connect to | A valid cluster name | ❌ |
## SSL
diff --git a/docs/pages/product/configuration/visualization-tools/metabase.mdx b/docs/pages/product/configuration/visualization-tools/metabase.mdx
index 0fc899c4b8..bb42a59b0f 100644
--- a/docs/pages/product/configuration/visualization-tools/metabase.mdx
+++ b/docs/pages/product/configuration/visualization-tools/metabase.mdx
@@ -1,17 +1,15 @@
# Metabase
-
-
-Gain instant insights from your data. Join [our webinar on August 30 at 9:00am
-PST](https://cube.dev/events/cube-metabase-webinar) to explore how Cube & Metabase streamline data analysis, leveraging Cube's
-Semantic Layer Sync.
-
-
-
[Metabase][metabase-oss] is an open-source way to help everyone in your company
to ask questions and learn from data. There's also a fully-managed [cloud
service][metabase] for Metabase.
+
+
+Webinar recording: [Instant Insights Unlocked with Cube & Metabase](https://cube.dev/events/cube-metabase-webinar)
+
+
+
## Semantic Layer Sync
It is recommended to use [Semantic Layer Sync][ref-sls] to connect Cube to
diff --git a/docs/pages/product/configuration/visualization-tools/powerbi.mdx b/docs/pages/product/configuration/visualization-tools/powerbi.mdx
index 95fd802c3f..33b1d08cfa 100644
--- a/docs/pages/product/configuration/visualization-tools/powerbi.mdx
+++ b/docs/pages/product/configuration/visualization-tools/powerbi.mdx
@@ -3,12 +3,20 @@ redirect_from:
- /config/downstream/powerbi
---
-# PowerBI
+# Power BI
-You can connect to Cube from Power BI, interactive data visualization software
-product developed by Microsoft, using the [Cube SQL API][ref-sql-api].
+[Power BI](https://www.microsoft.com/en-gb/power-platform/products/power-bi/)
+is an interactive data visualization software product developed by Microsoft.
-## Enable Cube SQL API
+## Semantic Layer Sync
+
+It is recommended to use [Semantic Layer Sync][ref-sls] to connect Cube to
+Power BI. It automatically synchronizes the [data model][ref-data-model] between
+Cube and Power BI.
+
+## SQL API
+
+You can also use the [SQL API][ref-sql-api] to connect Cube to Tableau.
### Cube Cloud
@@ -50,5 +58,6 @@ are columns.
[ref-getting-started]: /product/getting-started/cloud
[ref-sql-api]: /product/apis-integrations/sql-api
[ref-pre-aggs]: /product/caching/using-pre-aggregations
-
+[ref-sls]: /product/workspace/semantic-layer-sync
+[ref-data-model]: /product/data-modeling/overview
[link-powerbi-directquery]: https://learn.microsoft.com/en-us/power-bi/connect-data/desktop-use-directquery
\ No newline at end of file
diff --git a/docs/pages/product/configuration/visualization-tools/tableau.mdx b/docs/pages/product/configuration/visualization-tools/tableau.mdx
index ae9a842b6e..055a6589b4 100644
--- a/docs/pages/product/configuration/visualization-tools/tableau.mdx
+++ b/docs/pages/product/configuration/visualization-tools/tableau.mdx
@@ -5,10 +5,17 @@ redirect_from:
# Tableau
-You can connect to Cube from Tableau, a visual analytics platform, using the
-[Cube SQL API][ref-sql-api].
+[Tableau](https://www.tableau.com) is a popular visual analytics platform.
-## Enable Cube SQL API
+## Semantic Layer Sync
+
+It is recommended to use [Semantic Layer Sync][ref-sls] to connect Cube to
+Tableau. It automatically synchronizes the [data model][ref-data-model] between
+Cube and Tableau.
+
+## SQL API
+
+You can also use the [SQL API][ref-sql-api] to connect Cube to Tableau.
### Cube Cloud
@@ -62,5 +69,6 @@ are columns.
[ref-getting-started]: /product/getting-started/cloud
[ref-sql-api]: /product/apis-integrations/sql-api
[ref-pre-aggs]: /product/caching/using-pre-aggregations
-
+[ref-sls]: /product/workspace/semantic-layer-sync
+[ref-data-model]: /product/data-modeling/overview
[link-tableau-extracts]: https://help.tableau.com/current/pro/desktop/en-us/extracting_data.htm
\ No newline at end of file
diff --git a/docs/pages/product/deployment/cloud.mdx b/docs/pages/product/deployment/cloud.mdx
index 0fe2ac1fa7..fbde170981 100644
--- a/docs/pages/product/deployment/cloud.mdx
+++ b/docs/pages/product/deployment/cloud.mdx
@@ -29,6 +29,7 @@ In Cube Cloud, you can:
* [Create an account](https://cubecloud.dev/auth/signup).
* Invite one or more users to the account, [assign roles][ref-rbac] to them,
and enable [single sign-on][ref-sso].
+* Use a supported [cloud provider][ref-providers] and, optionally, connect with a [dedicated VPC][ref-vpc].
* Create one or more [deployments][ref-deployments] of [various
types][ref-deployment-types], and set up [continuous deployment][ref-cd].
* Within each deployment, allocate resources, run Cube, and use a set of
@@ -56,4 +57,6 @@ and fine-tune deployments for better [scalability][ref-scalability].
[ref-auto-sus]: /product/deployment/cloud/auto-suspension
[ref-budgets]: /product/workspace/budgets
[ref-performance]: /product/workspace/performance
-[ref-scalability]: /product/deployment/cloud/scalability
\ No newline at end of file
+[ref-scalability]: /product/deployment/cloud/scalability
+[ref-providers]: /product/deployment/cloud/providers
+[ref-vpc]: /product/deployment/cloud/vpc
\ No newline at end of file
diff --git a/docs/pages/product/deployment/cloud/_meta.js b/docs/pages/product/deployment/cloud/_meta.js
index b7f074d519..08e97af131 100644
--- a/docs/pages/product/deployment/cloud/_meta.js
+++ b/docs/pages/product/deployment/cloud/_meta.js
@@ -1,4 +1,6 @@
module.exports = {
+ "providers": "Cloud providers",
+ "vpc": "VPC",
"deployments": "Deployments",
"deployment-types": "Deployment types",
"continuous-deployment": "Continuous deployment",
diff --git a/docs/pages/product/deployment/cloud/providers.mdx b/docs/pages/product/deployment/cloud/providers.mdx
new file mode 100644
index 0000000000..341e49370b
--- /dev/null
+++ b/docs/pages/product/deployment/cloud/providers.mdx
@@ -0,0 +1,47 @@
+# Cloud providers in Cube Cloud
+
+Cube Cloud works with all three major cloud providers:
+
+- [Amazon Web Services](https://aws.amazon.com) (AWS)
+- [Google Cloud Platform](https://cloud.google.com) (GCP)
+- [Microsoft Azure](https://azure.microsoft.com)
+
+
+
+AWS and GCP are available in Cube Cloud on [all tiers](https://cube.dev/pricing).
+Azure is only available on [Enterprise and above](https://cube.dev/pricing) tiers.
+[Contact us](https://cube.dev/contact) for details.
+
+
+
+## Regions
+
+You can create [deployments][ref-deployments] in any available shared region of any provider.
+
+You can also use a [dedicated VPC][ref-vpc] in a region of your choice.
+
+## Services
+
+See provider-specific pages for a list of services Cube Cloud integrates with.
+
+
+
+
+
+
+
+
+[ref-deployments]: /product/deployment/cloud/deployments
+[ref-vpc]: /product/deployment/cloud/vpc
\ No newline at end of file
diff --git a/docs/pages/product/configuration/vpc/_meta.js b/docs/pages/product/deployment/cloud/providers/_meta.js
similarity index 50%
rename from docs/pages/product/configuration/vpc/_meta.js
rename to docs/pages/product/deployment/cloud/providers/_meta.js
index 94c163c6a5..9864216b0c 100644
--- a/docs/pages/product/configuration/vpc/_meta.js
+++ b/docs/pages/product/deployment/cloud/providers/_meta.js
@@ -1,5 +1,5 @@
module.exports = {
"aws": "AWS",
- "azure": "Azure",
- "gcp": "GCP"
+ "gcp": "GCP",
+ "azure": "Azure"
}
\ No newline at end of file
diff --git a/docs/pages/product/deployment/cloud/providers/aws.mdx b/docs/pages/product/deployment/cloud/providers/aws.mdx
new file mode 100644
index 0000000000..a63e1abb58
--- /dev/null
+++ b/docs/pages/product/deployment/cloud/providers/aws.mdx
@@ -0,0 +1,48 @@
+# Integrating with services on AWS
+
+Cube Cloud works with numerious services available on
+[Amazon Web Services](https://aws.amazon.com) (AWS).
+This page provides a non-exhaustive lists of these services.
+
+
+
+[Contact us](https://cube.dev/contact) if you have questions about Cube Cloud integration with a particular service.
+
+
+
+## Data sources
+
+Cube Cloud integrates with the following [data sources](/product/configuration/data-sources):
+
+- [Amazon Redshift](/product/configuration/data-sources/aws-redshift)
+- [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
+
+Cube Cloud integrates with the following [data visualization tools](/product/configuration/visualization-tools):
+
+- [Amazon QuickSight](https://aws.amazon.com/quicksight/) via [SQL API](/product/apis-integrations/sql-api)
+
+## Storage
+
+[Amazon S3](https://aws.amazon.com/s3/) can be used as storage for [export buckets](/product/caching/using-pre-aggregations#export-bucket) and [pre-aggregations](/product/caching/using-pre-aggregations).
+
+## Compute
+
+[Amazon EC2](https://aws.amazon.com/ec2/) can be used as compute for [deployments](/product/deployment/cloud/deployments).
+
+## Authentication
+
+[Amazon Cognito](https://aws.amazon.com/pm/cognito/) can be used for [authentication of API requests](/guides/recipes/auth/aws-cognito).
+
+## Monitoring
+
+[Amazon CloudWatch](https://aws.amazon.com/cloudwatch/) and [Amazon S3](https://aws.amazon.com/s3/) can be used as destinations for [monitoring integrations](/product/monitoring/integrations).
+
+## Networking
+
+[Amazon VPC](https://aws.amazon.com/vpc/) can be used for [secure networking](/product/deployment/cloud/vpc/aws).
\ No newline at end of file
diff --git a/docs/pages/product/deployment/cloud/providers/azure.mdx b/docs/pages/product/deployment/cloud/providers/azure.mdx
new file mode 100644
index 0000000000..071d9d2942
--- /dev/null
+++ b/docs/pages/product/deployment/cloud/providers/azure.mdx
@@ -0,0 +1,50 @@
+# Integrating with services on Azure
+
+Cube Cloud works with numerious services available on
+[Microsoft Azure](https://azure.microsoft.com).
+This page provides a non-exhaustive lists of these services.
+
+
+
+[Contact us](https://cube.dev/contact) if you have questions about Cube Cloud integration with a particular service.
+
+
+
+## Data sources
+
+Cube Cloud integrates with the following [data sources](/product/configuration/data-sources):
+
+- [Microsoft Fabric](/product/configuration/data-sources/ms-fabric)
+- [Microsoft SQL Server](/product/configuration/data-sources/ms-sql) on [Azure SQL](https://azure.microsoft.com/en-us/products/azure-sql)
+- [Postgres](/product/configuration/data-sources/postgres) on [Azure Database for PostgreSQL](https://azure.microsoft.com/en-us/products/postgresql/)
+- [MySQL](/product/configuration/data-sources/mysql) on [Azure Database for MySQL](https://azure.microsoft.com/en-us/products/mysql/)
+
+## Data visualization tools
+
+Cube Cloud integrates with the following [data visualization tools](/product/configuration/visualization-tools):
+
+- [Microsoft Power BI](https://www.microsoft.com/en-us/power-platform/products/power-bi/) via [Semantic Layer Sync](/product/workspace/semantic-layer-sync)
+
+## Storage
+
+[Azure Blob Storage](https://azure.microsoft.com/en-us/products/storage/blobs) can be used as storage for [export buckets](/product/caching/using-pre-aggregations#export-bucket) and [pre-aggregations](/product/caching/using-pre-aggregations).
+
+## Compute
+
+[Azure Virtual Machines](https://azure.microsoft.com/en-gb/products/virtual-machines/) can be used as compute for [deployments](/product/deployment/cloud/deployments).
+
+## Authentication
+
+[Microsoft Entra ID](https://www.microsoft.com/en-us/security/business/identity-access/microsoft-entra-id) can be used for authentication of API requests.
+
+## Single sign-on
+
+[Microsoft Entra ID](https://www.microsoft.com/en-us/security/business/identity-access/microsoft-entra-id) can be used for [single sign-on](/product/workspace/sso/microsoft-entra-id).
+
+## Monitoring
+
+[Azure Monitor](https://azure.microsoft.com/en-us/products/monitor) and [Azure Blob Storage](https://azure.microsoft.com/en-us/products/storage/blobs) can be used as destinations for [monitoring integrations](/product/monitoring/integrations).
+
+## Networking
+
+[Azure Virtual Network](https://azure.microsoft.com/en-us/products/virtual-network) can be used for [secure networking](/product/deployment/cloud/vpc/azure).
\ No newline at end of file
diff --git a/docs/pages/product/deployment/cloud/providers/gcp.mdx b/docs/pages/product/deployment/cloud/providers/gcp.mdx
new file mode 100644
index 0000000000..9b768ac917
--- /dev/null
+++ b/docs/pages/product/deployment/cloud/providers/gcp.mdx
@@ -0,0 +1,50 @@
+# Integrating with services on GCP
+
+Cube Cloud works with numerious services available on
+[Google Cloud Platform](https://cloud.google.com) (GCP).
+This page provides a non-exhaustive lists of these services.
+
+
+
+[Contact us](https://cube.dev/contact) if you have questions about Cube Cloud integration with a particular service.
+
+
+
+## Data sources
+
+Cube Cloud integrates with the following [data sources](/product/configuration/data-sources):
+
+- [Google BigQuery](/product/configuration/data-sources/google-bigquery)
+- [Postgres](/product/configuration/data-sources/postgres), [Microsoft SQL Server](/product/configuration/data-sources/ms-sql), [MySQL](/product/configuration/data-sources/mysql) on [Google Cloud SQL](https://cloud.google.com/sql)
+- [Hive / SparkSQL](/product/configuration/data-sources/hive), [Presto](/product/configuration/data-sources/presto), and [Trino](/product/configuration/data-sources/trino) on [Google Dataproc](https://cloud.google.com/dataproc)
+- [Parquet, CSV, and JSON files](/product/configuration/data-sources/duckdb) on [Google Cloud Storage](https://cloud.google.com/storage)
+
+## Data visualization tools
+
+Cube Cloud integrates with the following [data visualization tools](/product/configuration/visualization-tools):
+
+- [Looker Studio](https://cloud.google.com/looker-studio) via [SQL API](/product/apis-integrations/sql-api)
+
+## Storage
+
+[Google Cloud Storage](https://cloud.google.com/storage) can be used as storage for [export buckets](/product/caching/using-pre-aggregations#export-bucket) and [pre-aggregations](/product/caching/using-pre-aggregations).
+
+## Compute
+
+[Google Compute Engine](https://cloud.google.com/products/compute) can be used as compute for [deployments](/product/deployment/cloud/deployments).
+
+## Authentication
+
+[Google Identity Platform](https://cloud.google.com/security/products/identity-platform) can be used for authentication of API requests.
+
+## Single sign-on
+
+[Google Workspace](https://workspace.google.com) can be used for [single sign-on](/product/workspace/sso/google-workspace).
+
+## Monitoring
+
+[Google Cloud Logging](https://cloud.google.com/logging), [Google Cloud Monitoring](https://cloud.google.com/monitoring), and [Google Cloud Storage](https://cloud.google.com/storage) can be used as destinations for [monitoring integrations](/product/monitoring/integrations).
+
+## Networking
+
+[Google VPC](https://cloud.google.com/vpc) can be used for [secure networking](/product/deployment/cloud/vpc/gcp).
\ No newline at end of file
diff --git a/docs/pages/product/configuration/vpc.mdx b/docs/pages/product/deployment/cloud/vpc.mdx
similarity index 96%
rename from docs/pages/product/configuration/vpc.mdx
rename to docs/pages/product/deployment/cloud/vpc.mdx
index 05c9ee11b4..b3c8d7c346 100644
--- a/docs/pages/product/configuration/vpc.mdx
+++ b/docs/pages/product/deployment/cloud/vpc.mdx
@@ -3,7 +3,7 @@ redirect_from:
- /cloud/configuration/connecting-with-a-vpc
---
-# Connecting with a VPC
+# Connecting with a VPC in Cube Cloud
For improved stability and security, Cube Cloud supports connecting to one or
more VPCs (virtual private clouds) in your Azure, AWS, or GCP accounts.
diff --git a/docs/pages/product/deployment/cloud/vpc/_meta.js b/docs/pages/product/deployment/cloud/vpc/_meta.js
new file mode 100644
index 0000000000..9864216b0c
--- /dev/null
+++ b/docs/pages/product/deployment/cloud/vpc/_meta.js
@@ -0,0 +1,5 @@
+module.exports = {
+ "aws": "AWS",
+ "gcp": "GCP",
+ "azure": "Azure"
+}
\ No newline at end of file
diff --git a/docs/pages/product/configuration/vpc/aws.mdx b/docs/pages/product/deployment/cloud/vpc/aws.mdx
similarity index 100%
rename from docs/pages/product/configuration/vpc/aws.mdx
rename to docs/pages/product/deployment/cloud/vpc/aws.mdx
diff --git a/docs/pages/product/configuration/vpc/azure.mdx b/docs/pages/product/deployment/cloud/vpc/azure.mdx
similarity index 100%
rename from docs/pages/product/configuration/vpc/azure.mdx
rename to docs/pages/product/deployment/cloud/vpc/azure.mdx
diff --git a/docs/pages/product/configuration/vpc/gcp.mdx b/docs/pages/product/deployment/cloud/vpc/gcp.mdx
similarity index 100%
rename from docs/pages/product/configuration/vpc/gcp.mdx
rename to docs/pages/product/deployment/cloud/vpc/gcp.mdx
diff --git a/docs/pages/product/workspace.mdx b/docs/pages/product/workspace.mdx
index 94e9031dde..48f7d6ad55 100644
--- a/docs/pages/product/workspace.mdx
+++ b/docs/pages/product/workspace.mdx
@@ -20,7 +20,7 @@ model.
* Use [Playground][ref-playground] to run queries and test the data model.
* Use [Semantic Layer Sync][ref-sls] to connect your semantic layer to BI
tools.
-* Use [Query Hsitory][ref-query-history] to observe queries and their
+* Use [Query History][ref-query-history] to observe queries and their
performance in real-time.
* Use the [pre-aggregations page][ref-pre-aggs] to inspect pre-aggregations
and their build history.
diff --git a/docs/pages/product/workspace/semantic-layer-sync.mdx b/docs/pages/product/workspace/semantic-layer-sync.mdx
index 0c572b69bb..82469228c7 100644
--- a/docs/pages/product/workspace/semantic-layer-sync.mdx
+++ b/docs/pages/product/workspace/semantic-layer-sync.mdx
@@ -5,8 +5,9 @@ layer from Cube to BI tools. It's the easiest way to connect a BI tool to Cube.
-Semantic Layer Sync is available in Cube Cloud on
-[all tiers](https://cube.dev/pricing).
+Semantic Layer Sync with Metabase, Preset, and Superset is available in Cube Cloud on
+[all tiers](https://cube.dev/pricing). Support for Tableau and Power BI is available
+on [Enterprise and above](https://cube.dev/pricing) tiers.
@@ -25,6 +26,39 @@ In general, here's how Cube entities match BI-specific ones:
| Cube, view | Dataset, table, data source |
| Measure, dimension, segment | Column, dimension, metric |
+## Supported tools
+
+Semantic Layer Sync supports the following BI tools. Check relevant pages for details
+on configuration and features for specific tools:
+
+
+
+
+
+
+
+
+
## Creating syncs
You can create a new sync by navigating to the Semantic Layer Sync
@@ -35,23 +69,6 @@ Sync.
Follow the steps in the wizard to create a sync with any of supported BI tools.
-### Supported tools
-
-Semantic Layer Sync supports the following BI tools:
-
-- [Apache Superset](#apache-superset) (self-hosted) and
- [Preset](#preset) (managed)
-- [Metabase](#metabase) (self-hosted and managed)
-- [Tableau](#tableau) (Cloud and Desktop)
-
-
-
-We're working on bringing support for more BI tools, e.g., Power BI and MicroStrategy.
-Please [reach out to us](https://forms.gle/eEit9Pa7ZXSoFxb86) if you're
-interested in using Semantic Layer Sync with other BI tools.
-
-
-
### Configuration
Under the hood, Semantic Layer Sync is configured using the `semantic_layer_sync`
@@ -257,248 +274,6 @@ module.exports = {
-### Apache Superset
-
-Data model is synchronized via [Superset API][superset-api] which uses a `user`
-name and a `password` for authentication. You can use your own user name and
-password or create a new service account. You can copy a `url` at any page of
-your Superset workspace.
-
-Example confguration for Superset:
-
-
-
-```python
-from cube import config
-
-@config('semantic_layer_sync')
-def semantic_layer_sync(ctx: dict) -> list[dict]:
- return [
- {
- 'type': 'superset',
- 'name': 'Superset Sync',
- 'config': {
- 'user': 'mail@example.com',
- 'password': '4dceae-606a03-93ae6dc7',
- 'url': 'superset.example.com',
- 'database': 'Cube Cloud: production-deployment'
- }
- }
- ]
-```
-
-```javascript
-module.exports = {
- semanticLayerSync: ({ securityContext }) => {
- return [
- {
- type: "superset",
- name: "Superset Sync",
- config: {
- user: "mail@example.com",
- password: "4dceae-606a03-93ae6dc7",
- url: "superset.example.com",
- database: "Cube Cloud: production-deployment",
- },
- },
- ];
- },
-};
-```
-
-
-
-### Preset
-
-Data model is synchronized via [Preset API][preset-api] which uses API keys for
-authentication.
-
-You can generate a new API key in your [user
-settings][preset-user-settings] in Preset to obtain an `api_token` and an
-`api_secret`. You can also copy a `workspace_url` at any page of your Preset
-workspace. Note that your use should have the [workspace
-role][preset-user-roles] of `Workspace Admin`.
-
-Example confguration for Preset:
-
-
-
-```python
-from cube import config
-
-@config('semantic_layer_sync')
-def semantic_layer_sync(ctx: dict) -> list[dict]:
- return [
- {
- 'type': 'preset',
- 'name': "Preset Sync",
- 'config': {
- 'api_token': '07988f63-c200-499e-97c9-ba137d8918aa',
- 'api_secret': 'c19fbab4fd4945899795d32898f2e1165bef8e5ee653499e92f083b3d088aecb',
- 'workspace_url': '12345678.us1a.app.preset.io',
- 'database': 'Cube Cloud: production-deployment'
- }
- }
- ]
-```
-
-```javascript
-module.exports = {
- semanticLayerSync: ({ securityContext }) => {
- return [
- {
- type: "preset",
- name: "Preset Sync",
- config: {
- api_token: "07988f63-c200-499e-97c9-ba137d8918aa",
- api_secret: "c19fbab4fd4945899795d32898f2e1165bef8e5ee653499e92f083b3d088aecb",
- workspace_url: "12345678.us1a.app.preset.io",
- database: "Cube Cloud: production-deployment",
- },
- },
- ];
- },
-};
-```
-
-
-
-### Metabase
-
-Data model is synchronized via [Metabase API][metabase-api] which uses a `user`
-name and a `password` for authentication. You can use your own user name and
-password or create a new service account. You can copy a `url` at any page of
-your Metabase workspace.
-
-Example confguration for Metabase:
-
-
-
-```python
-from cube import config
-
-@config('semantic_layer_sync')
-def semantic_layer_sync(ctx: dict) -> list[dict]:
- return [
- {
- 'type': 'metabase',
- 'name': 'Metabase Sync',
- 'config': {
- 'user': 'mail@example.com',
- 'password': '4dceae-606a03-93ae6dc7',
- 'url': 'example.metabaseapp.com',
- 'database': 'Cube Cloud: production-deployment'
- }
- }
- ]
-```
-
-```javascript
-module.exports = {
- semanticLayerSync: ({ securityContext }) => {
- return [
- {
- type: "metabase",
- name: "Metabase Sync",
- config: {
- user: "mail@example.com",
- password: "4dceae-606a03-93ae6dc7",
- url: "example.metabaseapp.com",
- database: "Cube Cloud: production-deployment",
- },
- },
- ];
- },
-};
-```
-
-
-
-When a sync is run, Metabase will send an email with a new login notification.
-You can ignore such emails, [configure Metabase][metabase-skip-emails] to skip
-sending them, or use a service account with a different email address:
-
-
-
-### Tableau
-
-Data model is synchronized via the [Tableau API][tableau-api] which uses [personal
-access tokens][tableau-pat] for authentication. You can create a new [personal access
-token][tableau-api-authentication] on the My Account Settings page.
-
-
-
-Personal access tokens might be disabled in your Tableau site configuration.
-To enable them, navigate to the Settings page of your Tableau site
-and click Enable personal access tokens.
-
-By default, personal access tokens are configured with an expiry period of 180 days.
-Please check your Tableau site configuration for details. To customize the expiry
-period, navigate to the Settings page of your Tableau site. Please
-also make sure to renew your personal access token in time.
-
-
-
-You will also need to specify a `region` and a Tableau `site` name. Consider the
-following URL of a Tableau site: `https://10ax.online.tableau.com/#/site/cubedev/home`.
-In this case, the region would be `10ax` and the site name would be `cubedev`.
-
-Example configuration for Tableau:
-
-
-
-```python
-from cube import config
-
-@config('semantic_layer_sync')
-def semantic_layer_sync(ctx: dict) -> list[dict]:
- return [
- {
- 'type': 'tableau',
- 'name': 'Tableau Sync',
- 'config': {
- 'region': '10ax',
- 'site': 'mytableausite',
- 'personalAccessToken': 'cube-cloud',
- 'personalAccessTokenSecret': 'HW8TFrBfJyen+JQleh0/bw==:1BvJLIti9Fud04rN021EfHMnh4yYD3p4',
- 'database': 'Cube Cloud: production-deployment',
- },
- },
- ]
-```
-
-```javascript
-module.exports = {
- semanticLayerSync: ({ securityContext }) => {
- return [
- {
- type: "tableau",
- name: "Tableau Sync",
- config: {
- region: "10ax",
- site: "mytableausite",
- personalAccessToken: "cube-cloud",
- personalAccessTokenSecret: "HW8TFrBfJyen+JQleh0/bw==:1BvJLIti9Fud04rN021EfHMnh4yYD3p4",
- database: "Cube Cloud: production-deployment",
- },
- },
- ];
- },
-};
-```
-
-
-
-When connecting a Cube Cloud data source to your Tableau workbook, you will be prompted
-to enter the user name and password for Cube Cloud. You can find them at the SQL
-API Connection tab of the BI Integrations page in Cube Cloud.
-
-[tableau-api]:
- https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api.htm
-[tableau-api-authentication]:
- https://help.tableau.com/current/server/en-us/security_personal_access_tokens.htm#create-personal-access-tokens
-[tableau-pat]: https://help.tableau.com/current/server/en-us/security_personal_access_tokens.htm
-
## Running syncs
When the data model is updated, all configured syncs will automatically run.
@@ -513,7 +288,7 @@ data model is updated dynamically for your Cube Cloud account.
-You can also run a sync manually by navigationg to the Semantic Layer
+You can also run a sync manually by navigating to the Semantic Layer
Sync tab on the BI Integrations page and clicking Start
Sync next to a relevant sync.
@@ -553,11 +328,3 @@ on, i.e., your development mode branch, shared branch, or main branch.
[ref-config-schemaversion]: /reference/configuration/config#schemaversion
[ref-workspace-sls]: /workspace/bi-integrations
[ref-dev-mode]: /product/workspace/dev-mode
-[preset-api]: https://api-docs.preset.io
-[preset-user-settings]: https://manage.app.preset.io/app/user
-[preset-user-roles]: https://docs.preset.io/docs/role-based-access-security-rbac#change-user-access-to-a-workspace
-[superset-api]: https://superset.apache.org/docs/api/
-[metabase-api]:
- https://www.metabase.com/learn/administration/metabase-api#authenticate-your-requests-with-a-session-token
-[metabase-skip-emails]:
- https://www.metabase.com/docs/latest/configuring-metabase/environment-variables#mb_send_email_on_first_login_from_new_device
diff --git a/docs/pages/product/workspace/semantic-layer-sync/_meta.js b/docs/pages/product/workspace/semantic-layer-sync/_meta.js
new file mode 100644
index 0000000000..09dd4df00b
--- /dev/null
+++ b/docs/pages/product/workspace/semantic-layer-sync/_meta.js
@@ -0,0 +1,7 @@
+module.exports = {
+ "superset": "Apache Superset",
+ "metabase": "Metabase",
+ "power-bi": "Power BI",
+ "preset": "Preset",
+ "tableau": "Tableau"
+}
\ No newline at end of file
diff --git a/docs/pages/product/workspace/semantic-layer-sync/metabase.mdx b/docs/pages/product/workspace/semantic-layer-sync/metabase.mdx
new file mode 100644
index 0000000000..6eb1aabf7f
--- /dev/null
+++ b/docs/pages/product/workspace/semantic-layer-sync/metabase.mdx
@@ -0,0 +1,74 @@
+# Semantic Layer Sync with Metabase
+
+This page details the support for [Metabase](https://www.metabase.com)
+in [Semantic Layer Sync](/product/workspace/semantic-layer-sync).
+
+Semantic Layer Sync works with managed and self-hosted Metabase instances.
+
+## Configuration
+
+To create a new sync, choose Metabase:
+
+
+
+Data model is synchronized via [Metabase API][metabase-api] which uses a `user`
+name and a `password` for authentication. You can use your own user name and
+password or create a new service account. You can copy a `url` at any page of
+your Metabase workspace.
+
+Example confguration for Metabase:
+
+
+
+```python
+from cube import config
+
+@config('semantic_layer_sync')
+def semantic_layer_sync(ctx: dict) -> list[dict]:
+ return [
+ {
+ 'type': 'metabase',
+ 'name': 'Metabase Sync',
+ 'config': {
+ 'user': 'mail@example.com',
+ 'password': '4dceae-606a03-93ae6dc7',
+ 'url': 'example.metabaseapp.com',
+ 'database': 'Cube Cloud: production-deployment'
+ }
+ }
+ ]
+```
+
+```javascript
+module.exports = {
+ semanticLayerSync: ({ securityContext }) => {
+ return [
+ {
+ type: "metabase",
+ name: "Metabase Sync",
+ config: {
+ user: "mail@example.com",
+ password: "4dceae-606a03-93ae6dc7",
+ url: "example.metabaseapp.com",
+ database: "Cube Cloud: production-deployment",
+ },
+ },
+ ];
+ },
+};
+```
+
+
+
+When a sync is run, Metabase will send an email with a new login notification.
+You can ignore such emails, [configure Metabase][metabase-skip-emails] to skip
+sending them, or use a service account with a different email address:
+
+
+
+
+[metabase-api]: https://www.metabase.com/learn/administration/metabase-api#authenticate-your-requests-with-a-session-token
+[metabase-skip-emails]: https://www.metabase.com/docs/latest/configuring-metabase/environment-variables#mb_send_email_on_first_login_from_new_device
\ No newline at end of file
diff --git a/docs/pages/product/workspace/semantic-layer-sync/power-bi.mdx b/docs/pages/product/workspace/semantic-layer-sync/power-bi.mdx
new file mode 100644
index 0000000000..e02c2cdf37
--- /dev/null
+++ b/docs/pages/product/workspace/semantic-layer-sync/power-bi.mdx
@@ -0,0 +1,34 @@
+# Semantic Layer Sync with Power BI
+
+This page details the support for [Power BI](https://www.microsoft.com/en-gb/power-platform/products/power-bi/)
+in [Semantic Layer Sync](/product/workspace/semantic-layer-sync).
+
+
+
+Semantic Layer Sync with Power BI is available on
+[Enterprise and above](https://cube.dev/pricing) tiers.
+
+
+
+## Configuration
+
+To create a new sync, choose Power BI:
+
+
+
+## Features
+
+Click Download .pbit to download a Power BI [report template][pbit]:
+
+
+
+Use can open it in Power BI to create a report.
+
+
+[pbit]: https://learn.microsoft.com/en-us/power-bi/create-reports/desktop-templates
\ No newline at end of file
diff --git a/docs/pages/product/workspace/semantic-layer-sync/preset.mdx b/docs/pages/product/workspace/semantic-layer-sync/preset.mdx
new file mode 100644
index 0000000000..049ffc0814
--- /dev/null
+++ b/docs/pages/product/workspace/semantic-layer-sync/preset.mdx
@@ -0,0 +1,71 @@
+# Semantic Layer Sync with Preset
+
+This page details the support for [Preset](https://preset.io)
+in [Semantic Layer Sync](/product/workspace/semantic-layer-sync).
+
+## Configuration
+
+To create a new sync, choose Preset:
+
+
+
+Data model is synchronized via [Preset API][preset-api] which uses API keys for
+authentication.
+
+You can generate a new API key in your [user
+settings][preset-user-settings] in Preset to obtain an `api_token` and an
+`api_secret`. You can also copy a `workspace_url` at any page of your Preset
+workspace. Note that your use should have the [workspace
+role][preset-user-roles] of `Workspace Admin`.
+
+Example confguration for Preset:
+
+
+
+```python
+from cube import config
+
+@config('semantic_layer_sync')
+def semantic_layer_sync(ctx: dict) -> list[dict]:
+ return [
+ {
+ 'type': 'preset',
+ 'name': "Preset Sync",
+ 'config': {
+ 'api_token': '07988f63-c200-499e-97c9-ba137d8918aa',
+ 'api_secret': 'c19fbab4fd4945899795d32898f2e1165bef8e5ee653499e92f083b3d088aecb',
+ 'workspace_url': '12345678.us1a.app.preset.io',
+ 'database': 'Cube Cloud: production-deployment'
+ }
+ }
+ ]
+```
+
+```javascript
+module.exports = {
+ semanticLayerSync: ({ securityContext }) => {
+ return [
+ {
+ type: "preset",
+ name: "Preset Sync",
+ config: {
+ api_token: "07988f63-c200-499e-97c9-ba137d8918aa",
+ api_secret: "c19fbab4fd4945899795d32898f2e1165bef8e5ee653499e92f083b3d088aecb",
+ workspace_url: "12345678.us1a.app.preset.io",
+ database: "Cube Cloud: production-deployment",
+ },
+ },
+ ];
+ },
+};
+```
+
+
+
+
+[preset-api]: https://api-docs.preset.io
+[preset-user-settings]: https://manage.app.preset.io/app/user
+[preset-user-roles]: https://docs.preset.io/docs/role-based-access-security-rbac#change-user-access-to-a-workspace
\ No newline at end of file
diff --git a/docs/pages/product/workspace/semantic-layer-sync/superset.mdx b/docs/pages/product/workspace/semantic-layer-sync/superset.mdx
new file mode 100644
index 0000000000..2724808aae
--- /dev/null
+++ b/docs/pages/product/workspace/semantic-layer-sync/superset.mdx
@@ -0,0 +1,65 @@
+# Semantic Layer Sync with Apache Superset
+
+This page details the support for [Apache Superset](https://superset.apache.org)
+in [Semantic Layer Sync](/product/workspace/semantic-layer-sync).
+
+## Configuration
+
+To create a new sync, choose Apache Superset:
+
+
+
+Data model is synchronized via [Superset API][superset-api] which uses a `user`
+name and a `password` for authentication. You can use your own user name and
+password or create a new service account. You can copy a `url` at any page of
+your Superset workspace.
+
+Example confguration for Superset:
+
+
+
+```python
+from cube import config
+
+@config('semantic_layer_sync')
+def semantic_layer_sync(ctx: dict) -> list[dict]:
+ return [
+ {
+ 'type': 'superset',
+ 'name': 'Superset Sync',
+ 'config': {
+ 'user': 'mail@example.com',
+ 'password': '4dceae-606a03-93ae6dc7',
+ 'url': 'superset.example.com',
+ 'database': 'Cube Cloud: production-deployment'
+ }
+ }
+ ]
+```
+
+```javascript
+module.exports = {
+ semanticLayerSync: ({ securityContext }) => {
+ return [
+ {
+ type: "superset",
+ name: "Superset Sync",
+ config: {
+ user: "mail@example.com",
+ password: "4dceae-606a03-93ae6dc7",
+ url: "superset.example.com",
+ database: "Cube Cloud: production-deployment",
+ },
+ },
+ ];
+ },
+};
+```
+
+
+
+
+[superset-api]: https://superset.apache.org/docs/api/
\ No newline at end of file
diff --git a/docs/pages/product/workspace/semantic-layer-sync/tableau.mdx b/docs/pages/product/workspace/semantic-layer-sync/tableau.mdx
new file mode 100644
index 0000000000..31419c56a5
--- /dev/null
+++ b/docs/pages/product/workspace/semantic-layer-sync/tableau.mdx
@@ -0,0 +1,124 @@
+# Semantic Layer Sync with Tableau
+
+This page details the support for [Tableau](https://www.tableau.com)
+in [Semantic Layer Sync](/product/workspace/semantic-layer-sync).
+
+
+
+Semantic Layer Sync with Tableau is available on
+[Enterprise and above](https://cube.dev/pricing) tiers.
+
+
+
+Semantic Layer Sync works with Tableau Cloud, Tableau Desktop, and Tableau Server.
+
+## Configuration
+
+To create a new sync, choose either Tableau Cloud, Tableau Desktop,
+or Tableau Server:
+
+
+
+For Tableau Cloud and Tableau Server,
+data model is synchronized via the [Tableau API][tableau-api] which uses [personal
+access tokens][tableau-pat] for authentication. You can create a new [personal access
+token][tableau-api-authentication] on the My Account Settings page.
+
+
+
+Personal access tokens might be disabled in your Tableau site configuration.
+To enable them, navigate to the Settings page of your Tableau site
+and click Enable personal access tokens.
+
+By default, personal access tokens are configured with an expiry period of 180 days.
+Please check your Tableau site configuration for details. To customize the expiry
+period, navigate to the Settings page of your Tableau site. Please
+also make sure to renew your personal access token in time.
+
+
+
+
+
+Personal access tokens expire if they are not used after 15 consecutive days.
+If they are used more frequently than every 15 days, they expire after one year.
+
+
+
+You will also need to specify a `region` and a Tableau `site` name. Consider the
+following URL of a Tableau site: `https://10ax.online.tableau.com/#/site/cubedev/home`.
+In this case, the region would be `10ax` and the site name would be `cubedev`.
+
+Example configuration for Tableau:
+
+
+
+```python
+from cube import config
+
+@config('semantic_layer_sync')
+def semantic_layer_sync(ctx: dict) -> list[dict]:
+ return [
+ {
+ 'type': 'tableau',
+ 'name': 'Tableau Sync',
+ 'config': {
+ 'region': '10ax',
+ 'site': 'mytableausite',
+ 'personalAccessToken': 'cube-cloud',
+ 'personalAccessTokenSecret': 'HW8TFrBfJyen+JQleh0/bw==:1BvJLIti9Fud04rN021EfHMnh4yYD3p4',
+ 'database': 'Cube Cloud: production-deployment',
+ },
+ },
+ ]
+```
+
+```javascript
+module.exports = {
+ semanticLayerSync: ({ securityContext }) => {
+ return [
+ {
+ type: "tableau",
+ name: "Tableau Sync",
+ config: {
+ region: "10ax",
+ site: "mytableausite",
+ personalAccessToken: "cube-cloud",
+ personalAccessTokenSecret: "HW8TFrBfJyen+JQleh0/bw==:1BvJLIti9Fud04rN021EfHMnh4yYD3p4",
+ database: "Cube Cloud: production-deployment",
+ },
+ },
+ ];
+ },
+};
+```
+
+
+
+When connecting a Cube Cloud data source to your Tableau workbook, you will be prompted
+to enter the user name and password for Cube Cloud. You can find them at the SQL
+API Connection tab of the BI Integrations page in Cube Cloud.
+
+## Features
+
+Syncs with Tableau Cloud and Tableau Server run automatically via the [Tableau
+API][tableau-api].
+
+### Tableau Desktop
+
+Click Download .tds to download a Tableau [data source][tds] file:
+
+
+
+Use can open it in Tableau to create a data source.
+
+
+[tds]: https://help.tableau.com/current/pro/desktop/en-us/export_connection.htm
+[tableau-api]: https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api.htm
+[tableau-api-authentication]: https://help.tableau.com/current/server/en-us/security_personal_access_tokens.htm#create-personal-access-tokens
+[tableau-pat]: https://help.tableau.com/current/server/en-us/security_personal_access_tokens.htm
diff --git a/docs/pages/reference/configuration/environment-variables.mdx b/docs/pages/reference/configuration/environment-variables.mdx
index 171f8e4567..fd5eff2709 100644
--- a/docs/pages/reference/configuration/environment-variables.mdx
+++ b/docs/pages/reference/configuration/environment-variables.mdx
@@ -238,6 +238,14 @@ MotherDuck.
| -------------------------------- | ---------------------- | --------------------- |
| A valid MotherDuck service token | N/A | N/A |
+## `CUBEJS_DB_DUCKDB_DATABASE_PATH`
+
+The database filepath to use for connection to a local database.
+
+| Possible Values | Default in Development | Default in Production |
+| --------------------------------- | ---------------------- | --------------------- |
+| A valid duckdb database file path | N/A | N/A |
+
## `CUBEJS_DB_DUCKDB_S3_ACCESS_KEY_ID`
The AWS Access Key ID to use for S3 connections.
diff --git a/lerna.json b/lerna.json
index 2f7539751e..590e585fb6 100644
--- a/lerna.json
+++ b/lerna.json
@@ -1,5 +1,5 @@
{
- "version": "0.34.56",
+ "version": "0.34.60",
"npmClient": "yarn",
"useWorkspaces": true,
"packages": [
diff --git a/packages/cubejs-api-gateway/CHANGELOG.md b/packages/cubejs-api-gateway/CHANGELOG.md
index af245f125b..b960ccef16 100644
--- a/packages/cubejs-api-gateway/CHANGELOG.md
+++ b/packages/cubejs-api-gateway/CHANGELOG.md
@@ -3,6 +3,44 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+
+### Bug Fixes
+
+* **cubesql:** Remove excessive limit on inner wrapped queries ([#7864](https://github.com/cube-js/cube/issues/7864)) ([b97268f](https://github.com/cube-js/cube/commit/b97268fe5caf55c5b7806c597b9f7b75410f6ba4))
+
+
+
+
+
+## [0.34.59](https://github.com/cube-js/cube/compare/v0.34.58...v0.34.59) (2024-02-28)
+
+**Note:** Version bump only for package @cubejs-backend/api-gateway
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/api-gateway
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+
+### Features
+
+* **cubesql:** `WHERE` SQL push down ([#7808](https://github.com/cube-js/cube/issues/7808)) ([98b5709](https://github.com/cube-js/cube/commit/98b570946905586f16a502f83b0a1cf8e4aa92a6))
+
+
+
+
+
## [0.34.56](https://github.com/cube-js/cube/compare/v0.34.55...v0.34.56) (2024-02-20)
diff --git a/packages/cubejs-api-gateway/package.json b/packages/cubejs-api-gateway/package.json
index d86bf79802..080adf9887 100644
--- a/packages/cubejs-api-gateway/package.json
+++ b/packages/cubejs-api-gateway/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/api-gateway",
"description": "Cube.js API Gateway",
"author": "Cube Dev, Inc.",
- "version": "0.34.56",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -27,8 +27,8 @@
"dist/src/*"
],
"dependencies": {
- "@cubejs-backend/native": "^0.34.56",
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/native": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60",
"@ungap/structured-clone": "^0.3.4",
"body-parser": "^1.19.0",
"chrono-node": "^2.6.2",
diff --git a/packages/cubejs-api-gateway/src/gateway.ts b/packages/cubejs-api-gateway/src/gateway.ts
index 6c9465bbc8..0e456b9efb 100644
--- a/packages/cubejs-api-gateway/src/gateway.ts
+++ b/packages/cubejs-api-gateway/src/gateway.ts
@@ -1180,7 +1180,8 @@ class ApiGateway {
exportAnnotatedSql,
memberExpressions,
expressionParams,
- disableExternalPreAggregations
+ disableExternalPreAggregations,
+ disableLimitEnforcing,
}: QueryRequest) {
const requestStarted = new Date();
@@ -1193,7 +1194,7 @@ class ApiGateway {
query = this.parseMemberExpressionsInQueries(query);
}
- const [queryType, normalizedQueries] = await this.getNormalizedQueries(query, context);
+ const [queryType, normalizedQueries] = await this.getNormalizedQueries(query, context, disableLimitEnforcing);
const sqlQueries = await Promise.all(
normalizedQueries.map(async (normalizedQuery) => (await this.getCompilerApi(context)).getSql(
@@ -1233,6 +1234,7 @@ class ApiGateway {
...query,
measures: (query.measures || []).map(m => (typeof m === 'string' ? this.parseMemberExpression(m) : m)),
dimensions: (query.dimensions || []).map(m => (typeof m === 'string' ? this.parseMemberExpression(m) : m)),
+ segments: (query.segments || []).map(m => (typeof m === 'string' ? this.parseMemberExpression(m) : m)),
};
}
diff --git a/packages/cubejs-api-gateway/src/query.js b/packages/cubejs-api-gateway/src/query.js
index fc7e2e9947..56f40e6b58 100644
--- a/packages/cubejs-api-gateway/src/query.js
+++ b/packages/cubejs-api-gateway/src/query.js
@@ -105,7 +105,7 @@ const querySchema = Joi.object().keys({
Joi.object().pattern(id, Joi.valid('asc', 'desc')),
Joi.array().items(Joi.array().min(2).ordered(id, Joi.valid('asc', 'desc')))
),
- segments: Joi.array().items(id),
+ segments: Joi.array().items(Joi.alternatives(id, memberExpression)),
timezone: Joi.string(),
limit: Joi.number().integer().min(1),
offset: Joi.number().integer().min(0),
diff --git a/packages/cubejs-api-gateway/src/sql-server.ts b/packages/cubejs-api-gateway/src/sql-server.ts
index efdb00f503..35f767a645 100644
--- a/packages/cubejs-api-gateway/src/sql-server.ts
+++ b/packages/cubejs-api-gateway/src/sql-server.ts
@@ -159,6 +159,7 @@ export class SQLServer {
memberExpressions: true,
disableExternalPreAggregations: true,
queryType: 'multi',
+ disableLimitEnforcing: true,
context,
res: (message) => {
resolve(message);
diff --git a/packages/cubejs-api-gateway/src/types/query.ts b/packages/cubejs-api-gateway/src/types/query.ts
index 9aa5cf1cc6..e1083e8270 100644
--- a/packages/cubejs-api-gateway/src/types/query.ts
+++ b/packages/cubejs-api-gateway/src/types/query.ts
@@ -64,7 +64,7 @@ interface Query {
dimensions?: (Member | TimeMember | MemberExpression)[];
filters?: (QueryFilter | LogicalAndFilter | LogicalOrFilter)[];
timeDimensions?: QueryTimeDimension[];
- segments?: Member[];
+ segments?: (Member | MemberExpression)[];
limit?: null | number;
offset?: number;
total?: boolean;
diff --git a/packages/cubejs-api-gateway/src/types/request.ts b/packages/cubejs-api-gateway/src/types/request.ts
index c6c2a88133..b4c6bb711c 100644
--- a/packages/cubejs-api-gateway/src/types/request.ts
+++ b/packages/cubejs-api-gateway/src/types/request.ts
@@ -127,6 +127,7 @@ type QueryRequest = BaseRequest & {
exportAnnotatedSql?: boolean;
memberExpressions?: boolean;
disableExternalPreAggregations?: boolean;
+ disableLimitEnforcing?: boolean;
};
type SqlApiRequest = BaseRequest & {
diff --git a/packages/cubejs-athena-driver/CHANGELOG.md b/packages/cubejs-athena-driver/CHANGELOG.md
index f4be04efd4..559c9db097 100644
--- a/packages/cubejs-athena-driver/CHANGELOG.md
+++ b/packages/cubejs-athena-driver/CHANGELOG.md
@@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/athena-driver
+
+
+
+
+
+## [0.34.59](https://github.com/cube-js/cube/compare/v0.34.58...v0.34.59) (2024-02-28)
+
+**Note:** Version bump only for package @cubejs-backend/athena-driver
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/athena-driver
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/athena-driver
+
+
+
+
+
## [0.34.56](https://github.com/cube-js/cube/compare/v0.34.55...v0.34.56) (2024-02-20)
**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 3887e00ec2..a02c545efc 100644
--- a/packages/cubejs-athena-driver/package.json
+++ b/packages/cubejs-athena-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/athena-driver",
"description": "Cube.js Athena database driver",
"author": "Cube Dev, Inc.",
- "version": "0.34.56",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -31,13 +31,13 @@
"@aws-sdk/client-athena": "^3.22.0",
"@aws-sdk/client-s3": "^3.49.0",
"@aws-sdk/s3-request-presigner": "^3.49.0",
- "@cubejs-backend/base-driver": "^0.34.55",
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/base-driver": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60",
"sqlstring": "^2.3.1"
},
"devDependencies": {
"@cubejs-backend/linter": "^0.34.25",
- "@cubejs-backend/testing-shared": "^0.34.56",
+ "@cubejs-backend/testing-shared": "^0.34.60",
"@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 27f84dfdc7..f6c18f6691 100644
--- a/packages/cubejs-backend-cloud/CHANGELOG.md
+++ b/packages/cubejs-backend-cloud/CHANGELOG.md
@@ -3,6 +3,30 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube.js/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/cloud
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube.js/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/cloud
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube.js/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/cloud
+
+
+
+
+
## [0.34.55](https://github.com/cube-js/cube.js/compare/v0.34.54...v0.34.55) (2024-02-15)
**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 1522608a66..11fb0010c0 100644
--- a/packages/cubejs-backend-cloud/package.json
+++ b/packages/cubejs-backend-cloud/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-backend/cloud",
- "version": "0.34.55",
+ "version": "0.34.60",
"description": "Cube Cloud package",
"main": "dist/src/index.js",
"typings": "dist/src/index.d.ts",
@@ -32,7 +32,7 @@
},
"dependencies": {
"@cubejs-backend/dotenv": "^9.0.2",
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/shared": "^0.34.60",
"chokidar": "^3.5.1",
"env-var": "^6.3.0",
"fs-extra": "^9.1.0",
diff --git a/packages/cubejs-backend-maven/CHANGELOG.md b/packages/cubejs-backend-maven/CHANGELOG.md
index dc04bc6f08..0caeae8888 100644
--- a/packages/cubejs-backend-maven/CHANGELOG.md
+++ b/packages/cubejs-backend-maven/CHANGELOG.md
@@ -3,6 +3,30 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/maven
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/maven
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/maven
+
+
+
+
+
## [0.34.55](https://github.com/cube-js/cube/compare/v0.34.54...v0.34.55) (2024-02-15)
**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 ba5b07ea6f..a8795df377 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": "0.34.55",
+ "version": "0.34.60",
"license": "Apache-2.0",
"repository": {
"type": "git",
@@ -31,7 +31,7 @@
"dist/src/*"
],
"dependencies": {
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/shared": "^0.34.60",
"source-map-support": "^0.5.19",
"xmlbuilder2": "^2.4.0"
},
diff --git a/packages/cubejs-backend-native/CHANGELOG.md b/packages/cubejs-backend-native/CHANGELOG.md
index 32525af585..30068a9c0b 100644
--- a/packages/cubejs-backend-native/CHANGELOG.md
+++ b/packages/cubejs-backend-native/CHANGELOG.md
@@ -3,6 +3,54 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+
+### Features
+
+* **cubesql:** In subquery support ([#7851](https://github.com/cube-js/cube/issues/7851)) ([8e2a3ec](https://github.com/cube-js/cube/commit/8e2a3ecc348c4ab9e6a5ab038c46fcf7f4c3dfcc))
+
+
+
+
+
+## [0.34.59](https://github.com/cube-js/cube/compare/v0.34.58...v0.34.59) (2024-02-28)
+
+**Note:** Version bump only for package @cubejs-backend/native
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+
+### Bug Fixes
+
+* **cubesql:** Continue wait error is being thrown to users ([cb2376c](https://github.com/cube-js/cube/commit/cb2376c1d2cc0a86aa329072fb2ec02ddadfeaf8))
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+
+### Bug Fixes
+
+* **cubesql:** More readable error message during SQL generation ([d9a7194](https://github.com/cube-js/cube/commit/d9a719479d6ca00ef5b2b511677cd777ceb131e7))
+* **cubesql:** writerOrChannel.resolve is not a function ([abc95e2](https://github.com/cube-js/cube/commit/abc95e259c82894aea63371e468c98d640b4d42e))
+
+
+### Features
+
+* **cubesql:** `WHERE` SQL push down ([#7808](https://github.com/cube-js/cube/issues/7808)) ([98b5709](https://github.com/cube-js/cube/commit/98b570946905586f16a502f83b0a1cf8e4aa92a6))
+* **cubesql:** Support placeholders in `OFFSET`, `FETCH ...` ([60aad90](https://github.com/cube-js/cube/commit/60aad90a237800f4471bb4efa10ec590b50e19fe))
+
+
+
+
+
## [0.34.56](https://github.com/cube-js/cube/compare/v0.34.55...v0.34.56) (2024-02-20)
diff --git a/packages/cubejs-backend-native/Cargo.lock b/packages/cubejs-backend-native/Cargo.lock
index 9a15b01e2b..440f95b7c7 100644
--- a/packages/cubejs-backend-native/Cargo.lock
+++ b/packages/cubejs-backend-native/Cargo.lock
@@ -118,7 +118,7 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
[[package]]
name = "arrow"
version = "11.1.0"
-source = "git+https://github.com/cube-js/arrow-rs.git?rev=9f2e2862f3f5e5efb1f83364b3ac8492f776a92d#9f2e2862f3f5e5efb1f83364b3ac8492f776a92d"
+source = "git+https://github.com/cube-js/arrow-rs.git?rev=f32dc0f5d2de97433f53dbc18295558e04214ad8#f32dc0f5d2de97433f53dbc18295558e04214ad8"
dependencies = [
"bitflags 1.3.2",
"chrono",
@@ -714,7 +714,7 @@ dependencies = [
[[package]]
name = "cube-ext"
version = "1.0.0"
-source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=531b925ce8215594a0d7c2151cfc17d6c6b2036c#531b925ce8215594a0d7c2151cfc17d6c6b2036c"
+source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=18d735d8f1b71f3cfbf5e5757b3093b9c19a640f#18d735d8f1b71f3cfbf5e5757b3093b9c19a640f"
dependencies = [
"arrow",
"chrono",
@@ -824,7 +824,7 @@ dependencies = [
[[package]]
name = "datafusion"
version = "7.0.0"
-source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=531b925ce8215594a0d7c2151cfc17d6c6b2036c#531b925ce8215594a0d7c2151cfc17d6c6b2036c"
+source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=18d735d8f1b71f3cfbf5e5757b3093b9c19a640f#18d735d8f1b71f3cfbf5e5757b3093b9c19a640f"
dependencies = [
"ahash 0.7.7",
"arrow",
@@ -857,7 +857,7 @@ dependencies = [
[[package]]
name = "datafusion-common"
version = "7.0.0"
-source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=531b925ce8215594a0d7c2151cfc17d6c6b2036c#531b925ce8215594a0d7c2151cfc17d6c6b2036c"
+source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=18d735d8f1b71f3cfbf5e5757b3093b9c19a640f#18d735d8f1b71f3cfbf5e5757b3093b9c19a640f"
dependencies = [
"arrow",
"ordered-float 2.10.1",
@@ -868,7 +868,7 @@ dependencies = [
[[package]]
name = "datafusion-data-access"
version = "1.0.0"
-source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=531b925ce8215594a0d7c2151cfc17d6c6b2036c#531b925ce8215594a0d7c2151cfc17d6c6b2036c"
+source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=18d735d8f1b71f3cfbf5e5757b3093b9c19a640f#18d735d8f1b71f3cfbf5e5757b3093b9c19a640f"
dependencies = [
"async-trait",
"chrono",
@@ -881,7 +881,7 @@ dependencies = [
[[package]]
name = "datafusion-expr"
version = "7.0.0"
-source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=531b925ce8215594a0d7c2151cfc17d6c6b2036c#531b925ce8215594a0d7c2151cfc17d6c6b2036c"
+source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=18d735d8f1b71f3cfbf5e5757b3093b9c19a640f#18d735d8f1b71f3cfbf5e5757b3093b9c19a640f"
dependencies = [
"ahash 0.7.7",
"arrow",
@@ -892,7 +892,7 @@ dependencies = [
[[package]]
name = "datafusion-physical-expr"
version = "7.0.0"
-source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=531b925ce8215594a0d7c2151cfc17d6c6b2036c#531b925ce8215594a0d7c2151cfc17d6c6b2036c"
+source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=18d735d8f1b71f3cfbf5e5757b3093b9c19a640f#18d735d8f1b71f3cfbf5e5757b3093b9c19a640f"
dependencies = [
"ahash 0.7.7",
"arrow",
@@ -2274,7 +2274,7 @@ dependencies = [
[[package]]
name = "parquet"
version = "11.1.0"
-source = "git+https://github.com/cube-js/arrow-rs.git?rev=9f2e2862f3f5e5efb1f83364b3ac8492f776a92d#9f2e2862f3f5e5efb1f83364b3ac8492f776a92d"
+source = "git+https://github.com/cube-js/arrow-rs.git?rev=f32dc0f5d2de97433f53dbc18295558e04214ad8#f32dc0f5d2de97433f53dbc18295558e04214ad8"
dependencies = [
"arrow",
"base64 0.13.1",
@@ -3332,7 +3332,7 @@ checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
[[package]]
name = "sqlparser"
version = "0.16.0"
-source = "git+https://github.com/cube-js/sqlparser-rs.git?rev=b7f265a4590049f8274cef8411f63eddb5b4bf87#b7f265a4590049f8274cef8411f63eddb5b4bf87"
+source = "git+https://github.com/cube-js/sqlparser-rs.git?rev=6a54d27d3b75a04b9f9cbe309a83078aa54b32fd#6a54d27d3b75a04b9f9cbe309a83078aa54b32fd"
dependencies = [
"log",
]
diff --git a/packages/cubejs-backend-native/js/index.ts b/packages/cubejs-backend-native/js/index.ts
index b6f8966ad8..2d26f4174e 100644
--- a/packages/cubejs-backend-native/js/index.ts
+++ b/packages/cubejs-backend-native/js/index.ts
@@ -250,6 +250,8 @@ function wrapNativeFunctionWithStream(
response.stream.on('error', (err: any) => {
writable.destroy(err);
});
+ } else if (response.error) {
+ writerOrChannel.reject(errorString(response));
} else {
// TODO remove JSON.stringify()
writerOrChannel.resolve(JSON.stringify(response));
diff --git a/packages/cubejs-backend-native/package.json b/packages/cubejs-backend-native/package.json
index 0a2734e10f..3d7462ad8e 100644
--- a/packages/cubejs-backend-native/package.json
+++ b/packages/cubejs-backend-native/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-backend/native",
- "version": "0.34.56",
+ "version": "0.34.60",
"author": "Cube Dev, Inc.",
"description": "Native module for Cube.js (binding to Rust codebase)",
"main": "dist/js/index.js",
@@ -43,8 +43,8 @@
"uuid": "^8.3.2"
},
"dependencies": {
- "@cubejs-backend/cubesql": "^0.34.56",
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/cubesql": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60",
"@cubejs-infra/post-installer": "^0.0.7"
},
"resources": {
diff --git a/packages/cubejs-backend-native/src/transport.rs b/packages/cubejs-backend-native/src/transport.rs
index 960df7fbb8..3a0cb35a7a 100644
--- a/packages/cubejs-backend-native/src/transport.rs
+++ b/packages/cubejs-backend-native/src/transport.rs
@@ -297,6 +297,19 @@ impl TransportService for NodeBridgeTransport {
)
.await?;
+ if let Some(error) = response.get("error").and_then(|e| e.as_str()) {
+ if let Some(stack) = response.get("stack").and_then(|e| e.as_str()) {
+ return Err(CubeError::user(format!(
+ "Error during SQL generation: {}\n{}",
+ error, stack
+ )));
+ }
+ return Err(CubeError::user(format!(
+ "Error during SQL generation: {}",
+ error
+ )));
+ }
+
let sql = response
.get("sql")
.ok_or_else(|| CubeError::user(format!("No sql in response: {}", response)))?
@@ -369,12 +382,18 @@ impl TransportService for NodeBridgeTransport {
streaming: false,
})?;
- let response: serde_json::Value = call_js_with_channel_as_callback(
+ let result = call_js_with_channel_as_callback(
self.channel.clone(),
self.on_sql_api_load.clone(),
Some(extra),
)
- .await?;
+ .await;
+ if let Err(e) = &result {
+ if e.message.to_lowercase().contains("continue wait") {
+ continue;
+ }
+ }
+ let response: serde_json::Value = result?;
#[cfg(debug_assertions)]
trace!("[transport] Request <- {:?}", response);
#[cfg(not(debug_assertions))]
diff --git a/packages/cubejs-backend-native/test/sql.test.ts b/packages/cubejs-backend-native/test/sql.test.ts
index 25edb86747..ab3692aa8c 100644
--- a/packages/cubejs-backend-native/test/sql.test.ts
+++ b/packages/cubejs-backend-native/test/sql.test.ts
@@ -277,7 +277,7 @@ describe('SQLInterface', () => {
const [result] = await connection.query('select CAST(\'2020-12-25 22:48:48.000\' AS timestamp)');
console.log(result);
- expect(result).toEqual([{ 'TimestampNanosecond(1608936528000000000, None)': '2020-12-25T22:48:48.000' }]);
+ expect(result).toEqual([{ 'CAST(Utf8("2020-12-25 22:48:48.000") AS Timestamp(Nanosecond, None))': '2020-12-25T22:48:48.000' }]);
}
connection.destroy();
diff --git a/packages/cubejs-backend-shared/CHANGELOG.md b/packages/cubejs-backend-shared/CHANGELOG.md
index c4a3e0c4c5..13b51273bf 100644
--- a/packages/cubejs-backend-shared/CHANGELOG.md
+++ b/packages/cubejs-backend-shared/CHANGELOG.md
@@ -3,6 +3,39 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube.js/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+
+### Bug Fixes
+
+* Bump max connect retries for Cube Store ([00a6ec0](https://github.com/cube-js/cube.js/commit/00a6ec034c2d5dff8c66647b7ec6cae39c0237ba))
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube.js/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+
+### Features
+
+* **materialize-driver:** Add cluster option to Materialize driver ([#7773](https://github.com/cube-js/cube.js/issues/7773)) Thanks [@bobbyiliev](https://github.com/bobbyiliev)! ([917004e](https://github.com/cube-js/cube.js/commit/917004ebccfeb6509a08e5b9b51e1ae8542cf0af))
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube.js/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+
+### Features
+
+* **duckdb-driver:** Add support for local fs duckdb database path ([#7799](https://github.com/cube-js/cube.js/issues/7799)) ([77cc883](https://github.com/cube-js/cube.js/commit/77cc883a3d73d37730a82ecf9128b8929abb2ca3))
+
+
+
+
+
## [0.34.55](https://github.com/cube-js/cube.js/compare/v0.34.54...v0.34.55) (2024-02-15)
diff --git a/packages/cubejs-backend-shared/package.json b/packages/cubejs-backend-shared/package.json
index 89e478c84d..263d7d956e 100644
--- a/packages/cubejs-backend-shared/package.json
+++ b/packages/cubejs-backend-shared/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-backend/shared",
- "version": "0.34.55",
+ "version": "0.34.60",
"description": "Shared code for Cube.js backend packages",
"main": "dist/src/index.js",
"typings": "dist/src/index.d.ts",
diff --git a/packages/cubejs-backend-shared/src/env.ts b/packages/cubejs-backend-shared/src/env.ts
index c6258929c9..83dd2609e5 100644
--- a/packages/cubejs-backend-shared/src/env.ts
+++ b/packages/cubejs-backend-shared/src/env.ts
@@ -1231,6 +1231,23 @@ const variables: Record any> = {
]
),
+ /** ****************************************************************
+ * Materialize Driver *
+ ***************************************************************** */
+
+ /**
+ * Materialize cluster.
+ */
+ materializeCluster: ({
+ dataSource
+ }: {
+ dataSource: string,
+ }) => (
+ process.env[
+ keyByDataSource('CUBEJS_DB_MATERIALIZE_CLUSTER', dataSource)
+ ]
+ ),
+
/** ****************************************************************
* Snowflake Driver *
***************************************************************** */
@@ -1408,6 +1425,16 @@ const variables: Record any> = {
]
),
+ duckdbDatabasePath: ({
+ dataSource
+ }: {
+ dataSource: string,
+ }) => (
+ process.env[
+ keyByDataSource('CUBEJS_DB_DUCKDB_DATABASE_PATH', dataSource)
+ ]
+ ),
+
duckdbS3Region: ({
dataSource
}: {
@@ -1524,7 +1551,7 @@ const variables: Record any> = {
cubeStorePass: () => get('CUBEJS_CUBESTORE_PASS')
.asString(),
cubeStoreMaxConnectRetries: () => get('CUBEJS_CUBESTORE_MAX_CONNECT_RETRIES')
- .default('10')
+ .default('20')
.asInt(),
cubeStoreNoHeartBeatTimeout: () => get('CUBEJS_CUBESTORE_NO_HEART_BEAT_TIMEOUT')
.default('30')
diff --git a/packages/cubejs-base-driver/CHANGELOG.md b/packages/cubejs-base-driver/CHANGELOG.md
index 38274de93f..e4dc5ce483 100644
--- a/packages/cubejs-base-driver/CHANGELOG.md
+++ b/packages/cubejs-base-driver/CHANGELOG.md
@@ -3,6 +3,30 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/base-driver
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/base-driver
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/base-driver
+
+
+
+
+
## [0.34.55](https://github.com/cube-js/cube/compare/v0.34.54...v0.34.55) (2024-02-15)
**Note:** Version bump only for package @cubejs-backend/base-driver
diff --git a/packages/cubejs-base-driver/package.json b/packages/cubejs-base-driver/package.json
index a7e7d470e0..14c8783086 100644
--- a/packages/cubejs-base-driver/package.json
+++ b/packages/cubejs-base-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/base-driver",
"description": "Cube.js Base Driver",
"author": "Cube Dev, Inc.",
- "version": "0.34.55",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -29,8 +29,10 @@
"dist/src/*"
],
"dependencies": {
- "@cubejs-backend/shared": "^0.34.55",
- "ramda": "^0.27.0"
+ "@cubejs-backend/shared": "^0.34.60",
+ "ramda": "^0.27.0",
+ "@aws-sdk/client-s3": "^3.49.0",
+ "@aws-sdk/s3-request-presigner": "^3.49.0"
},
"devDependencies": {
"@cubejs-backend/linter": "^0.34.25",
diff --git a/packages/cubejs-base-driver/src/BaseDriver.ts b/packages/cubejs-base-driver/src/BaseDriver.ts
index 0885c078b7..8e5a55443f 100644
--- a/packages/cubejs-base-driver/src/BaseDriver.ts
+++ b/packages/cubejs-base-driver/src/BaseDriver.ts
@@ -16,6 +16,9 @@ import {
} from '@cubejs-backend/shared';
import { reduce } from 'ramda';
import fs from 'fs';
+import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
+import { S3, GetObjectCommand, S3ClientConfig } from '@aws-sdk/client-s3';
+
import { cancelCombinator } from './utils';
import {
ExternalCreateTableOptions,
@@ -463,7 +466,7 @@ export abstract class BaseDriver implements DriverInterface {
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
- public async queryColumnTypes(sql: string, params?: unknown[]): Promise<{ name: any; type: string; }[]> {
+ public async queryColumnTypes(sql: string, params: unknown[]): Promise<{ name: any; type: string; }[]> {
return [];
}
@@ -532,4 +535,38 @@ export abstract class BaseDriver implements DriverInterface {
public wrapQueryWithLimit(query: { query: string, limit: number}) {
query.query = `SELECT * FROM (${query.query}) AS t LIMIT ${query.limit}`;
}
+
+ /**
+ * Returns an array of signed AWS S3 URLs of the unloaded csv files.
+ */
+ protected async extractUnloadedFilesFromS3(
+ clientOptions: S3ClientConfig,
+ bucketName: string,
+ prefix: string
+ ): Promise {
+ const storage = new S3(clientOptions);
+
+ const list = await storage.listObjectsV2({
+ Bucket: bucketName,
+ Prefix: prefix,
+ });
+ if (list) {
+ if (!list.Contents) {
+ return [];
+ } else {
+ const csvFile = await Promise.all(
+ list.Contents.map(async (file) => {
+ const command = new GetObjectCommand({
+ Bucket: bucketName,
+ Key: file.Key,
+ });
+ return getSignedUrl(storage, command, { expiresIn: 3600 });
+ })
+ );
+ return csvFile;
+ }
+ }
+
+ throw new Error('Unable to retrieve list of files from S3 storage after unloading.');
+ }
}
diff --git a/packages/cubejs-base-driver/src/driver.interface.ts b/packages/cubejs-base-driver/src/driver.interface.ts
index 6d34b69a1c..ef7465a831 100644
--- a/packages/cubejs-base-driver/src/driver.interface.ts
+++ b/packages/cubejs-base-driver/src/driver.interface.ts
@@ -186,7 +186,7 @@ export interface DriverInterface {
query(query: string, params: unknown[], options?: QueryOptions): Promise;
//
tableColumnTypes: (table: string) => Promise;
- queryColumnTypes: (sql: string, params?: unknown[]) => Promise<{ name: any; type: string; }[]>;
+ queryColumnTypes: (sql: string, params: unknown[]) => Promise<{ name: any; type: string; }[]>;
//
getSchemas: () => Promise;
getTablesForSpecificSchemas: (schemas: QuerySchemasResult[]) => Promise;
diff --git a/packages/cubejs-bigquery-driver/CHANGELOG.md b/packages/cubejs-bigquery-driver/CHANGELOG.md
index 55b3523d26..bb69ea41fa 100644
--- a/packages/cubejs-bigquery-driver/CHANGELOG.md
+++ b/packages/cubejs-bigquery-driver/CHANGELOG.md
@@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/bigquery-driver
+
+
+
+
+
+## [0.34.59](https://github.com/cube-js/cube/compare/v0.34.58...v0.34.59) (2024-02-28)
+
+**Note:** Version bump only for package @cubejs-backend/bigquery-driver
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/bigquery-driver
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/bigquery-driver
+
+
+
+
+
## [0.34.56](https://github.com/cube-js/cube/compare/v0.34.55...v0.34.56) (2024-02-20)
**Note:** Version bump only for package @cubejs-backend/bigquery-driver
diff --git a/packages/cubejs-bigquery-driver/package.json b/packages/cubejs-bigquery-driver/package.json
index bc61c148d3..801e451b94 100644
--- a/packages/cubejs-bigquery-driver/package.json
+++ b/packages/cubejs-bigquery-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/bigquery-driver",
"description": "Cube.js BigQuery database driver",
"author": "Cube Dev, Inc.",
- "version": "0.34.56",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -28,15 +28,15 @@
"main": "index.js",
"types": "dist/src/index.d.ts",
"dependencies": {
- "@cubejs-backend/base-driver": "^0.34.55",
+ "@cubejs-backend/base-driver": "^0.34.60",
"@cubejs-backend/dotenv": "^9.0.2",
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/shared": "^0.34.60",
"@google-cloud/bigquery": "^5.6.0",
"@google-cloud/storage": "^5.7.2",
"ramda": "^0.27.2"
},
"devDependencies": {
- "@cubejs-backend/testing-shared": "^0.34.56",
+ "@cubejs-backend/testing-shared": "^0.34.60",
"@types/dedent": "^0.7.0",
"@types/ramda": "^0.27.40",
"typescript": "~5.2.2"
diff --git a/packages/cubejs-cli/CHANGELOG.md b/packages/cubejs-cli/CHANGELOG.md
index 69436a61da..05aacefb62 100644
--- a/packages/cubejs-cli/CHANGELOG.md
+++ b/packages/cubejs-cli/CHANGELOG.md
@@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package cubejs-cli
+
+
+
+
+
+## [0.34.59](https://github.com/cube-js/cube/compare/v0.34.58...v0.34.59) (2024-02-28)
+
+**Note:** Version bump only for package cubejs-cli
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package cubejs-cli
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package cubejs-cli
+
+
+
+
+
## [0.34.56](https://github.com/cube-js/cube/compare/v0.34.55...v0.34.56) (2024-02-20)
**Note:** Version bump only for package cubejs-cli
diff --git a/packages/cubejs-cli/package.json b/packages/cubejs-cli/package.json
index 685cccd0e7..1a76021c54 100644
--- a/packages/cubejs-cli/package.json
+++ b/packages/cubejs-cli/package.json
@@ -2,7 +2,7 @@
"name": "cubejs-cli",
"description": "Cube.js Command Line Interface",
"author": "Cube Dev, Inc.",
- "version": "0.34.56",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -31,8 +31,8 @@
],
"dependencies": {
"@cubejs-backend/dotenv": "^9.0.2",
- "@cubejs-backend/schema-compiler": "^0.34.56",
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/schema-compiler": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60",
"chalk": "^2.4.2",
"cli-progress": "^3.10",
"commander": "^2.19.0",
@@ -50,7 +50,7 @@
},
"devDependencies": {
"@cubejs-backend/linter": "^0.34.25",
- "@cubejs-backend/server": "^0.34.56",
+ "@cubejs-backend/server": "^0.34.60",
"@oclif/command": "^1.8.0",
"@types/cli-progress": "^3.8.0",
"@types/cross-spawn": "^6.0.2",
diff --git a/packages/cubejs-clickhouse-driver/CHANGELOG.md b/packages/cubejs-clickhouse-driver/CHANGELOG.md
index 3efbfa48a2..4a95f2dabe 100644
--- a/packages/cubejs-clickhouse-driver/CHANGELOG.md
+++ b/packages/cubejs-clickhouse-driver/CHANGELOG.md
@@ -3,6 +3,41 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/clickhouse-driver
+
+
+
+
+
+## [0.34.59](https://github.com/cube-js/cube/compare/v0.34.58...v0.34.59) (2024-02-28)
+
+**Note:** Version bump only for package @cubejs-backend/clickhouse-driver
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+
+### Bug Fixes
+
+* **clickhouse-driver:** Correct support for Enum8/16 ([#7814](https://github.com/cube-js/cube/issues/7814)) ([db37fc3](https://github.com/cube-js/cube/commit/db37fc3b0f24511bd9ae3a319b5755c102bb3358))
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/clickhouse-driver
+
+
+
+
+
## [0.34.56](https://github.com/cube-js/cube/compare/v0.34.55...v0.34.56) (2024-02-20)
**Note:** Version bump only for package @cubejs-backend/clickhouse-driver
diff --git a/packages/cubejs-clickhouse-driver/package.json b/packages/cubejs-clickhouse-driver/package.json
index 6bfd2ca313..8fcdba22fb 100644
--- a/packages/cubejs-clickhouse-driver/package.json
+++ b/packages/cubejs-clickhouse-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/clickhouse-driver",
"description": "Cube.js ClickHouse database driver",
"author": "Cube Dev, Inc.",
- "version": "0.34.56",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -27,9 +27,9 @@
"integration:clickhouse": "jest dist/test"
},
"dependencies": {
- "@apla/clickhouse": "^1.5.5",
- "@cubejs-backend/base-driver": "^0.34.55",
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/apla-clickhouse": "^1.7",
+ "@cubejs-backend/base-driver": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60",
"generic-pool": "^3.6.0",
"moment": "^2.24.0",
"sqlstring": "^2.3.1",
@@ -38,7 +38,7 @@
"license": "Apache-2.0",
"devDependencies": {
"@cubejs-backend/linter": "^0.34.25",
- "@cubejs-backend/testing-shared": "^0.34.56",
+ "@cubejs-backend/testing-shared": "^0.34.60",
"@types/jest": "^27",
"jest": "27",
"typescript": "~5.2.2"
diff --git a/packages/cubejs-clickhouse-driver/src/ClickHouseDriver.ts b/packages/cubejs-clickhouse-driver/src/ClickHouseDriver.ts
index cdc2ff95a4..c90e169be3 100644
--- a/packages/cubejs-clickhouse-driver/src/ClickHouseDriver.ts
+++ b/packages/cubejs-clickhouse-driver/src/ClickHouseDriver.ts
@@ -12,20 +12,22 @@ import {
BaseDriver,
DownloadQueryResultsOptions,
DownloadQueryResultsResult,
+ DownloadTableCSVData,
DriverCapabilities,
DriverInterface,
QuerySchemasResult,
StreamOptions,
StreamTableDataWithTypes,
+ TableStructure,
+ UnloadOptions,
} from '@cubejs-backend/base-driver';
import genericPool, { Pool } from 'generic-pool';
import { v4 as uuidv4 } from 'uuid';
import sqlstring from 'sqlstring';
-import * as moment from 'moment';
import { HydrationStream, transformRow } from './HydrationStream';
-const ClickHouse = require('@apla/clickhouse');
+const ClickHouse = require('@cubejs-backend/apla-clickhouse');
const ClickhouseTypeToGeneric: Record = {
enum: 'text',
@@ -47,6 +49,9 @@ const ClickhouseTypeToGeneric: Record = {
// floats
float32: 'float',
float64: 'double',
+ // We don't support enums
+ enum8: 'text',
+ enum16: 'text',
};
interface ClickHouseDriverOptions {
@@ -59,9 +64,20 @@ interface ClickHouseDriverOptions {
queryOptions?: object,
}
-/**
- * ClickHouse driver class.
- */
+interface ClickhouseDriverExportRequiredAWS {
+ bucketType: 's3',
+ bucketName: string,
+ region: string,
+}
+
+interface ClickhouseDriverExportKeySecretAWS extends ClickhouseDriverExportRequiredAWS {
+ keyId?: string,
+ secretKey?: string,
+}
+
+interface ClickhouseDriverExportAWS extends ClickhouseDriverExportKeySecretAWS {
+}
+
export class ClickHouseDriver extends BaseDriver implements DriverInterface {
/**
* Returns default concurrency value.
@@ -125,10 +141,13 @@ export class ClickHouseDriver extends BaseDriver implements DriverInterface {
config && config.database ||
'default'
},
+ exportBucket: this.getExportBucket(dataSource),
...config
};
+
this.readOnlyMode =
getEnv('clickhouseReadOnly', { dataSource }) === 'true';
+
this.pool = genericPool.createPool({
create: async () => new ClickHouse({
...this.config,
@@ -400,8 +419,119 @@ export class ClickHouseDriver extends BaseDriver implements DriverInterface {
return this.query('SELECT name as table_name FROM system.tables WHERE database = ?', [schemaName]);
}
+ protected getExportBucket(
+ dataSource: string,
+ ): ClickhouseDriverExportAWS | undefined {
+ const supportedBucketTypes = ['s3'];
+
+ const requiredExportBucket: ClickhouseDriverExportRequiredAWS = {
+ bucketType: getEnv('dbExportBucketType', {
+ supported: supportedBucketTypes,
+ dataSource,
+ }),
+ bucketName: getEnv('dbExportBucket', { dataSource }),
+ region: getEnv('dbExportBucketAwsRegion', { dataSource }),
+ };
+
+ const exportBucket: Partial = {
+ ...requiredExportBucket,
+ keyId: getEnv('dbExportBucketAwsKey', { dataSource }),
+ secretKey: getEnv('dbExportBucketAwsSecret', { dataSource }),
+ };
+
+ if (exportBucket.bucketType) {
+ if (!supportedBucketTypes.includes(exportBucket.bucketType)) {
+ throw new Error(
+ `Unsupported EXPORT_BUCKET_TYPE, supported: ${supportedBucketTypes.join(',')}`
+ );
+ }
+
+ // Make sure the required keys are set
+ const emptyRequiredKeys = Object.keys(requiredExportBucket)
+ .filter((key: string) => requiredExportBucket[key] === undefined);
+ if (emptyRequiredKeys.length) {
+ throw new Error(
+ `Unsupported configuration exportBucket, some configuration keys are empty: ${emptyRequiredKeys.join(',')}`
+ );
+ }
+
+ return exportBucket as ClickhouseDriverExportAWS;
+ }
+
+ return undefined;
+ }
+
+ public async isUnloadSupported() {
+ if (this.config.exportBucket) {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Returns an array of queried fields meta info.
+ */
+ public async queryColumnTypes(sql: string, params: unknown[]): Promise {
+ const columns = await this.query(`DESCRIBE ${sql}`, params);
+ if (!columns) {
+ throw new Error('Unable to describe table');
+ }
+
+ return columns.map((column: any) => ({
+ name: column.name,
+ type: this.toGenericType(column.type),
+ }));
+ }
+
+ /**
+ * We use unloadWithoutTempTable strategy
+ */
+ public async unload(tableName: string, options: UnloadOptions): Promise {
+ if (!this.config.exportBucket) {
+ throw new Error('Unload is not configured');
+ }
+
+ if (!options.query?.sql) {
+ throw new Error('Query must be defined in options');
+ }
+
+ const types = await this.queryColumnTypes(`(${options.query.sql})`, options.query.params);
+ await this.queryResponse(`
+ INSERT INTO FUNCTION
+ s3(
+ 'https://${this.config.exportBucket.bucketName}.s3.${this.config.exportBucket.region}.amazonaws.com/${tableName}/export.csv.gz',
+ '${this.config.exportBucket.keyId}',
+ '${this.config.exportBucket.secretKey}',
+ 'CSV'
+ )
+ ${options.query.sql}
+ `, options.query.params);
+
+ const csvFile = await this.extractUnloadedFilesFromS3(
+ {
+ credentials: {
+ accessKeyId: this.config.exportBucket.keyId,
+ secretAccessKey: this.config.exportBucket.secretKey,
+ },
+ region: this.config.exportBucket.region,
+ },
+ this.config.exportBucket.bucketName,
+ tableName,
+ );
+
+ return {
+ csvFile,
+ types,
+ csvNoHeader: true,
+ // Can be controlled via SET format_csv_delimiter
+ csvDelimiter: ','
+ };
+ }
+
public capabilities(): DriverCapabilities {
return {
+ unloadWithoutTempTable: true,
incrementalSchemaLoading: true,
};
}
diff --git a/packages/cubejs-clickhouse-driver/test/ClickHouseDriver.test.ts b/packages/cubejs-clickhouse-driver/test/ClickHouseDriver.test.ts
index 32bf83e1a1..c501bd3568 100644
--- a/packages/cubejs-clickhouse-driver/test/ClickHouseDriver.test.ts
+++ b/packages/cubejs-clickhouse-driver/test/ClickHouseDriver.test.ts
@@ -50,20 +50,22 @@ describe('ClickHouseDriver', () => {
float64 Nullable(Float64),
decimal32 Decimal32(2),
decimal64 Decimal64(2),
- decimal128 Decimal128(2)
+ decimal128 Decimal128(2),
+ enum8 Enum('hello' = 1, 'world' = 2),
+ enum16 Enum('hello' = 1, 'world' = 1000)
) ENGINE Log
`,
[]
);
- await driver.query('INSERT INTO test.types_test VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', [
- '2020-01-01', '2020-01-01 00:00:00', '2020-01-01 00:00:00.000', '2020-01-01 00:00:00.000000', '2020-01-01 00:00:00.000000000', 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.01, 1.01, 1.01
+ await driver.query('INSERT INTO test.types_test VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', [
+ '2020-01-01', '2020-01-01 00:00:00', '2020-01-01 00:00:00.000', '2020-01-01 00:00:00.000000', '2020-01-01 00:00:00.000000000', 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.01, 1.01, 1.01, 'hello', 'world'
]);
- await driver.query('INSERT INTO test.types_test VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', [
- '2020-01-02', '2020-01-02 00:00:00', '2020-01-02 00:00:00.123', '2020-01-02 00:00:00.123456', '2020-01-02 00:00:00.123456789', 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2.02, 2.02, 2.02
+ await driver.query('INSERT INTO test.types_test VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', [
+ '2020-01-02', '2020-01-02 00:00:00', '2020-01-02 00:00:00.123', '2020-01-02 00:00:00.123456', '2020-01-02 00:00:00.123456789', 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2.02, 2.02, 2.02, 'hello', 'world'
]);
- await driver.query('INSERT INTO test.types_test VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', [
- '2020-01-03', '2020-01-03 00:00:00', '2020-01-03 00:00:00.234', '2020-01-03 00:00:00.234567', '2020-01-03 00:00:00.234567890', 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3.03, 3.03, 3.03
+ await driver.query('INSERT INTO test.types_test VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', [
+ '2020-01-03', '2020-01-03 00:00:00', '2020-01-03 00:00:00.234', '2020-01-03 00:00:00.234567', '2020-01-03 00:00:00.234567890', 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3.03, 3.03, 3.03, 'hello', 'world'
]);
});
}, 30 * 1000);
@@ -171,7 +173,9 @@ describe('ClickHouseDriver', () => {
float64: '1',
decimal32: '1.01',
decimal64: '1.01',
- decimal128: '1.01'
+ decimal128: '1.01',
+ enum8: 'hello',
+ enum16: 'world',
}]);
});
});
@@ -299,11 +303,13 @@ describe('ClickHouseDriver', () => {
{ name: 'decimal32', type: 'decimal' },
{ name: 'decimal64', type: 'decimal' },
{ name: 'decimal128', type: 'decimal' },
+ { name: 'enum8', type: 'text' },
+ { name: 'enum16', type: 'text' },
]);
expect(await streamToArray(tableData.rowStream as any)).toEqual([
- ['2020-01-01T00:00:00.000', '2020-01-01T00:00:00.000', '2020-01-01T00:00:00.000', '2020-01-01T00:00:00.000', '2020-01-01T00:00:00.000', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1.01', '1.01', '1.01'],
- ['2020-01-02T00:00:00.000', '2020-01-02T00:00:00.000', '2020-01-02T00:00:00.123', '2020-01-02T00:00:00.123', '2020-01-02T00:00:00.123', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2.02', '2.02', '2.02'],
- ['2020-01-03T00:00:00.000', '2020-01-03T00:00:00.000', '2020-01-03T00:00:00.234', '2020-01-03T00:00:00.234', '2020-01-03T00:00:00.234', '3', '3', '3', '3', '3', '3', '3', '3', '3', '3', '3.03', '3.03', '3.03'],
+ ['2020-01-01T00:00:00.000', '2020-01-01T00:00:00.000', '2020-01-01T00:00:00.000', '2020-01-01T00:00:00.000', '2020-01-01T00:00:00.000', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1.01', '1.01', '1.01', 'hello', 'world'],
+ ['2020-01-02T00:00:00.000', '2020-01-02T00:00:00.000', '2020-01-02T00:00:00.123', '2020-01-02T00:00:00.123', '2020-01-02T00:00:00.123', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2.02', '2.02', '2.02', 'hello', 'world'],
+ ['2020-01-03T00:00:00.000', '2020-01-03T00:00:00.000', '2020-01-03T00:00:00.234', '2020-01-03T00:00:00.234', '2020-01-03T00:00:00.234', '3', '3', '3', '3', '3', '3', '3', '3', '3', '3', '3.03', '3.03', '3.03', 'hello', 'world'],
]);
} finally {
// @ts-ignore
diff --git a/packages/cubejs-client-core/CHANGELOG.md b/packages/cubejs-client-core/CHANGELOG.md
index dcc638f792..a5b3af3f3b 100644
--- a/packages/cubejs-client-core/CHANGELOG.md
+++ b/packages/cubejs-client-core/CHANGELOG.md
@@ -3,6 +3,17 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+
+### Bug Fixes
+
+* **client-core:** incorrect index in movePivotItem ([#6684](https://github.com/cube-js/cube/issues/6684)) Thanks to [@telunc](https://github.com/telunc)! ([82217b2](https://github.com/cube-js/cube/commit/82217b28a012158cd8a978fd2e1ad15746ddeae0))
+
+
+
+
+
## [0.34.37](https://github.com/cube-js/cube/compare/v0.34.36...v0.34.37) (2023-12-19)
diff --git a/packages/cubejs-client-core/package.json b/packages/cubejs-client-core/package.json
index e564e6f7ee..01b83d9b7c 100644
--- a/packages/cubejs-client-core/package.json
+++ b/packages/cubejs-client-core/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-client/core",
- "version": "0.34.37",
+ "version": "0.34.60",
"engines": {},
"repository": {
"type": "git",
diff --git a/packages/cubejs-client-core/src/utils.js b/packages/cubejs-client-core/src/utils.js
index b1099abb17..b8f6ea2577 100644
--- a/packages/cubejs-client-core/src/utils.js
+++ b/packages/cubejs-client-core/src/utils.js
@@ -288,10 +288,17 @@ export function movePivotItem(
if (id === 'measures') {
destinationIndex = lastIndex + 1;
} else if (
+ sourceAxis === destinationAxis &&
destinationIndex >= lastIndex &&
nextPivotConfig[destinationAxis][lastIndex] === 'measures'
) {
destinationIndex = lastIndex - 1;
+ } else if (
+ sourceAxis !== destinationAxis &&
+ destinationIndex > lastIndex &&
+ nextPivotConfig[destinationAxis][lastIndex] === 'measures'
+ ) {
+ destinationIndex = lastIndex;
}
nextPivotConfig[sourceAxis].splice(sourceIndex, 1);
diff --git a/packages/cubejs-client-react/CHANGELOG.md b/packages/cubejs-client-react/CHANGELOG.md
index 3b5828acf2..8afa8aafb1 100644
--- a/packages/cubejs-client-react/CHANGELOG.md
+++ b/packages/cubejs-client-react/CHANGELOG.md
@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-client/react
+
+
+
+
+
## [0.34.46](https://github.com/cube-js/cube/compare/v0.34.45...v0.34.46) (2024-01-18)
diff --git a/packages/cubejs-client-react/index.d.ts b/packages/cubejs-client-react/index.d.ts
index 18df776746..ca89c0fae8 100644
--- a/packages/cubejs-client-react/index.d.ts
+++ b/packages/cubejs-client-react/index.d.ts
@@ -39,7 +39,11 @@ declare module '@cubejs-client/react' {
}
type CubeProviderProps = {
- cubejsApi: CubejsApi | null;
+ cubeApi?: CubejsApi | null;
+ /**
+ * @deprecated Use `cubeApi` instead
+ */
+ cubejsApi?: CubejsApi | null;
options?: CubeProviderOptions;
children: React.ReactNode;
};
diff --git a/packages/cubejs-client-react/package.json b/packages/cubejs-client-react/package.json
index 631d7f364f..4f06410269 100644
--- a/packages/cubejs-client-react/package.json
+++ b/packages/cubejs-client-react/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-client/react",
- "version": "0.34.46",
+ "version": "0.34.60",
"author": "Cube Dev, Inc.",
"license": "MIT",
"engines": {},
@@ -24,7 +24,7 @@
],
"dependencies": {
"@babel/runtime": "^7.1.2",
- "@cubejs-client/core": "^0.34.37",
+ "@cubejs-client/core": "^0.34.60",
"core-js": "^3.6.5",
"ramda": "^0.27.2"
},
diff --git a/packages/cubejs-client-vue/CHANGELOG.md b/packages/cubejs-client-vue/CHANGELOG.md
index 77cf5135b0..96e25616e4 100644
--- a/packages/cubejs-client-vue/CHANGELOG.md
+++ b/packages/cubejs-client-vue/CHANGELOG.md
@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube.js/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-client/vue
+
+
+
+
+
## [0.34.37](https://github.com/cube-js/cube.js/compare/v0.34.36...v0.34.37) (2023-12-19)
**Note:** Version bump only for package @cubejs-client/vue
diff --git a/packages/cubejs-client-vue/package.json b/packages/cubejs-client-vue/package.json
index 42ca22e269..a1a3646262 100644
--- a/packages/cubejs-client-vue/package.json
+++ b/packages/cubejs-client-vue/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-client/vue",
- "version": "0.34.37",
+ "version": "0.34.60",
"engines": {},
"repository": {
"type": "git",
@@ -28,7 +28,7 @@
"src"
],
"dependencies": {
- "@cubejs-client/core": "^0.34.37",
+ "@cubejs-client/core": "^0.34.60",
"core-js": "^3.6.5",
"ramda": "^0.27.2"
},
diff --git a/packages/cubejs-client-vue3/CHANGELOG.md b/packages/cubejs-client-vue3/CHANGELOG.md
index 8341867464..fee9fb67ad 100644
--- a/packages/cubejs-client-vue3/CHANGELOG.md
+++ b/packages/cubejs-client-vue3/CHANGELOG.md
@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube.js/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-client/vue3
+
+
+
+
+
## [0.34.37](https://github.com/cube-js/cube.js/compare/v0.34.36...v0.34.37) (2023-12-19)
**Note:** Version bump only for package @cubejs-client/vue3
diff --git a/packages/cubejs-client-vue3/package.json b/packages/cubejs-client-vue3/package.json
index d362a99d6c..012e565b74 100644
--- a/packages/cubejs-client-vue3/package.json
+++ b/packages/cubejs-client-vue3/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-client/vue3",
- "version": "0.34.37",
+ "version": "0.34.60",
"engines": {},
"repository": {
"type": "git",
@@ -28,7 +28,7 @@
"src"
],
"dependencies": {
- "@cubejs-client/core": "^0.34.37",
+ "@cubejs-client/core": "^0.34.60",
"@vue/compiler-sfc": "^3.0.11",
"core-js": "^3.6.5",
"flush-promises": "^1.0.2",
diff --git a/packages/cubejs-client-ws-transport/CHANGELOG.md b/packages/cubejs-client-ws-transport/CHANGELOG.md
index 6057fee5de..09f6e20756 100644
--- a/packages/cubejs-client-ws-transport/CHANGELOG.md
+++ b/packages/cubejs-client-ws-transport/CHANGELOG.md
@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-client/ws-transport
+
+
+
+
+
## [0.34.37](https://github.com/cube-js/cube/compare/v0.34.36...v0.34.37) (2023-12-19)
**Note:** Version bump only for package @cubejs-client/ws-transport
diff --git a/packages/cubejs-client-ws-transport/package.json b/packages/cubejs-client-ws-transport/package.json
index 4328b74c8f..cc5c16a68d 100644
--- a/packages/cubejs-client-ws-transport/package.json
+++ b/packages/cubejs-client-ws-transport/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-client/ws-transport",
- "version": "0.34.37",
+ "version": "0.34.60",
"engines": {},
"repository": {
"type": "git",
@@ -20,7 +20,7 @@
},
"dependencies": {
"@babel/runtime": "^7.1.2",
- "@cubejs-client/core": "^0.34.37",
+ "@cubejs-client/core": "^0.34.60",
"core-js": "^3.6.5",
"isomorphic-ws": "^4.0.1",
"ws": "^7.3.1"
diff --git a/packages/cubejs-crate-driver/CHANGELOG.md b/packages/cubejs-crate-driver/CHANGELOG.md
index ec48f988b4..0d6d8c2bd9 100644
--- a/packages/cubejs-crate-driver/CHANGELOG.md
+++ b/packages/cubejs-crate-driver/CHANGELOG.md
@@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/crate-driver
+
+
+
+
+
+## [0.34.59](https://github.com/cube-js/cube/compare/v0.34.58...v0.34.59) (2024-02-28)
+
+**Note:** Version bump only for package @cubejs-backend/crate-driver
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/crate-driver
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/crate-driver
+
+
+
+
+
## [0.34.56](https://github.com/cube-js/cube/compare/v0.34.55...v0.34.56) (2024-02-20)
**Note:** Version bump only for package @cubejs-backend/crate-driver
diff --git a/packages/cubejs-crate-driver/package.json b/packages/cubejs-crate-driver/package.json
index 4e662301c6..a6daa809dd 100644
--- a/packages/cubejs-crate-driver/package.json
+++ b/packages/cubejs-crate-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/crate-driver",
"description": "Cube.js Crate database driver",
"author": "Cube Dev, Inc.",
- "version": "0.34.56",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -28,14 +28,14 @@
"lint:fix": "eslint --fix src/* --ext .ts"
},
"dependencies": {
- "@cubejs-backend/postgres-driver": "^0.34.56",
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/postgres-driver": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60",
"pg": "^8.7.1"
},
"license": "Apache-2.0",
"devDependencies": {
"@cubejs-backend/linter": "^0.34.25",
- "@cubejs-backend/testing-shared": "^0.34.56",
+ "@cubejs-backend/testing-shared": "^0.34.60",
"testcontainers": "^8.12",
"typescript": "~5.2.2"
},
diff --git a/packages/cubejs-cubestore-driver/CHANGELOG.md b/packages/cubejs-cubestore-driver/CHANGELOG.md
index 2aea15ce0c..cfa5a2b1bf 100644
--- a/packages/cubejs-cubestore-driver/CHANGELOG.md
+++ b/packages/cubejs-cubestore-driver/CHANGELOG.md
@@ -3,6 +3,30 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/cubestore-driver
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/cubestore-driver
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/cubestore-driver
+
+
+
+
+
## [0.34.55](https://github.com/cube-js/cube/compare/v0.34.54...v0.34.55) (2024-02-15)
**Note:** Version bump only for package @cubejs-backend/cubestore-driver
diff --git a/packages/cubejs-cubestore-driver/package.json b/packages/cubejs-cubestore-driver/package.json
index db0d84effa..f2662f9454 100644
--- a/packages/cubejs-cubestore-driver/package.json
+++ b/packages/cubejs-cubestore-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/cubestore-driver",
"description": "Cube Store driver",
"author": "Cube Dev, Inc.",
- "version": "0.34.55",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -26,9 +26,9 @@
"lint:fix": "eslint --fix src/*.ts"
},
"dependencies": {
- "@cubejs-backend/base-driver": "^0.34.55",
- "@cubejs-backend/cubestore": "^0.34.55",
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/base-driver": "^0.34.60",
+ "@cubejs-backend/cubestore": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60",
"csv-write-stream": "^2.0.0",
"flatbuffers": "23.3.3",
"fs-extra": "^9.1.0",
diff --git a/packages/cubejs-databricks-jdbc-driver/CHANGELOG.md b/packages/cubejs-databricks-jdbc-driver/CHANGELOG.md
index 5435b977e2..d81d146e2b 100644
--- a/packages/cubejs-databricks-jdbc-driver/CHANGELOG.md
+++ b/packages/cubejs-databricks-jdbc-driver/CHANGELOG.md
@@ -3,6 +3,41 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/databricks-jdbc-driver
+
+
+
+
+
+## [0.34.59](https://github.com/cube-js/cube/compare/v0.34.58...v0.34.59) (2024-02-28)
+
+**Note:** Version bump only for package @cubejs-backend/databricks-jdbc-driver
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/databricks-jdbc-driver
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+
+### Features
+
+* **cubesql:** `WHERE` SQL push down ([#7808](https://github.com/cube-js/cube/issues/7808)) ([98b5709](https://github.com/cube-js/cube/commit/98b570946905586f16a502f83b0a1cf8e4aa92a6))
+
+
+
+
+
## [0.34.56](https://github.com/cube-js/cube/compare/v0.34.55...v0.34.56) (2024-02-20)
**Note:** Version bump only for package @cubejs-backend/databricks-jdbc-driver
diff --git a/packages/cubejs-databricks-jdbc-driver/package.json b/packages/cubejs-databricks-jdbc-driver/package.json
index f1b6965fcc..375157f5f4 100644
--- a/packages/cubejs-databricks-jdbc-driver/package.json
+++ b/packages/cubejs-databricks-jdbc-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/databricks-jdbc-driver",
"description": "Cube.js Databricks database driver",
"author": "Cube Dev, Inc.",
- "version": "0.34.56",
+ "version": "0.34.60",
"license": "Apache-2.0",
"repository": {
"type": "git",
@@ -31,10 +31,10 @@
"@aws-sdk/client-s3": "^3.49.0",
"@aws-sdk/s3-request-presigner": "^3.49.0",
"@azure/storage-blob": "^12.9.0",
- "@cubejs-backend/base-driver": "^0.34.55",
- "@cubejs-backend/jdbc-driver": "^0.34.55",
- "@cubejs-backend/schema-compiler": "^0.34.56",
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/base-driver": "^0.34.60",
+ "@cubejs-backend/jdbc-driver": "^0.34.60",
+ "@cubejs-backend/schema-compiler": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60",
"inquirer": "^8.0.0",
"node-fetch": "^2.6.1",
"ramda": "^0.27.2",
diff --git a/packages/cubejs-databricks-jdbc-driver/src/DatabricksQuery.ts b/packages/cubejs-databricks-jdbc-driver/src/DatabricksQuery.ts
index 0a38daac05..7a53e77d58 100644
--- a/packages/cubejs-databricks-jdbc-driver/src/DatabricksQuery.ts
+++ b/packages/cubejs-databricks-jdbc-driver/src/DatabricksQuery.ts
@@ -104,6 +104,7 @@ export class DatabricksQuery extends BaseQuery {
templates.functions.LTRIM = 'LTRIM({{ args|reverse|join(", ") }})';
templates.functions.RTRIM = 'RTRIM({{ args|reverse|join(", ") }})';
templates.functions.DATEDIFF = 'DATEDIFF({{ date_part }}, DATE_TRUNC(\'{{ date_part }}\', {{ args[1] }}), DATE_TRUNC(\'{{ date_part }}\', {{ args[2] }}))';
+ templates.expressions.timestamp_literal = 'from_utc_timestamp(\'{{ value }}\', \'UTC\')';
return templates;
}
}
diff --git a/packages/cubejs-dbt-schema-extension/CHANGELOG.md b/packages/cubejs-dbt-schema-extension/CHANGELOG.md
index d1862dc238..1bb407f065 100644
--- a/packages/cubejs-dbt-schema-extension/CHANGELOG.md
+++ b/packages/cubejs-dbt-schema-extension/CHANGELOG.md
@@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/dbt-schema-extension
+
+
+
+
+
+## [0.34.59](https://github.com/cube-js/cube/compare/v0.34.58...v0.34.59) (2024-02-28)
+
+**Note:** Version bump only for package @cubejs-backend/dbt-schema-extension
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/dbt-schema-extension
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/dbt-schema-extension
+
+
+
+
+
## [0.34.56](https://github.com/cube-js/cube/compare/v0.34.55...v0.34.56) (2024-02-20)
**Note:** Version bump only for package @cubejs-backend/dbt-schema-extension
diff --git a/packages/cubejs-dbt-schema-extension/package.json b/packages/cubejs-dbt-schema-extension/package.json
index 40cd5c001c..a55ed62e47 100644
--- a/packages/cubejs-dbt-schema-extension/package.json
+++ b/packages/cubejs-dbt-schema-extension/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/dbt-schema-extension",
"description": "Cube.js dbt Schema Extension",
"author": "Cube Dev, Inc.",
- "version": "0.34.56",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -25,14 +25,14 @@
"lint:fix": "eslint --fix src/* --ext .ts,.js"
},
"dependencies": {
- "@cubejs-backend/schema-compiler": "^0.34.56",
+ "@cubejs-backend/schema-compiler": "^0.34.60",
"fs-extra": "^9.1.0",
"inflection": "^1.12.0",
"node-fetch": "^2.6.1"
},
"devDependencies": {
"@cubejs-backend/linter": "^0.34.25",
- "@cubejs-backend/testing": "^0.34.56",
+ "@cubejs-backend/testing": "^0.34.60",
"@types/generic-pool": "^3.1.9",
"@types/jest": "^27",
"jest": "^27",
diff --git a/packages/cubejs-docker/CHANGELOG.md b/packages/cubejs-docker/CHANGELOG.md
index 89832ac4c1..4d543c8703 100644
--- a/packages/cubejs-docker/CHANGELOG.md
+++ b/packages/cubejs-docker/CHANGELOG.md
@@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube.js/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/docker
+
+
+
+
+
+## [0.34.59](https://github.com/cube-js/cube.js/compare/v0.34.58...v0.34.59) (2024-02-28)
+
+**Note:** Version bump only for package @cubejs-backend/docker
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube.js/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/docker
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube.js/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/docker
+
+
+
+
+
## [0.34.56](https://github.com/cube-js/cube.js/compare/v0.34.55...v0.34.56) (2024-02-20)
**Note:** Version bump only for package @cubejs-backend/docker
diff --git a/packages/cubejs-docker/package.json b/packages/cubejs-docker/package.json
index 4cb42076ef..9a0ab1ac1e 100644
--- a/packages/cubejs-docker/package.json
+++ b/packages/cubejs-docker/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-backend/docker",
- "version": "0.34.56",
+ "version": "0.34.60",
"description": "Cube.js In Docker (virtual package)",
"author": "Cube Dev, Inc.",
"license": "Apache-2.0",
@@ -9,33 +9,33 @@
"node": "^14.0.0 || ^16.0.0 || >=17.0.0"
},
"dependencies": {
- "@cubejs-backend/athena-driver": "^0.34.56",
- "@cubejs-backend/bigquery-driver": "^0.34.56",
- "@cubejs-backend/clickhouse-driver": "^0.34.56",
- "@cubejs-backend/crate-driver": "^0.34.56",
- "@cubejs-backend/databricks-jdbc-driver": "^0.34.56",
- "@cubejs-backend/dbt-schema-extension": "^0.34.56",
- "@cubejs-backend/dremio-driver": "^0.34.56",
- "@cubejs-backend/druid-driver": "^0.34.56",
- "@cubejs-backend/duckdb-driver": "^0.34.56",
- "@cubejs-backend/elasticsearch-driver": "^0.34.55",
- "@cubejs-backend/firebolt-driver": "^0.34.56",
- "@cubejs-backend/hive-driver": "^0.34.55",
- "@cubejs-backend/ksql-driver": "^0.34.56",
- "@cubejs-backend/materialize-driver": "^0.34.56",
- "@cubejs-backend/mongobi-driver": "^0.34.55",
- "@cubejs-backend/mssql-driver": "^0.34.55",
- "@cubejs-backend/mysql-driver": "^0.34.56",
- "@cubejs-backend/oracle-driver": "^0.34.55",
- "@cubejs-backend/postgres-driver": "^0.34.56",
- "@cubejs-backend/prestodb-driver": "^0.34.55",
- "@cubejs-backend/questdb-driver": "^0.34.56",
- "@cubejs-backend/redshift-driver": "^0.34.56",
- "@cubejs-backend/server": "^0.34.56",
- "@cubejs-backend/snowflake-driver": "^0.34.55",
- "@cubejs-backend/sqlite-driver": "^0.34.55",
- "@cubejs-backend/trino-driver": "^0.34.56",
- "cubejs-cli": "^0.34.56",
+ "@cubejs-backend/athena-driver": "^0.34.60",
+ "@cubejs-backend/bigquery-driver": "^0.34.60",
+ "@cubejs-backend/clickhouse-driver": "^0.34.60",
+ "@cubejs-backend/crate-driver": "^0.34.60",
+ "@cubejs-backend/databricks-jdbc-driver": "^0.34.60",
+ "@cubejs-backend/dbt-schema-extension": "^0.34.60",
+ "@cubejs-backend/dremio-driver": "^0.34.60",
+ "@cubejs-backend/druid-driver": "^0.34.60",
+ "@cubejs-backend/duckdb-driver": "^0.34.60",
+ "@cubejs-backend/elasticsearch-driver": "^0.34.60",
+ "@cubejs-backend/firebolt-driver": "^0.34.60",
+ "@cubejs-backend/hive-driver": "^0.34.60",
+ "@cubejs-backend/ksql-driver": "^0.34.60",
+ "@cubejs-backend/materialize-driver": "^0.34.60",
+ "@cubejs-backend/mongobi-driver": "^0.34.60",
+ "@cubejs-backend/mssql-driver": "^0.34.60",
+ "@cubejs-backend/mysql-driver": "^0.34.60",
+ "@cubejs-backend/oracle-driver": "^0.34.60",
+ "@cubejs-backend/postgres-driver": "^0.34.60",
+ "@cubejs-backend/prestodb-driver": "^0.34.60",
+ "@cubejs-backend/questdb-driver": "^0.34.60",
+ "@cubejs-backend/redshift-driver": "^0.34.60",
+ "@cubejs-backend/server": "^0.34.60",
+ "@cubejs-backend/snowflake-driver": "^0.34.60",
+ "@cubejs-backend/sqlite-driver": "^0.34.60",
+ "@cubejs-backend/trino-driver": "^0.34.60",
+ "cubejs-cli": "^0.34.60",
"typescript": "~5.2.2"
},
"resolutions": {
diff --git a/packages/cubejs-dremio-driver/CHANGELOG.md b/packages/cubejs-dremio-driver/CHANGELOG.md
index c1477e44c8..9162ce61fd 100644
--- a/packages/cubejs-dremio-driver/CHANGELOG.md
+++ b/packages/cubejs-dremio-driver/CHANGELOG.md
@@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/dremio-driver
+
+
+
+
+
+## [0.34.59](https://github.com/cube-js/cube/compare/v0.34.58...v0.34.59) (2024-02-28)
+
+**Note:** Version bump only for package @cubejs-backend/dremio-driver
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/dremio-driver
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/dremio-driver
+
+
+
+
+
## [0.34.56](https://github.com/cube-js/cube/compare/v0.34.55...v0.34.56) (2024-02-20)
**Note:** Version bump only for package @cubejs-backend/dremio-driver
diff --git a/packages/cubejs-dremio-driver/package.json b/packages/cubejs-dremio-driver/package.json
index 0f7025fbf9..ed7a6dcf69 100644
--- a/packages/cubejs-dremio-driver/package.json
+++ b/packages/cubejs-dremio-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/dremio-driver",
"description": "Cube.js Dremio driver",
"author": "Cube Dev, Inc.",
- "version": "0.34.56",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -17,9 +17,9 @@
"lint:fix": "eslint driver/*.js"
},
"dependencies": {
- "@cubejs-backend/base-driver": "^0.34.55",
- "@cubejs-backend/schema-compiler": "^0.34.56",
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/base-driver": "^0.34.60",
+ "@cubejs-backend/schema-compiler": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60",
"axios": "^0.21.1",
"moment-timezone": "^0.5.31",
"sqlstring": "^2.3.1"
diff --git a/packages/cubejs-druid-driver/CHANGELOG.md b/packages/cubejs-druid-driver/CHANGELOG.md
index 93b0d00ed5..7844ac47d2 100644
--- a/packages/cubejs-druid-driver/CHANGELOG.md
+++ b/packages/cubejs-druid-driver/CHANGELOG.md
@@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/druid-driver
+
+
+
+
+
+## [0.34.59](https://github.com/cube-js/cube/compare/v0.34.58...v0.34.59) (2024-02-28)
+
+**Note:** Version bump only for package @cubejs-backend/druid-driver
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/druid-driver
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/druid-driver
+
+
+
+
+
## [0.34.56](https://github.com/cube-js/cube/compare/v0.34.55...v0.34.56) (2024-02-20)
**Note:** Version bump only for package @cubejs-backend/druid-driver
diff --git a/packages/cubejs-druid-driver/package.json b/packages/cubejs-druid-driver/package.json
index bfedf78142..4a773af1e9 100644
--- a/packages/cubejs-druid-driver/package.json
+++ b/packages/cubejs-druid-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/druid-driver",
"description": "Cube.js Druid database driver",
"author": "Cube Dev, Inc.",
- "version": "0.34.56",
+ "version": "0.34.60",
"license": "Apache-2.0",
"repository": {
"type": "git",
@@ -28,9 +28,9 @@
"dist/src/*"
],
"dependencies": {
- "@cubejs-backend/base-driver": "^0.34.55",
- "@cubejs-backend/schema-compiler": "^0.34.56",
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/base-driver": "^0.34.60",
+ "@cubejs-backend/schema-compiler": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60",
"axios": "^0.21.1",
"moment-timezone": "^0.5.31"
},
diff --git a/packages/cubejs-duckdb-driver/CHANGELOG.md b/packages/cubejs-duckdb-driver/CHANGELOG.md
index 315a423904..65d3549222 100644
--- a/packages/cubejs-duckdb-driver/CHANGELOG.md
+++ b/packages/cubejs-duckdb-driver/CHANGELOG.md
@@ -3,6 +3,41 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/duckdb-driver
+
+
+
+
+
+## [0.34.59](https://github.com/cube-js/cube/compare/v0.34.58...v0.34.59) (2024-02-28)
+
+**Note:** Version bump only for package @cubejs-backend/duckdb-driver
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/duckdb-driver
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+
+### Features
+
+* **duckdb-driver:** Add support for local fs duckdb database path ([#7799](https://github.com/cube-js/cube/issues/7799)) ([77cc883](https://github.com/cube-js/cube/commit/77cc883a3d73d37730a82ecf9128b8929abb2ca3))
+
+
+
+
+
## [0.34.56](https://github.com/cube-js/cube/compare/v0.34.55...v0.34.56) (2024-02-20)
**Note:** Version bump only for package @cubejs-backend/duckdb-driver
diff --git a/packages/cubejs-duckdb-driver/package.json b/packages/cubejs-duckdb-driver/package.json
index 5934c74103..df3813814b 100644
--- a/packages/cubejs-duckdb-driver/package.json
+++ b/packages/cubejs-duckdb-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/duckdb-driver",
"description": "Cube DuckDB database driver",
"author": "Cube Dev, Inc.",
- "version": "0.34.56",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -27,15 +27,15 @@
"lint:fix": "eslint --fix src/* --ext .ts"
},
"dependencies": {
- "@cubejs-backend/base-driver": "^0.34.55",
- "@cubejs-backend/schema-compiler": "^0.34.56",
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/base-driver": "^0.34.60",
+ "@cubejs-backend/schema-compiler": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60",
"duckdb": "^0.9.2"
},
"license": "Apache-2.0",
"devDependencies": {
"@cubejs-backend/linter": "^0.34.25",
- "@cubejs-backend/testing-shared": "^0.34.56",
+ "@cubejs-backend/testing-shared": "^0.34.60",
"@types/jest": "^27",
"@types/node": "^14",
"jest": "^27",
diff --git a/packages/cubejs-duckdb-driver/src/DuckDBDriver.ts b/packages/cubejs-duckdb-driver/src/DuckDBDriver.ts
index 76d3889d0e..9eeba91b27 100644
--- a/packages/cubejs-duckdb-driver/src/DuckDBDriver.ts
+++ b/packages/cubejs-duckdb-driver/src/DuckDBDriver.ts
@@ -57,13 +57,26 @@ export class DuckDBDriver extends BaseDriver implements DriverInterface {
protected async init(): Promise {
const token = getEnv('duckdbMotherDuckToken', this.config);
+ const dbPath = getEnv('duckdbDatabasePath', this.config);
+
+ // Determine the database URL based on the provided db_path or token
+ let dbUrl: string;
+ if (dbPath) {
+ dbUrl = dbPath;
+ } else if (token) {
+ dbUrl = `md:?motherduck_token=${token}&custom_user_agent=Cube/${version}`;
+ } else {
+ dbUrl = ':memory:';
+ }
+
+ let dbOptions;
+ if (token) {
+ dbOptions = { custom_user_agent: `Cube/${version}` };
+ }
+
+ // Create a new Database instance with the determined URL and custom user agent
+ const db = new Database(dbUrl, dbOptions);
- const db = new Database(
- token ? `md:?motherduck_token=${token}&custom_user_agent=Cube/${version}` : ':memory:',
- {
- custom_user_agent: `Cube/${version}`,
- }
- );
// Under the hood all methods of Database uses internal default connection, but there is no way to expose it
const defaultConnection = db.connect();
const execAsync: (sql: string, ...params: any[]) => Promise = promisify(defaultConnection.exec).bind(defaultConnection) as any;
diff --git a/packages/cubejs-elasticsearch-driver/CHANGELOG.md b/packages/cubejs-elasticsearch-driver/CHANGELOG.md
index 7565ff4ee3..ca9899f20d 100644
--- a/packages/cubejs-elasticsearch-driver/CHANGELOG.md
+++ b/packages/cubejs-elasticsearch-driver/CHANGELOG.md
@@ -3,6 +3,30 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/elasticsearch-driver
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/elasticsearch-driver
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/elasticsearch-driver
+
+
+
+
+
## [0.34.55](https://github.com/cube-js/cube/compare/v0.34.54...v0.34.55) (2024-02-15)
**Note:** Version bump only for package @cubejs-backend/elasticsearch-driver
diff --git a/packages/cubejs-elasticsearch-driver/package.json b/packages/cubejs-elasticsearch-driver/package.json
index b84fdb557d..17f9405677 100644
--- a/packages/cubejs-elasticsearch-driver/package.json
+++ b/packages/cubejs-elasticsearch-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/elasticsearch-driver",
"description": "Cube.js elasticsearch database driver",
"author": "Cube Dev, Inc.",
- "version": "0.34.55",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -23,8 +23,8 @@
"driver"
],
"dependencies": {
- "@cubejs-backend/base-driver": "^0.34.55",
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/base-driver": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60",
"@elastic/elasticsearch": "7.12.0",
"sqlstring": "^2.3.1"
},
diff --git a/packages/cubejs-firebolt-driver/CHANGELOG.md b/packages/cubejs-firebolt-driver/CHANGELOG.md
index b8da7ba81e..4c7bd3b68e 100644
--- a/packages/cubejs-firebolt-driver/CHANGELOG.md
+++ b/packages/cubejs-firebolt-driver/CHANGELOG.md
@@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/firebolt-driver
+
+
+
+
+
+## [0.34.59](https://github.com/cube-js/cube/compare/v0.34.58...v0.34.59) (2024-02-28)
+
+**Note:** Version bump only for package @cubejs-backend/firebolt-driver
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/firebolt-driver
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/firebolt-driver
+
+
+
+
+
## [0.34.56](https://github.com/cube-js/cube/compare/v0.34.55...v0.34.56) (2024-02-20)
**Note:** Version bump only for package @cubejs-backend/firebolt-driver
diff --git a/packages/cubejs-firebolt-driver/package.json b/packages/cubejs-firebolt-driver/package.json
index 4b7cc486f5..a82465189b 100644
--- a/packages/cubejs-firebolt-driver/package.json
+++ b/packages/cubejs-firebolt-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/firebolt-driver",
"description": "Cube.js Firebolt database driver",
"author": "Cube Dev, Inc.",
- "version": "0.34.56",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -28,15 +28,15 @@
"lint:fix": "eslint --fix src/* --ext .ts"
},
"dependencies": {
- "@cubejs-backend/base-driver": "^0.34.55",
- "@cubejs-backend/schema-compiler": "^0.34.56",
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/base-driver": "^0.34.60",
+ "@cubejs-backend/schema-compiler": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60",
"firebolt-sdk": "^0.1.14"
},
"license": "Apache-2.0",
"devDependencies": {
"@cubejs-backend/linter": "^0.34.25",
- "@cubejs-backend/testing-shared": "^0.34.56",
+ "@cubejs-backend/testing-shared": "^0.34.60",
"typescript": "~5.2.2"
},
"publishConfig": {
diff --git a/packages/cubejs-hive-driver/CHANGELOG.md b/packages/cubejs-hive-driver/CHANGELOG.md
index 1b2ee1cddd..07788ae01a 100644
--- a/packages/cubejs-hive-driver/CHANGELOG.md
+++ b/packages/cubejs-hive-driver/CHANGELOG.md
@@ -3,6 +3,30 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/hive-driver
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/hive-driver
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/hive-driver
+
+
+
+
+
## [0.34.55](https://github.com/cube-js/cube/compare/v0.34.54...v0.34.55) (2024-02-15)
**Note:** Version bump only for package @cubejs-backend/hive-driver
diff --git a/packages/cubejs-hive-driver/package.json b/packages/cubejs-hive-driver/package.json
index 136a2f2e09..ad4794579f 100644
--- a/packages/cubejs-hive-driver/package.json
+++ b/packages/cubejs-hive-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/hive-driver",
"description": "Cube.js Hive database driver",
"author": "Cube Dev, Inc.",
- "version": "0.34.55",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -17,8 +17,8 @@
"lint:fix": "eslint --fix src/* --ext .ts"
},
"dependencies": {
- "@cubejs-backend/base-driver": "^0.34.55",
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/base-driver": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60",
"generic-pool": "^3.6.0",
"jshs2": "^0.4.4",
"sasl-plain": "^0.1.0",
diff --git a/packages/cubejs-jdbc-driver/CHANGELOG.md b/packages/cubejs-jdbc-driver/CHANGELOG.md
index 2f58ab19a5..7e7e45fe44 100644
--- a/packages/cubejs-jdbc-driver/CHANGELOG.md
+++ b/packages/cubejs-jdbc-driver/CHANGELOG.md
@@ -3,6 +3,30 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/jdbc-driver
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/jdbc-driver
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/jdbc-driver
+
+
+
+
+
## [0.34.55](https://github.com/cube-js/cube/compare/v0.34.54...v0.34.55) (2024-02-15)
**Note:** Version bump only for package @cubejs-backend/jdbc-driver
diff --git a/packages/cubejs-jdbc-driver/package.json b/packages/cubejs-jdbc-driver/package.json
index 36dfaeb9de..6016b0eccb 100644
--- a/packages/cubejs-jdbc-driver/package.json
+++ b/packages/cubejs-jdbc-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/jdbc-driver",
"description": "Cube.js JDBC database driver",
"author": "Cube Dev, Inc.",
- "version": "0.34.55",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -25,7 +25,7 @@
"index.js"
],
"dependencies": {
- "@cubejs-backend/base-driver": "^0.34.55",
+ "@cubejs-backend/base-driver": "^0.34.60",
"generic-pool": "^3.1.7",
"node-java-maven": "^0.1.2",
"sqlstring": "^2.3.0"
@@ -43,7 +43,7 @@
},
"devDependencies": {
"@cubejs-backend/linter": "^0.34.25",
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/shared": "^0.34.60",
"@types/generic-pool": "^3.1.9",
"@types/node": "^14",
"@types/sqlstring": "^2.3.0",
diff --git a/packages/cubejs-ksql-driver/CHANGELOG.md b/packages/cubejs-ksql-driver/CHANGELOG.md
index aef7423515..68a9f2e5c0 100644
--- a/packages/cubejs-ksql-driver/CHANGELOG.md
+++ b/packages/cubejs-ksql-driver/CHANGELOG.md
@@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/ksql-driver
+
+
+
+
+
+## [0.34.59](https://github.com/cube-js/cube/compare/v0.34.58...v0.34.59) (2024-02-28)
+
+**Note:** Version bump only for package @cubejs-backend/ksql-driver
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/ksql-driver
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/ksql-driver
+
+
+
+
+
## [0.34.56](https://github.com/cube-js/cube/compare/v0.34.55...v0.34.56) (2024-02-20)
**Note:** Version bump only for package @cubejs-backend/ksql-driver
diff --git a/packages/cubejs-ksql-driver/package.json b/packages/cubejs-ksql-driver/package.json
index c7de9f27eb..1ced64bd2f 100644
--- a/packages/cubejs-ksql-driver/package.json
+++ b/packages/cubejs-ksql-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/ksql-driver",
"description": "Cube.js ksql database driver",
"author": "Cube Dev, Inc.",
- "version": "0.34.56",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -25,9 +25,9 @@
"lint:fix": "eslint --fix src/* --ext .ts"
},
"dependencies": {
- "@cubejs-backend/base-driver": "^0.34.55",
- "@cubejs-backend/schema-compiler": "^0.34.56",
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/base-driver": "^0.34.60",
+ "@cubejs-backend/schema-compiler": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60",
"async-mutex": "0.3.2",
"axios": "^0.21.1",
"kafkajs": "^2.2.3",
diff --git a/packages/cubejs-materialize-driver/CHANGELOG.md b/packages/cubejs-materialize-driver/CHANGELOG.md
index d4ce6ca3c0..337de68629 100644
--- a/packages/cubejs-materialize-driver/CHANGELOG.md
+++ b/packages/cubejs-materialize-driver/CHANGELOG.md
@@ -3,6 +3,41 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/materialize-driver
+
+
+
+
+
+## [0.34.59](https://github.com/cube-js/cube/compare/v0.34.58...v0.34.59) (2024-02-28)
+
+**Note:** Version bump only for package @cubejs-backend/materialize-driver
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+
+### Features
+
+* **materialize-driver:** Add cluster option to Materialize driver ([#7773](https://github.com/cube-js/cube/issues/7773)) Thanks [@bobbyiliev](https://github.com/bobbyiliev)! ([917004e](https://github.com/cube-js/cube/commit/917004ebccfeb6509a08e5b9b51e1ae8542cf0af))
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/materialize-driver
+
+
+
+
+
## [0.34.56](https://github.com/cube-js/cube/compare/v0.34.55...v0.34.56) (2024-02-20)
**Note:** Version bump only for package @cubejs-backend/materialize-driver
diff --git a/packages/cubejs-materialize-driver/README.md b/packages/cubejs-materialize-driver/README.md
index 91c20ca6aa..3e457811d0 100644
--- a/packages/cubejs-materialize-driver/README.md
+++ b/packages/cubejs-materialize-driver/README.md
@@ -11,7 +11,7 @@ Pure Javascript Materialize driver. Based on pg driver for PostgreSQL.
## Support
-This driver has been contributed by [Joaquin Colacci](https://github.com/joacoc). This package is **community supported** and should be used at your own risk.
+This driver has been contributed by [Joaquin Colacci](https://github.com/joacoc) and is currently maintained by [Materialize](https://www.materialize.com/s/chat). This package is **community supported** and should be used at your own risk.
While the Cube Dev team is happy to review and accept future community contributions, we don't have active plans for further development. This includes bug fixes unless they affect different parts of Cube.js. **We're looking for maintainers for this package.** If you'd like to become a maintainer, please contact us in Cube.js Slack.
diff --git a/packages/cubejs-materialize-driver/package.json b/packages/cubejs-materialize-driver/package.json
index e9bd3d7bf3..c437a2b354 100644
--- a/packages/cubejs-materialize-driver/package.json
+++ b/packages/cubejs-materialize-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/materialize-driver",
"description": "Cube.js Materialize database driver",
"author": "Cube Dev, Inc.",
- "version": "0.34.56",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -27,9 +27,9 @@
"lint:fix": "eslint --fix src/* --ext .ts"
},
"dependencies": {
- "@cubejs-backend/base-driver": "^0.34.55",
- "@cubejs-backend/postgres-driver": "^0.34.56",
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/base-driver": "^0.34.60",
+ "@cubejs-backend/postgres-driver": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60",
"@types/pg": "^8.6.0",
"pg": "^8.6.0",
"ramda": "0.27.2",
@@ -38,7 +38,7 @@
"license": "Apache-2.0",
"devDependencies": {
"@cubejs-backend/linter": "^0.34.25",
- "@cubejs-backend/testing": "^0.34.56",
+ "@cubejs-backend/testing": "^0.34.60",
"typescript": "~5.2.2"
},
"publishConfig": {
diff --git a/packages/cubejs-materialize-driver/src/MaterializeDriver.ts b/packages/cubejs-materialize-driver/src/MaterializeDriver.ts
index 68777ecc44..5f8a889f38 100644
--- a/packages/cubejs-materialize-driver/src/MaterializeDriver.ts
+++ b/packages/cubejs-materialize-driver/src/MaterializeDriver.ts
@@ -59,8 +59,35 @@ export class MaterializeDriver extends PostgresDriver {
* request before determining it as not valid. Default - 10000 ms.
*/
testConnectionTimeout?: number,
+
+ /**
+ * Optional cluster name to set for the connection.
+ */
+ cluster?: string,
+
+ /**
+ * SSL is enabled by default. Set to false to disable.
+ */
+ ssl?: boolean | { rejectUnauthorized: boolean },
+
+ /**
+ * Application name to set for the connection.
+ */
+ application_name?: string,
} = {},
) {
+ // Enable SSL by default if not set explicitly to false
+ const sslEnv = process.env.CUBEJS_DB_SSL;
+ if (sslEnv === 'false') {
+ options.ssl = false;
+ } else if (sslEnv === 'true') {
+ options.ssl = { rejectUnauthorized: true };
+ } else if (options.ssl === undefined) {
+ options.ssl = true;
+ }
+ // Set application name to 'cubejs-materialize-driver' by default
+ options.application_name = options.application_name || 'cubejs-materialize-driver';
+
super(options);
}
@@ -69,6 +96,11 @@ export class MaterializeDriver extends PostgresDriver {
) {
await conn.query(`SET TIME ZONE '${this.config.storeTimezone || 'UTC'}'`);
// Support for statement_timeout is still pending. https://github.com/MaterializeInc/materialize/issues/10390
+
+ // Set cluster to the CUBEJS_DB_MATERIALIZE_CLUSTER env variable if it exists
+ if (process.env.CUBEJS_DB_MATERIALIZE_CLUSTER) {
+ await conn.query(`SET CLUSTER TO ${process.env.CUBEJS_DB_MATERIALIZE_CLUSTER}`);
+ }
}
protected async loadUserDefinedTypes(): Promise {
diff --git a/packages/cubejs-materialize-driver/test/MaterializeDriver.test.ts b/packages/cubejs-materialize-driver/test/MaterializeDriver.test.ts
index ea54b8e120..2480b8a154 100644
--- a/packages/cubejs-materialize-driver/test/MaterializeDriver.test.ts
+++ b/packages/cubejs-materialize-driver/test/MaterializeDriver.test.ts
@@ -31,6 +31,8 @@ describe('MaterializeDriver', () => {
user: 'materialize',
password: 'materialize',
database: 'materialize',
+ cluster: 'quickstart',
+ ssl: false,
});
await driver.query('CREATE SCHEMA IF NOT EXISTS test;', []);
});
@@ -71,8 +73,8 @@ describe('MaterializeDriver', () => {
test('schema detection', async () => {
await Promise.all([
driver.query('CREATE TABLE A (a INT, b BIGINT, c TEXT, d DOUBLE, e FLOAT);', []),
- driver.query('CREATE VIEW V AS SELECT * FROM mz_views;', []),
- driver.query('CREATE MATERIALIZED VIEW MV AS SELECT * FROM mz_views;', []),
+ driver.query('CREATE VIEW V AS SELECT * FROM A;', []),
+ driver.query('CREATE MATERIALIZED VIEW MV AS SELECT * FROM A;', []),
]);
const tablesSchemaData = await driver.tablesSchema();
@@ -149,4 +151,13 @@ describe('MaterializeDriver', () => {
);
}
});
+
+ test('cluster', async () => {
+ const data = await driver.query(`SHOW CLUSTER;`, []);
+ expect(data).toEqual([
+ {
+ 'cluster': 'quickstart',
+ }]);
+ });
+
});
diff --git a/packages/cubejs-mongobi-driver/CHANGELOG.md b/packages/cubejs-mongobi-driver/CHANGELOG.md
index 2dfda834ff..e23d31b451 100644
--- a/packages/cubejs-mongobi-driver/CHANGELOG.md
+++ b/packages/cubejs-mongobi-driver/CHANGELOG.md
@@ -3,6 +3,30 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/mongobi-driver
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/mongobi-driver
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/mongobi-driver
+
+
+
+
+
## [0.34.55](https://github.com/cube-js/cube/compare/v0.34.54...v0.34.55) (2024-02-15)
**Note:** Version bump only for package @cubejs-backend/mongobi-driver
diff --git a/packages/cubejs-mongobi-driver/package.json b/packages/cubejs-mongobi-driver/package.json
index 5abde0d68b..a35b30eb6b 100644
--- a/packages/cubejs-mongobi-driver/package.json
+++ b/packages/cubejs-mongobi-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/mongobi-driver",
"description": "Cube.js MongoBI driver",
"author": "krunalsabnis@gmail.com",
- "version": "0.34.55",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -27,8 +27,8 @@
"integration:mongobi": "jest dist/test"
},
"dependencies": {
- "@cubejs-backend/base-driver": "^0.34.55",
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/base-driver": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60",
"@types/node": "^14",
"generic-pool": "^3.6.0",
"moment": "^2.29.1",
diff --git a/packages/cubejs-mssql-driver/CHANGELOG.md b/packages/cubejs-mssql-driver/CHANGELOG.md
index f0ad7ce609..d0c198228e 100644
--- a/packages/cubejs-mssql-driver/CHANGELOG.md
+++ b/packages/cubejs-mssql-driver/CHANGELOG.md
@@ -3,6 +3,30 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/mssql-driver
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/mssql-driver
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/mssql-driver
+
+
+
+
+
## [0.34.55](https://github.com/cube-js/cube/compare/v0.34.54...v0.34.55) (2024-02-15)
**Note:** Version bump only for package @cubejs-backend/mssql-driver
diff --git a/packages/cubejs-mssql-driver/package.json b/packages/cubejs-mssql-driver/package.json
index 88511c9a6f..7bb85fd1b2 100644
--- a/packages/cubejs-mssql-driver/package.json
+++ b/packages/cubejs-mssql-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/mssql-driver",
"description": "Cube.js MS SQL database driver",
"author": "Cube Dev, Inc.",
- "version": "0.34.55",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -13,7 +13,7 @@
},
"main": "driver/MSSqlDriver.js",
"dependencies": {
- "@cubejs-backend/base-driver": "^0.34.55",
+ "@cubejs-backend/base-driver": "^0.34.60",
"mssql": "^6.1.0"
},
"jest": {
diff --git a/packages/cubejs-mysql-aurora-serverless-driver/CHANGELOG.md b/packages/cubejs-mysql-aurora-serverless-driver/CHANGELOG.md
index ff3b48555c..7f61fbcccc 100644
--- a/packages/cubejs-mysql-aurora-serverless-driver/CHANGELOG.md
+++ b/packages/cubejs-mysql-aurora-serverless-driver/CHANGELOG.md
@@ -3,6 +3,30 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/mysql-aurora-serverless-driver
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/mysql-aurora-serverless-driver
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/mysql-aurora-serverless-driver
+
+
+
+
+
## [0.34.55](https://github.com/cube-js/cube/compare/v0.34.54...v0.34.55) (2024-02-15)
**Note:** Version bump only for package @cubejs-backend/mysql-aurora-serverless-driver
diff --git a/packages/cubejs-mysql-aurora-serverless-driver/package.json b/packages/cubejs-mysql-aurora-serverless-driver/package.json
index 7603822b1c..4def5e9e4f 100644
--- a/packages/cubejs-mysql-aurora-serverless-driver/package.json
+++ b/packages/cubejs-mysql-aurora-serverless-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/mysql-aurora-serverless-driver",
"description": "Cube.js Aurora Serverless Mysql database driver",
"author": "Cube Dev, Inc.",
- "version": "0.34.55",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -21,8 +21,8 @@
"lint": "eslint driver/*.js test/*.js"
},
"dependencies": {
- "@cubejs-backend/base-driver": "^0.34.55",
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/base-driver": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60",
"@types/mysql": "^2.15.15",
"aws-sdk": "^2.787.0",
"data-api-client": "^1.1.0"
diff --git a/packages/cubejs-mysql-driver/CHANGELOG.md b/packages/cubejs-mysql-driver/CHANGELOG.md
index ac4de2eb08..7b3f9f9d9f 100644
--- a/packages/cubejs-mysql-driver/CHANGELOG.md
+++ b/packages/cubejs-mysql-driver/CHANGELOG.md
@@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/mysql-driver
+
+
+
+
+
+## [0.34.59](https://github.com/cube-js/cube/compare/v0.34.58...v0.34.59) (2024-02-28)
+
+**Note:** Version bump only for package @cubejs-backend/mysql-driver
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/mysql-driver
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/mysql-driver
+
+
+
+
+
## [0.34.56](https://github.com/cube-js/cube/compare/v0.34.55...v0.34.56) (2024-02-20)
**Note:** Version bump only for package @cubejs-backend/mysql-driver
diff --git a/packages/cubejs-mysql-driver/package.json b/packages/cubejs-mysql-driver/package.json
index c9678465dc..f10d5e07ae 100644
--- a/packages/cubejs-mysql-driver/package.json
+++ b/packages/cubejs-mysql-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/mysql-driver",
"description": "Cube.js Mysql database driver",
"author": "Cube Dev, Inc.",
- "version": "0.34.56",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -27,15 +27,15 @@
"lint:fix": "eslint --fix src/* test/* --ext .ts,.js"
},
"dependencies": {
- "@cubejs-backend/base-driver": "^0.34.55",
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/base-driver": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60",
"@types/mysql": "^2.15.21",
"generic-pool": "^3.6.0",
"mysql": "^2.18.1"
},
"devDependencies": {
"@cubejs-backend/linter": "^0.34.25",
- "@cubejs-backend/testing-shared": "^0.34.56",
+ "@cubejs-backend/testing-shared": "^0.34.60",
"@types/generic-pool": "^3.1.9",
"@types/jest": "^27",
"jest": "^27",
diff --git a/packages/cubejs-oracle-driver/CHANGELOG.md b/packages/cubejs-oracle-driver/CHANGELOG.md
index 45d6d7a476..120ce32eb7 100644
--- a/packages/cubejs-oracle-driver/CHANGELOG.md
+++ b/packages/cubejs-oracle-driver/CHANGELOG.md
@@ -3,6 +3,30 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/oracle-driver
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/oracle-driver
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/oracle-driver
+
+
+
+
+
## [0.34.55](https://github.com/cube-js/cube/compare/v0.34.54...v0.34.55) (2024-02-15)
**Note:** Version bump only for package @cubejs-backend/oracle-driver
diff --git a/packages/cubejs-oracle-driver/package.json b/packages/cubejs-oracle-driver/package.json
index 6d03e1d530..e2057396f8 100644
--- a/packages/cubejs-oracle-driver/package.json
+++ b/packages/cubejs-oracle-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/oracle-driver",
"description": "Cube.js oracle database driver",
"author": "Cube Dev, Inc.",
- "version": "0.34.55",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -13,7 +13,7 @@
},
"main": "driver/OracleDriver.js",
"dependencies": {
- "@cubejs-backend/base-driver": "^0.34.55",
+ "@cubejs-backend/base-driver": "^0.34.60",
"ramda": "^0.27.0"
},
"optionalDependencies": {
diff --git a/packages/cubejs-playground/CHANGELOG.md b/packages/cubejs-playground/CHANGELOG.md
index 2e04c3ecc8..f38e034148 100644
--- a/packages/cubejs-playground/CHANGELOG.md
+++ b/packages/cubejs-playground/CHANGELOG.md
@@ -3,6 +3,25 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-client/playground
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+
+### Features
+
+* **materialize-driver:** Add cluster option to Materialize driver ([#7773](https://github.com/cube-js/cube/issues/7773)) Thanks [@bobbyiliev](https://github.com/bobbyiliev)! ([917004e](https://github.com/cube-js/cube/commit/917004ebccfeb6509a08e5b9b51e1ae8542cf0af))
+
+
+
+
+
## [0.34.51](https://github.com/cube-js/cube/compare/v0.34.50...v0.34.51) (2024-02-11)
diff --git a/packages/cubejs-playground/package.json b/packages/cubejs-playground/package.json
index e5b8702379..6b998d41ef 100644
--- a/packages/cubejs-playground/package.json
+++ b/packages/cubejs-playground/package.json
@@ -1,7 +1,7 @@
{
"name": "@cubejs-client/playground",
"author": "Cube Dev, Inc.",
- "version": "0.34.51",
+ "version": "0.34.60",
"engines": {},
"repository": {
"type": "git",
@@ -61,8 +61,8 @@
"@ant-design/compatible": "^1.0.2",
"@ant-design/icons": "^4.7.0",
"@cube-dev/ui-kit": "0.30.0",
- "@cubejs-client/core": "^0.34.37",
- "@cubejs-client/react": "^0.34.46",
+ "@cubejs-client/core": "^0.34.60",
+ "@cubejs-client/react": "^0.34.60",
"@types/flexsearch": "^0.7.3",
"@types/node": "^14",
"@types/react": "^17.0.3",
diff --git a/packages/cubejs-playground/src/shared/env-vars-db-map.tsx b/packages/cubejs-playground/src/shared/env-vars-db-map.tsx
index d6ad469927..38464c5657 100644
--- a/packages/cubejs-playground/src/shared/env-vars-db-map.tsx
+++ b/packages/cubejs-playground/src/shared/env-vars-db-map.tsx
@@ -38,7 +38,6 @@ const envVarsDbMap = [
{ title: 'Hive/SparkSQL', driver: 'hive', logo: logoHive },
{ title: 'Oracle', driver: 'oracle', logo: logoOracle },
{ title: 'QuestDB', driver: 'questdb', logo: logoQuestdb },
- { title: 'Materialize', driver: 'materialize', logo: logoMaterialize },
{ title: 'Crate', driver: 'crate', logo: logoCrate },
],
settings: [...BASE_SERVER, DB_NAME, ...BASE_CRED],
@@ -119,6 +118,15 @@ Upload a service account JSON keyfile to connect to BigQuery.
Alternatively,
// { env: 'CUBEJS_DB_SSL_PASSPHRASE' }
],
},
+ {
+ databases: [{ title: 'Materialize', driver: 'materialize', logo: logoMaterialize },],
+ settings: [
+ ...BASE_SERVER,
+ ...BASE_CRED,
+ DB_NAME,
+ { env: 'CUBEJS_DB_MATERIALIZE_CLUSTER', title: 'Cluster' },
+ ],
+ },
{
databases: [
{ title: 'Snowflake', driver: 'snowflake', logo: logoSnowflake },
diff --git a/packages/cubejs-postgres-driver/CHANGELOG.md b/packages/cubejs-postgres-driver/CHANGELOG.md
index 447060ec7a..c31df0ac5f 100644
--- a/packages/cubejs-postgres-driver/CHANGELOG.md
+++ b/packages/cubejs-postgres-driver/CHANGELOG.md
@@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/postgres-driver
+
+
+
+
+
+## [0.34.59](https://github.com/cube-js/cube/compare/v0.34.58...v0.34.59) (2024-02-28)
+
+**Note:** Version bump only for package @cubejs-backend/postgres-driver
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/postgres-driver
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/postgres-driver
+
+
+
+
+
## [0.34.56](https://github.com/cube-js/cube/compare/v0.34.55...v0.34.56) (2024-02-20)
**Note:** Version bump only for package @cubejs-backend/postgres-driver
diff --git a/packages/cubejs-postgres-driver/package.json b/packages/cubejs-postgres-driver/package.json
index f25160d0a6..4e3a9ca5f8 100644
--- a/packages/cubejs-postgres-driver/package.json
+++ b/packages/cubejs-postgres-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/postgres-driver",
"description": "Cube.js Postgres database driver",
"author": "Cube Dev, Inc.",
- "version": "0.34.56",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -27,8 +27,8 @@
"lint:fix": "eslint --fix src/* --ext .ts"
},
"dependencies": {
- "@cubejs-backend/base-driver": "^0.34.55",
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/base-driver": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60",
"@types/pg": "^8.6.0",
"@types/pg-query-stream": "^1.0.3",
"moment": "^2.24.0",
@@ -38,7 +38,7 @@
"license": "Apache-2.0",
"devDependencies": {
"@cubejs-backend/linter": "^0.34.25",
- "@cubejs-backend/testing-shared": "^0.34.56",
+ "@cubejs-backend/testing-shared": "^0.34.60",
"testcontainers": "^8.4.0",
"typescript": "~5.2.2"
},
diff --git a/packages/cubejs-prestodb-driver/CHANGELOG.md b/packages/cubejs-prestodb-driver/CHANGELOG.md
index fe03970a7b..85880e6fdc 100644
--- a/packages/cubejs-prestodb-driver/CHANGELOG.md
+++ b/packages/cubejs-prestodb-driver/CHANGELOG.md
@@ -3,6 +3,30 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/prestodb-driver
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/prestodb-driver
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/prestodb-driver
+
+
+
+
+
## [0.34.55](https://github.com/cube-js/cube/compare/v0.34.54...v0.34.55) (2024-02-15)
**Note:** Version bump only for package @cubejs-backend/prestodb-driver
diff --git a/packages/cubejs-prestodb-driver/package.json b/packages/cubejs-prestodb-driver/package.json
index c40d93c05b..3f6bf6ce10 100644
--- a/packages/cubejs-prestodb-driver/package.json
+++ b/packages/cubejs-prestodb-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/prestodb-driver",
"description": "Cube.js Presto database driver",
"author": "Cube Dev, Inc.",
- "version": "0.34.55",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -27,8 +27,8 @@
"lint:fix": "eslint --fix src/* --ext .ts"
},
"dependencies": {
- "@cubejs-backend/base-driver": "^0.34.55",
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/base-driver": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60",
"presto-client": "^0.12.2",
"ramda": "^0.27.0",
"sqlstring": "^2.3.1"
diff --git a/packages/cubejs-query-orchestrator/CHANGELOG.md b/packages/cubejs-query-orchestrator/CHANGELOG.md
index 3158d51dcd..d8e3a33af5 100644
--- a/packages/cubejs-query-orchestrator/CHANGELOG.md
+++ b/packages/cubejs-query-orchestrator/CHANGELOG.md
@@ -3,6 +3,30 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/query-orchestrator
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/query-orchestrator
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/query-orchestrator
+
+
+
+
+
## [0.34.55](https://github.com/cube-js/cube/compare/v0.34.54...v0.34.55) (2024-02-15)
**Note:** Version bump only for package @cubejs-backend/query-orchestrator
diff --git a/packages/cubejs-query-orchestrator/package.json b/packages/cubejs-query-orchestrator/package.json
index 848c0f276d..1a85cb8fd0 100644
--- a/packages/cubejs-query-orchestrator/package.json
+++ b/packages/cubejs-query-orchestrator/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/query-orchestrator",
"description": "Cube.js Query Orchestrator and Cache",
"author": "Cube Dev, Inc.",
- "version": "0.34.55",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -30,9 +30,9 @@
"dist/src/*"
],
"dependencies": {
- "@cubejs-backend/base-driver": "^0.34.55",
- "@cubejs-backend/cubestore-driver": "^0.34.55",
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/base-driver": "^0.34.60",
+ "@cubejs-backend/cubestore-driver": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60",
"csv-write-stream": "^2.0.0",
"es5-ext": "0.10.53",
"generic-pool": "^3.7.1",
diff --git a/packages/cubejs-query-orchestrator/src/orchestrator/PreAggregations.ts b/packages/cubejs-query-orchestrator/src/orchestrator/PreAggregations.ts
index 687bc4345c..9bb13d81b7 100644
--- a/packages/cubejs-query-orchestrator/src/orchestrator/PreAggregations.ts
+++ b/packages/cubejs-query-orchestrator/src/orchestrator/PreAggregations.ts
@@ -1201,7 +1201,10 @@ export class PreAggregationLoader {
tableData = await this.getTableDataWithoutTempTable(client, table, saveCancelFn, queryOptions, capabilities);
}
- this.logger('Downloading external pre-aggregation completed', queryOptions);
+ this.logger('Downloading external pre-aggregation completed', {
+ ...queryOptions,
+ isUnloadSupported: await this.isUnloadSupported(capabilities, client)
+ });
return tableData;
} catch (error: any) {
@@ -1213,13 +1216,18 @@ export class PreAggregationLoader {
}
}
+ protected async isUnloadSupported(externalDriverCapabilities: DriverCapabilities, client: DriverInterface) {
+ const isUnloadSupported = externalDriverCapabilities.csvImport && client.unload && await client.isUnloadSupported(this.getUnloadOptions());
+ return isUnloadSupported;
+ }
+
/**
* prepares download data when temp table = true
*/
protected async getTableDataWithTempTable(client: DriverInterface, table: string, saveCancelFn: SaveCancelFn, queryOptions: QueryOptions, externalDriverCapabilities: DriverCapabilities) {
let tableData: DownloadTableData;
- if (externalDriverCapabilities.csvImport && client.unload && await client.isUnloadSupported(this.getUnloadOptions())) {
+ if (await this.isUnloadSupported(externalDriverCapabilities, client)) {
tableData = await saveCancelFn(
client.unload(table, this.getUnloadOptions()),
);
@@ -1257,7 +1265,7 @@ export class PreAggregationLoader {
Array.isArray(this.preAggregation.sql) ? this.preAggregation.sql : [this.preAggregation.sql, []];
let tableData: DownloadTableData;
- if (externalDriverCapabilities.csvImport && client.unload && await client.isUnloadSupported(this.getUnloadOptions())) {
+ if (await this.isUnloadSupported(externalDriverCapabilities, client)) {
return saveCancelFn(
client.unload(
table,
diff --git a/packages/cubejs-questdb-driver/CHANGELOG.md b/packages/cubejs-questdb-driver/CHANGELOG.md
index 1fca35618c..33fca94e20 100644
--- a/packages/cubejs-questdb-driver/CHANGELOG.md
+++ b/packages/cubejs-questdb-driver/CHANGELOG.md
@@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/questdb-driver
+
+
+
+
+
+## [0.34.59](https://github.com/cube-js/cube/compare/v0.34.58...v0.34.59) (2024-02-28)
+
+**Note:** Version bump only for package @cubejs-backend/questdb-driver
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/questdb-driver
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/questdb-driver
+
+
+
+
+
## [0.34.56](https://github.com/cube-js/cube/compare/v0.34.55...v0.34.56) (2024-02-20)
**Note:** Version bump only for package @cubejs-backend/questdb-driver
diff --git a/packages/cubejs-questdb-driver/package.json b/packages/cubejs-questdb-driver/package.json
index 28d15e9519..f95701b851 100644
--- a/packages/cubejs-questdb-driver/package.json
+++ b/packages/cubejs-questdb-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/questdb-driver",
"description": "Cube.js QuestDB database driver",
"author": "Cube Dev, Inc.",
- "version": "0.34.56",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -27,9 +27,9 @@
"lint:fix": "eslint --fix src/* --ext .ts"
},
"dependencies": {
- "@cubejs-backend/base-driver": "^0.34.55",
- "@cubejs-backend/schema-compiler": "^0.34.56",
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/base-driver": "^0.34.60",
+ "@cubejs-backend/schema-compiler": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60",
"@types/pg": "^8.6.0",
"moment": "^2.24.0",
"pg": "^8.7.0",
@@ -38,7 +38,7 @@
"license": "Apache-2.0",
"devDependencies": {
"@cubejs-backend/linter": "^0.34.25",
- "@cubejs-backend/testing-shared": "^0.34.56",
+ "@cubejs-backend/testing-shared": "^0.34.60",
"testcontainers": "^8.4.0",
"typescript": "~5.2.2"
},
diff --git a/packages/cubejs-redshift-driver/CHANGELOG.md b/packages/cubejs-redshift-driver/CHANGELOG.md
index 0079bd56ed..69be9bfb46 100644
--- a/packages/cubejs-redshift-driver/CHANGELOG.md
+++ b/packages/cubejs-redshift-driver/CHANGELOG.md
@@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/redshift-driver
+
+
+
+
+
+## [0.34.59](https://github.com/cube-js/cube/compare/v0.34.58...v0.34.59) (2024-02-28)
+
+**Note:** Version bump only for package @cubejs-backend/redshift-driver
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/redshift-driver
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/redshift-driver
+
+
+
+
+
## [0.34.56](https://github.com/cube-js/cube/compare/v0.34.55...v0.34.56) (2024-02-20)
**Note:** Version bump only for package @cubejs-backend/redshift-driver
diff --git a/packages/cubejs-redshift-driver/package.json b/packages/cubejs-redshift-driver/package.json
index 6086af0ff4..b3840d0e13 100644
--- a/packages/cubejs-redshift-driver/package.json
+++ b/packages/cubejs-redshift-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/redshift-driver",
"description": "Cube.js Redshift database driver",
"author": "Cube Dev, Inc.",
- "version": "0.34.56",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -27,9 +27,9 @@
"dependencies": {
"@aws-sdk/client-s3": "^3.17.0",
"@aws-sdk/s3-request-presigner": "^3.17.0",
- "@cubejs-backend/base-driver": "^0.34.55",
- "@cubejs-backend/postgres-driver": "^0.34.56",
- "@cubejs-backend/shared": "^0.34.55"
+ "@cubejs-backend/base-driver": "^0.34.60",
+ "@cubejs-backend/postgres-driver": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60"
},
"license": "Apache-2.0",
"devDependencies": {
diff --git a/packages/cubejs-schema-compiler/CHANGELOG.md b/packages/cubejs-schema-compiler/CHANGELOG.md
index 74d60b8bc9..999f22c860 100644
--- a/packages/cubejs-schema-compiler/CHANGELOG.md
+++ b/packages/cubejs-schema-compiler/CHANGELOG.md
@@ -3,6 +3,53 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+
+### Bug Fixes
+
+* **cubesql:** Incorrect CASE WHEN generated during ungrouped filtered count ([#7859](https://github.com/cube-js/cube/issues/7859)) ([f970937](https://github.com/cube-js/cube/commit/f9709376e5dadfbcbffe9a65dfa9f0ea16df7bab)), closes [#7858](https://github.com/cube-js/cube/issues/7858)
+* **cubesql:** Remove excessive limit on inner wrapped queries ([#7864](https://github.com/cube-js/cube/issues/7864)) ([b97268f](https://github.com/cube-js/cube/commit/b97268fe5caf55c5b7806c597b9f7b75410f6ba4))
+
+
+
+
+
+## [0.34.59](https://github.com/cube-js/cube/compare/v0.34.58...v0.34.59) (2024-02-28)
+
+
+### Bug Fixes
+
+* Ungrouped filtered count should contain `CASE WHEN` statement bu… ([#7853](https://github.com/cube-js/cube/issues/7853)) ([8c37a40](https://github.com/cube-js/cube/commit/8c37a407b9d8c8f97dab51c9e0e97067c91ff90e))
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/schema-compiler
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+
+### Bug Fixes
+
+* **cubesql:** `ungrouped` query can be routed to Cube Store ([#7810](https://github.com/cube-js/cube/issues/7810)) ([b122837](https://github.com/cube-js/cube/commit/b122837de9cd4fcaca4ddc0e7f85ff695de09483))
+
+
+### Features
+
+* **cubesql:** `WHERE` SQL push down ([#7808](https://github.com/cube-js/cube/issues/7808)) ([98b5709](https://github.com/cube-js/cube/commit/98b570946905586f16a502f83b0a1cf8e4aa92a6))
+
+
+
+
+
## [0.34.56](https://github.com/cube-js/cube/compare/v0.34.55...v0.34.56) (2024-02-20)
diff --git a/packages/cubejs-schema-compiler/package.json b/packages/cubejs-schema-compiler/package.json
index 69b0f41372..ce7fc86293 100644
--- a/packages/cubejs-schema-compiler/package.json
+++ b/packages/cubejs-schema-compiler/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/schema-compiler",
"description": "Cube schema compiler",
"author": "Cube Dev, Inc.",
- "version": "0.34.56",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -40,8 +40,8 @@
"@babel/standalone": "^7.12.10",
"@babel/traverse": "^7.12.10",
"@babel/types": "^7.12.12",
- "@cubejs-backend/native": "^0.34.56",
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/native": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60",
"antlr4ts": "0.5.0-alpha.4",
"camelcase": "^6.2.0",
"cron-parser": "^3.5.0",
@@ -58,9 +58,9 @@
"uuid": "^8.3.2"
},
"devDependencies": {
- "@apla/clickhouse": "^1.5.5",
+ "@cubejs-backend/apla-clickhouse": "^1.7.0",
"@cubejs-backend/linter": "^0.34.25",
- "@cubejs-backend/query-orchestrator": "^0.34.55",
+ "@cubejs-backend/query-orchestrator": "^0.34.60",
"@types/babel__code-frame": "^7.0.2",
"@types/babel__generator": "^7.6.2",
"@types/babel__parser": "^7.1.1",
diff --git a/packages/cubejs-schema-compiler/src/adapter/BaseQuery.js b/packages/cubejs-schema-compiler/src/adapter/BaseQuery.js
index c2b1fedc19..9355749c6f 100644
--- a/packages/cubejs-schema-compiler/src/adapter/BaseQuery.js
+++ b/packages/cubejs-schema-compiler/src/adapter/BaseQuery.js
@@ -539,7 +539,7 @@ export class BaseQuery {
}
externalPreAggregationQuery() {
- if (!this.options.preAggregationQuery && !this.options.disableExternalPreAggregations && this.externalQueryClass) {
+ if (!this.options.preAggregationQuery && !this.options.disableExternalPreAggregations && !this.ungrouped && this.externalQueryClass) {
const preAggregationForQuery = this.preAggregations.findPreAggregationForQuery();
if (preAggregationForQuery && preAggregationForQuery.preAggregation.external) {
return true;
@@ -558,7 +558,7 @@ export class BaseQuery {
* @returns {Array}
*/
buildSqlAndParams(exportAnnotatedSql) {
- if (!this.options.preAggregationQuery && !this.options.disableExternalPreAggregations && this.externalQueryClass) {
+ if (!this.options.preAggregationQuery && !this.options.disableExternalPreAggregations && !this.ungrouped && this.externalQueryClass) {
if (this.externalPreAggregationQuery()) { // TODO performance
return this.externalQuery().buildSqlAndParams(exportAnnotatedSql);
}
@@ -1196,10 +1196,12 @@ export class BaseQuery {
const sql = subQuery.evaluateSymbolSqlWithContext(() => subQuery.buildParamAnnotatedSql(), {
collectOriginalSqlPreAggregations
});
+ const onCondition = primaryKeys.map((pk) => `${subQueryAlias}.${this.newDimension(this.primaryKeyName(cubeName, pk)).aliasName()} = ${this.primaryKeySql(pk, cubeName)}`);
+
return {
sql: `(${sql})`,
alias: subQueryAlias,
- on: primaryKeys.map((pk) => `${subQueryAlias}.${this.newDimension(this.primaryKeyName(cubeName, pk)).aliasName()} = ${this.primaryKeySql(pk, cubeName)}`)
+ on: onCondition.join(' AND ')
};
}
@@ -2005,7 +2007,8 @@ export class BaseQuery {
}
if (this.ungrouped) {
if (symbol.type === 'count' || symbol.type === 'countDistinct' || symbol.type === 'countDistinctApprox') {
- return '1';
+ const sql = symbol.type === 'countDistinct' || symbol.type === 'countDistinctApprox' ? evaluateSql : this.caseWhenStatement([{ sql: `(${evaluateSql}) IS NOT NULL`, label: `1` }]);
+ return evaluateSql === '*' ? '1' : sql;
} else {
return evaluateSql;
}
@@ -2499,9 +2502,12 @@ export class BaseQuery {
},
statements: {
select: 'SELECT {{ select_concat | map(attribute=\'aliased\') | join(\', \') }} \n' +
- 'FROM (\n {{ from }}\n) AS {{ from_alias }} \n' +
- '{% if group_by %} GROUP BY {{ group_by | map(attribute=\'index\') | join(\', \') }}{% endif %}' +
- '{% if order_by %} ORDER BY {{ order_by | map(attribute=\'expr\') | join(\', \') }}{% endif %}' +
+ 'FROM (\n' +
+ '{{ from | indent(2, true) }}\n' +
+ ') AS {{ from_alias }}' +
+ '{% if filter %}\nWHERE {{ filter }}{% endif %}' +
+ '{% if group_by %}\nGROUP BY {{ group_by | map(attribute=\'index\') | join(\', \') }}{% endif %}' +
+ '{% if order_by %}\nORDER BY {{ order_by | map(attribute=\'expr\') | join(\', \') }}{% endif %}' +
'{% if limit %}\nLIMIT {{ limit }}{% endif %}' +
'{% if offset %}\nOFFSET {{ offset }}{% endif %}',
},
diff --git a/packages/cubejs-schema-compiler/src/adapter/BaseSegment.ts b/packages/cubejs-schema-compiler/src/adapter/BaseSegment.ts
index c8251498c5..711c8a88d8 100644
--- a/packages/cubejs-schema-compiler/src/adapter/BaseSegment.ts
+++ b/packages/cubejs-schema-compiler/src/adapter/BaseSegment.ts
@@ -1,12 +1,34 @@
import type { BaseQuery } from './BaseQuery';
export class BaseSegment {
+ public readonly expression: any;
+
+ public readonly expressionCubeName: any;
+
+ public readonly expressionName: any;
+
+ public readonly isMemberExpression: boolean = false;
+
public constructor(
protected readonly query: BaseQuery,
- public readonly segment: string
- ) {}
+ public readonly segment: string | any
+ ) {
+ if (segment.expression) {
+ this.expression = segment.expression;
+ this.expressionCubeName = segment.cubeName;
+ this.expressionName = segment.expressionName || `${segment.cubeName}.${segment.name}`;
+ this.isMemberExpression = !!segment.definition;
+ }
+ }
public filterToWhere() {
+ return this.segmentSql();
+ }
+
+ public segmentSql() {
+ if (this.expression) {
+ return this.query.evaluateSymbolSql(this.expressionCubeName, this.expressionName, this.definition(), 'segment');
+ }
return this.query.segmentSql(this);
}
@@ -19,6 +41,11 @@ export class BaseSegment {
}
public definition() {
+ if (this.expression) {
+ return {
+ sql: this.expression
+ };
+ }
return this.segmentDefinition();
}
@@ -27,6 +54,9 @@ export class BaseSegment {
}
public cube() {
+ if (this.expression) {
+ return this.query.cubeEvaluator.cubeFromPath(this.expressionCubeName);
+ }
return this.query.cubeEvaluator.cubeFromPath(this.segment);
}
@@ -35,14 +65,16 @@ export class BaseSegment {
}
public path() {
+ if (this.expression) {
+ return null;
+ }
return this.query.cubeEvaluator.parsePath('segments', this.segment);
}
public expressionPath() {
- // TODO expression support
- // if (this.expression) {
- // return `expr:${this.expression.expressionName}`;
- // }
+ if (this.expression) {
+ return `expr:${this.expression.expressionName}`;
+ }
return this.query.cubeEvaluator.pathFromArray(this.path());
}
}
diff --git a/packages/cubejs-schema-compiler/src/adapter/BigqueryQuery.ts b/packages/cubejs-schema-compiler/src/adapter/BigqueryQuery.ts
index 5e082a9bff..987345dd0a 100644
--- a/packages/cubejs-schema-compiler/src/adapter/BigqueryQuery.ts
+++ b/packages/cubejs-schema-compiler/src/adapter/BigqueryQuery.ts
@@ -160,6 +160,7 @@ export class BigqueryQuery extends BaseQuery {
templates.expressions.binary = '{% if op == \'%\' %}MOD({{ left }}, {{ right }}){% else %}({{ left }} {{ op }} {{ right }}){% endif %}';
templates.expressions.interval = 'INTERVAL {{ interval }}';
templates.expressions.extract = 'EXTRACT({% if date_part == \'DOW\' %}DAYOFWEEK{% elif date_part == \'DOY\' %}DAYOFYEAR{% else %}{{ date_part }}{% endif %} FROM {{ expr }})';
+ templates.expressions.timestamp_literal = 'TIMESTAMP(\'{{ value }}\')';
return templates;
}
}
diff --git a/packages/cubejs-schema-compiler/src/adapter/PostgresQuery.ts b/packages/cubejs-schema-compiler/src/adapter/PostgresQuery.ts
index e3d8f069bd..e05441b6a4 100644
--- a/packages/cubejs-schema-compiler/src/adapter/PostgresQuery.ts
+++ b/packages/cubejs-schema-compiler/src/adapter/PostgresQuery.ts
@@ -58,6 +58,7 @@ export class PostgresQuery extends BaseQuery {
templates.functions.DATEDIFF = 'CASE WHEN LOWER(\'{{ date_part }}\') IN (\'year\', \'quarter\', \'month\') THEN (EXTRACT(YEAR FROM AGE(DATE_TRUNC(\'{{ date_part }}\', {{ args[2] }}), DATE_TRUNC(\'{{ date_part }}\', {{ args[1] }}))) * 12 + EXTRACT(MONTH FROM AGE(DATE_TRUNC(\'{{ date_part }}\', {{ args[2] }}), DATE_TRUNC(\'{{ date_part }}\', {{ args[1] }})))) / CASE LOWER(\'{{ date_part }}\') WHEN \'year\' THEN 12 WHEN \'quarter\' THEN 3 WHEN \'month\' THEN 1 END ELSE EXTRACT(EPOCH FROM DATE_TRUNC(\'{{ date_part }}\', {{ args[2] }}) - DATE_TRUNC(\'{{ date_part }}\', {{ args[1] }})) / EXTRACT(EPOCH FROM \'1 {{ date_part }}\'::interval) END::bigint';
templates.expressions.interval = 'INTERVAL \'{{ interval }}\'';
templates.expressions.extract = 'EXTRACT({{ date_part }} FROM {{ expr }})';
+ templates.expressions.timestamp_literal = 'timestamptz \'{{ value }}\'';
return templates;
}
diff --git a/packages/cubejs-schema-compiler/src/adapter/PreAggregations.js b/packages/cubejs-schema-compiler/src/adapter/PreAggregations.js
index ca05ac08d7..4de5d85b0a 100644
--- a/packages/cubejs-schema-compiler/src/adapter/PreAggregations.js
+++ b/packages/cubejs-schema-compiler/src/adapter/PreAggregations.js
@@ -157,6 +157,8 @@ export class PreAggregations {
const queryForSqlEvaluation = this.query.preAggregationQueryForSqlEvaluation(cube, preAggregation);
const partitionInvalidateKeyQueries = queryForSqlEvaluation.partitionInvalidateKeyQueries && queryForSqlEvaluation.partitionInvalidateKeyQueries(cube, preAggregation);
+ const allBackAliasMembers = PreAggregations.allBackAliasMembers(this.query);
+
const matchedTimeDimension = preAggregation.partitionGranularity && !this.hasCumulativeMeasures &&
this.query.timeDimensions.find(td => {
if (!td.dateRange) {
@@ -168,8 +170,7 @@ export class PreAggregations {
}
// Handling for views
- const dimension = this.query.cubeEvaluator.byPath('dimensions', td.expressionPath());
- return dimension?.aliasMember === foundPreAggregation.references.timeDimensions[0].dimension;
+ return td.dimension === allBackAliasMembers[foundPreAggregation.references.timeDimensions[0].dimension];
});
const filters = preAggregation.partitionGranularity && this.query.filters.filter(td => {
@@ -180,8 +181,7 @@ export class PreAggregations {
}
// Handling for views
- const dimension = this.query.cubeEvaluator.byPath('dimensions', td.expressionPath());
- return dimension?.aliasMember === foundPreAggregation.references.timeDimensions[0].dimension && td.dateRange;
+ return td.dimension === allBackAliasMembers[foundPreAggregation.references.timeDimensions[0].dimension];
}
return false;
diff --git a/packages/cubejs-schema-compiler/src/adapter/PrestodbQuery.ts b/packages/cubejs-schema-compiler/src/adapter/PrestodbQuery.ts
index 6c15bb8ab6..8741a66083 100644
--- a/packages/cubejs-schema-compiler/src/adapter/PrestodbQuery.ts
+++ b/packages/cubejs-schema-compiler/src/adapter/PrestodbQuery.ts
@@ -121,6 +121,7 @@ export class PrestodbQuery extends BaseQuery {
'{% if limit %}\nLIMIT {{ limit }}{% endif %}';
templates.expressions.extract = 'EXTRACT({{ date_part }} FROM {{ expr }})';
templates.expressions.interval = 'INTERVAL \'{{ num }}\' {{ date_part }}';
+ templates.expressions.timestamp_literal = 'from_iso8601_timestamp(\'{{ value }}\')';
return templates;
}
}
diff --git a/packages/cubejs-schema-compiler/src/adapter/SnowflakeQuery.ts b/packages/cubejs-schema-compiler/src/adapter/SnowflakeQuery.ts
index 8170d9b52e..4f0eb80b6e 100644
--- a/packages/cubejs-schema-compiler/src/adapter/SnowflakeQuery.ts
+++ b/packages/cubejs-schema-compiler/src/adapter/SnowflakeQuery.ts
@@ -62,6 +62,7 @@ export class SnowflakeQuery extends BaseQuery {
templates.functions.BTRIM = 'TRIM({{ args_concat }})';
templates.expressions.extract = 'EXTRACT({{ date_part }} FROM {{ expr }})';
templates.expressions.interval = 'INTERVAL \'{{ interval }}\'';
+ templates.expressions.timestamp_literal = '\'{{ value }}\'::timestamp_tz';
return templates;
}
}
diff --git a/packages/cubejs-schema-compiler/test/integration/clickhouse/ClickHouseDbRunner.js b/packages/cubejs-schema-compiler/test/integration/clickhouse/ClickHouseDbRunner.js
index 164a04fe97..443e58c0e2 100644
--- a/packages/cubejs-schema-compiler/test/integration/clickhouse/ClickHouseDbRunner.js
+++ b/packages/cubejs-schema-compiler/test/integration/clickhouse/ClickHouseDbRunner.js
@@ -1,5 +1,5 @@
/* eslint-disable */
-import ClickHouse from '@apla/clickhouse';
+import ClickHouse from '@cubejs-backend/apla-clickhouse';
import { GenericContainer } from 'testcontainers';
import { format as formatSql } from 'sqlstring';
import { v4 as uuidv4 } from 'uuid';
diff --git a/packages/cubejs-schema-compiler/test/integration/postgres/pre-aggregations.test.ts b/packages/cubejs-schema-compiler/test/integration/postgres/pre-aggregations.test.ts
index a20329a732..cfb8b9aad0 100644
--- a/packages/cubejs-schema-compiler/test/integration/postgres/pre-aggregations.test.ts
+++ b/packages/cubejs-schema-compiler/test/integration/postgres/pre-aggregations.test.ts
@@ -2025,6 +2025,6 @@ describe('PreAggregations', () => {
expect(partitionInvalidateKeyQueries).toStrictEqual([]);
expect(loadSql[0]).not.toMatch(/GROUP BY/);
- expect(loadSql[0]).toMatch(/1 `real_time_lambda_visitors__count`/);
+ expect(loadSql[0]).toMatch(/THEN 1 END `real_time_lambda_visitors__count`/);
}));
});
diff --git a/packages/cubejs-schema-compiler/test/integration/postgres/sql-generation.test.ts b/packages/cubejs-schema-compiler/test/integration/postgres/sql-generation.test.ts
index c3ea03a2ba..9f5a1a56bd 100644
--- a/packages/cubejs-schema-compiler/test/integration/postgres/sql-generation.test.ts
+++ b/packages/cubejs-schema-compiler/test/integration/postgres/sql-generation.test.ts
@@ -212,6 +212,13 @@ describe('SQL Generation', () => {
sql: \`\${visitors}.source = 'google'\`
}]
},
+ unique_google_sourced_checkins: {
+ type: 'countDistinct',
+ sql: 'id',
+ filters: [{
+ sql: \`\${visitors}.source = 'google'\`
+ }]
+ },
minDate: {
type: 'min',
sql: 'created_at'
@@ -1435,6 +1442,54 @@ describe('SQL Generation', () => {
}],
}, [{ reference_visitors__google_sourced_count: '1' }]));
+ it('ungrouped filtered count', () => runQueryTest({
+ measures: [
+ 'visitor_checkins.google_sourced_checkins',
+ ],
+ timezone: 'America/Los_Angeles',
+ order: [{
+ id: 'visitor_checkins.created_at',
+ }],
+ timeDimensions: [{
+ dimension: 'visitor_checkins.created_at',
+ granularity: 'day',
+ dateRange: ['2016-12-01', '2017-03-30'],
+ }],
+ ungrouped: true,
+ allowUngroupedWithoutPrimaryKey: true,
+ }, [
+ { visitor_checkins__created_at_day: '2017-01-02T00:00:00.000Z', visitor_checkins__google_sourced_checkins: null },
+ { visitor_checkins__created_at_day: '2017-01-03T00:00:00.000Z', visitor_checkins__google_sourced_checkins: null },
+ { visitor_checkins__created_at_day: '2017-01-04T00:00:00.000Z', visitor_checkins__google_sourced_checkins: null },
+ { visitor_checkins__created_at_day: '2017-01-04T00:00:00.000Z', visitor_checkins__google_sourced_checkins: null },
+ { visitor_checkins__created_at_day: '2017-01-04T00:00:00.000Z', visitor_checkins__google_sourced_checkins: null },
+ { visitor_checkins__created_at_day: '2017-01-05T00:00:00.000Z', visitor_checkins__google_sourced_checkins: 1 },
+ ]));
+
+ it('ungrouped filtered distinct count', () => runQueryTest({
+ measures: [
+ 'visitor_checkins.unique_google_sourced_checkins',
+ ],
+ timezone: 'America/Los_Angeles',
+ order: [{
+ id: 'visitor_checkins.created_at',
+ }],
+ timeDimensions: [{
+ dimension: 'visitor_checkins.created_at',
+ granularity: 'day',
+ dateRange: ['2016-12-01', '2017-03-30'],
+ }],
+ ungrouped: true,
+ allowUngroupedWithoutPrimaryKey: true,
+ }, [
+ { visitor_checkins__created_at_day: '2017-01-02T00:00:00.000Z', visitor_checkins__unique_google_sourced_checkins: null },
+ { visitor_checkins__created_at_day: '2017-01-03T00:00:00.000Z', visitor_checkins__unique_google_sourced_checkins: null },
+ { visitor_checkins__created_at_day: '2017-01-04T00:00:00.000Z', visitor_checkins__unique_google_sourced_checkins: null },
+ { visitor_checkins__created_at_day: '2017-01-04T00:00:00.000Z', visitor_checkins__unique_google_sourced_checkins: null },
+ { visitor_checkins__created_at_day: '2017-01-04T00:00:00.000Z', visitor_checkins__unique_google_sourced_checkins: null },
+ { visitor_checkins__created_at_day: '2017-01-05T00:00:00.000Z', visitor_checkins__unique_google_sourced_checkins: 6 },
+ ]));
+
it('builds geo dimension', () => runQueryTest({
dimensions: [
'visitors.location'
diff --git a/packages/cubejs-schema-compiler/test/unit/pre-aggregations.test.ts b/packages/cubejs-schema-compiler/test/unit/pre-aggregations.test.ts
index d27966d02a..3ba1e6b313 100644
--- a/packages/cubejs-schema-compiler/test/unit/pre-aggregations.test.ts
+++ b/packages/cubejs-schema-compiler/test/unit/pre-aggregations.test.ts
@@ -125,6 +125,38 @@ describe('pre-aggregations', () => {
]);
});
+ it('view and pre-aggregation granularity two level', async () => {
+ const { compiler, cubeEvaluator, joinGraph } = prepareYamlCompiler(
+ createSchemaYaml(createECommerceSchema())
+ );
+
+ await compiler.compile();
+
+ const query = new PostgresQuery({ joinGraph, cubeEvaluator, compiler }, {
+ measures: [
+ 'orders_view.count'
+ ],
+ timeDimensions: [{
+ dimension: 'orders_view.updated_at',
+ granularity: 'day',
+ dateRange: ['2023-01-01', '2023-01-10']
+ }],
+ timezone: 'America/Los_Angeles'
+ });
+
+ const queryAndParams = query.buildSqlAndParams();
+ console.log(queryAndParams);
+
+ const preAggregationsDescription: any = query.preAggregations?.preAggregationsDescription();
+ console.log(JSON.stringify(preAggregationsDescription, null, 2));
+
+ expect(preAggregationsDescription[0].preAggregationId).toEqual('orders.orders_by_day_with_day');
+ expect(preAggregationsDescription[0].matchedTimeDimensionDateRange).toEqual([
+ '2023-01-01T00:00:00.000',
+ '2023-01-10T23:59:59.999'
+ ]);
+ });
+
it('view and pre-aggregation granularity with additional filters test', async () => {
const { compiler, cubeEvaluator, joinGraph } = prepareYamlCompiler(
createSchemaYaml(createECommerceSchema())
diff --git a/packages/cubejs-schema-compiler/test/unit/utils.ts b/packages/cubejs-schema-compiler/test/unit/utils.ts
index 99349d85a0..adabaec752 100644
--- a/packages/cubejs-schema-compiler/test/unit/utils.ts
+++ b/packages/cubejs-schema-compiler/test/unit/utils.ts
@@ -124,6 +124,11 @@ export function createECommerceSchema() {
sql: 'created_at',
type: 'time',
},
+ {
+ name: 'updated_at',
+ sql: '{created_at}',
+ type: 'time',
+ },
{
name: 'status',
sql: 'status',
@@ -166,6 +171,7 @@ export function createECommerceSchema() {
join_path: 'orders',
includes: [
'created_at',
+ 'updated_at',
'count',
'status',
]
diff --git a/packages/cubejs-server-core/CHANGELOG.md b/packages/cubejs-server-core/CHANGELOG.md
index d5a68fbe36..e413e74808 100644
--- a/packages/cubejs-server-core/CHANGELOG.md
+++ b/packages/cubejs-server-core/CHANGELOG.md
@@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/server-core
+
+
+
+
+
+## [0.34.59](https://github.com/cube-js/cube/compare/v0.34.58...v0.34.59) (2024-02-28)
+
+**Note:** Version bump only for package @cubejs-backend/server-core
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/server-core
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/server-core
+
+
+
+
+
## [0.34.56](https://github.com/cube-js/cube/compare/v0.34.55...v0.34.56) (2024-02-20)
**Note:** Version bump only for package @cubejs-backend/server-core
diff --git a/packages/cubejs-server-core/package.json b/packages/cubejs-server-core/package.json
index 6b6eb7c11c..47e3d1a857 100644
--- a/packages/cubejs-server-core/package.json
+++ b/packages/cubejs-server-core/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/server-core",
"description": "Cube.js base component to wire all backend components together",
"author": "Cube Dev, Inc.",
- "version": "0.34.56",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -29,14 +29,14 @@
"unit": "jest --runInBand --forceExit --coverage dist/test"
},
"dependencies": {
- "@cubejs-backend/api-gateway": "^0.34.56",
- "@cubejs-backend/cloud": "^0.34.55",
+ "@cubejs-backend/api-gateway": "^0.34.60",
+ "@cubejs-backend/cloud": "^0.34.60",
"@cubejs-backend/dotenv": "^9.0.2",
- "@cubejs-backend/native": "^0.34.56",
- "@cubejs-backend/query-orchestrator": "^0.34.55",
- "@cubejs-backend/schema-compiler": "^0.34.56",
- "@cubejs-backend/shared": "^0.34.55",
- "@cubejs-backend/templates": "^0.34.55",
+ "@cubejs-backend/native": "^0.34.60",
+ "@cubejs-backend/query-orchestrator": "^0.34.60",
+ "@cubejs-backend/schema-compiler": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60",
+ "@cubejs-backend/templates": "^0.34.60",
"codesandbox-import-utils": "^2.1.12",
"cross-spawn": "^7.0.1",
"fs-extra": "^8.1.0",
@@ -57,9 +57,9 @@
"ws": "^7.5.3"
},
"devDependencies": {
- "@cubejs-backend/cubestore-driver": "^0.34.55",
+ "@cubejs-backend/cubestore-driver": "^0.34.60",
"@cubejs-backend/linter": "^0.34.25",
- "@cubejs-client/playground": "^0.34.51",
+ "@cubejs-client/playground": "^0.34.60",
"@types/cross-spawn": "^6.0.2",
"@types/express": "^4.17.9",
"@types/fs-extra": "^9.0.8",
diff --git a/packages/cubejs-server/CHANGELOG.md b/packages/cubejs-server/CHANGELOG.md
index 202acb6ab6..8b76b5e8c1 100644
--- a/packages/cubejs-server/CHANGELOG.md
+++ b/packages/cubejs-server/CHANGELOG.md
@@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/server
+
+
+
+
+
+## [0.34.59](https://github.com/cube-js/cube/compare/v0.34.58...v0.34.59) (2024-02-28)
+
+**Note:** Version bump only for package @cubejs-backend/server
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/server
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/server
+
+
+
+
+
## [0.34.56](https://github.com/cube-js/cube/compare/v0.34.55...v0.34.56) (2024-02-20)
**Note:** Version bump only for package @cubejs-backend/server
diff --git a/packages/cubejs-server/package.json b/packages/cubejs-server/package.json
index 3acea16c12..5f641b29d8 100644
--- a/packages/cubejs-server/package.json
+++ b/packages/cubejs-server/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/server",
"description": "Cube.js all-in-one server",
"author": "Cube Dev, Inc.",
- "version": "0.34.56",
+ "version": "0.34.60",
"types": "index.d.ts",
"repository": {
"type": "git",
@@ -40,11 +40,11 @@
"jest:shapshot": "jest --updateSnapshot test"
},
"dependencies": {
- "@cubejs-backend/cubestore-driver": "^0.34.55",
+ "@cubejs-backend/cubestore-driver": "^0.34.60",
"@cubejs-backend/dotenv": "^9.0.2",
- "@cubejs-backend/native": "^0.34.56",
- "@cubejs-backend/server-core": "^0.34.56",
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/native": "^0.34.60",
+ "@cubejs-backend/server-core": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60",
"@oclif/color": "^1.0.0",
"@oclif/command": "^1.8.13",
"@oclif/config": "^1.18.2",
@@ -62,7 +62,7 @@
},
"devDependencies": {
"@cubejs-backend/linter": "^0.34.25",
- "@cubejs-backend/query-orchestrator": "^0.34.55",
+ "@cubejs-backend/query-orchestrator": "^0.34.60",
"@oclif/dev-cli": "^1.23.1",
"@types/body-parser": "^1.19.0",
"@types/cors": "^2.8.8",
diff --git a/packages/cubejs-serverless-aws/CHANGELOG.md b/packages/cubejs-serverless-aws/CHANGELOG.md
index 4876d058a2..8e1398a71a 100644
--- a/packages/cubejs-serverless-aws/CHANGELOG.md
+++ b/packages/cubejs-serverless-aws/CHANGELOG.md
@@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/serverless-aws
+
+
+
+
+
+## [0.34.59](https://github.com/cube-js/cube/compare/v0.34.58...v0.34.59) (2024-02-28)
+
+**Note:** Version bump only for package @cubejs-backend/serverless-aws
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/serverless-aws
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/serverless-aws
+
+
+
+
+
## [0.34.56](https://github.com/cube-js/cube/compare/v0.34.55...v0.34.56) (2024-02-20)
**Note:** Version bump only for package @cubejs-backend/serverless-aws
diff --git a/packages/cubejs-serverless-aws/package.json b/packages/cubejs-serverless-aws/package.json
index 5a77892714..c8c5d3defa 100644
--- a/packages/cubejs-serverless-aws/package.json
+++ b/packages/cubejs-serverless-aws/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/serverless-aws",
"description": "Cube.js Serverless AWS support",
"author": "Cube Dev, Inc.",
- "version": "0.34.56",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -13,7 +13,7 @@
},
"main": "index.js",
"dependencies": {
- "@cubejs-backend/serverless": "^0.34.56",
+ "@cubejs-backend/serverless": "^0.34.60",
"aws-sdk": "^2.404.0"
},
"devDependencies": {
diff --git a/packages/cubejs-serverless-google/CHANGELOG.md b/packages/cubejs-serverless-google/CHANGELOG.md
index d33d89ab73..2ab96566cf 100644
--- a/packages/cubejs-serverless-google/CHANGELOG.md
+++ b/packages/cubejs-serverless-google/CHANGELOG.md
@@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/serverless-google
+
+
+
+
+
+## [0.34.59](https://github.com/cube-js/cube/compare/v0.34.58...v0.34.59) (2024-02-28)
+
+**Note:** Version bump only for package @cubejs-backend/serverless-google
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/serverless-google
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/serverless-google
+
+
+
+
+
## [0.34.56](https://github.com/cube-js/cube/compare/v0.34.55...v0.34.56) (2024-02-20)
**Note:** Version bump only for package @cubejs-backend/serverless-google
diff --git a/packages/cubejs-serverless-google/package.json b/packages/cubejs-serverless-google/package.json
index d97476f40b..f896b22e64 100644
--- a/packages/cubejs-serverless-google/package.json
+++ b/packages/cubejs-serverless-google/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/serverless-google",
"description": "Cube.js Serverless Google support",
"author": "Cube Dev, Inc.",
- "version": "0.34.56",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -13,7 +13,7 @@
},
"main": "index.js",
"dependencies": {
- "@cubejs-backend/serverless": "^0.34.56",
+ "@cubejs-backend/serverless": "^0.34.60",
"@google-cloud/pubsub": "^2.5.0"
},
"devDependencies": {
diff --git a/packages/cubejs-serverless/CHANGELOG.md b/packages/cubejs-serverless/CHANGELOG.md
index c8be5d6f4a..721574ef76 100644
--- a/packages/cubejs-serverless/CHANGELOG.md
+++ b/packages/cubejs-serverless/CHANGELOG.md
@@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/serverless
+
+
+
+
+
+## [0.34.59](https://github.com/cube-js/cube/compare/v0.34.58...v0.34.59) (2024-02-28)
+
+**Note:** Version bump only for package @cubejs-backend/serverless
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/serverless
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/serverless
+
+
+
+
+
## [0.34.56](https://github.com/cube-js/cube/compare/v0.34.55...v0.34.56) (2024-02-20)
**Note:** Version bump only for package @cubejs-backend/serverless
diff --git a/packages/cubejs-serverless/package.json b/packages/cubejs-serverless/package.json
index 545c6f2caf..92d86e3298 100644
--- a/packages/cubejs-serverless/package.json
+++ b/packages/cubejs-serverless/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/serverless",
"description": "Cube.js Serverless",
"author": "Cube Dev, Inc.",
- "version": "0.34.56",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -13,7 +13,7 @@
},
"main": "index.js",
"dependencies": {
- "@cubejs-backend/server-core": "^0.34.56",
+ "@cubejs-backend/server-core": "^0.34.60",
"cors": "^2.8.5",
"serverless-express": "^2.0.11"
},
diff --git a/packages/cubejs-snowflake-driver/CHANGELOG.md b/packages/cubejs-snowflake-driver/CHANGELOG.md
index 3348db6fa7..fbddd9e23e 100644
--- a/packages/cubejs-snowflake-driver/CHANGELOG.md
+++ b/packages/cubejs-snowflake-driver/CHANGELOG.md
@@ -3,6 +3,30 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/snowflake-driver
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/snowflake-driver
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/snowflake-driver
+
+
+
+
+
## [0.34.55](https://github.com/cube-js/cube/compare/v0.34.54...v0.34.55) (2024-02-15)
**Note:** Version bump only for package @cubejs-backend/snowflake-driver
diff --git a/packages/cubejs-snowflake-driver/package.json b/packages/cubejs-snowflake-driver/package.json
index 3fc16e17e0..7f30c7d02e 100644
--- a/packages/cubejs-snowflake-driver/package.json
+++ b/packages/cubejs-snowflake-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/snowflake-driver",
"description": "Cube.js Snowflake database driver",
"author": "Cube Dev, Inc.",
- "version": "0.34.55",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -25,10 +25,8 @@
"lint:fix": "eslint --fix src/* --ext .ts"
},
"dependencies": {
- "@aws-sdk/client-s3": "^3.16.0",
- "@aws-sdk/s3-request-presigner": "^3.16.0",
- "@cubejs-backend/base-driver": "^0.34.55",
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/base-driver": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60",
"@google-cloud/storage": "^5.8.5",
"date-fns-timezone": "^0.1.4",
"snowflake-sdk": "^1.8.0"
diff --git a/packages/cubejs-snowflake-driver/src/SnowflakeDriver.ts b/packages/cubejs-snowflake-driver/src/SnowflakeDriver.ts
index d5b1b2ae53..368b540c88 100644
--- a/packages/cubejs-snowflake-driver/src/SnowflakeDriver.ts
+++ b/packages/cubejs-snowflake-driver/src/SnowflakeDriver.ts
@@ -25,8 +25,6 @@ import {
QueryTablesResult,
} from '@cubejs-backend/base-driver';
import { formatToTimeZone } from 'date-fns-timezone';
-import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
-import { S3, GetObjectCommand } from '@aws-sdk/client-s3';
import { Storage } from '@google-cloud/storage';
import { HydrationMap, HydrationStream } from './HydrationStream';
@@ -458,7 +456,7 @@ export class SnowflakeDriver extends BaseDriver implements DriverInterface {
/**
* Returns an array of queried fields meta info.
*/
- public async queryColumnTypes(sql: string, params?: unknown[]): Promise {
+ public async queryColumnTypes(sql: string, params: unknown[]): Promise {
const connection = await this.getConnection();
return new Promise((resolve, reject) => connection.execute({
sqlText: `${sql} LIMIT 0`,
@@ -583,8 +581,8 @@ export class SnowflakeDriver extends BaseDriver implements DriverInterface {
this.config.exportBucket;
switch (bucketType) {
case 's3':
- return this.extractFilesFromS3(
- new S3({
+ return this.extractUnloadedFilesFromS3(
+ {
credentials: {
accessKeyId: (
this.config.exportBucket
@@ -596,7 +594,7 @@ export class SnowflakeDriver extends BaseDriver implements DriverInterface {
region: (
this.config.exportBucket
).region,
- }),
+ },
bucketName,
tableName,
);
@@ -615,37 +613,6 @@ export class SnowflakeDriver extends BaseDriver implements DriverInterface {
}
}
- /**
- * Returns an array of signed AWS S3 URLs of the unloaded csv files.
- */
- protected async extractFilesFromS3(
- storage: S3,
- bucketName: string,
- tableName: string
- ): Promise {
- const list = await storage.listObjectsV2({
- Bucket: bucketName,
- Prefix: tableName,
- });
- if (list) {
- if (!list.Contents) {
- return [];
- } else {
- const csvFile = await Promise.all(
- list.Contents.map(async (file) => {
- const command = new GetObjectCommand({
- Bucket: bucketName,
- Key: file.Key,
- });
- return getSignedUrl(storage, command, { expiresIn: 3600 });
- })
- );
- return csvFile;
- }
- }
- throw new Error('Unable to unload.');
- }
-
/**
* Returns an array of signed GCS URLs of the unloaded csv files.
*/
diff --git a/packages/cubejs-sqlite-driver/CHANGELOG.md b/packages/cubejs-sqlite-driver/CHANGELOG.md
index edc54ba9fd..e2f90f62b1 100644
--- a/packages/cubejs-sqlite-driver/CHANGELOG.md
+++ b/packages/cubejs-sqlite-driver/CHANGELOG.md
@@ -3,6 +3,30 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/sqlite-driver
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/sqlite-driver
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/sqlite-driver
+
+
+
+
+
## [0.34.55](https://github.com/cube-js/cube/compare/v0.34.54...v0.34.55) (2024-02-15)
**Note:** Version bump only for package @cubejs-backend/sqlite-driver
diff --git a/packages/cubejs-sqlite-driver/package.json b/packages/cubejs-sqlite-driver/package.json
index dd4854014a..67ad5da047 100644
--- a/packages/cubejs-sqlite-driver/package.json
+++ b/packages/cubejs-sqlite-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/sqlite-driver",
"description": "Cube.js Sqlite database driver",
"author": "Cube Dev, Inc.",
- "version": "0.34.55",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -17,8 +17,8 @@
"lint": "eslint **/*.js"
},
"dependencies": {
- "@cubejs-backend/base-driver": "^0.34.55",
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/base-driver": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60",
"sqlite3": "^5.1.6"
},
"license": "Apache-2.0",
diff --git a/packages/cubejs-templates/CHANGELOG.md b/packages/cubejs-templates/CHANGELOG.md
index e75d5ab442..bd3ea9da79 100644
--- a/packages/cubejs-templates/CHANGELOG.md
+++ b/packages/cubejs-templates/CHANGELOG.md
@@ -3,6 +3,30 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube.js/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/templates
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube.js/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/templates
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube.js/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/templates
+
+
+
+
+
## [0.34.55](https://github.com/cube-js/cube.js/compare/v0.34.54...v0.34.55) (2024-02-15)
**Note:** Version bump only for package @cubejs-backend/templates
diff --git a/packages/cubejs-templates/package.json b/packages/cubejs-templates/package.json
index 2dd2d8a646..0ee3c8eaa6 100644
--- a/packages/cubejs-templates/package.json
+++ b/packages/cubejs-templates/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-backend/templates",
- "version": "0.34.55",
+ "version": "0.34.60",
"description": "Cube.js Templates helpers",
"author": "Cube Dev, Inc.",
"license": "Apache-2.0",
@@ -26,7 +26,7 @@
"extends": "../cubejs-linter"
},
"dependencies": {
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/shared": "^0.34.60",
"cross-spawn": "^7.0.3",
"decompress": "^4.2.1",
"decompress-targz": "^4.1.1",
diff --git a/packages/cubejs-testing-drivers/CHANGELOG.md b/packages/cubejs-testing-drivers/CHANGELOG.md
index c2e43c35d1..7f0129d0a1 100644
--- a/packages/cubejs-testing-drivers/CHANGELOG.md
+++ b/packages/cubejs-testing-drivers/CHANGELOG.md
@@ -3,6 +3,41 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube.js/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/testing-drivers
+
+
+
+
+
+## [0.34.59](https://github.com/cube-js/cube.js/compare/v0.34.58...v0.34.59) (2024-02-28)
+
+**Note:** Version bump only for package @cubejs-backend/testing-drivers
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube.js/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/testing-drivers
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube.js/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+
+### Bug Fixes
+
+* **cubesql:** `ungrouped` query can be routed to Cube Store ([#7810](https://github.com/cube-js/cube.js/issues/7810)) ([b122837](https://github.com/cube-js/cube.js/commit/b122837de9cd4fcaca4ddc0e7f85ff695de09483))
+
+
+
+
+
## [0.34.56](https://github.com/cube-js/cube.js/compare/v0.34.55...v0.34.56) (2024-02-20)
**Note:** Version bump only for package @cubejs-backend/testing-drivers
diff --git a/packages/cubejs-testing-drivers/package.json b/packages/cubejs-testing-drivers/package.json
index 00b3590f7a..49d2e011fd 100644
--- a/packages/cubejs-testing-drivers/package.json
+++ b/packages/cubejs-testing-drivers/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-backend/testing-drivers",
- "version": "0.34.56",
+ "version": "0.34.60",
"description": "Cube.js drivers test suite",
"author": "Cube Dev, Inc.",
"license": "MIT",
@@ -45,19 +45,19 @@
"dist/src"
],
"dependencies": {
- "@cubejs-backend/athena-driver": "^0.34.56",
- "@cubejs-backend/base-driver": "^0.34.55",
- "@cubejs-backend/cubestore-driver": "^0.34.55",
+ "@cubejs-backend/athena-driver": "^0.34.60",
+ "@cubejs-backend/base-driver": "^0.34.60",
+ "@cubejs-backend/cubestore-driver": "^0.34.60",
"@cubejs-backend/dotenv": "^9.0.2",
"@cubejs-backend/linter": "^0.34.25",
- "@cubejs-backend/postgres-driver": "^0.34.56",
- "@cubejs-backend/query-orchestrator": "^0.34.55",
- "@cubejs-backend/redshift-driver": "^0.34.56",
- "@cubejs-backend/server-core": "^0.34.56",
- "@cubejs-backend/shared": "^0.34.55",
- "@cubejs-backend/testing-shared": "^0.34.56",
- "@cubejs-client/core": "^0.34.37",
- "@cubejs-client/ws-transport": "^0.34.37",
+ "@cubejs-backend/postgres-driver": "^0.34.60",
+ "@cubejs-backend/query-orchestrator": "^0.34.60",
+ "@cubejs-backend/redshift-driver": "^0.34.60",
+ "@cubejs-backend/server-core": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60",
+ "@cubejs-backend/testing-shared": "^0.34.60",
+ "@cubejs-client/core": "^0.34.60",
+ "@cubejs-client/ws-transport": "^0.34.60",
"@jest/globals": "^27",
"@types/jest": "^27",
"@types/node": "^14",
diff --git a/packages/cubejs-testing-drivers/src/tests/testQueries.ts b/packages/cubejs-testing-drivers/src/tests/testQueries.ts
index 541a9e18bd..8edf1ce808 100644
--- a/packages/cubejs-testing-drivers/src/tests/testQueries.ts
+++ b/packages/cubejs-testing-drivers/src/tests/testQueries.ts
@@ -1500,5 +1500,27 @@ from
`);
expect(res.rows).toMatchSnapshot('powerbi_min_max_push_down');
});
+
+ executePg('SQL API: powerbi min max ungrouped flag', async () => {
+ const res = await connection.query(`
+ select
+ count(distinct("rows"."totalSales")) + max(
+ case
+ when "rows"."totalSales" is null then 1
+ else 0
+ end
+ ) as "a0",
+ min("rows"."totalSales") as "a1",
+ max("rows"."totalSales") as "a2"
+from
+ (
+ select
+ "totalSales"
+ from
+ "public"."ECommerce" "$Table"
+ ) "rows"
+ `);
+ expect(res.rows).toMatchSnapshot('powerbi_min_max_ungrouped_flag');
+ });
});
}
diff --git a/packages/cubejs-testing-drivers/test/__snapshots__/postgres-full.test.ts.snap b/packages/cubejs-testing-drivers/test/__snapshots__/postgres-full.test.ts.snap
index b3b1978ce9..dc335464cb 100644
--- a/packages/cubejs-testing-drivers/test/__snapshots__/postgres-full.test.ts.snap
+++ b/packages/cubejs-testing-drivers/test/__snapshots__/postgres-full.test.ts.snap
@@ -9,6 +9,16 @@ Array [
]
`;
+exports[`Queries with the @cubejs-backend/postgres-driver SQL API: powerbi min max ungrouped flag: powerbi_min_max_ungrouped_flag 1`] = `
+Array [
+ Object {
+ "a0": "39",
+ "a1": 3.76,
+ "a2": 2399.96,
+ },
+]
+`;
+
exports[`Queries with the @cubejs-backend/postgres-driver filtering Customers: contains + dimensions, first 1`] = `
Array [
Object {
diff --git a/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-full.test.ts.snap b/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-full.test.ts.snap
index a24778165f..08554c6734 100644
--- a/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-full.test.ts.snap
+++ b/packages/cubejs-testing-drivers/test/__snapshots__/snowflake-full.test.ts.snap
@@ -9,6 +9,16 @@ Array [
]
`;
+exports[`Queries with the @cubejs-backend/snowflake-driver SQL API: powerbi min max ungrouped flag: powerbi_min_max_ungrouped_flag 1`] = `
+Array [
+ Object {
+ "a0": "39",
+ "a1": 3.76,
+ "a2": 2399.96,
+ },
+]
+`;
+
exports[`Queries with the @cubejs-backend/snowflake-driver filtering Customers: contains + dimensions, first 1`] = `
Array [
Object {
diff --git a/packages/cubejs-testing-shared/CHANGELOG.md b/packages/cubejs-testing-shared/CHANGELOG.md
index 3b09f3aaa2..9823e81675 100644
--- a/packages/cubejs-testing-shared/CHANGELOG.md
+++ b/packages/cubejs-testing-shared/CHANGELOG.md
@@ -3,6 +3,41 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube.js/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/testing-shared
+
+
+
+
+
+## [0.34.59](https://github.com/cube-js/cube.js/compare/v0.34.58...v0.34.59) (2024-02-28)
+
+**Note:** Version bump only for package @cubejs-backend/testing-shared
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube.js/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+
+### Features
+
+* **materialize-driver:** Add cluster option to Materialize driver ([#7773](https://github.com/cube-js/cube.js/issues/7773)) Thanks [@bobbyiliev](https://github.com/bobbyiliev)! ([917004e](https://github.com/cube-js/cube.js/commit/917004ebccfeb6509a08e5b9b51e1ae8542cf0af))
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube.js/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/testing-shared
+
+
+
+
+
## [0.34.56](https://github.com/cube-js/cube.js/compare/v0.34.55...v0.34.56) (2024-02-20)
**Note:** Version bump only for package @cubejs-backend/testing-shared
diff --git a/packages/cubejs-testing-shared/package.json b/packages/cubejs-testing-shared/package.json
index 93ef460041..1f7bdd75b6 100644
--- a/packages/cubejs-testing-shared/package.json
+++ b/packages/cubejs-testing-shared/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-backend/testing-shared",
- "version": "0.34.56",
+ "version": "0.34.60",
"description": "Cube.js Testing Helpers",
"author": "Cube Dev, Inc.",
"license": "Apache-2.0",
@@ -21,9 +21,9 @@
],
"dependencies": {
"@cubejs-backend/dotenv": "^9.0.2",
- "@cubejs-backend/query-orchestrator": "^0.34.55",
- "@cubejs-backend/schema-compiler": "^0.34.56",
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/query-orchestrator": "^0.34.60",
+ "@cubejs-backend/schema-compiler": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60",
"dedent": "^0.7.0",
"node-fetch": "^2.6.7",
"testcontainers": "^8.12"
diff --git a/packages/cubejs-testing-shared/src/db/materialize.ts b/packages/cubejs-testing-shared/src/db/materialize.ts
index c46b08f89e..c32af8a7a3 100644
--- a/packages/cubejs-testing-shared/src/db/materialize.ts
+++ b/packages/cubejs-testing-shared/src/db/materialize.ts
@@ -8,10 +8,7 @@ type MaterializeStartOptions = DBRunnerContainerOptions & {
export class MaterializeDBRunner extends DbRunnerAbstract {
public static startContainer(options: MaterializeStartOptions) {
- /**
- * Version v0.26.0 is latest Materialize release with Long Term Support
- */
- const version = process.env.TEST_MZSQL_VERSION || options.version || 'v0.26.0';
+ const version = process.env.TEST_MZSQL_VERSION || options.version || 'v0.88.0';
const container = new GenericContainer(`materialize/materialized:${version}`)
.withExposedPorts(6875)
diff --git a/packages/cubejs-testing/CHANGELOG.md b/packages/cubejs-testing/CHANGELOG.md
index 46f94ef122..a4fbc675d0 100644
--- a/packages/cubejs-testing/CHANGELOG.md
+++ b/packages/cubejs-testing/CHANGELOG.md
@@ -3,6 +3,44 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube.js/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+
+### Bug Fixes
+
+* **cubesql:** Remove excessive limit on inner wrapped queries ([#7864](https://github.com/cube-js/cube.js/issues/7864)) ([b97268f](https://github.com/cube-js/cube.js/commit/b97268fe5caf55c5b7806c597b9f7b75410f6ba4))
+
+
+
+
+
+## [0.34.59](https://github.com/cube-js/cube.js/compare/v0.34.58...v0.34.59) (2024-02-28)
+
+**Note:** Version bump only for package @cubejs-backend/testing
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube.js/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+
+### Features
+
+* **materialize-driver:** Add cluster option to Materialize driver ([#7773](https://github.com/cube-js/cube.js/issues/7773)) Thanks [@bobbyiliev](https://github.com/bobbyiliev)! ([917004e](https://github.com/cube-js/cube.js/commit/917004ebccfeb6509a08e5b9b51e1ae8542cf0af))
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube.js/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/testing
+
+
+
+
+
## [0.34.56](https://github.com/cube-js/cube.js/compare/v0.34.55...v0.34.56) (2024-02-20)
**Note:** Version bump only for package @cubejs-backend/testing
diff --git a/packages/cubejs-testing/birdbox-fixtures/postgresql/schema/BigOrders.js b/packages/cubejs-testing/birdbox-fixtures/postgresql/schema/BigOrders.js
new file mode 100644
index 0000000000..8e8d7ed141
--- /dev/null
+++ b/packages/cubejs-testing/birdbox-fixtures/postgresql/schema/BigOrders.js
@@ -0,0 +1,42 @@
+cube(`BigOrders`, {
+ sql: `
+ select * from (
+ select 1 as id, 100 as amount, 'new' status, '2024-01-01'::timestamptz created_at
+ UNION ALL
+ select 2 as id, 200 as amount, 'new' status, '2024-01-02'::timestamptz created_at
+ UNION ALL
+ select 3 as id, 300 as amount, 'processed' status, '2024-01-03'::timestamptz created_at
+ UNION ALL
+ select 4 as id, 500 as amount, 'processed' status, '2024-01-04'::timestamptz created_at
+ UNION ALL
+ select 5 as id, 600 as amount, 'shipped' status, '2024-01-05'::timestamptz created_at
+ ) data
+ CROSS JOIN GENERATE_SERIES(1, 20000) value
+ `,
+ measures: {
+ totalAmount: {
+ sql: `amount`,
+ type: `sum`,
+ },
+ toRemove: {
+ type: `count`,
+ },
+ },
+ dimensions: {
+ id: {
+ sql: `id`,
+ type: `number`,
+ primaryKey: true,
+ },
+
+ status: {
+ sql: `status`,
+ type: `string`,
+ },
+
+ createdAt: {
+ sql: `created_at`,
+ type: `time`
+ }
+ },
+});
diff --git a/packages/cubejs-testing/package.json b/packages/cubejs-testing/package.json
index 6a478aa1dd..4cac4afeb7 100644
--- a/packages/cubejs-testing/package.json
+++ b/packages/cubejs-testing/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-backend/testing",
- "version": "0.34.56",
+ "version": "0.34.60",
"description": "Cube.js e2e tests",
"author": "Cube Dev, Inc.",
"license": "Apache-2.0",
@@ -87,14 +87,14 @@
"birdbox-fixtures"
],
"dependencies": {
- "@cubejs-backend/cubestore-driver": "^0.34.55",
+ "@cubejs-backend/cubestore-driver": "^0.34.60",
"@cubejs-backend/dotenv": "^9.0.2",
- "@cubejs-backend/postgres-driver": "^0.34.56",
- "@cubejs-backend/query-orchestrator": "^0.34.55",
- "@cubejs-backend/schema-compiler": "^0.34.56",
- "@cubejs-backend/shared": "^0.34.55",
- "@cubejs-backend/testing-shared": "^0.34.56",
- "@cubejs-client/ws-transport": "^0.34.37",
+ "@cubejs-backend/postgres-driver": "^0.34.60",
+ "@cubejs-backend/query-orchestrator": "^0.34.60",
+ "@cubejs-backend/schema-compiler": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60",
+ "@cubejs-backend/testing-shared": "^0.34.60",
+ "@cubejs-client/ws-transport": "^0.34.60",
"dedent": "^0.7.0",
"fs-extra": "^8.1.0",
"http-proxy": "^1.18.1",
@@ -106,7 +106,7 @@
"devDependencies": {
"@4tw/cypress-drag-drop": "^1.6.0",
"@cubejs-backend/linter": "^0.34.25",
- "@cubejs-client/core": "^0.34.37",
+ "@cubejs-client/core": "^0.34.60",
"@jest/globals": "^27",
"@types/dedent": "^0.7.0",
"@types/http-proxy": "^1.17.5",
diff --git a/packages/cubejs-testing/test/__snapshots__/smoke-cubesql.test.ts.snap b/packages/cubejs-testing/test/__snapshots__/smoke-cubesql.test.ts.snap
index 316fed7eae..74b441e792 100644
--- a/packages/cubejs-testing/test/__snapshots__/smoke-cubesql.test.ts.snap
+++ b/packages/cubejs-testing/test/__snapshots__/smoke-cubesql.test.ts.snap
@@ -17,6 +17,16 @@ Array [
]
`;
+exports[`SQL API Postgres (Data) no limit for non matching count push down: no limit for non matching count push down 1`] = `
+Array [
+ Object {
+ "a0": 2024-01-05T00:00:00.000Z,
+ "a1": 2024-01-01T00:00:00.000Z,
+ "a2": "100000",
+ },
+]
+`;
+
exports[`SQL API Postgres (Data) powerbi min max push down: powerbi_min_max_push_down 1`] = `
Array [
Object {
diff --git a/packages/cubejs-testing/test/smoke-cubesql.test.ts b/packages/cubejs-testing/test/smoke-cubesql.test.ts
index 294a033723..443cb9df12 100644
--- a/packages/cubejs-testing/test/smoke-cubesql.test.ts
+++ b/packages/cubejs-testing/test/smoke-cubesql.test.ts
@@ -180,5 +180,17 @@ from
`);
expect(res.rows).toMatchSnapshot('powerbi_min_max_push_down');
});
+
+ test('no limit for non matching count push down', async () => {
+ const res = await connection.query(`
+ select
+ max("rows"."createdAt") as "a0",
+ min("rows"."createdAt") as "a1",
+ count(*) as "a2"
+ from
+ "public"."BigOrders" "rows"
+ `);
+ expect(res.rows).toMatchSnapshot('no limit for non matching count push down');
+ });
});
});
diff --git a/packages/cubejs-testing/test/smoke-materialize.test.ts b/packages/cubejs-testing/test/smoke-materialize.test.ts
index 08f1cf6993..f63e8fe621 100644
--- a/packages/cubejs-testing/test/smoke-materialize.test.ts
+++ b/packages/cubejs-testing/test/smoke-materialize.test.ts
@@ -31,6 +31,7 @@ describe('materialize', () => {
CUBEJS_DB_NAME: 'materialize',
CUBEJS_DB_USER: 'materialize',
CUBEJS_DB_PASS: 'materialize',
+ CUBEJS_DB_SSL: 'false',
...DEFAULT_CONFIG,
},
diff --git a/packages/cubejs-trino-driver/CHANGELOG.md b/packages/cubejs-trino-driver/CHANGELOG.md
index a1d5a21293..e41e2df49a 100644
--- a/packages/cubejs-trino-driver/CHANGELOG.md
+++ b/packages/cubejs-trino-driver/CHANGELOG.md
@@ -3,6 +3,38 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/trino-driver
+
+
+
+
+
+## [0.34.59](https://github.com/cube-js/cube/compare/v0.34.58...v0.34.59) (2024-02-28)
+
+**Note:** Version bump only for package @cubejs-backend/trino-driver
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/trino-driver
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/trino-driver
+
+
+
+
+
## [0.34.56](https://github.com/cube-js/cube/compare/v0.34.55...v0.34.56) (2024-02-20)
**Note:** Version bump only for package @cubejs-backend/trino-driver
diff --git a/packages/cubejs-trino-driver/package.json b/packages/cubejs-trino-driver/package.json
index cca39d4ce4..d2e2f38ace 100644
--- a/packages/cubejs-trino-driver/package.json
+++ b/packages/cubejs-trino-driver/package.json
@@ -2,7 +2,7 @@
"name": "@cubejs-backend/trino-driver",
"description": "Cube.js Trino database driver",
"author": "Cube Dev, Inc.",
- "version": "0.34.56",
+ "version": "0.34.60",
"repository": {
"type": "git",
"url": "https://github.com/cube-js/cube.git",
@@ -25,10 +25,10 @@
"lint:fix": "eslint --fix src/* --ext .ts"
},
"dependencies": {
- "@cubejs-backend/base-driver": "^0.34.55",
- "@cubejs-backend/prestodb-driver": "^0.34.55",
- "@cubejs-backend/schema-compiler": "^0.34.56",
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/base-driver": "^0.34.60",
+ "@cubejs-backend/prestodb-driver": "^0.34.60",
+ "@cubejs-backend/schema-compiler": "^0.34.60",
+ "@cubejs-backend/shared": "^0.34.60",
"presto-client": "^0.12.2",
"ramda": "^0.27.0",
"sqlstring": "^2.3.1"
diff --git a/rust/cubesql/CHANGELOG.md b/rust/cubesql/CHANGELOG.md
index 288fe5d168..ea191f6bca 100644
--- a/rust/cubesql/CHANGELOG.md
+++ b/rust/cubesql/CHANGELOG.md
@@ -3,6 +3,68 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube.js/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+
+### Bug Fixes
+
+* **cubesql:** Allow different `Timestamp` types in `DATEDIFF` ([de9ef08](https://github.com/cube-js/cube.js/commit/de9ef081cae21f551a38219bb64749e08e7ca6fc))
+* **cubesql:** Prioritize ungrouped aggregate scans over ungrouped projection scans so most of the members can be pushed down without wrapping ([#7865](https://github.com/cube-js/cube.js/issues/7865)) ([addde0d](https://github.com/cube-js/cube.js/commit/addde0d373f01e69485b8a0333850917ffad9a2d))
+* **cubesql:** Remove excessive limit on inner wrapped queries ([#7864](https://github.com/cube-js/cube.js/issues/7864)) ([b97268f](https://github.com/cube-js/cube.js/commit/b97268fe5caf55c5b7806c597b9f7b75410f6ba4))
+
+
+### Features
+
+* **cubesql:** In subquery support ([#7851](https://github.com/cube-js/cube.js/issues/7851)) ([8e2a3ec](https://github.com/cube-js/cube.js/commit/8e2a3ecc348c4ab9e6a5ab038c46fcf7f4c3dfcc))
+* **cubesql:** Support split and SUM(1) ([16e2ee0](https://github.com/cube-js/cube.js/commit/16e2ee0d290c502f796891e137556aad2275e52d))
+
+
+
+
+
+## [0.34.59](https://github.com/cube-js/cube.js/compare/v0.34.58...v0.34.59) (2024-02-28)
+
+
+### Bug Fixes
+
+* **cubesql:** Replace only simple ungrouped measures in projections to avoid aggregate over aggregate statements ([#7852](https://github.com/cube-js/cube.js/issues/7852)) ([fa2a89b](https://github.com/cube-js/cube.js/commit/fa2a89b89f91c8eba175130fca33975200690288))
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube.js/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+
+### Bug Fixes
+
+* **cubesql:** Ambiguous reference in case of same two 16 char prefixes are in query ([5051f66](https://github.com/cube-js/cube.js/commit/5051f663b4142735ee1cc455936300f765de62a7))
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube.js/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+
+### Bug Fixes
+
+* **cubesql:** Can't find rewrite due to AST node limit reached for remaining non-equivalent date and timestamp constant folding rules ([b79f697](https://github.com/cube-js/cube.js/commit/b79f69739e2b8cb74cfc86db72fa7157dd723960))
+* **cubesql:** Support `Z` postfix in `Timestamp` response transformation ([c013c91](https://github.com/cube-js/cube.js/commit/c013c913bbeb8dabacc508240ab94956f1172a8b))
+* **cubesql:** Timestamp equals filter support ([754a0df](https://github.com/cube-js/cube.js/commit/754a0df3a20cae5269e961649a01fb5047906645))
+
+
+### Features
+
+* **cubesql:** `WHERE` SQL push down ([#7808](https://github.com/cube-js/cube.js/issues/7808)) ([98b5709](https://github.com/cube-js/cube.js/commit/98b570946905586f16a502f83b0a1cf8e4aa92a6))
+* **cubesql:** Allow replacement of aggregation functions in SQL push down ([#7811](https://github.com/cube-js/cube.js/issues/7811)) ([97fa757](https://github.com/cube-js/cube.js/commit/97fa757a0d22e6d7d9432d686005765b28271f7c))
+* **cubesql:** Support placeholders in `OFFSET`, `FETCH ...` ([60aad90](https://github.com/cube-js/cube.js/commit/60aad90a237800f4471bb4efa10ec590b50e19fe))
+* **cubesql:** Support temporary tables ([7022611](https://github.com/cube-js/cube.js/commit/702261156fc3748fc7d3103f28bd4f4648fd4e0b))
+
+
+
+
+
## [0.34.56](https://github.com/cube-js/cube.js/compare/v0.34.55...v0.34.56) (2024-02-20)
diff --git a/rust/cubesql/Cargo.lock b/rust/cubesql/Cargo.lock
index b5d6b9e3aa..e6e32c5529 100644
--- a/rust/cubesql/Cargo.lock
+++ b/rust/cubesql/Cargo.lock
@@ -133,7 +133,7 @@ checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
[[package]]
name = "arrow"
version = "11.1.0"
-source = "git+https://github.com/cube-js/arrow-rs.git?rev=9f2e2862f3f5e5efb1f83364b3ac8492f776a92d#9f2e2862f3f5e5efb1f83364b3ac8492f776a92d"
+source = "git+https://github.com/cube-js/arrow-rs.git?rev=f32dc0f5d2de97433f53dbc18295558e04214ad8#f32dc0f5d2de97433f53dbc18295558e04214ad8"
dependencies = [
"bitflags 1.3.2",
"chrono",
@@ -1018,7 +1018,7 @@ dependencies = [
[[package]]
name = "cube-ext"
version = "1.0.0"
-source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=531b925ce8215594a0d7c2151cfc17d6c6b2036c#531b925ce8215594a0d7c2151cfc17d6c6b2036c"
+source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=18d735d8f1b71f3cfbf5e5757b3093b9c19a640f#18d735d8f1b71f3cfbf5e5757b3093b9c19a640f"
dependencies = [
"arrow",
"chrono",
@@ -1155,7 +1155,7 @@ dependencies = [
[[package]]
name = "datafusion"
version = "7.0.0"
-source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=531b925ce8215594a0d7c2151cfc17d6c6b2036c#531b925ce8215594a0d7c2151cfc17d6c6b2036c"
+source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=18d735d8f1b71f3cfbf5e5757b3093b9c19a640f#18d735d8f1b71f3cfbf5e5757b3093b9c19a640f"
dependencies = [
"ahash 0.7.6",
"arrow",
@@ -1188,7 +1188,7 @@ dependencies = [
[[package]]
name = "datafusion-common"
version = "7.0.0"
-source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=531b925ce8215594a0d7c2151cfc17d6c6b2036c#531b925ce8215594a0d7c2151cfc17d6c6b2036c"
+source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=18d735d8f1b71f3cfbf5e5757b3093b9c19a640f#18d735d8f1b71f3cfbf5e5757b3093b9c19a640f"
dependencies = [
"arrow",
"ordered-float 2.10.0",
@@ -1199,7 +1199,7 @@ dependencies = [
[[package]]
name = "datafusion-data-access"
version = "1.0.0"
-source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=531b925ce8215594a0d7c2151cfc17d6c6b2036c#531b925ce8215594a0d7c2151cfc17d6c6b2036c"
+source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=18d735d8f1b71f3cfbf5e5757b3093b9c19a640f#18d735d8f1b71f3cfbf5e5757b3093b9c19a640f"
dependencies = [
"async-trait",
"chrono",
@@ -1212,7 +1212,7 @@ dependencies = [
[[package]]
name = "datafusion-expr"
version = "7.0.0"
-source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=531b925ce8215594a0d7c2151cfc17d6c6b2036c#531b925ce8215594a0d7c2151cfc17d6c6b2036c"
+source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=18d735d8f1b71f3cfbf5e5757b3093b9c19a640f#18d735d8f1b71f3cfbf5e5757b3093b9c19a640f"
dependencies = [
"ahash 0.7.6",
"arrow",
@@ -1223,7 +1223,7 @@ dependencies = [
[[package]]
name = "datafusion-physical-expr"
version = "7.0.0"
-source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=531b925ce8215594a0d7c2151cfc17d6c6b2036c#531b925ce8215594a0d7c2151cfc17d6c6b2036c"
+source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=18d735d8f1b71f3cfbf5e5757b3093b9c19a640f#18d735d8f1b71f3cfbf5e5757b3093b9c19a640f"
dependencies = [
"ahash 0.7.6",
"arrow",
@@ -2925,7 +2925,7 @@ dependencies = [
[[package]]
name = "parquet"
version = "11.1.0"
-source = "git+https://github.com/cube-js/arrow-rs.git?rev=9f2e2862f3f5e5efb1f83364b3ac8492f776a92d#9f2e2862f3f5e5efb1f83364b3ac8492f776a92d"
+source = "git+https://github.com/cube-js/arrow-rs.git?rev=f32dc0f5d2de97433f53dbc18295558e04214ad8#f32dc0f5d2de97433f53dbc18295558e04214ad8"
dependencies = [
"arrow",
"base64 0.13.0",
@@ -4038,7 +4038,7 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
[[package]]
name = "sqlparser"
version = "0.16.0"
-source = "git+https://github.com/cube-js/sqlparser-rs.git?rev=b7f265a4590049f8274cef8411f63eddb5b4bf87#b7f265a4590049f8274cef8411f63eddb5b4bf87"
+source = "git+https://github.com/cube-js/sqlparser-rs.git?rev=6a54d27d3b75a04b9f9cbe309a83078aa54b32fd#6a54d27d3b75a04b9f9cbe309a83078aa54b32fd"
dependencies = [
"log",
]
diff --git a/rust/cubesql/cubesql/Cargo.toml b/rust/cubesql/cubesql/Cargo.toml
index 4510b6b541..e9b88e5dc6 100644
--- a/rust/cubesql/cubesql/Cargo.toml
+++ b/rust/cubesql/cubesql/Cargo.toml
@@ -10,12 +10,12 @@ homepage = "https://cube.dev"
[dependencies]
arc-swap = "1"
-datafusion = { git = 'https://github.com/cube-js/arrow-datafusion.git', rev = "531b925ce8215594a0d7c2151cfc17d6c6b2036c", default-features = false, features = ["regex_expressions", "unicode_expressions"] }
+datafusion = { git = 'https://github.com/cube-js/arrow-datafusion.git', rev = "18d735d8f1b71f3cfbf5e5757b3093b9c19a640f", default-features = false, features = ["regex_expressions", "unicode_expressions"] }
anyhow = "1.0"
thiserror = "1.0.50"
cubeclient = { path = "../cubeclient" }
pg-srv = { path = "../pg-srv" }
-sqlparser = { git = 'https://github.com/cube-js/sqlparser-rs.git', rev = "b7f265a4590049f8274cef8411f63eddb5b4bf87" }
+sqlparser = { git = 'https://github.com/cube-js/sqlparser-rs.git', rev = "6a54d27d3b75a04b9f9cbe309a83078aa54b32fd" }
lazy_static = "1.4.0"
base64 = "0.13.0"
tokio = { version = "^1.35", features = ["full", "rt", "tracing"] }
diff --git a/rust/cubesql/cubesql/e2e/tests/postgres.rs b/rust/cubesql/cubesql/e2e/tests/postgres.rs
index b65183e8cb..3668f2fc28 100644
--- a/rust/cubesql/cubesql/e2e/tests/postgres.rs
+++ b/rust/cubesql/cubesql/e2e/tests/postgres.rs
@@ -973,6 +973,21 @@ impl PostgresIntegrationTestSuite {
)
.await?;
+ // Try to create temporary table with the same name
+ let result = self
+ .test_simple_query(
+ r#"
+ CREATE TEMPORARY TABLE temp_table AS
+ SELECT 5 AS i, 'c' AS s
+ UNION ALL
+ SELECT 10 AS i, 'd' AS s
+ "#
+ .to_string(),
+ |_| {},
+ )
+ .await;
+ assert!(result.is_err());
+
// Other sessions must have no access to temp tables
let new_client = Self::create_client(
format!(
@@ -989,6 +1004,19 @@ impl PostgresIntegrationTestSuite {
.await;
assert!(result.is_err());
+ // But we can create a table with the same name as on another session
+ let result = new_client
+ .simple_query(
+ r#"
+ CREATE TEMPORARY TABLE temp_table AS
+ SELECT 5 AS i, 'c' AS s
+ UNION ALL
+ SELECT 10 AS i, 'd' AS s
+ "#,
+ )
+ .await;
+ assert!(result.is_ok());
+
// Drop table, make sure we can't query it anymore
self.test_simple_query("DROP TABLE temp_table".to_string(), |messages| {
let SimpleQueryMessage::CommandComplete(rows) = &messages[0] else {
@@ -1007,6 +1035,96 @@ impl PostgresIntegrationTestSuite {
.await;
assert!(result.is_err());
+ // Set memory limits for testing: 5 MiB for session, 7 MiB total
+ env::set_var("CUBESQL_TEMP_TABLE_SESSION_MEM", "5");
+ env::set_var("CUBESQL_TEMP_TABLE_TOTAL_MEM", "7");
+
+ // Test that we can hit the session memory limit
+ let large_table_query = "
+ CREATE TEMPORARY TABLE tmp1 AS
+ WITH t1 AS (
+ SELECT '0123456789abcdefghijklnopqrstuvwxyz' AS c1
+ UNION ALL
+ SELECT '0123456789abcdefghijklnopqrstuvwxyz' AS c1
+ UNION ALL
+ SELECT '0123456789abcdefghijklnopqrstuvwxyz' AS c1
+ UNION ALL
+ SELECT '0123456789abcdefghijklnopqrstuvwxyz' AS c1
+ )
+ SELECT c1, c2, c3, c4, c5
+ FROM t1
+ CROSS JOIN (SELECT c1 AS c2 FROM t1) AS t2
+ CROSS JOIN (SELECT c1 AS c3 FROM t1) AS t3
+ CROSS JOIN (SELECT c1 AS c4 FROM t1) AS t4
+ CROSS JOIN (SELECT c1 AS c5 FROM t1) AS t5
+ "; // Estimation might change with arrow upgrades; currently almost 1.5 MiB
+
+ // We can create 3 tables estimating ~4.5 MiB
+ let result = self
+ .test_simple_query(large_table_query.to_string(), |_| {})
+ .await;
+ assert!(result.is_ok());
+ let result = self
+ .test_simple_query(
+ "CREATE TEMPORARY TABLE tmp2 AS SELECT * FROM tmp1".to_string(),
+ |_| {},
+ )
+ .await;
+ assert!(result.is_ok());
+ let result = self
+ .test_simple_query(
+ "CREATE TEMPORARY TABLE tmp3 AS SELECT * FROM tmp1".to_string(),
+ |_| {},
+ )
+ .await;
+ assert!(result.is_ok());
+
+ // Attempting to allocate one more table should throw an error
+ let result = self
+ .test_simple_query(
+ "CREATE TEMPORARY TABLE tmp4 AS SELECT * FROM tmp1".to_string(),
+ |_| {},
+ )
+ .await;
+ assert!(result
+ .unwrap_err()
+ .to_string()
+ .contains("temporary table memory limit reached"));
+
+ // We are currently at 4.5 MiB total limit, hence we should be allowed
+ // to allocate one more similar table in a separate session
+ let result = new_client.simple_query(large_table_query).await;
+ assert!(result.is_ok());
+
+ // Next attempt must hit total memory limit
+ let result = new_client
+ .simple_query("CREATE TEMPORARY TABLE tmp2 AS SELECT * FROM tmp1")
+ .await;
+ assert!(result.is_err());
+
+ // Dropping a table from first session makes quota allow allocation from the second session
+ let result = self
+ .test_simple_query("DROP TABLE tmp3".to_string(), |_| {})
+ .await;
+ assert!(result.is_ok());
+ let result = new_client
+ .simple_query("CREATE TEMPORARY TABLE tmp2 AS SELECT * FROM tmp1")
+ .await;
+ assert!(result.is_ok());
+
+ // Now that the total memory limit is almost hit, make sure the first session
+ // can't get over the limit
+ let result = self
+ .test_simple_query(
+ "CREATE TEMPORARY TABLE tmp3 AS SELECT * FROM tmp1".to_string(),
+ |_| {},
+ )
+ .await;
+ assert!(result
+ .unwrap_err()
+ .to_string()
+ .contains("temporary table memory limit reached"));
+
Ok(())
}
diff --git a/rust/cubesql/cubesql/egraph-debug-template/src/index.js b/rust/cubesql/cubesql/egraph-debug-template/src/index.js
index 0f748647bd..77fef15eeb 100644
--- a/rust/cubesql/cubesql/egraph-debug-template/src/index.js
+++ b/rust/cubesql/cubesql/egraph-debug-template/src/index.js
@@ -28,7 +28,7 @@ const toRegularNode = (n) => ({
const toEdge = (n) => ({
...n,
id: `${n.source}->${n.target}`,
- style: n.source.match(new RegExp(`^${n.target}-`)) ? { stroke: '#f00', 'stroke-width': 10 } : undefined
+ style: n.source.indexOf(`${n.target}-`) === 0 ? { stroke: '#f00', 'stroke-width': 10 } : undefined
});
const initialNodes = data.combos.map(toGroupNode).concat(data.nodes.map(toRegularNode));
const initialEdges = data.edges.map(toEdge);
diff --git a/rust/cubesql/cubesql/src/compile/engine/df/optimizers/filter_push_down.rs b/rust/cubesql/cubesql/src/compile/engine/df/optimizers/filter_push_down.rs
index 08b2ee5bdb..6a5b6cc606 100644
--- a/rust/cubesql/cubesql/src/compile/engine/df/optimizers/filter_push_down.rs
+++ b/rust/cubesql/cubesql/src/compile/engine/df/optimizers/filter_push_down.rs
@@ -498,6 +498,7 @@ fn filter_push_down(
subqueries,
input,
schema,
+ types,
}) => {
// TODO: Push Filter down Subquery
issue_filter(
@@ -516,6 +517,7 @@ fn filter_push_down(
optimizer_config,
)?),
schema: schema.clone(),
+ types: types.clone(),
}),
)
}
diff --git a/rust/cubesql/cubesql/src/compile/engine/df/optimizers/limit_push_down.rs b/rust/cubesql/cubesql/src/compile/engine/df/optimizers/limit_push_down.rs
index dfd7d57ebc..f25d66cda0 100644
--- a/rust/cubesql/cubesql/src/compile/engine/df/optimizers/limit_push_down.rs
+++ b/rust/cubesql/cubesql/src/compile/engine/df/optimizers/limit_push_down.rs
@@ -339,6 +339,7 @@ fn limit_push_down(
subqueries,
input,
schema,
+ types,
}) => {
// TODO: Pushing Limit down Subquery?
issue_limit(
@@ -359,6 +360,7 @@ fn limit_push_down(
optimizer_config,
)?),
schema: schema.clone(),
+ types: types.clone(),
}),
)
}
diff --git a/rust/cubesql/cubesql/src/compile/engine/df/optimizers/sort_push_down.rs b/rust/cubesql/cubesql/src/compile/engine/df/optimizers/sort_push_down.rs
index 4b03e04131..e77cb44b13 100644
--- a/rust/cubesql/cubesql/src/compile/engine/df/optimizers/sort_push_down.rs
+++ b/rust/cubesql/cubesql/src/compile/engine/df/optimizers/sort_push_down.rs
@@ -295,6 +295,7 @@ fn sort_push_down(
subqueries,
input,
schema,
+ types,
}) => {
// TODO: Pushing Sort down Subquery?
issue_sort(
@@ -306,6 +307,7 @@ fn sort_push_down(
.collect::>()?,
input: Arc::new(sort_push_down(optimizer, input, None, optimizer_config)?),
schema: schema.clone(),
+ types: types.clone(),
}),
)
}
diff --git a/rust/cubesql/cubesql/src/compile/engine/df/optimizers/utils.rs b/rust/cubesql/cubesql/src/compile/engine/df/optimizers/utils.rs
index 567ae3e0d1..9fd8f47ec2 100644
--- a/rust/cubesql/cubesql/src/compile/engine/df/optimizers/utils.rs
+++ b/rust/cubesql/cubesql/src/compile/engine/df/optimizers/utils.rs
@@ -48,7 +48,12 @@ pub fn rewrite(expr: &Expr, map: &HashMap>) -> Result {
+ Expr::AnyExpr {
+ left,
+ op,
+ right,
+ all,
+ } => {
let rewrites = match (rewrite(left, map)?, rewrite(right, map)?) {
(Some(left), Some(right)) => Some((left, right)),
_ => None,
@@ -57,6 +62,7 @@ pub fn rewrite(expr: &Expr, map: &HashMap>) -> Result>) -> Result None,
+ Expr::InSubquery {
+ expr,
+ subquery,
+ negated,
+ } => {
+ let rewrites = match (rewrite(expr, map)?, rewrite(subquery, map)?) {
+ (Some(expr), Some(subquery)) => Some((expr, subquery)),
+ _ => None,
+ };
+ rewrites.map(|(expr, subquery)| Expr::InSubquery {
+ expr: Box::new(expr),
+ subquery: Box::new(subquery),
+ negated: negated.clone(),
+ })
+ }
})
}
diff --git a/rust/cubesql/cubesql/src/compile/engine/df/planner.rs b/rust/cubesql/cubesql/src/compile/engine/df/planner.rs
index 4b36168b61..54ad92622b 100644
--- a/rust/cubesql/cubesql/src/compile/engine/df/planner.rs
+++ b/rust/cubesql/cubesql/src/compile/engine/df/planner.rs
@@ -1,5 +1,6 @@
use std::sync::Arc;
+use crate::config::ConfigObj;
use async_trait::async_trait;
use datafusion::{
error::Result,
@@ -15,11 +16,20 @@ use super::scan::CubeScanExtensionPlanner;
pub struct CubeQueryPlanner {
pub transport: Arc,
pub meta: LoadRequestMeta,
+ pub config_obj: Arc,
}
impl CubeQueryPlanner {
- pub fn new(transport: Arc, meta: LoadRequestMeta) -> Self {
- Self { transport, meta }
+ pub fn new(
+ transport: Arc,
+ meta: LoadRequestMeta,
+ config_obj: Arc,
+ ) -> Self {
+ Self {
+ transport,
+ meta,
+ config_obj,
+ }
}
}
@@ -36,6 +46,7 @@ impl QueryPlanner for CubeQueryPlanner {
CubeScanExtensionPlanner {
transport: self.transport.clone(),
meta: self.meta.clone(),
+ config_obj: self.config_obj.clone(),
},
)]);
// Delegate most work of physical planning to the default physical planner
diff --git a/rust/cubesql/cubesql/src/compile/engine/df/scan.rs b/rust/cubesql/cubesql/src/compile/engine/df/scan.rs
index 5ec0ef14b8..611770f32c 100644
--- a/rust/cubesql/cubesql/src/compile/engine/df/scan.rs
+++ b/rust/cubesql/cubesql/src/compile/engine/df/scan.rs
@@ -34,6 +34,7 @@ use crate::{
find_cube_scans_deep_search,
rewrite::WrappedSelectType,
},
+ config::ConfigObj,
sql::AuthContextRef,
transport::{CubeStreamReceiver, LoadRequestMeta, SpanId, TransportService},
CubeError,
@@ -341,6 +342,7 @@ impl UserDefinedLogicalNode for WrappedSelectNode {
pub struct CubeScanExtensionPlanner {
pub transport: Arc,
pub meta: LoadRequestMeta,
+ pub config_obj: Arc,
}
impl ExtensionPlanner for CubeScanExtensionPlanner {
@@ -369,6 +371,7 @@ impl ExtensionPlanner for CubeScanExtensionPlanner {
options: scan_node.options.clone(),
meta: self.meta.clone(),
span_id: scan_node.span_id.clone(),
+ config_obj: self.config_obj.clone(),
}))
} else if let Some(wrapper_node) = node.as_any().downcast_ref::() {
// TODO
@@ -404,6 +407,7 @@ impl ExtensionPlanner for CubeScanExtensionPlanner {
options: scan_node.options.clone(),
meta: self.meta.clone(),
span_id: scan_node.span_id.clone(),
+ config_obj: self.config_obj.clone(),
}))
} else {
None
@@ -426,6 +430,7 @@ struct CubeScanExecutionPlan {
// injected by extension planner
meta: LoadRequestMeta,
span_id: Option>,
+ config_obj: Arc,
}
#[derive(Debug)]
@@ -582,14 +587,8 @@ impl ExecutionPlan for CubeScanExecutionPlan {
_context: Arc,
) -> Result {
// TODO: move envs to config
- let stream_mode = std::env::var("CUBESQL_STREAM_MODE")
- .ok()
- .map(|v| v.parse::().unwrap())
- .unwrap_or(false);
- let query_limit = std::env::var("CUBEJS_DB_QUERY_LIMIT")
- .ok()
- .map(|v| v.parse::().unwrap())
- .unwrap_or(50000);
+ let stream_mode = self.config_obj.stream_mode();
+ let query_limit = self.config_obj.non_streaming_query_max_row_limit();
let stream_mode = match (stream_mode, self.request.limit) {
(true, None) => true,
@@ -1406,6 +1405,7 @@ mod tests {
transport: get_test_transport(),
meta: get_test_load_meta(DatabaseProtocol::PostgreSQL),
span_id: None,
+ config_obj: crate::config::Config::test().config_obj(),
};
let runtime = Arc::new(
diff --git a/rust/cubesql/cubesql/src/compile/engine/df/wrapper.rs b/rust/cubesql/cubesql/src/compile/engine/df/wrapper.rs
index ed09a7fcc6..077b9ecb5e 100644
--- a/rust/cubesql/cubesql/src/compile/engine/df/wrapper.rs
+++ b/rust/cubesql/cubesql/src/compile/engine/df/wrapper.rs
@@ -3,6 +3,7 @@ use crate::{
engine::df::scan::{CubeScanNode, DataType, MemberField, WrappedSelectNode},
rewrite::WrappedSelectType,
},
+ config::ConfigObj,
sql::AuthContextRef,
transport::{
AliasedColumn, LoadRequestMeta, MetaContext, SpanId, SqlGenerator, SqlTemplates,
@@ -10,7 +11,7 @@ use crate::{
},
CubeError,
};
-use chrono::{Days, NaiveDate};
+use chrono::{Days, NaiveDate, SecondsFormat, TimeZone, Utc};
use cubeclient::models::V1LoadRequestQuery;
use datafusion::{
error::{DataFusionError, Result},
@@ -107,6 +108,7 @@ pub struct CubeScanWrapperNode {
pub request: Option,
pub member_fields: Option>,
pub span_id: Option>,
+ pub config_obj: Arc,
}
impl CubeScanWrapperNode {
@@ -115,6 +117,7 @@ impl CubeScanWrapperNode {
meta: Arc,
auth_context: AuthContextRef,
span_id: Option>,
+ config_obj: Arc,
) -> Self {
Self {
wrapped_plan,
@@ -124,6 +127,7 @@ impl CubeScanWrapperNode {
request: None,
member_fields: None,
span_id,
+ config_obj,
}
}
@@ -141,6 +145,7 @@ impl CubeScanWrapperNode {
request: Some(request),
member_fields: Some(member_fields),
span_id: self.span_id.clone(),
+ config_obj: self.config_obj.clone(),
}
}
}
@@ -165,6 +170,48 @@ lazy_static! {
static ref DATE_PART_REGEX: Regex = Regex::new("^[A-Za-z_ ]+$").unwrap();
}
+macro_rules! generate_sql_for_timestamp {
+ (@generic $value:ident, $value_block:expr, $sql_generator:expr, $sql_query:expr) => {
+ if let Some($value) = $value {
+ let value = $value_block.to_rfc3339_opts(SecondsFormat::Millis, true);
+ (
+ $sql_generator
+ .get_sql_templates()
+ .timestamp_literal_expr(value)
+ .map_err(|e| {
+ DataFusionError::Internal(format!(
+ "Can't generate SQL for timestamp: {}",
+ e
+ ))
+ })?,
+ $sql_query,
+ )
+ } else {
+ ("NULL".to_string(), $sql_query)
+ }
+ };
+ ($value:ident, timestamp, $sql_generator:expr, $sql_query:expr) => {
+ generate_sql_for_timestamp!(
+ @generic $value, { Utc.timestamp_opt($value as i64, 0).unwrap() }, $sql_generator, $sql_query
+ )
+ };
+ ($value:ident, timestamp_millis_opt, $sql_generator:expr, $sql_query:expr) => {
+ generate_sql_for_timestamp!(
+ @generic $value, { Utc.timestamp_millis_opt($value as i64).unwrap() }, $sql_generator, $sql_query
+ )
+ };
+ ($value:ident, timestamp_micros, $sql_generator:expr, $sql_query:expr) => {
+ generate_sql_for_timestamp!(
+ @generic $value, { Utc.timestamp_micros($value as i64).unwrap() }, $sql_generator, $sql_query
+ )
+ };
+ ($value:ident, $method:ident, $sql_generator:expr, $sql_query:expr) => {
+ generate_sql_for_timestamp!(
+ @generic $value, { Utc.$method($value as i64) }, $sql_generator, $sql_query
+ )
+ };
+}
+
impl CubeScanWrapperNode {
pub async fn generate_sql(
&self,
@@ -172,11 +219,12 @@ impl CubeScanWrapperNode {
load_request_meta: Arc,
) -> result::Result {
let schema = self.schema();
+ let wrapped_plan = self.wrapped_plan.clone();
let (sql, request, member_fields) = Self::generate_sql_for_node(
Arc::new(self.clone()),
transport,
load_request_meta,
- self.wrapped_plan.clone(),
+ self.clone().set_max_limit_for_node(wrapped_plan),
true,
)
.await
@@ -214,6 +262,45 @@ impl CubeScanWrapperNode {
Ok(self.with_sql_and_request(sql, request, member_fields))
}
+ pub fn set_max_limit_for_node(self, node: Arc) -> Arc {
+ let stream_mode = self.config_obj.stream_mode();
+ if stream_mode {
+ return node;
+ }
+
+ let query_limit = self.config_obj.non_streaming_query_max_row_limit();
+ match node.as_ref() {
+ LogicalPlan::Extension(Extension {
+ node: extension_node,
+ }) => {
+ let cube_scan_node = extension_node
+ .as_any()
+ .downcast_ref::()
+ .cloned();
+ let wrapped_select_node = extension_node
+ .as_any()
+ .downcast_ref::()
+ .cloned();
+ if let Some(node) = cube_scan_node {
+ let mut new_node = node.clone();
+ new_node.request.limit = Some(query_limit);
+ Arc::new(LogicalPlan::Extension(Extension {
+ node: Arc::new(new_node),
+ }))
+ } else if let Some(node) = wrapped_select_node {
+ let mut new_node = node.clone();
+ new_node.limit = Some(query_limit as usize);
+ Arc::new(LogicalPlan::Extension(Extension {
+ node: Arc::new(new_node),
+ }))
+ } else {
+ node.clone()
+ }
+ }
+ _ => node.clone(),
+ }
+ }
+
pub fn generate_sql_for_node(
plan: Arc,
transport: Arc,
@@ -310,7 +397,7 @@ impl CubeScanWrapperNode {
window_expr,
from,
joins: _joins,
- filter_expr: _filter_expr,
+ filter_expr,
having_expr: _having_expr,
limit,
offset,
@@ -443,6 +530,20 @@ impl CubeScanWrapperNode {
)
.await?;
+ let (filter, sql) = Self::generate_column_expr(
+ plan.clone(),
+ schema.clone(),
+ filter_expr.clone(),
+ sql,
+ generator.clone(),
+ &column_remapping,
+ &mut next_remapping,
+ alias.clone(),
+ can_rename_columns,
+ ungrouped_scan_node.clone(),
+ )
+ .await?;
+
let (window, sql) = Self::generate_column_expr(
plan.clone(),
schema.clone(),
@@ -548,6 +649,17 @@ impl CubeScanWrapperNode {
})
.collect::>()?,
);
+ load_request.segments = Some(
+ filter
+ .iter()
+ .map(|m| {
+ Self::ungrouped_member_def(
+ m,
+ &ungrouped_scan_node.used_cubes,
+ )
+ })
+ .collect::>()?,
+ );
if !order_expr.is_empty() {
load_request.order = Some(
order_expr
@@ -651,7 +763,16 @@ impl CubeScanWrapperNode {
aggregate,
// TODO
from_alias.unwrap_or("".to_string()),
- None,
+ if !filter.is_empty() {
+ Some(
+ filter
+ .iter()
+ .map(|f| f.expr.to_string())
+ .join(" AND "),
+ )
+ } else {
+ None
+ },
None,
order,
limit,
@@ -778,25 +899,23 @@ impl CubeScanWrapperNode {
} else {
original_alias.clone()
};
- if original_alias != alias {
- if !next_remapping.contains_key(&Column::from_name(&alias)) {
- next_remapping.insert(original_alias_key, Column::from_name(&alias));
- next_remapping.insert(
- Column {
- name: original_alias.clone(),
- relation: from_alias.clone(),
- },
- Column {
- name: alias.clone(),
- relation: from_alias.clone(),
- },
- );
- } else {
- return Err(CubeError::internal(format!(
- "Can't generate SQL for column expr: duplicate alias {}",
- alias
- )));
- }
+ if !next_remapping.contains_key(&Column::from_name(&alias)) {
+ next_remapping.insert(original_alias_key, Column::from_name(&alias));
+ next_remapping.insert(
+ Column {
+ name: original_alias.clone(),
+ relation: from_alias.clone(),
+ },
+ Column {
+ name: alias.clone(),
+ relation: from_alias.clone(),
+ },
+ );
+ } else {
+ return Err(CubeError::internal(format!(
+ "Can't generate SQL for column expr: duplicate alias {}",
+ alias
+ )));
}
aliased_columns.push(AliasedColumn {
@@ -1284,10 +1403,33 @@ impl CubeScanWrapperNode {
}
}
// ScalarValue::Date64(_) => {}
- // ScalarValue::TimestampSecond(_, _) => {}
- // ScalarValue::TimestampMillisecond(_, _) => {}
- // ScalarValue::TimestampMicrosecond(_, _) => {}
- // ScalarValue::TimestampNanosecond(_, _) => {}
+ ScalarValue::TimestampSecond(s, _) => {
+ generate_sql_for_timestamp!(s, timestamp, sql_generator, sql_query)
+ }
+ ScalarValue::TimestampMillisecond(ms, None) => {
+ generate_sql_for_timestamp!(
+ ms,
+ timestamp_millis_opt,
+ sql_generator,
+ sql_query
+ )
+ }
+ ScalarValue::TimestampMicrosecond(ms, None) => {
+ generate_sql_for_timestamp!(
+ ms,
+ timestamp_micros,
+ sql_generator,
+ sql_query
+ )
+ }
+ ScalarValue::TimestampNanosecond(nanoseconds, None) => {
+ generate_sql_for_timestamp!(
+ nanoseconds,
+ timestamp_nanos,
+ sql_generator,
+ sql_query
+ )
+ }
ScalarValue::IntervalYearMonth(x) => {
if let Some(x) = x {
let (num, date_part) = (x, "MONTH");
@@ -1690,6 +1832,7 @@ impl UserDefinedLogicalNode for CubeScanWrapperNode {
request: self.request.clone(),
member_fields: self.member_fields.clone(),
span_id: self.span_id.clone(),
+ config_obj: self.config_obj.clone(),
})
}
}
diff --git a/rust/cubesql/cubesql/src/compile/engine/information_schema/postgres/mod.rs b/rust/cubesql/cubesql/src/compile/engine/information_schema/postgres/mod.rs
index d3706882b5..6a60560eb3 100644
--- a/rust/cubesql/cubesql/src/compile/engine/information_schema/postgres/mod.rs
+++ b/rust/cubesql/cubesql/src/compile/engine/information_schema/postgres/mod.rs
@@ -6,6 +6,7 @@ pub mod columns;
pub mod constraint_column_usage;
pub mod key_column_usage;
pub mod referential_constraints;
+pub mod schemata;
pub mod table_constraints;
pub mod tables;
pub mod views;
diff --git a/rust/cubesql/cubesql/src/compile/engine/information_schema/postgres/schemata.rs b/rust/cubesql/cubesql/src/compile/engine/information_schema/postgres/schemata.rs
new file mode 100644
index 0000000000..8f7fcbcca9
--- /dev/null
+++ b/rust/cubesql/cubesql/src/compile/engine/information_schema/postgres/schemata.rs
@@ -0,0 +1,137 @@
+use std::{any::Any, sync::Arc};
+
+use async_trait::async_trait;
+use datafusion::{
+ arrow::{
+ array::{Array, ArrayRef, StringBuilder},
+ datatypes::{DataType, Field, Schema, SchemaRef},
+ record_batch::RecordBatch,
+ },
+ datasource::{datasource::TableProviderFilterPushDown, TableProvider, TableType},
+ error::DataFusionError,
+ logical_plan::Expr,
+ physical_plan::{memory::MemoryExec, ExecutionPlan},
+};
+
+struct InformationSchemaSchemataBuilder {
+ catalog_names: StringBuilder,
+ schema_names: StringBuilder,
+ schema_owners: StringBuilder,
+ default_character_set_catalogs: StringBuilder,
+ default_character_set_schemas: StringBuilder,
+ default_character_set_names: StringBuilder,
+ sql_paths: StringBuilder,
+}
+
+impl InformationSchemaSchemataBuilder {
+ fn new(capacity: usize) -> Self {
+ Self {
+ catalog_names: StringBuilder::new(capacity),
+ schema_names: StringBuilder::new(capacity),
+ schema_owners: StringBuilder::new(capacity),
+ default_character_set_catalogs: StringBuilder::new(capacity),
+ default_character_set_schemas: StringBuilder::new(capacity),
+ default_character_set_names: StringBuilder::new(capacity),
+ sql_paths: StringBuilder::new(capacity),
+ }
+ }
+
+ fn add_schema(
+ &mut self,
+ catalog_name: impl AsRef,
+ schema_name: impl AsRef,
+ schema_owner: impl AsRef,
+ ) {
+ self.catalog_names
+ .append_value(catalog_name.as_ref())
+ .unwrap();
+ self.schema_names
+ .append_value(schema_name.as_ref())
+ .unwrap();
+ self.schema_owners
+ .append_value(schema_owner.as_ref())
+ .unwrap();
+ self.default_character_set_catalogs.append_null().unwrap();
+ self.default_character_set_schemas.append_null().unwrap();
+ self.default_character_set_names.append_null().unwrap();
+ self.sql_paths.append_null().unwrap();
+ }
+
+ fn finish(mut self) -> Vec> {
+ let mut columns: Vec> = vec![];
+
+ columns.push(Arc::new(self.catalog_names.finish()));
+ columns.push(Arc::new(self.schema_names.finish()));
+ columns.push(Arc::new(self.schema_owners.finish()));
+ columns.push(Arc::new(self.default_character_set_catalogs.finish()));
+ columns.push(Arc::new(self.default_character_set_schemas.finish()));
+ columns.push(Arc::new(self.default_character_set_names.finish()));
+ columns.push(Arc::new(self.sql_paths.finish()));
+
+ columns
+ }
+}
+
+pub struct InfoSchemaSchemataProvider {
+ data: Arc>,
+}
+
+impl InfoSchemaSchemataProvider {
+ pub fn new(db_name: &str) -> Self {
+ let mut builder = InformationSchemaSchemataBuilder::new(4);
+
+ builder.add_schema(db_name, "public", "pg_database_owner");
+ builder.add_schema(db_name, "information_schema", "postgres");
+ builder.add_schema(db_name, "pg_catalog", "postgres");
+ builder.add_schema(db_name, "pg_toast", "postgres");
+
+ Self {
+ data: Arc::new(builder.finish()),
+ }
+ }
+}
+
+#[async_trait]
+impl TableProvider for InfoSchemaSchemataProvider {
+ fn as_any(&self) -> &dyn Any {
+ self
+ }
+
+ fn table_type(&self) -> TableType {
+ TableType::View
+ }
+
+ fn schema(&self) -> SchemaRef {
+ Arc::new(Schema::new(vec![
+ Field::new("catalog_name", DataType::Utf8, false),
+ Field::new("schema_name", DataType::Utf8, false),
+ Field::new("schema_owner", DataType::Utf8, false),
+ Field::new("default_character_set_catalog", DataType::Utf8, true),
+ Field::new("default_character_set_schema", DataType::Utf8, true),
+ Field::new("default_character_set_name", DataType::Utf8, true),
+ Field::new("sql_path", DataType::Utf8, true),
+ ]))
+ }
+
+ async fn scan(
+ &self,
+ projection: &Option>,
+ _filters: &[Expr],
+ _limit: Option,
+ ) -> Result, DataFusionError> {
+ let batch = RecordBatch::try_new(self.schema(), self.data.to_vec())?;
+
+ Ok(Arc::new(MemoryExec::try_new(
+ &[vec![batch]],
+ self.schema(),
+ projection.clone(),
+ )?))
+ }
+
+ fn supports_filter_pushdown(
+ &self,
+ _filter: &Expr,
+ ) -> Result {
+ Ok(TableProviderFilterPushDown::Unsupported)
+ }
+}
diff --git a/rust/cubesql/cubesql/src/compile/engine/provider.rs b/rust/cubesql/cubesql/src/compile/engine/provider.rs
index 23451cfea2..77a9505dec 100644
--- a/rust/cubesql/cubesql/src/compile/engine/provider.rs
+++ b/rust/cubesql/cubesql/src/compile/engine/provider.rs
@@ -40,6 +40,7 @@ use super::information_schema::postgres::{
constraint_column_usage::InfoSchemaConstraintColumnUsageProvider as PostgresSchemaConstraintColumnUsageProvider,
key_column_usage::InfoSchemaKeyColumnUsageProvider as PostgresSchemaKeyColumnUsageProvider,
referential_constraints::InfoSchemaReferentialConstraintsProvider as PostgresSchemaReferentialConstraintsProvider,
+ schemata::InfoSchemaSchemataProvider as PostgresSchemaSchemataProvider,
table_constraints::InfoSchemaTableConstraintsProvider as PostgresSchemaTableConstraintsProvider,
tables::InfoSchemaTableProvider as PostgresSchemaTableProvider,
views::InfoSchemaViewsProvider as PostgresSchemaViewsProvider,
@@ -295,6 +296,8 @@ impl DatabaseProtocol {
"information_schema.role_table_grants".to_string()
} else if let Some(_) = any.downcast_ref::() {
"information_schema.role_column_grants".to_string()
+ } else if let Some(_) = any.downcast_ref::() {
+ "information_schema.schemata".to_string()
} else if let Some(_) = any.downcast_ref::() {
"pg_catalog.pg_tables".to_string()
} else if let Some(_) = any.downcast_ref::() {
@@ -509,6 +512,11 @@ impl DatabaseProtocol {
return Some(Arc::new(PostgresSchemaConstraintColumnUsageProvider::new()))
}
"views" => return Some(Arc::new(PostgresSchemaViewsProvider::new())),
+ "schemata" => {
+ return Some(Arc::new(PostgresSchemaSchemataProvider::new(
+ &context.session_state.database().unwrap_or("db".to_string()),
+ )))
+ }
#[cfg(debug_assertions)]
"testing_dataset" => {
return Some(Arc::new(InfoSchemaTestingDatasetProvider::new(5, 1000)))
diff --git a/rust/cubesql/cubesql/src/compile/engine/udf.rs b/rust/cubesql/cubesql/src/compile/engine/udf.rs
index 6302f0c496..3dd9f45ad2 100644
--- a/rust/cubesql/cubesql/src/compile/engine/udf.rs
+++ b/rust/cubesql/cubesql/src/compile/engine/udf.rs
@@ -771,23 +771,45 @@ pub fn create_datediff_udf() -> ScalarUDF {
assert!(args.len() == 3);
let datepart_array = downcast_string_arg!(args[0], "datepart", i32);
- match (&args[1].data_type(), &args[2].data_type()) {
- (
- DataType::Timestamp(TimeUnit::Nanosecond, None),
- DataType::Timestamp(TimeUnit::Nanosecond, None),
- ) => (),
- _ => {
+
+ let left_date_array = match args[1].data_type() {
+ DataType::Timestamp(TimeUnit::Nanosecond, None) => Arc::clone(&args[1]),
+ DataType::Timestamp(TimeUnit::Microsecond, None)
+ | DataType::Timestamp(TimeUnit::Millisecond, None)
+ | DataType::Timestamp(TimeUnit::Second, None) => cast_with_options(
+ &args[1],
+ &DataType::Timestamp(TimeUnit::Nanosecond, None),
+ &CastOptions { safe: false },
+ )?,
+ t => {
return Err(DataFusionError::Execution(format!(
- "date arguments must be of type TimestampNanosecond, actual: {}, {}",
- &args[1].data_type(),
- &args[2].data_type(),
- )));
+ "second datediff argument must be of type Timestamp actual: {}",
+ t
+ )))
}
- }
+ };
+
+ let right_date_array = match args[2].data_type() {
+ DataType::Timestamp(TimeUnit::Nanosecond, None) => Arc::clone(&args[2]),
+ DataType::Timestamp(TimeUnit::Microsecond, None)
+ | DataType::Timestamp(TimeUnit::Millisecond, None)
+ | DataType::Timestamp(TimeUnit::Second, None) => cast_with_options(
+ &args[2],
+ &DataType::Timestamp(TimeUnit::Nanosecond, None),
+ &CastOptions { safe: false },
+ )?,
+ t => {
+ return Err(DataFusionError::Execution(format!(
+ "third datediff argument must be of type Timestamp actual: {}",
+ t
+ )))
+ }
+ };
+
let left_date_array =
- downcast_primitive_arg!(args[1], "left_date", TimestampNanosecondType);
+ downcast_primitive_arg!(left_date_array, "left_date", TimestampNanosecondType);
let right_date_array =
- downcast_primitive_arg!(args[2], "right_date", TimestampNanosecondType);
+ downcast_primitive_arg!(right_date_array, "right_date", TimestampNanosecondType);
let result = izip!(datepart_array, left_date_array, right_date_array)
.map(|args| {
diff --git a/rust/cubesql/cubesql/src/compile/mod.rs b/rust/cubesql/cubesql/src/compile/mod.rs
index 7f76f099c7..ee4acb9c1a 100644
--- a/rust/cubesql/cubesql/src/compile/mod.rs
+++ b/rust/cubesql/cubesql/src/compile/mod.rs
@@ -1347,6 +1347,7 @@ WHERE `TABLE_SCHEMA` = '{}'",
let query_planner = Arc::new(CubeQueryPlanner::new(
self.session_manager.server.transport.clone(),
self.state.get_load_request_meta(),
+ self.session_manager.server.config_obj.clone(),
));
let mut ctx = DFSessionContext::with_state(
default_session_builder(
@@ -2020,8 +2021,8 @@ mod tests {
compile::{
rewrite::rewriter::Rewriter,
test::{
- get_string_cube_meta, get_test_session_with_config, get_test_tenant_ctx_customized,
- get_test_tenant_ctx_with_meta,
+ get_sixteen_char_member_cube, get_string_cube_meta, get_test_session_with_config,
+ get_test_tenant_ctx_customized, get_test_tenant_ctx_with_meta,
},
},
config::{ConfigObj, ConfigObjImpl},
@@ -3305,29 +3306,100 @@ mod tests {
);
}
+ #[tokio::test]
+ async fn sum_to_count_push_down() {
+ init_logger();
+
+ let query_plan = convert_select_to_query_plan(
+ "SELECT SUM(1) AS \"count\" FROM \"public\".\"KibanaSampleDataEcommerce\" \"KibanaSampleDataEcommerce\"".to_string(),
+ DatabaseProtocol::PostgreSQL,
+ ).await;
+
+ let logical_plan = query_plan.as_logical_plan();
+ assert_eq!(
+ logical_plan.find_cube_scan().request,
+ V1LoadRequestQuery {
+ measures: Some(vec!["KibanaSampleDataEcommerce.count".to_string()]),
+ segments: Some(vec![]),
+ dimensions: Some(vec![]),
+ time_dimensions: None,
+ order: None,
+ limit: None,
+ offset: None,
+ filters: None,
+ ungrouped: None,
+ }
+ );
+ }
+
#[tokio::test]
async fn tableau_having_count_on_cube_without_count() {
+ if !Rewriter::sql_push_down_enabled() {
+ return;
+ }
init_logger();
- // let query_plan = convert_select_to_query_plan(
- // "SELECT COUNT(DISTINCT \"Logs\".\"agentCount\") AS \"sum:count:ok\" FROM \"public\".\"Logs\" \"Logs\" HAVING (COUNT(1) > 0)".to_string(),
- // DatabaseProtocol::PostgreSQL,
- // ).await;
+ let query_plan = convert_select_to_query_plan(
+ "SELECT COUNT(DISTINCT \"Logs\".\"agentCount\") AS \"sum:count:ok\" FROM \"public\".\"Logs\" \"Logs\" HAVING (COUNT(1) > 0)".to_string(),
+ DatabaseProtocol::PostgreSQL,
+ ).await;
- // let logical_plan = query_plan.as_logical_plan();
- // assert_eq!(
- // logical_plan.find_cube_scan().request,
- // V1LoadRequestQuery {
- // measures: Some(vec!["Logs.agentCount".to_string()]),
- // segments: Some(vec![]),
- // dimensions: Some(vec![]),
- // time_dimensions: None,
- // order: None,
- // limit: None,
- // offset: None,
- // filters: None,
- // }
- // );
+ let physical_plan = query_plan.as_physical_plan().await.unwrap();
+ println!(
+ "Physical plan: {}",
+ displayable(physical_plan.as_ref()).indent()
+ );
+
+ let logical_plan = query_plan.as_logical_plan();
+ assert_eq!(
+ logical_plan.find_cube_scan().request,
+ V1LoadRequestQuery {
+ measures: Some(vec![]),
+ segments: Some(vec![]),
+ dimensions: Some(vec![]),
+ time_dimensions: None,
+ order: None,
+ limit: None,
+ offset: None,
+ filters: None,
+ ungrouped: Some(true),
+ }
+ );
+ }
+
+ #[tokio::test]
+ async fn tableau_having_count_with_sum_on_cube_without_count() {
+ if !Rewriter::sql_push_down_enabled() {
+ return;
+ }
+ init_logger();
+
+ let query_plan = convert_select_to_query_plan(
+ "SELECT COUNT(DISTINCT \"Logs\".\"agentCount\") AS \"sum:count:ok\", SUM(1) AS \"count:ok\" FROM \"public\".\"Logs\" \"Logs\" HAVING (COUNT(1) > 0)".to_string(),
+ DatabaseProtocol::PostgreSQL,
+ ).await;
+
+ let physical_plan = query_plan.as_physical_plan().await.unwrap();
+ println!(
+ "Physical plan: {}",
+ displayable(physical_plan.as_ref()).indent()
+ );
+
+ let logical_plan = query_plan.as_logical_plan();
+ assert_eq!(
+ logical_plan.find_cube_scan().request,
+ V1LoadRequestQuery {
+ measures: Some(vec![]),
+ segments: Some(vec![]),
+ dimensions: Some(vec![]),
+ time_dimensions: None,
+ order: None,
+ limit: None,
+ offset: None,
+ filters: None,
+ ungrouped: Some(true),
+ }
+ );
}
#[tokio::test]
@@ -4112,6 +4184,46 @@ ORDER BY \"COUNT(count)\" DESC"
);
}
+ #[tokio::test]
+ async fn tableau_gte_constant() {
+ init_logger();
+
+ let query_plan = convert_select_to_query_plan(
+ r#"
+ SELECT
+ (
+ "KibanaSampleDataEcommerce"."order_date" >= DATE_TRUNC(
+ 'MONTH',
+ CAST(CAST('2024-01-01' AS DATE) AS TIMESTAMP)
+ )
+ ) AS "Calculation_2760495522668597250"
+FROM
+ "public"."KibanaSampleDataEcommerce" "KibanaSampleDataEcommerce"
+GROUP BY
+ 1
+ "#
+ .to_string(),
+ DatabaseProtocol::PostgreSQL,
+ )
+ .await;
+
+ let logical_plan = query_plan.as_logical_plan();
+ assert_eq!(
+ logical_plan.find_cube_scan().request,
+ V1LoadRequestQuery {
+ measures: Some(vec![]),
+ segments: Some(vec![]),
+ dimensions: Some(vec!["KibanaSampleDataEcommerce.order_date".to_string()]),
+ time_dimensions: None,
+ order: None,
+ limit: None,
+ offset: None,
+ filters: None,
+ ungrouped: None,
+ }
+ );
+ }
+
#[tokio::test]
async fn measure_used_on_dimension() {
init_logger();
@@ -4436,6 +4548,140 @@ limit
);
}
+ #[tokio::test]
+ async fn powerbi_year_month_split() {
+ init_logger();
+
+ let query_plan = convert_select_to_query_plan(
+ r#"select
+ "_"."order_date_year_month" as "c11",
+ "_"."a0" as "a0"
+from
+ (
+ select
+ "_"."order_date_year_month",
+ "_"."a0"
+ from
+ (
+ select
+ "_"."order_date_year_month",
+ "_"."a0"
+ from
+ (
+ select
+ "rows"."order_date_year_month" as "order_date_year_month",
+ sum(cast("rows"."sumPrice" as decimal)) as "a0"
+ from
+ (
+ select
+ "_"."sumPrice" as "sumPrice",
+ (
+ case
+ when left(
+ cast(
+ extract(
+ year
+ from
+ "_"."order_date"
+ ) as varchar
+ ),
+ 4000
+ ) is not null then left(
+ cast(
+ extract(
+ year
+ from
+ "_"."order_date"
+ ) as varchar
+ ),
+ 4000
+ )
+ else ''
+ end
+ ) || (
+ '-' || (
+ case
+ when left(
+ cast(
+ extract(
+ month
+ from
+ "_"."order_date"
+ ) as varchar
+ ),
+ 4000
+ ) is not null then left(
+ cast(
+ extract(
+ month
+ from
+ "_"."order_date"
+ ) as varchar
+ ),
+ 4000
+ )
+ else ''
+ end
+ )
+ ) as "order_date_year_month"
+ from
+ (
+ select
+ "_"."sumPrice",
+ "_"."order_date"
+ from
+ (
+ select
+ "sumPrice",
+ "order_date"
+ from
+ "public"."KibanaSampleDataEcommerce" "$Table"
+ ) "_"
+ where
+ "_"."order_date" < timestamp '2023-10-08 00:00:00'
+ and "_"."order_date" >= timestamp '2023-07-08 00:00:00'
+ ) "_"
+ ) "rows"
+ group by
+ "order_date_year_month"
+ ) "_"
+ where
+ not "_"."a0" is null
+ ) "_"
+ ) "_"
+order by
+ "_"."a0" desc,
+ "_"."order_date_year_month"
+limit
+ 1001"#
+ .to_string(),
+ DatabaseProtocol::PostgreSQL,
+ )
+ .await;
+
+ let physical_plan = query_plan.as_physical_plan().await.unwrap();
+ println!(
+ "Physical plan: {}",
+ displayable(physical_plan.as_ref()).indent()
+ );
+
+ let logical_plan = query_plan.as_logical_plan();
+ assert_eq!(
+ logical_plan.find_cube_scan().request,
+ V1LoadRequestQuery {
+ measures: Some(vec![]),
+ dimensions: Some(vec![]),
+ segments: Some(vec![]),
+ time_dimensions: None,
+ order: None,
+ limit: None,
+ offset: None,
+ filters: None,
+ ungrouped: Some(true),
+ }
+ );
+ }
+
#[tokio::test]
async fn powerbi_date_range_min_max() {
if !Rewriter::sql_push_down_enabled() {
@@ -4459,6 +4705,65 @@ from
)
.await;
+ let physical_plan = query_plan.as_physical_plan().await.unwrap();
+ println!(
+ "Physical plan: {}",
+ displayable(physical_plan.as_ref()).indent()
+ );
+
+ let logical_plan = query_plan.as_logical_plan();
+ assert_eq!(
+ logical_plan.find_cube_scan().request,
+ V1LoadRequestQuery {
+ measures: Some(vec![]),
+ dimensions: Some(vec!["KibanaSampleDataEcommerce.order_date".to_string()]),
+ segments: Some(vec![]),
+ time_dimensions: None,
+ order: None,
+ limit: None,
+ offset: None,
+ filters: None,
+ ungrouped: Some(true),
+ }
+ );
+ }
+
+ #[tokio::test]
+ async fn powerbi_date_range_min_max_ungrouped() {
+ if !Rewriter::sql_push_down_enabled() {
+ return;
+ }
+ init_logger();
+
+ let query_plan = convert_select_to_query_plan(
+ r#"select
+ count(distinct("rows"."sumPrice")) + max(
+ case
+ when "rows"."sumPrice" is null then 1
+ else 0
+ end
+ ) as "a0",
+ min("rows"."sumPrice") as "a1",
+ max("rows"."sumPrice") as "a2"
+from
+ (
+ select
+ "sumPrice"
+ from
+ "public"."KibanaSampleDataEcommerce" "$Table"
+ ) "rows"
+ "#
+ .to_string(),
+ DatabaseProtocol::PostgreSQL,
+ )
+ .await;
+
+ let physical_plan = query_plan.as_physical_plan().await.unwrap();
+ println!(
+ "Physical plan: {}",
+ displayable(physical_plan.as_ref()).indent()
+ );
+
let logical_plan = query_plan.as_logical_plan();
assert_eq!(
logical_plan.find_cube_scan().request,
@@ -4476,6 +4781,59 @@ from
);
}
+ // #[tokio::test]
+ // async fn push_down_measure_filter() {
+ // if !Rewriter::sql_push_down_enabled() {
+ // return;
+ // }
+ // init_logger();
+ //
+ // let query_plan = convert_select_to_query_plan(
+ // r#"SELECT
+ // SUM("KibanaSampleDataEcommerce"."sumPrice") AS "TEMP(Calculation_2760495522911424520)(2472686499)(0)",
+ // SUM(
+ // (
+ // CASE
+ // WHEN (
+ // "KibanaSampleDataEcommerce"."order_date" < (TIMESTAMP '2024-01-01 00:00:00.000')
+ // ) THEN "KibanaSampleDataEcommerce"."sumPrice"
+ // ELSE NULL
+ // END
+ // )
+ // ) AS "TEMP(Calculation_2760495522922868746)(243454951)(0)"
+ // FROM
+ // "public"."KibanaSampleDataEcommerce" "KibanaSampleDataEcommerce"
+ // HAVING
+ // (COUNT(1) > 0)
+ // "#
+ // .to_string(),
+ // DatabaseProtocol::PostgreSQL,
+ // )
+ // .await;
+ //
+ // let physical_plan = query_plan.as_physical_plan().await.unwrap();
+ // println!(
+ // "Physical plan: {}",
+ // displayable(physical_plan.as_ref()).indent()
+ // );
+ //
+ // let logical_plan = query_plan.as_logical_plan();
+ // assert_eq!(
+ // logical_plan.find_cube_scan().request,
+ // V1LoadRequestQuery {
+ // measures: Some(vec![]),
+ // dimensions: Some(vec![]),
+ // segments: Some(vec![]),
+ // time_dimensions: None,
+ // order: None,
+ // limit: None,
+ // offset: None,
+ // filters: None,
+ // ungrouped: Some(true),
+ // }
+ // );
+ // }
+
#[tokio::test]
async fn powerbi_inner_decimal_cast() {
init_logger();
@@ -4608,6 +4966,84 @@ from
);
}
+ #[tokio::test]
+ async fn powerbi_cast_and_timestamp_equals_filter() {
+ init_logger();
+
+ let query_plan = convert_select_to_query_plan(
+ r#"select
+ "_"."customer_gender",
+ "_"."notes",
+ "_"."a0"
+from
+ (
+ select
+ "rows"."customer_gender" as "customer_gender",
+ "rows"."notes" as "notes",
+ sum(cast("rows"."sumPrice" as decimal)) as "a0"
+ from
+ (
+ select
+ "_"."customer_gender",
+ "_"."notes",
+ "_"."count",
+ "_"."order_date",
+ "_"."maxPrice",
+ "_"."minPrice",
+ "_"."sumPrice",
+ "_"."__user",
+ "_"."__cubeJoinField"
+ from
+ "public"."KibanaSampleDataEcommerce" "_"
+ where
+ "_"."order_date" = timestamp '2024-01-01 00:00:00'
+ ) "rows"
+ group by
+ "customer_gender",
+ "notes"
+ ) "_"
+where
+ not "_"."a0" is null
+limit
+ 1000001"#
+ .to_string(),
+ DatabaseProtocol::PostgreSQL,
+ )
+ .await;
+
+ let logical_plan = query_plan.as_logical_plan();
+ assert_eq!(
+ logical_plan.find_cube_scan().request,
+ V1LoadRequestQuery {
+ measures: Some(vec!["KibanaSampleDataEcommerce.sumPrice".to_string()]),
+ dimensions: Some(vec![
+ "KibanaSampleDataEcommerce.customer_gender".to_string(),
+ "KibanaSampleDataEcommerce.notes".to_string()
+ ]),
+ segments: Some(vec![]),
+ time_dimensions: Some(vec![V1LoadRequestQueryTimeDimension {
+ dimension: "KibanaSampleDataEcommerce.order_date".to_string(),
+ granularity: None,
+ date_range: Some(json!(vec![
+ "2024-01-01T00:00:00.000Z".to_string(),
+ "2024-01-01T00:00:00.000Z".to_string()
+ ])),
+ }]),
+ order: None,
+ limit: Some(1000001),
+ offset: None,
+ filters: Some(vec![V1LoadRequestQueryFilterItem {
+ member: Some("KibanaSampleDataEcommerce.sumPrice".to_string()),
+ operator: Some("set".to_string()),
+ values: None,
+ or: None,
+ and: None,
+ }]),
+ ungrouped: None,
+ }
+ );
+ }
+
#[tokio::test]
async fn test_select_aggregations() {
let variants = vec![
@@ -4751,6 +5187,57 @@ from
)
}
+ #[tokio::test]
+ async fn test_sixteen_char_trunc() {
+ init_logger();
+
+ let query_plan = convert_select_to_query_plan_with_meta(
+ r#"
+ SELECT MIN(a.sixteen_charchar), MAX(a.sixteen_charchar_foo), MAX(a.sixteen_charchar_bar) FROM (SELECT * FROM SixteenChar) a
+ "#
+ .to_string(),
+ get_sixteen_char_member_cube(),
+ )
+ .await;
+
+ let physical_plan = query_plan.as_physical_plan().await.unwrap();
+ println!(
+ "Physical plan: {}",
+ displayable(physical_plan.as_ref()).indent()
+ );
+
+ assert_eq!(
+ query_plan.as_logical_plan().find_cube_scan().request,
+ V1LoadRequestQuery {
+ measures: Some(vec![]),
+ dimensions: Some(vec![]),
+ segments: Some(vec![]),
+ time_dimensions: None,
+ order: None,
+ limit: None,
+ offset: None,
+ filters: None,
+ ungrouped: Some(true),
+ }
+ );
+
+ assert!(query_plan
+ .as_logical_plan()
+ .find_cube_scan_wrapper()
+ .wrapped_sql
+ .unwrap()
+ .sql
+ .contains("sixteen_charchar_1"));
+
+ assert!(query_plan
+ .as_logical_plan()
+ .find_cube_scan_wrapper()
+ .wrapped_sql
+ .unwrap()
+ .sql
+ .contains("sixteen_charchar_2"));
+ }
+
#[tokio::test]
async fn test_select_error() {
let variants = vec![
@@ -5074,6 +5561,8 @@ from
#[tokio::test]
async fn test_where_filter_simple() {
+ init_logger();
+
let to_check = vec![
// Binary expression with Measures
(
@@ -15152,7 +15641,7 @@ from
}
init_logger();
- let logical_plan = convert_select_to_query_plan(
+ let query_plan = convert_select_to_query_plan(
r#"
select
"_"."t1.agentCountApprox" as "agentCountApprox",
@@ -15188,13 +15677,22 @@ from
.to_string(),
DatabaseProtocol::PostgreSQL,
)
- .await
- .as_logical_plan();
+ .await;
+
+ let physical_plan = query_plan.as_physical_plan().await.unwrap();
+ println!(
+ "Physical plan: {}",
+ displayable(physical_plan.as_ref()).indent()
+ );
assert_eq!(
- logical_plan.find_cube_scan().request,
+ query_plan.as_logical_plan().find_cube_scan().request,
V1LoadRequestQuery {
- measures: Some(vec!["Logs.agentCountApprox".to_string(),]),
+ measures: Some(vec![
+ "Logs.agentCount".to_string(),
+ "Logs.agentCountApprox".to_string(),
+ "KibanaSampleDataEcommerce.count".to_string()
+ ]),
dimensions: Some(vec![
"KibanaSampleDataEcommerce.taxful_total_price".to_string(),
]),
@@ -18317,7 +18815,7 @@ from
}
init_logger();
- let logical_plan = convert_select_to_query_plan(
+ let query_plan = convert_select_to_query_plan(
r#"
WITH "qt_0" AS (
SELECT
@@ -18339,11 +18837,16 @@ from
.to_string(),
DatabaseProtocol::PostgreSQL,
)
- .await
- .as_logical_plan();
+ .await;
+
+ let physical_plan = query_plan.as_physical_plan().await.unwrap();
+ println!(
+ "Physical plan: {}",
+ displayable(physical_plan.as_ref()).indent()
+ );
assert_eq!(
- logical_plan.find_cube_scan().request,
+ query_plan.as_logical_plan().find_cube_scan().request,
V1LoadRequestQuery {
measures: Some(vec![]),
dimensions: Some(vec![]),
@@ -18353,11 +18856,11 @@ from
limit: None,
offset: None,
filters: Some(vec![V1LoadRequestQueryFilterItem {
- member: Some("KibanaSampleDataEcommerce.order_date".to_string()),
- operator: Some("beforeDate".to_string()),
+ member: Some("KibanaSampleDataEcommerce.order_date".to_string(),),
+ operator: Some("beforeDate".to_string(),),
values: Some(vec!["2014-05-31T00:00:00.000Z".to_string()]),
or: None,
- and: None
+ and: None,
}]),
ungrouped: Some(true),
}
@@ -18882,7 +19385,7 @@ from
}
init_logger();
- let logical_plan = convert_select_to_query_plan(
+ let query_plan = convert_select_to_query_plan(
r#"
WITH "qt_0" AS (
SELECT
@@ -18897,11 +19400,16 @@ from
.to_string(),
DatabaseProtocol::PostgreSQL,
)
- .await
- .as_logical_plan();
+ .await;
+
+ let physical_plan = query_plan.as_physical_plan().await.unwrap();
+ println!(
+ "Physical plan: {}",
+ displayable(physical_plan.as_ref()).indent()
+ );
assert_eq!(
- logical_plan.find_cube_scan().request,
+ query_plan.as_logical_plan().find_cube_scan().request,
V1LoadRequestQuery {
measures: Some(vec![]),
dimensions: Some(vec![]),
@@ -18913,7 +19421,7 @@ from
filters: None,
ungrouped: Some(true),
}
- )
+ );
}
#[tokio::test]
@@ -19374,6 +19882,39 @@ from
Ok(())
}
+ #[tokio::test]
+ async fn test_where_push_down() {
+ init_logger();
+
+ let query_plan = convert_select_to_query_plan(
+ r#"
+ SELECT
+ "customer_gender" AS "uuid.customer_gender",
+ COUNT(*) AS "count"
+ FROM "public"."KibanaSampleDataEcommerce"
+ WHERE CAST(LEFT(RIGHT("customer_gender", 2), 1) AS TEXT) = 'le'
+ GROUP BY "customer_gender";
+ "#
+ .to_string(),
+ DatabaseProtocol::PostgreSQL,
+ )
+ .await;
+
+ let physical_plan = query_plan.as_physical_plan().await.unwrap();
+ println!(
+ "Physical plan: {}",
+ displayable(physical_plan.as_ref()).indent()
+ );
+
+ let logical_plan = query_plan.as_logical_plan();
+ assert!(logical_plan
+ .find_cube_scan_wrapper()
+ .wrapped_sql
+ .unwrap()
+ .sql
+ .contains("LEFT"));
+ }
+
#[tokio::test]
async fn test_simple_wrapper() {
if !Rewriter::sql_push_down_enabled() {
@@ -19432,6 +19973,44 @@ from
);
}
+ #[tokio::test]
+ async fn test_case_wrapper_distinct() {
+ if !Rewriter::sql_push_down_enabled() {
+ return;
+ }
+ init_logger();
+
+ let query_plan = convert_select_to_query_plan(
+ r#"SELECT CASE WHEN customer_gender = 'female' THEN 'f' ELSE 'm' END, COUNT(DISTINCT countDistinct) mp
+ FROM KibanaSampleDataEcommerce a
+ WHERE
+ (
+ (
+ ( a.order_date ) >= '2024-01-01'
+ AND ( a.order_date ) < '2024-02-01'
+ )
+ )
+ GROUP BY 1"#
+ .to_string(),
+ DatabaseProtocol::PostgreSQL,
+ )
+ .await;
+
+ let logical_plan = query_plan.as_logical_plan();
+ assert!(logical_plan
+ .find_cube_scan_wrapper()
+ .wrapped_sql
+ .unwrap()
+ .sql
+ .contains("CASE WHEN"));
+
+ let physical_plan = query_plan.as_physical_plan().await.unwrap();
+ println!(
+ "Physical plan: {}",
+ displayable(physical_plan.as_ref()).indent()
+ );
+ }
+
#[tokio::test]
async fn test_case_wrapper_alias_with_order() {
if !Rewriter::sql_push_down_enabled() {
@@ -21675,4 +22254,18 @@ LIMIT {{ limit }}{% endif %}"#.to_string(),
}
)
}
+
+ #[tokio::test]
+ async fn test_cast_float_to_text() -> Result<(), CubeError> {
+ insta::assert_snapshot!(
+ "cast_float_to_text",
+ execute_query(
+ "SELECT (11.0::double precision)::text AS eleven;".to_string(),
+ DatabaseProtocol::PostgreSQL
+ )
+ .await?
+ );
+
+ Ok(())
+ }
}
diff --git a/rust/cubesql/cubesql/src/compile/parser.rs b/rust/cubesql/cubesql/src/compile/parser.rs
index cb6c83a566..d5e3f5b4ed 100644
--- a/rust/cubesql/cubesql/src/compile/parser.rs
+++ b/rust/cubesql/cubesql/src/compile/parser.rs
@@ -77,85 +77,20 @@ pub fn parse_sql_to_statements(
"SELECT n.oid as _oid,n.*,d.description FROM",
);
- // TODO support these introspection Superset queries
- let query = query.replace(
- "(SELECT pg_catalog.pg_get_expr(d.adbin, d.adrelid)\
-\n FROM pg_catalog.pg_attrdef d\
-\n WHERE d.adrelid = a.attrelid AND d.adnum = a.attnum\
-\n AND a.atthasdef)\
-\n AS DEFAULT",
- "NULL AS DEFAULT",
- );
-
- let query = query.replace(
- "SELECT\
-\n i.relname as relname,\
-\n ix.indisunique, ix.indexprs, ix.indpred,\
-\n a.attname, a.attnum, c.conrelid, ix.indkey::varchar,\
-\n ix.indoption::varchar, i.reloptions, am.amname,\
-\n ix.indnkeyatts as indnkeyatts\
-\n FROM\
-\n pg_class t\
-\n join pg_index ix on t.oid = ix.indrelid\
-\n join pg_class i on i.oid = ix.indexrelid\
-\n left outer join\
-\n pg_attribute a\
-\n on t.oid = a.attrelid and a.attnum = ANY(ix.indkey)\
-\n left outer join\
-\n pg_constraint c\
-\n on (ix.indrelid = c.conrelid and\
-\n ix.indexrelid = c.conindid and\
-\n c.contype in ('p', 'u', 'x'))\
-\n left outer join\
-\n pg_am am\
-\n on i.relam = am.oid\
-\n WHERE\
-\n t.relkind IN ('r', 'v', 'f', 'm', 'p')",
- "SELECT\
-\n i.relname as relname,\
-\n ix.indisunique, ix.indexprs, ix.indpred,\
-\n a.attname, a.attnum, c.conrelid, ix.indkey,\
-\n ix.indoption, i.reloptions, am.amname,\
-\n ix.indnkeyatts as indnkeyatts\
-\n FROM\
-\n pg_class t\
-\n join pg_index ix on t.oid = ix.indrelid\
-\n join pg_class i on i.oid = ix.indexrelid\
-\n left outer join\
-\n pg_attribute a\
-\n on t.oid = a.attrelid\
-\n left outer join\
-\n pg_constraint c\
-\n on (ix.indrelid = c.conrelid and\
-\n ix.indexrelid = c.conindid and\
-\n c.contype in ('p', 'u', 'x'))\
-\n left outer join\
-\n pg_am am\
-\n on i.relam = am.oid\
-\n WHERE\
-\n t.relkind IN ('r', 'v', 'f', 'm', 'p')",
- );
-
- let query = query.replace(
- "and ix.indisprimary = 'f'\
-\n ORDER BY\
-\n t.relname,\
-\n i.relname",
- "and ix.indisprimary = false",
- );
-
+ // TODO Superset introspection: LEFT JOIN by ANY() is not supported
let query = query.replace(
"on t.oid = a.attrelid and a.attnum = ANY(ix.indkey)",
"on t.oid = a.attrelid",
);
// TODO: Quick workaround for Tableau Desktop (ODBC), waiting for DF rebase...
- // Right now, our fork of DF doesn't support ON conditions with this filter
+ // LEFT JOIN by Boolean is not supported
let query = query.replace(
"left outer join pg_attrdef d on a.atthasdef and",
"left outer join pg_attrdef d on",
);
+ // TODO: Likely for Superset with JOINs
let query = query.replace("a.attnum = ANY(cons.conkey)", "1 = 1");
let query = query.replace("pg_get_constraintdef(cons.oid) as src", "NULL as src");
@@ -166,7 +101,6 @@ pub fn parse_sql_to_statements(
"AS REF_GENERATION FROM svv_tables) WHERE true AND current_database() = ",
"AS REF_GENERATION FROM svv_tables) as svv_tables WHERE current_database() =",
);
- let query = query.replace("AND TABLE_TYPE IN ( 'TABLE', 'VIEW', 'EXTERNAL TABLE')", "");
let query = query.replace(
// Subquery must have alias
// Incorrect alias for subquery
@@ -185,6 +119,7 @@ pub fn parse_sql_to_statements(
);
// Sigma Computing WITH query workaround
+ // TODO: remove workaround when subquery is supported in JOIN ON conditions
let query = if SIGMA_WORKAROUND.is_match(&query) {
let relnamespace_re = Regex::new(r#"(?s)from\spg_catalog\.pg_class\s+where\s+relname\s=\s(?P'(?:[^']|'')+'|\$\d+)\s+and\s+relnamespace\s=\s\(select\soid\sfrom\snsp\)"#).unwrap();
let relnamespace_replaced = relnamespace_re.replace(
@@ -198,13 +133,6 @@ pub fn parse_sql_to_statements(
query
};
- // Metabase
- // TODO: To Support InSubquery Node (waiting for rebase DF)
- let query = query.replace(
- "WHERE t.oid IN (SELECT DISTINCT enumtypid FROM pg_enum e)",
- "WHERE t.oid = 0",
- );
-
// Holistics.io
// TODO: Waiting for rebase DF
// Right now, our fork of DF doesn't support ON conditions with this filter
@@ -221,19 +149,9 @@ pub fn parse_sql_to_statements(
"ON c.confrelid=fa.attrelid",
);
- // Holistics.io
- // TODO: To Support InSubquery Node (waiting for rebase DF)
- let query = query.replace(
- "AND c.relname IN (SELECT table_name\nFROM information_schema.tables\nWHERE (table_type = 'BASE TABLE' OR table_type = 'VIEW')\n AND table_schema NOT IN ('pg_catalog', 'information_schema')\n AND has_schema_privilege(table_schema, 'USAGE'::text)\n)\n",
- "",
- );
-
- // Microstrategy
- // TODO: Support Subquery Node
- let query = query.replace("= (SELECT current_schema())", "= current_schema()");
-
// Grafana
- // TODO: Support InSubquery Node
+ // TODO: PostgreSQL accepts any function in FROM as table, even scalars
+ // string_to_array is *NOT* a UDTF! It returns one row of type list even in FROM!
let query = query.replace(
"WHERE quote_ident(table_schema) NOT IN ('information_schema', 'pg_catalog', '_timescaledb_cache', '_timescaledb_catalog', '_timescaledb_internal', '_timescaledb_config', 'timescaledb_information', 'timescaledb_experimental') AND table_type = 'BASE TABLE' AND quote_ident(table_schema) IN (SELECT CASE WHEN TRIM(s[i]) = '\"$user\"' THEN user ELSE TRIM(s[i]) END FROM generate_series(array_lower(string_to_array(current_setting('search_path'), ','), 1), array_upper(string_to_array(current_setting('search_path'), ','), 1)) AS i, string_to_array(current_setting('search_path'), ',') AS s)",
"WHERE quote_ident(table_schema) IN (current_user, current_schema()) AND table_type = 'BASE TABLE'"
@@ -286,15 +204,6 @@ pub fn parse_sql_to_statements(
"c.relname AS partition_name,",
);
- // Work around lack of WHERE subqueries for INFORMATION_SCHEMA.SCHEMATA filter
- let query = query.replace(
- "WHERE N.nspname in (SELECT schema_name\
- \n FROM INFORMATION_SCHEMA.SCHEMATA\
- \n WHERE schema_name not like 'pg_%%'\
- \n and schema_name != 'information_schema')",
- "WHERE N.nspname = 'public'",
- );
-
// Work around an issue with NULL, NULL, NULL in SELECT
let query = query.replace(
"p.proname AS PROCEDURE_NAME, NULL, NULL, NULL, ",
diff --git a/rust/cubesql/cubesql/src/compile/rewrite/analysis.rs b/rust/cubesql/cubesql/src/compile/rewrite/analysis.rs
index aa95556132..e522fd030a 100644
--- a/rust/cubesql/cubesql/src/compile/rewrite/analysis.rs
+++ b/rust/cubesql/cubesql/src/compile/rewrite/analysis.rs
@@ -1290,33 +1290,15 @@ impl Analysis for LogicalPlanAnalysis {
{
return;
}
- // TODO: ideally all constants should be aliased, but this requires
- // rewrites to extract `.data.constant` instead of `literal_expr`.
- let alias_name = if c.is_null()
- || matches!(
- c,
- ScalarValue::Date32(_)
- | ScalarValue::Date64(_)
- | ScalarValue::Int64(_)
- | ScalarValue::Int32(_)
- | ScalarValue::Float64(_)
- | ScalarValue::IntervalYearMonth(_)
- | ScalarValue::IntervalDayTime(_)
- | ScalarValue::Utf8(_)
- | ScalarValue::Boolean(_)
- ) {
- egraph[id]
- .data
- .original_expr
- .as_ref()
- .and_then(|e| match e {
- OriginalExpr::Expr(expr) => Some(expr),
- OriginalExpr::List(_) => None,
- })
- .map(|expr| expr.name(&DFSchema::empty()).unwrap())
- } else {
- None
- };
+ let alias_name = egraph[id]
+ .data
+ .original_expr
+ .as_ref()
+ .and_then(|e| match e {
+ OriginalExpr::Expr(expr) => Some(expr),
+ OriginalExpr::List(_) => None,
+ })
+ .map(|expr| expr.name(&DFSchema::empty()).unwrap());
let c = c.clone();
let value = egraph.add(LogicalPlanLanguage::LiteralExprValue(LiteralExprValue(c)));
let literal_expr = egraph.add(LogicalPlanLanguage::LiteralExpr([value]));
@@ -1326,8 +1308,6 @@ impl Analysis for LogicalPlanAnalysis {
)));
let alias_expr = egraph.add(LogicalPlanLanguage::AliasExpr([literal_expr, alias]));
egraph.union(id, alias_expr);
- } else {
- egraph.union(id, literal_expr);
}
}
}
diff --git a/rust/cubesql/cubesql/src/compile/rewrite/converter.rs b/rust/cubesql/cubesql/src/compile/rewrite/converter.rs
index aae71b2f3d..7da5b1fea4 100644
--- a/rust/cubesql/cubesql/src/compile/rewrite/converter.rs
+++ b/rust/cubesql/cubesql/src/compile/rewrite/converter.rs
@@ -10,21 +10,22 @@ use crate::{
rewrite::{
analysis::LogicalPlanAnalysis, rewriter::Rewriter, AggregateFunctionExprDistinct,
AggregateFunctionExprFun, AggregateSplit, AggregateUDFExprFun, AliasExprAlias,
- AnyExprOp, BetweenExprNegated, BinaryExprOp, CastExprDataType, ChangeUserMemberValue,
- ColumnExprColumn, CubeScanAliasToCube, CubeScanLimit, CubeScanOffset,
- CubeScanUngrouped, CubeScanWrapped, DimensionName, EmptyRelationProduceOneRow,
- FilterMemberMember, FilterMemberOp, FilterMemberValues, FilterOpOp, InListExprNegated,
- JoinJoinConstraint, JoinJoinType, JoinLeftOn, JoinRightOn, LikeExprEscapeChar,
- LikeExprLikeType, LikeExprNegated, LikeType, LimitFetch, LimitSkip, LiteralExprValue,
- LiteralMemberRelation, LiteralMemberValue, LogicalPlanLanguage, MeasureName,
- MemberErrorError, OrderAsc, OrderMember, OuterColumnExprColumn,
- OuterColumnExprDataType, ProjectionAlias, ProjectionSplit, QueryParamIndex,
- ScalarFunctionExprFun, ScalarUDFExprFun, ScalarVariableExprDataType,
- ScalarVariableExprVariable, SegmentMemberMember, SortExprAsc, SortExprNullsFirst,
- TableScanFetch, TableScanProjection, TableScanSourceTableName, TableScanTableName,
- TableUDFExprFun, TimeDimensionDateRange, TimeDimensionGranularity, TimeDimensionName,
- TryCastExprDataType, UnionAlias, WindowFunctionExprFun, WindowFunctionExprWindowFrame,
- WrappedSelectAlias, WrappedSelectJoinJoinType, WrappedSelectLimit, WrappedSelectOffset,
+ AnyExprAll, AnyExprOp, BetweenExprNegated, BinaryExprOp, CastExprDataType,
+ ChangeUserMemberValue, ColumnExprColumn, CubeScanAliasToCube, CubeScanLimit,
+ CubeScanOffset, CubeScanUngrouped, CubeScanWrapped, DimensionName,
+ EmptyRelationProduceOneRow, FilterMemberMember, FilterMemberOp, FilterMemberValues,
+ FilterOpOp, InListExprNegated, InSubqueryNegated, JoinJoinConstraint, JoinJoinType,
+ JoinLeftOn, JoinRightOn, LikeExprEscapeChar, LikeExprLikeType, LikeExprNegated,
+ LikeType, LimitFetch, LimitSkip, LiteralExprValue, LiteralMemberRelation,
+ LiteralMemberValue, LogicalPlanLanguage, MeasureName, MemberErrorError, OrderAsc,
+ OrderMember, OuterColumnExprColumn, OuterColumnExprDataType, ProjectionAlias,
+ ProjectionSplit, QueryParamIndex, ScalarFunctionExprFun, ScalarUDFExprFun,
+ ScalarVariableExprDataType, ScalarVariableExprVariable, SegmentMemberMember,
+ SortExprAsc, SortExprNullsFirst, SubqueryTypes, TableScanFetch, TableScanProjection,
+ TableScanSourceTableName, TableScanTableName, TableUDFExprFun, TimeDimensionDateRange,
+ TimeDimensionGranularity, TimeDimensionName, TryCastExprDataType, UnionAlias,
+ WindowFunctionExprFun, WindowFunctionExprWindowFrame, WrappedSelectAlias,
+ WrappedSelectJoinJoinType, WrappedSelectLimit, WrappedSelectOffset,
WrappedSelectSelectType, WrappedSelectType, WrappedSelectUngrouped,
},
},
@@ -221,11 +222,18 @@ impl LogicalPlanToLanguageConverter {
graph.add(LogicalPlanLanguage::LiteralExpr([value]))
}
}
- Expr::AnyExpr { left, op, right } => {
+ Expr::AnyExpr {
+ left,
+ op,
+ right,
+ all,
+ } => {
let left = Self::add_expr_replace_params(graph, left, query_params)?;
let op = add_expr_data_node!(graph, op, AnyExprOp);
let right = Self::add_expr_replace_params(graph, right, query_params)?;
- graph.add(LogicalPlanLanguage::AnyExpr([left, op, right]))
+ let all = add_expr_data_node!(graph, all, AnyExprAll);
+
+ graph.add(LogicalPlanLanguage::AnyExpr([left, op, right, all]))
}
Expr::BinaryExpr { left, op, right } => {
let left = Self::add_expr_replace_params(graph, left, query_params)?;
@@ -414,6 +422,17 @@ impl LogicalPlanToLanguageConverter {
let negated = add_expr_data_node!(graph, negated, InListExprNegated);
graph.add(LogicalPlanLanguage::InListExpr([expr, list, negated]))
}
+ Expr::InSubquery {
+ expr,
+ subquery,
+ negated,
+ } => {
+ let expr = Self::add_expr_replace_params(graph, expr, query_params)?;
+ let subquery = Self::add_expr_replace_params(graph, subquery, query_params)?;
+ let negated = add_expr_data_node!(graph, negated, InSubqueryNegated);
+
+ graph.add(LogicalPlanLanguage::InSubquery([expr, subquery, negated]))
+ }
Expr::Wildcard => graph.add(LogicalPlanLanguage::WildcardExpr([])),
Expr::GetIndexedField { expr, key } => {
let expr = Self::add_expr_replace_params(graph, expr, query_params)?;
@@ -548,8 +567,9 @@ impl LogicalPlanToLanguageConverter {
self.add_logical_plan_replace_params(node.input.as_ref(), query_params)?;
let subqueries =
add_plan_list_node!(self, node.subqueries, query_params, SubquerySubqueries);
+ let types = add_data_node!(self, node.types, SubqueryTypes);
self.graph
- .add(LogicalPlanLanguage::Subquery([input, subqueries]))
+ .add(LogicalPlanLanguage::Subquery([input, subqueries, types]))
}
LogicalPlan::TableUDFs(node) => {
let expr =
@@ -818,7 +838,13 @@ pub fn node_to_expr(
let left = Box::new(to_expr(params[0].clone())?);
let op = match_data_node!(node_by_id, params[1], AnyExprOp);
let right = Box::new(to_expr(params[2].clone())?);
- Expr::AnyExpr { left, op, right }
+ let all = match_data_node!(node_by_id, params[3], AnyExprAll);
+ Expr::AnyExpr {
+ left,
+ op,
+ right,
+ all,
+ }
}
LogicalPlanLanguage::BinaryExpr(params) => {
let left = Box::new(to_expr(params[0].clone())?);
@@ -1006,6 +1032,16 @@ pub fn node_to_expr(
"QueryParam can't be evaluated as an Expr node".to_string(),
));
}
+ LogicalPlanLanguage::InSubquery(params) => {
+ let expr = Box::new(to_expr(params[0].clone())?);
+ let subquery = Box::new(to_expr(params[1].clone())?);
+ let negated = match_data_node!(node_by_id, params[2], InSubqueryNegated);
+ Expr::InSubquery {
+ expr,
+ subquery,
+ negated,
+ }
+ }
x => panic!("Unexpected expression node: {:?}", x),
})
}
@@ -1179,8 +1215,9 @@ impl LanguageToLogicalPlanConverter {
.into_iter()
.map(|n| self.to_logical_plan(n))
.collect::, _>>()?;
+ let types = match_data_node!(node_by_id, params[2], SubqueryTypes);
LogicalPlanBuilder::from(input)
- .subquery(subqueries)?
+ .subquery(subqueries, types)?
.build()?
}
LogicalPlanLanguage::TableUDFs(params) => {
@@ -1717,9 +1754,13 @@ impl LanguageToLogicalPlanConverter {
} else {
None
};
- let cube_scan_query_limit = env::var("CUBEJS_DB_QUERY_LIMIT")
- .map(|v| v.parse::().unwrap())
- .unwrap_or(50000);
+ let cube_scan_query_limit = self
+ .cube_context
+ .sessions
+ .server
+ .config_obj
+ .non_streaming_query_max_row_limit()
+ as usize;
let fail_on_max_limit_hit = env::var("CUBESQL_FAIL_ON_MAX_LIMIT_HIT")
.map(|v| v.to_lowercase() == "true")
.unwrap_or(false);
@@ -1802,6 +1843,7 @@ impl LanguageToLogicalPlanConverter {
self.cube_context.meta.clone(),
self.auth_context.clone(),
self.span_id.clone(),
+ self.cube_context.sessions.server.config_obj.clone(),
)),
})
}
@@ -1846,15 +1888,36 @@ impl LanguageToLogicalPlanConverter {
let alias = match_data_node!(node_by_id, params[12], WrappedSelectAlias);
let ungrouped = match_data_node!(node_by_id, params[13], WrappedSelectUngrouped);
+ let filter_expr = normalize_cols(filter_expr, &from)?;
let group_expr = normalize_cols(group_expr, &from)?;
let aggr_expr = normalize_cols(aggr_expr, &from)?;
- let projection_expr = normalize_cols(projection_expr, &from)?;
+ let projection_expr = if projection_expr.is_empty()
+ && matches!(select_type, WrappedSelectType::Projection)
+ {
+ from.schema()
+ .fields()
+ .iter()
+ .map(|f| Expr::Column(f.qualified_column()))
+ .collect::>()
+ } else {
+ normalize_cols(projection_expr, &from)?
+ };
let all_expr_without_window = match select_type {
WrappedSelectType::Projection => projection_expr.clone(),
WrappedSelectType::Aggregate => {
group_expr.iter().chain(aggr_expr.iter()).cloned().collect()
}
};
+ // TODO support asterisk query?
+ let all_expr_without_window = if all_expr_without_window.is_empty() {
+ from.schema()
+ .fields()
+ .iter()
+ .map(|f| Expr::Column(f.qualified_column()))
+ .collect::>()
+ } else {
+ all_expr_without_window
+ };
let without_window_fields =
exprlist_to_fields(all_expr_without_window.iter(), from.schema())?;
let replace_map = all_expr_without_window
diff --git a/rust/cubesql/cubesql/src/compile/rewrite/cost.rs b/rust/cubesql/cubesql/src/compile/rewrite/cost.rs
index 7c93ba15bd..423239147c 100644
--- a/rust/cubesql/cubesql/src/compile/rewrite/cost.rs
+++ b/rust/cubesql/cubesql/src/compile/rewrite/cost.rs
@@ -3,7 +3,7 @@ use crate::{
rewrite::{
rules::utils::granularity_str_to_int_order, CubeScanUngrouped, CubeScanWrapped,
DimensionName, LogicalPlanLanguage, MemberErrorPriority, ScalarUDFExprFun,
- TimeDimensionGranularity,
+ TimeDimensionGranularity, WrappedSelectUngroupedScan,
},
MetaContext,
},
@@ -39,15 +39,16 @@ pub struct CubePlanCost {
table_scans: i64,
empty_wrappers: i64,
non_detected_cube_scans: i64,
- filters: i64,
- structure_points: i64,
- filter_members: i64,
member_errors: i64,
// TODO if pre-aggregation can be used for window functions, then it'd be suboptimal
non_pushed_down_window: i64,
ungrouped_aggregates: usize,
wrapper_nodes: i64,
+ wrapped_select_ungrouped_scan: usize,
ast_size_outside_wrapper: usize,
+ filters: i64,
+ structure_points: i64,
+ filter_members: i64,
cube_members: i64,
errors: i64,
time_dimensions_used_as_dimensions: i64,
@@ -134,6 +135,8 @@ impl CubePlanCost {
+ other.ast_size_outside_wrapper,
ungrouped_aggregates: self.ungrouped_aggregates + other.ungrouped_aggregates,
wrapper_nodes: self.wrapper_nodes + other.wrapper_nodes,
+ wrapped_select_ungrouped_scan: self.wrapped_select_ungrouped_scan
+ + other.wrapped_select_ungrouped_scan,
cube_scan_nodes: self.cube_scan_nodes + other.cube_scan_nodes,
time_dimensions_used_as_dimensions: self.time_dimensions_used_as_dimensions
+ other.time_dimensions_used_as_dimensions,
@@ -197,6 +200,7 @@ impl CubePlanCost {
CubePlanState::Wrapper => 0,
} + self.ungrouped_aggregates,
wrapper_nodes: self.wrapper_nodes,
+ wrapped_select_ungrouped_scan: self.wrapped_select_ungrouped_scan,
cube_scan_nodes: self.cube_scan_nodes,
ast_size_without_alias: self.ast_size_without_alias,
ast_size: self.ast_size,
@@ -364,6 +368,11 @@ impl CostFunction for BestCubePlan {
_ => 0,
};
+ let wrapped_select_ungrouped_scan = match enode {
+ LogicalPlanLanguage::WrappedSelectUngroupedScan(WrappedSelectUngroupedScan(true)) => 1,
+ _ => 0,
+ };
+
let initial_cost = CubePlanCostAndState {
cost: CubePlanCost {
replacers: this_replacers,
@@ -380,6 +389,7 @@ impl CostFunction for BestCubePlan {
structure_points,
ungrouped_aggregates: 0,
wrapper_nodes,
+ wrapped_select_ungrouped_scan,
empty_wrappers: 0,
ast_size_outside_wrapper: 0,
ast_size_inside_wrapper,
diff --git a/rust/cubesql/cubesql/src/compile/rewrite/mod.rs b/rust/cubesql/cubesql/src/compile/rewrite/mod.rs
index dce357115a..adc3a2c6ba 100644
--- a/rust/cubesql/cubesql/src/compile/rewrite/mod.rs
+++ b/rust/cubesql/cubesql/src/compile/rewrite/mod.rs
@@ -13,8 +13,8 @@ use datafusion::{
arrow::datatypes::DataType,
error::DataFusionError,
logical_plan::{
- window_frames::WindowFrame, Column, DFSchema, Expr, ExprRewritable, ExprRewriter,
- JoinConstraint, JoinType, Operator,
+ plan::SubqueryType, window_frames::WindowFrame, Column, DFSchema, Expr, ExprRewritable,
+ ExprRewriter, JoinConstraint, JoinType, Operator,
},
physical_plan::{
aggregates::AggregateFunction, functions::BuiltinScalarFunction, windows::WindowFunction,
@@ -108,6 +108,7 @@ crate::plan_to_language! {
input: Arc,
subqueries: Vec,
schema: DFSchemaRef,
+ types: Vec,
},
Union {
inputs: Vec,
@@ -171,6 +172,7 @@ crate::plan_to_language! {
left: Box,
op: Operator,
right: Box,
+ all: bool,
},
LikeExpr {
like_type: LikeType,
@@ -240,6 +242,11 @@ crate::plan_to_language! {
list: Vec,
negated: bool,
},
+ InSubquery {
+ expr: Box,
+ subquery: Box,
+ negated: bool,
+ },
WildcardExpr {},
GetIndexedFieldExpr {
expr: Box,
@@ -261,6 +268,7 @@ crate::plan_to_language! {
order_expr: Vec,
alias: Option,
ungrouped: bool,
+ ungrouped_scan: bool,
},
WrappedSelectJoin {
input: Arc,
@@ -434,12 +442,14 @@ crate::plan_to_language! {
member: Arc,
alias_to_cube: Vec<(String, String)>,
ungrouped: bool,
+ in_projection: bool,
cube_members: Vec,
},
WrapperPullupReplacer {
member: Arc,
alias_to_cube: Vec<(String, String)>,
ungrouped: bool,
+ in_projection: bool,
cube_members: Vec,
},
// NOTE: converting this to a list might provide rewrite improvements
@@ -779,9 +789,10 @@ fn wrapped_select(
order_expr: impl Display,
alias: impl Display,
ungrouped: impl Display,
+ ungrouped_scan: impl Display,
) -> String {
format!(
- "(WrappedSelect {} {} {} {} {} {} {} {} {} {} {} {} {} {})",
+ "(WrappedSelect {} {} {} {} {} {} {} {} {} {} {} {} {} {} {})",
select_type,
projection_expr,
group_expr,
@@ -796,6 +807,7 @@ fn wrapped_select(
order_expr,
alias,
ungrouped,
+ ungrouped_scan
)
}
@@ -845,7 +857,6 @@ fn wrapped_select_joins_empty_tail() -> String {
"WrappedSelectJoins".to_string()
}
-#[allow(dead_code)]
fn wrapped_select_filter_expr(left: impl Display, right: impl Display) -> String {
format!("(WrappedSelectFilterExpr {} {})", left, right)
}
@@ -1264,11 +1275,12 @@ fn wrapper_pushdown_replacer(
members: impl Display,
alias_to_cube: impl Display,
ungrouped: impl Display,
+ in_projection: impl Display,
cube_members: impl Display,
) -> String {
format!(
- "(WrapperPushdownReplacer {} {} {} {})",
- members, alias_to_cube, ungrouped, cube_members
+ "(WrapperPushdownReplacer {} {} {} {} {})",
+ members, alias_to_cube, ungrouped, in_projection, cube_members
)
}
@@ -1276,11 +1288,12 @@ fn wrapper_pullup_replacer(
members: impl Display,
alias_to_cube: impl Display,
ungrouped: impl Display,
+ in_projection: impl Display,
cube_members: impl Display,
) -> String {
format!(
- "(WrapperPullupReplacer {} {} {} {})",
- members, alias_to_cube, ungrouped, cube_members
+ "(WrapperPullupReplacer {} {} {} {} {})",
+ members, alias_to_cube, ungrouped, in_projection, cube_members
)
}
diff --git a/rust/cubesql/cubesql/src/compile/rewrite/rules/filters.rs b/rust/cubesql/cubesql/src/compile/rewrite/rules/filters.rs
index 3d4a759127..a9d24d823d 100644
--- a/rust/cubesql/cubesql/src/compile/rewrite/rules/filters.rs
+++ b/rust/cubesql/cubesql/src/compile/rewrite/rules/filters.rs
@@ -1847,7 +1847,7 @@ impl RewriteRules for FilterRules {
vec![literal_expr("?granularity"), column_expr("?column")],
),
"?op",
- literal_expr("?date"),
+ "?date",
),
"?alias_to_cube",
"?members",
@@ -1867,7 +1867,7 @@ impl RewriteRules for FilterRules {
udf_expr(
"date_add",
vec![
- literal_expr("?date"),
+ "?date".to_string(),
literal_expr("?date_add_interval"),
],
),
@@ -1898,7 +1898,7 @@ impl RewriteRules for FilterRules {
vec![literal_expr("?granularity"), column_expr("?column")],
),
"=",
- literal_expr("?date"),
+ "?date".to_string(),
),
"?alias_to_cube",
"?members",
@@ -1911,7 +1911,7 @@ impl RewriteRules for FilterRules {
">=",
fun_expr(
"DateTrunc",
- vec![literal_expr("?granularity"), literal_expr("?date")],
+ vec![literal_expr("?granularity"), "?date".to_string()],
),
),
"AND",
@@ -1925,7 +1925,7 @@ impl RewriteRules for FilterRules {
udf_expr(
"date_add",
vec![
- literal_expr("?date"),
+ "?date".to_string(),
literal_expr("?date_add_interval"),
],
),
@@ -2843,6 +2843,7 @@ impl FilterRules {
Operator::LtEq => "beforeOrOnDate",
Operator::Gt => "afterDate",
Operator::GtEq => "afterOrOnDate",
+ Operator::Eq => "inDateRange",
_ => op,
},
};
@@ -2874,8 +2875,8 @@ impl FilterRules {
_ => op,
};
- let value = match literal {
- ScalarValue::Utf8(Some(value)) => {
+ let values = match literal {
+ ScalarValue::Utf8(Some(value)) => vec![{
if op == "startsWith"
&& value.starts_with("^^")
&& value.ends_with(".*$")
@@ -2916,12 +2917,16 @@ impl FilterRules {
} else {
value.to_string()
}
+ }],
+ ScalarValue::Int64(Some(value)) => vec![value.to_string()],
+ ScalarValue::Boolean(Some(value)) => {
+ vec![value.to_string()]
+ }
+ ScalarValue::Float64(Some(value)) => {
+ vec![value.to_string()]
}
- ScalarValue::Int64(Some(value)) => value.to_string(),
- ScalarValue::Boolean(Some(value)) => value.to_string(),
- ScalarValue::Float64(Some(value)) => value.to_string(),
ScalarValue::Decimal128(Some(value), _, scale) => {
- Decimal::new(*value).to_string(*scale)
+ vec![Decimal::new(*value).to_string(*scale)]
}
ScalarValue::TimestampNanosecond(_, _)
| ScalarValue::Date32(_)
@@ -2932,10 +2937,11 @@ impl FilterRules {
let value = format_iso_timestamp(timestamp);
match expr_op {
- Operator::Lt => value,
- Operator::LtEq => value,
- Operator::Gt => value,
- Operator::GtEq => value,
+ Operator::Lt => vec![value],
+ Operator::LtEq => vec![value],
+ Operator::Gt => vec![value],
+ Operator::GtEq => vec![value],
+ Operator::Eq => vec![value.to_string(), value],
_ => {
continue;
}
@@ -2968,7 +2974,7 @@ impl FilterRules {
subst.insert(
filter_values_var,
egraph.add(LogicalPlanLanguage::FilterMemberValues(
- FilterMemberValues(vec![value.to_string()]),
+ FilterMemberValues(values),
)),
);
@@ -4047,7 +4053,9 @@ impl FilterRules {
if let Some(date_add_interval) =
utils::granularity_str_to_interval(&granularity)
{
- for date in var_iter!(egraph[subst[date_var]], LiteralExprValue) {
+ if let Some(ConstantFolding::Scalar(date)) =
+ &egraph[subst[date_var]].data.constant
+ {
if let ScalarValue::TimestampNanosecond(Some(date), None) = date {
if let Some(true) =
utils::is_literal_date_trunced(*date, &granularity)
diff --git a/rust/cubesql/cubesql/src/compile/rewrite/rules/split/aggregate_function.rs b/rust/cubesql/cubesql/src/compile/rewrite/rules/split/aggregate_function.rs
index b0302017d7..3f70a6e8a8 100644
--- a/rust/cubesql/cubesql/src/compile/rewrite/rules/split/aggregate_function.rs
+++ b/rust/cubesql/cubesql/src/compile/rewrite/rules/split/aggregate_function.rs
@@ -76,6 +76,28 @@ impl SplitRules {
true,
rules,
);
+ self.single_arg_split_point_rules(
+ "aggregate-function-sum-count-constant",
+ || agg_fun_expr("?fun_name", vec![literal_int(1)], "?distinct"),
+ || {
+ agg_fun_expr(
+ "Count",
+ vec![literal_int(1)],
+ "AggregateFunctionExprDistinct:false",
+ )
+ },
+ |alias_column| agg_fun_expr("?output_fun_name", vec![alias_column], "?distinct"),
+ self.transform_aggregate_function(
+ Some("?fun_name"),
+ None,
+ Some("?distinct"),
+ "?output_fun_name",
+ "?alias_to_cube",
+ true,
+ ),
+ true,
+ rules,
+ );
self.single_arg_split_point_rules(
"aggregate-function-invariant-constant",
|| agg_fun_expr("?fun_name", vec!["?constant"], "?distinct"),
diff --git a/rust/cubesql/cubesql/src/compile/rewrite/rules/split/top_level.rs b/rust/cubesql/cubesql/src/compile/rewrite/rules/split/top_level.rs
index 16debb9f63..aa35569b3c 100644
--- a/rust/cubesql/cubesql/src/compile/rewrite/rules/split/top_level.rs
+++ b/rust/cubesql/cubesql/src/compile/rewrite/rules/split/top_level.rs
@@ -109,7 +109,7 @@ impl SplitRules {
"?orders",
"?limit",
"?offset",
- "CubeScanSplit:false",
+ "CubeScanSplit:true",
"?can_pushdown_join",
"CubeScanWrapped:false",
"?ungrouped",
@@ -214,7 +214,7 @@ impl SplitRules {
"?orders",
"?limit",
"?offset",
- "CubeScanSplit:false",
+ "CubeScanSplit:true",
"?can_pushdown_join",
"CubeScanWrapped:false",
"?ungrouped",
diff --git a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/aggregate.rs b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/aggregate.rs
index 461d5949f7..699f90f341 100644
--- a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/aggregate.rs
+++ b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/aggregate.rs
@@ -31,6 +31,7 @@ impl WrapperRules {
"?cube_scan_input",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
"CubeScanWrapperFinalized:false",
@@ -46,34 +47,45 @@ impl WrapperRules {
wrapped_select_projection_expr_empty_tail(),
"?alias_to_cube",
"?ungrouped",
+ "WrapperPullupReplacerInProjection:false",
"?cube_members",
),
wrapper_pushdown_replacer(
"?group_expr",
"?alias_to_cube",
"?ungrouped",
+ "WrapperPullupReplacerInProjection:false",
"?cube_members",
),
wrapper_pushdown_replacer(
"?aggr_expr",
"?alias_to_cube",
"?ungrouped",
+ "WrapperPullupReplacerInProjection:false",
"?cube_members",
),
wrapper_pullup_replacer(
wrapped_select_window_expr_empty_tail(),
"?alias_to_cube",
"?ungrouped",
+ "WrapperPullupReplacerInProjection:false",
"?cube_members",
),
wrapper_pullup_replacer(
"?cube_scan_input",
"?alias_to_cube",
"?ungrouped",
+ "WrapperPullupReplacerInProjection:false",
"?cube_members",
),
wrapped_select_joins_empty_tail(),
- wrapped_select_filter_expr_empty_tail(),
+ wrapper_pullup_replacer(
+ wrapped_select_filter_expr_empty_tail(),
+ "?alias_to_cube",
+ "?ungrouped",
+ "WrapperPullupReplacerInProjection:false",
+ "?cube_members",
+ ),
wrapped_select_having_expr_empty_tail(),
"WrappedSelectLimit:None",
"WrappedSelectOffset:None",
@@ -81,10 +93,12 @@ impl WrapperRules {
wrapped_select_order_expr_empty_tail(),
"?alias_to_cube",
"?ungrouped",
+ "WrapperPullupReplacerInProjection:false",
"?cube_members",
),
"WrappedSelectAlias:None",
"?select_ungrouped",
+ "WrappedSelectUngroupedScan:false",
),
"CubeScanWrapperFinalized:false",
),
@@ -107,6 +121,7 @@ impl WrapperRules {
"?aggr_expr",
"?alias_to_cube",
"WrapperPullupReplacerUngrouped:true",
+ "?in_projection",
"?cube_members",
),
vec![("?aggr_expr", aggr_expr)],
@@ -114,6 +129,7 @@ impl WrapperRules {
"?measure",
"?alias_to_cube",
"WrapperPullupReplacerUngrouped:true",
+ "?in_projection",
"?cube_members",
),
self.pushdown_measure(
diff --git a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/aggregate_function.rs b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/aggregate_function.rs
index f310239c41..3d5280f017 100644
--- a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/aggregate_function.rs
+++ b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/aggregate_function.rs
@@ -22,6 +22,7 @@ impl WrapperRules {
agg_fun_expr("?fun", vec!["?expr"], "?distinct"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
agg_fun_expr(
@@ -30,6 +31,7 @@ impl WrapperRules {
"?expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
)],
"?distinct",
@@ -43,6 +45,7 @@ impl WrapperRules {
"?expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
)],
"?distinct",
@@ -51,6 +54,7 @@ impl WrapperRules {
agg_fun_expr("?fun", vec!["?expr"], "?distinct"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
self.transform_agg_fun_expr("?fun", "?distinct", "?alias_to_cube"),
diff --git a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/alias.rs b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/alias.rs
index 1880fd6ffa..a3354764fb 100644
--- a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/alias.rs
+++ b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/alias.rs
@@ -13,6 +13,7 @@ impl WrapperRules {
alias_expr("?expr", "?alias"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
alias_expr(
@@ -20,6 +21,7 @@ impl WrapperRules {
"?expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
"?alias",
@@ -32,6 +34,7 @@ impl WrapperRules {
"?expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
"?alias",
@@ -40,6 +43,7 @@ impl WrapperRules {
alias_expr("?expr", "?alias"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
),
diff --git a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/binary_expr.rs b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/binary_expr.rs
index 630d19e847..a11687459e 100644
--- a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/binary_expr.rs
+++ b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/binary_expr.rs
@@ -20,6 +20,7 @@ impl WrapperRules {
binary_expr("?left", "?op", "?right"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
binary_expr(
@@ -27,6 +28,7 @@ impl WrapperRules {
"?left",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
"?op",
@@ -34,6 +36,7 @@ impl WrapperRules {
"?right",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
),
@@ -45,6 +48,7 @@ impl WrapperRules {
"?left",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
"?op",
@@ -52,6 +56,7 @@ impl WrapperRules {
"?right",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
),
@@ -59,6 +64,7 @@ impl WrapperRules {
binary_expr("?left", "?op", "?right"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
self.transform_binary_expr("?op", "?alias_to_cube"),
diff --git a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/case.rs b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/case.rs
index 2378c9bf4a..2ad45eb756 100644
--- a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/case.rs
+++ b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/case.rs
@@ -17,6 +17,7 @@ impl WrapperRules {
case_expr_var_arg("?when", "?then", "?else"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
case_expr_var_arg(
@@ -24,18 +25,21 @@ impl WrapperRules {
"?when",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pushdown_replacer(
"?then",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pushdown_replacer(
"?else",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
),
@@ -47,18 +51,21 @@ impl WrapperRules {
"?when",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pullup_replacer(
"?then",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pullup_replacer(
"?else",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
),
@@ -66,6 +73,7 @@ impl WrapperRules {
case_expr_var_arg("?when", "?then", "?else"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
self.transform_case_expr("?alias_to_cube"),
diff --git a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/cast.rs b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/cast.rs
index 4edcd5fda4..ffb8493ebc 100644
--- a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/cast.rs
+++ b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/cast.rs
@@ -13,6 +13,7 @@ impl WrapperRules {
cast_expr("?expr", "?data_type"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
cast_expr(
@@ -20,6 +21,7 @@ impl WrapperRules {
"?expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
"?data_type",
@@ -32,6 +34,7 @@ impl WrapperRules {
"?expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
"?data_type",
@@ -40,6 +43,7 @@ impl WrapperRules {
cast_expr("?expr", "?data_type"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
),
diff --git a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/column.rs b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/column.rs
index ff02fa5f75..98f6905cfd 100644
--- a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/column.rs
+++ b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/column.rs
@@ -17,15 +17,37 @@ impl WrapperRules {
column_expr("?name"),
"?alias_to_cube",
"WrapperPullupReplacerUngrouped:false",
+ "?in_projection",
"?cube_members",
),
wrapper_pullup_replacer(
column_expr("?name"),
"?alias_to_cube",
"WrapperPullupReplacerUngrouped:false",
+ "?in_projection",
"?cube_members",
),
),
+ // TODO This is half measure implementation to propagate ungrouped simple measure towards aggregate node that easily allow replacement of aggregation functions
+ // We need to support it for complex aka `number` measures
+ transforming_rewrite(
+ "wrapper-push-down-column-simple-measure-in-projection",
+ wrapper_pushdown_replacer(
+ column_expr("?name"),
+ "?alias_to_cube",
+ "WrapperPullupReplacerUngrouped:true",
+ "WrapperPullupReplacerInProjection:true",
+ "?cube_members",
+ ),
+ wrapper_pullup_replacer(
+ column_expr("?name"),
+ "?alias_to_cube",
+ "WrapperPullupReplacerUngrouped:true",
+ "WrapperPullupReplacerInProjection:true",
+ "?cube_members",
+ ),
+ self.pushdown_simple_measure("?name", "?cube_members"),
+ ),
// TODO time dimension support
transforming_rewrite(
"wrapper-push-down-dimension",
@@ -33,12 +55,14 @@ impl WrapperRules {
column_expr("?name"),
"?alias_to_cube",
"WrapperPullupReplacerUngrouped:true",
+ "?in_projection",
"?cube_members",
),
wrapper_pullup_replacer(
"?dimension",
"?alias_to_cube",
"WrapperPullupReplacerUngrouped:true",
+ "?in_projection",
"?cube_members",
),
self.pushdown_dimension("?name", "?cube_members", "?dimension"),
@@ -85,4 +109,34 @@ impl WrapperRules {
false
}
}
+
+ fn pushdown_simple_measure(
+ &self,
+ column_name_var: &'static str,
+ members_var: &'static str,
+ ) -> impl Fn(&mut EGraph, &mut Subst) -> bool {
+ let column_name_var = var!(column_name_var);
+ let members_var = var!(members_var);
+ let meta = self.meta_context.clone();
+ move |egraph, subst| {
+ for column in var_iter!(egraph[subst[column_name_var]], ColumnExprColumn).cloned() {
+ if let Some(member_name_to_expr) =
+ egraph[subst[members_var]].data.member_name_to_expr.clone()
+ {
+ let column_name_to_member_name = column_name_to_member_vec(member_name_to_expr);
+ if let Some((_, Some(member))) = column_name_to_member_name
+ .iter()
+ .find(|(cn, _)| cn == &column.name)
+ {
+ if let Some(measure) = meta.find_measure_with_name(member.to_string()) {
+ if measure.agg_type != Some("number".to_string()) {
+ return true;
+ }
+ }
+ }
+ }
+ }
+ false
+ }
+ }
}
diff --git a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/cube_scan_wrapper.rs b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/cube_scan_wrapper.rs
index 228f6a43c4..8ccdb8f1c5 100644
--- a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/cube_scan_wrapper.rs
+++ b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/cube_scan_wrapper.rs
@@ -45,6 +45,7 @@ impl WrapperRules {
),
"?alias_to_cube_out",
"?ungrouped_out",
+ "WrapperPullupReplacerInProjection:false",
"?members",
),
"CubeScanWrapperFinalized:false",
@@ -63,6 +64,7 @@ impl WrapperRules {
"?cube_scan_input",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
"CubeScanWrapperFinalized:false",
diff --git a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/extract.rs b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/extract.rs
index a30abbc8cc..4231453992 100644
--- a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/extract.rs
+++ b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/extract.rs
@@ -23,6 +23,7 @@ impl WrapperRules {
literal_expr("?date_part"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
scalar_fun_expr_args(
@@ -30,12 +31,14 @@ impl WrapperRules {
"?date",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pullup_replacer(
scalar_fun_expr_args_empty_tail(),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
),
@@ -48,6 +51,7 @@ impl WrapperRules {
),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
self.transform_date_part_expr("?alias_to_cube"),
diff --git a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/filter.rs b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/filter.rs
new file mode 100644
index 0000000000..21e6f4cabe
--- /dev/null
+++ b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/filter.rs
@@ -0,0 +1,240 @@
+use crate::{
+ compile::rewrite::{
+ analysis::LogicalPlanAnalysis, cube_scan_wrapper, filter, rules::wrapper::WrapperRules,
+ transforming_rewrite, wrapped_select, wrapped_select_aggr_expr_empty_tail,
+ wrapped_select_filter_expr, wrapped_select_filter_expr_empty_tail,
+ wrapped_select_group_expr_empty_tail, wrapped_select_having_expr_empty_tail,
+ wrapped_select_joins_empty_tail, wrapped_select_order_expr_empty_tail,
+ wrapped_select_projection_expr_empty_tail, wrapped_select_window_expr_empty_tail,
+ wrapper_pullup_replacer, wrapper_pushdown_replacer, LogicalPlanLanguage,
+ WrappedSelectUngrouped, WrappedSelectUngroupedScan, WrapperPullupReplacerUngrouped,
+ },
+ var, var_iter,
+};
+use egg::{EGraph, Rewrite, Subst};
+
+impl WrapperRules {
+ pub fn filter_rules(&self, rules: &mut Vec>) {
+ // TODO respect having filter for push down to wrapped select
+ // rules.extend(vec![rewrite(
+ // "wrapper-push-down-filter-to-wrapped-select",
+ // filter(
+ // "?filter_expr",
+ // cube_scan_wrapper(
+ // wrapper_pullup_replacer(
+ // wrapped_select(
+ // "?select_type",
+ // "?projection_expr",
+ // "?group_expr",
+ // "?aggr_expr",
+ // "?window_expr",
+ // "?cube_scan_input",
+ // "?joins",
+ // "?old_filter_expr",
+ // "?having_expr",
+ // "?wrapped_select_limit",
+ // "?wrapped_select_offset",
+ // "?order_expr",
+ // "?select_alias",
+ // "?select_ungrouped",
+ // ),
+ // "?alias_to_cube",
+ // "?ungrouped",
+ // "?cube_members",
+ // ),
+ // "CubeScanWrapperFinalized:false".to_string(),
+ // ),
+ // ),
+ // cube_scan_wrapper(
+ // wrapped_select(
+ // "?select_type",
+ // wrapper_pullup_replacer(
+ // "?projection_expr",
+ // "?alias_to_cube",
+ // "?ungrouped",
+ // "?cube_members",
+ // ),
+ // wrapper_pullup_replacer(
+ // "?group_expr",
+ // "?alias_to_cube",
+ // "?ungrouped",
+ // "?cube_members",
+ // ),
+ // wrapper_pullup_replacer(
+ // "?aggr_expr",
+ // "?alias_to_cube",
+ // "?ungrouped",
+ // "?cube_members",
+ // ),
+ // wrapper_pullup_replacer(
+ // "?window_expr",
+ // "?alias_to_cube",
+ // "?ungrouped",
+ // "?cube_members",
+ // ),
+ // wrapper_pullup_replacer(
+ // "?cube_scan_input",
+ // "?alias_to_cube",
+ // "?ungrouped",
+ // "?cube_members",
+ // ),
+ // "?joins",
+ // wrapped_select_filter_expr(
+ // wrapper_pullup_replacer(
+ // "?old_filter_expr",
+ // "?alias_to_cube",
+ // "?ungrouped",
+ // "?cube_members",
+ // ),
+ // wrapper_pushdown_replacer(
+ // "?filter_expr",
+ // "?alias_to_cube",
+ // "?ungrouped",
+ // "?cube_members",
+ // ),
+ // ),
+ // "?having_expr",
+ // "?wrapped_select_limit",
+ // "?wrapped_select_offset",
+ // wrapper_pullup_replacer(
+ // "?order_expr",
+ // "?alias_to_cube",
+ // "?ungrouped",
+ // "?cube_members",
+ // ),
+ // "?select_alias",
+ // "?select_ungrouped",
+ // ),
+ // "CubeScanWrapperFinalized:false",
+ // ),
+ // )]);
+
+ rules.extend(vec![transforming_rewrite(
+ "wrapper-push-down-filter-to-cube-scan",
+ filter(
+ "?filter_expr",
+ cube_scan_wrapper(
+ wrapper_pullup_replacer(
+ "?cube_scan_input",
+ "?alias_to_cube",
+ "?ungrouped",
+ "?in_projection",
+ "?cube_members",
+ ),
+ "CubeScanWrapperFinalized:false",
+ ),
+ ),
+ cube_scan_wrapper(
+ wrapped_select(
+ "WrappedSelectSelectType:Projection",
+ wrapper_pullup_replacer(
+ wrapped_select_projection_expr_empty_tail(),
+ "?alias_to_cube",
+ "?ungrouped",
+ "?in_projection",
+ "?cube_members",
+ ),
+ wrapper_pullup_replacer(
+ wrapped_select_group_expr_empty_tail(),
+ "?alias_to_cube",
+ "?ungrouped",
+ "?in_projection",
+ "?cube_members",
+ ),
+ wrapper_pullup_replacer(
+ wrapped_select_aggr_expr_empty_tail(),
+ "?alias_to_cube",
+ "?ungrouped",
+ "?in_projection",
+ "?cube_members",
+ ),
+ wrapper_pullup_replacer(
+ wrapped_select_window_expr_empty_tail(),
+ "?alias_to_cube",
+ "?ungrouped",
+ "?in_projection",
+ "?cube_members",
+ ),
+ wrapper_pullup_replacer(
+ "?cube_scan_input",
+ "?alias_to_cube",
+ "?ungrouped",
+ "?in_projection",
+ "?cube_members",
+ ),
+ wrapped_select_joins_empty_tail(),
+ wrapped_select_filter_expr(
+ wrapper_pushdown_replacer(
+ "?filter_expr",
+ "?alias_to_cube",
+ "?ungrouped",
+ "?in_projection",
+ "?cube_members",
+ ),
+ wrapper_pullup_replacer(
+ wrapped_select_filter_expr_empty_tail(),
+ "?alias_to_cube",
+ "?ungrouped",
+ "?in_projection",
+ "?cube_members",
+ ),
+ ),
+ wrapped_select_having_expr_empty_tail(),
+ "WrappedSelectLimit:None",
+ "WrappedSelectOffset:None",
+ wrapper_pullup_replacer(
+ wrapped_select_order_expr_empty_tail(),
+ "?alias_to_cube",
+ "?ungrouped",
+ "?in_projection",
+ "?cube_members",
+ ),
+ "WrappedSelectAlias:None",
+ "?select_ungrouped",
+ "?select_ungrouped_scan",
+ ),
+ "CubeScanWrapperFinalized:false",
+ ),
+ self.transform_filter("?ungrouped", "?select_ungrouped", "?select_ungrouped_scan"),
+ )]);
+
+ Self::list_pushdown_pullup_rules(
+ rules,
+ "wrapper-filter-expr",
+ "WrappedSelectFilterExpr",
+ "WrappedSelectFilterExpr",
+ );
+ }
+
+ fn transform_filter(
+ &self,
+ ungrouped_var: &'static str,
+ select_ungrouped_var: &'static str,
+ select_ungrouped_scan_var: &'static str,
+ ) -> impl Fn(&mut EGraph, &mut Subst) -> bool {
+ let ungrouped_var = var!(ungrouped_var);
+ let select_ungrouped_var = var!(select_ungrouped_var);
+ let select_ungrouped_scan_var = var!(select_ungrouped_scan_var);
+ move |egraph, subst| {
+ for ungrouped in
+ var_iter!(egraph[subst[ungrouped_var]], WrapperPullupReplacerUngrouped).cloned()
+ {
+ subst.insert(
+ select_ungrouped_var,
+ egraph.add(LogicalPlanLanguage::WrappedSelectUngrouped(
+ WrappedSelectUngrouped(ungrouped),
+ )),
+ );
+
+ subst.insert(
+ select_ungrouped_scan_var,
+ egraph.add(LogicalPlanLanguage::WrappedSelectUngroupedScan(
+ WrappedSelectUngroupedScan(ungrouped),
+ )),
+ );
+ return true;
+ }
+ false
+ }
+ }
+}
diff --git a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/in_list_expr.rs b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/in_list_expr.rs
index bfdfde9007..c7e95ddd1c 100644
--- a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/in_list_expr.rs
+++ b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/in_list_expr.rs
@@ -20,6 +20,7 @@ impl WrapperRules {
inlist_expr("?expr", "?list", "?negated"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
inlist_expr(
@@ -27,12 +28,14 @@ impl WrapperRules {
"?expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pushdown_replacer(
"?list",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
"?negated",
@@ -45,12 +48,14 @@ impl WrapperRules {
"?expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pullup_replacer(
"?list",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
"?negated",
@@ -59,6 +64,7 @@ impl WrapperRules {
inlist_expr("?expr", "?list", "?negated"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
self.transform_in_list_expr("?alias_to_cube"),
diff --git a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/is_null_expr.rs b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/is_null_expr.rs
index 9830d11a78..bfa77149f1 100644
--- a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/is_null_expr.rs
+++ b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/is_null_expr.rs
@@ -20,12 +20,14 @@ impl WrapperRules {
is_null_expr("?expr"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
is_null_expr(wrapper_pushdown_replacer(
"?expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
)),
),
@@ -35,12 +37,14 @@ impl WrapperRules {
"?expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
)),
wrapper_pullup_replacer(
is_null_expr("?expr"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
self.transform_is_null_expr("?alias_to_cube"),
@@ -51,12 +55,14 @@ impl WrapperRules {
is_not_null_expr("?expr"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
is_not_null_expr(wrapper_pushdown_replacer(
"?expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
)),
),
@@ -66,12 +72,14 @@ impl WrapperRules {
"?expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
)),
wrapper_pullup_replacer(
is_not_null_expr("?expr"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
self.transform_is_null_expr("?alias_to_cube"),
diff --git a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/limit.rs b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/limit.rs
index fe2e588897..2aba025f80 100644
--- a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/limit.rs
+++ b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/limit.rs
@@ -32,9 +32,11 @@ impl WrapperRules {
"?order_expr",
"?select_alias",
"?select_ungrouped",
+ "?select_ungrouped_scan",
),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
"CubeScanWrapperFinalized:false".to_string(),
@@ -57,9 +59,11 @@ impl WrapperRules {
"?order_expr",
"?select_alias",
"?select_ungrouped",
+ "?select_ungrouped_scan",
),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
"CubeScanWrapperFinalized:false",
diff --git a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/literal.rs b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/literal.rs
index 8d40bdb5c8..e68a1a0d12 100644
--- a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/literal.rs
+++ b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/literal.rs
@@ -1,28 +1,73 @@
-use crate::compile::rewrite::{
- analysis::LogicalPlanAnalysis, literal_expr, rewrite, rules::wrapper::WrapperRules,
- wrapper_pullup_replacer, wrapper_pushdown_replacer, LogicalPlanLanguage,
+use crate::{
+ compile::rewrite::{
+ analysis::LogicalPlanAnalysis, literal_expr, rules::wrapper::WrapperRules,
+ transforming_rewrite, wrapper_pullup_replacer, wrapper_pushdown_replacer, LiteralExprValue,
+ LogicalPlanLanguage, WrapperPullupReplacerAliasToCube,
+ },
+ var, var_iter,
};
-use egg::Rewrite;
+
+use datafusion::scalar::ScalarValue;
+use egg::{EGraph, Rewrite, Subst};
impl WrapperRules {
pub fn literal_rules(
&self,
rules: &mut Vec>,
) {
- rules.extend(vec![rewrite(
+ rules.extend(vec![transforming_rewrite(
"wrapper-push-down-literal",
wrapper_pushdown_replacer(
literal_expr("?value"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pullup_replacer(
literal_expr("?value"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
+ self.transform_literal("?alias_to_cube", "?value"),
)]);
}
+
+ fn transform_literal(
+ &self,
+ alias_to_cube_var: &str,
+ value_var: &str,
+ ) -> impl Fn(&mut EGraph, &mut Subst) -> bool {
+ let alias_to_cube_var = var!(alias_to_cube_var);
+ let value_var = var!(value_var);
+ let meta = self.meta_context.clone();
+ move |egraph, subst| {
+ for alias_to_cube in var_iter!(
+ egraph[subst[alias_to_cube_var]],
+ WrapperPullupReplacerAliasToCube
+ )
+ .cloned()
+ {
+ if let Some(sql_generator) = meta.sql_generator_by_alias_to_cube(&alias_to_cube) {
+ for literal in var_iter!(egraph[subst[value_var]], LiteralExprValue) {
+ match literal {
+ ScalarValue::TimestampNanosecond(_, _)
+ | ScalarValue::TimestampMillisecond(_, _)
+ | ScalarValue::TimestampMicrosecond(_, _)
+ | ScalarValue::TimestampSecond(_, _) => {
+ return sql_generator
+ .get_sql_templates()
+ .templates
+ .contains_key("expressions/timestamp_literal");
+ }
+ _ => return true,
+ }
+ }
+ }
+ }
+ false
+ }
+ }
}
diff --git a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/mod.rs b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/mod.rs
index 57ee14be6d..2cb785d18f 100644
--- a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/mod.rs
+++ b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/mod.rs
@@ -7,6 +7,7 @@ mod cast;
mod column;
mod cube_scan_wrapper;
mod extract;
+mod filter;
mod in_list_expr;
mod is_null_expr;
mod limit;
@@ -50,6 +51,7 @@ impl RewriteRules for WrapperRules {
self.aggregate_rules(&mut rules);
self.projection_rules(&mut rules);
self.limit_rules(&mut rules);
+ self.filter_rules(&mut rules);
self.order_rules(&mut rules);
self.window_rules(&mut rules);
self.aggregate_function_rules(&mut rules);
@@ -90,7 +92,15 @@ impl WrapperRules {
rules.extend(replacer_push_down_node(
rule_name,
list_node,
- |node| wrapper_pushdown_replacer(node, "?alias_to_cube", "?ungrouped", "?cube_members"),
+ |node| {
+ wrapper_pushdown_replacer(
+ node,
+ "?alias_to_cube",
+ "?ungrouped",
+ "?in_projection",
+ "?cube_members",
+ )
+ },
false,
));
@@ -98,16 +108,31 @@ impl WrapperRules {
rule_name,
list_node,
substitute_list_node,
- |node| wrapper_pullup_replacer(node, "?alias_to_cube", "?ungrouped", "?cube_members"),
+ |node| {
+ wrapper_pullup_replacer(
+ node,
+ "?alias_to_cube",
+ "?ungrouped",
+ "?in_projection",
+ "?cube_members",
+ )
+ },
));
rules.extend(vec![rewrite(
rule_name,
- wrapper_pushdown_replacer(list_node, "?alias_to_cube", "?ungrouped", "?cube_members"),
+ wrapper_pushdown_replacer(
+ list_node,
+ "?alias_to_cube",
+ "?ungrouped",
+ "?in_projection",
+ "?cube_members",
+ ),
wrapper_pullup_replacer(
substitute_list_node,
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
)]);
@@ -121,7 +146,15 @@ impl WrapperRules {
rules.extend(replacer_push_down_node(
rule_name,
list_node,
- |node| wrapper_pushdown_replacer(node, "?alias_to_cube", "?ungrouped", "?cube_members"),
+ |node| {
+ wrapper_pushdown_replacer(
+ node,
+ "?alias_to_cube",
+ "?ungrouped",
+ "?in_projection",
+ "?cube_members",
+ )
+ },
false,
));
@@ -129,13 +162,33 @@ impl WrapperRules {
rule_name,
list_node,
list_node,
- |node| wrapper_pullup_replacer(node, "?alias_to_cube", "?ungrouped", "?cube_members"),
+ |node| {
+ wrapper_pullup_replacer(
+ node,
+ "?alias_to_cube",
+ "?ungrouped",
+ "?in_projection",
+ "?cube_members",
+ )
+ },
));
rules.extend(vec![rewrite(
rule_name,
- wrapper_pushdown_replacer(list_node, "?alias_to_cube", "?ungrouped", "?cube_members"),
- wrapper_pullup_replacer(list_node, "?alias_to_cube", "?ungrouped", "?cube_members"),
+ wrapper_pushdown_replacer(
+ list_node,
+ "?alias_to_cube",
+ "?ungrouped",
+ "?in_projection",
+ "?cube_members",
+ ),
+ wrapper_pullup_replacer(
+ list_node,
+ "?alias_to_cube",
+ "?ungrouped",
+ "?in_projection",
+ "?cube_members",
+ ),
)]);
}
}
diff --git a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/negative_expr.rs b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/negative_expr.rs
index 5bf475f157..748d3bc865 100644
--- a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/negative_expr.rs
+++ b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/negative_expr.rs
@@ -20,12 +20,14 @@ impl WrapperRules {
negative_expr("?expr"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
negative_expr(wrapper_pushdown_replacer(
"?expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
)),
),
@@ -35,12 +37,14 @@ impl WrapperRules {
"?expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
)),
wrapper_pullup_replacer(
negative_expr("?expr"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
self.transform_negative_expr("?alias_to_cube"),
diff --git a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/not_expr.rs b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/not_expr.rs
index 830576ee02..87cc50d2b5 100644
--- a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/not_expr.rs
+++ b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/not_expr.rs
@@ -20,12 +20,14 @@ impl WrapperRules {
not_expr("?expr"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
not_expr(wrapper_pushdown_replacer(
"?expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
)),
),
@@ -35,12 +37,14 @@ impl WrapperRules {
"?expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
)),
wrapper_pullup_replacer(
not_expr("?expr"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
self.transform_not_expr("?alias_to_cube"),
diff --git a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/order.rs b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/order.rs
index 30449176b1..c5649993df 100644
--- a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/order.rs
+++ b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/order.rs
@@ -28,9 +28,11 @@ impl WrapperRules {
wrapped_select_order_expr_empty_tail(),
"?select_alias",
"?select_ungrouped",
+ "?select_ungrouped_scan",
),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
"CubeScanWrapperFinalized:false",
@@ -43,34 +45,45 @@ impl WrapperRules {
"?projection_expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pullup_replacer(
"?group_expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pullup_replacer(
"?aggr_expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pullup_replacer(
"?window_expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pullup_replacer(
"?cube_scan_input",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
"?joins",
- "?filter_expr",
+ wrapper_pullup_replacer(
+ "?filter_expr",
+ "?alias_to_cube",
+ "?ungrouped",
+ "?in_projection",
+ "?cube_members",
+ ),
"?having_expr",
"?limit",
"?offset",
@@ -78,10 +91,12 @@ impl WrapperRules {
"?order_expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
"?select_alias",
"?select_ungrouped",
+ "?select_ungrouped_scan",
),
"CubeScanWrapperFinalized:false",
),
diff --git a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/projection.rs b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/projection.rs
index aba2c26458..90ad8ca7c0 100644
--- a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/projection.rs
+++ b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/projection.rs
@@ -6,7 +6,8 @@ use crate::{
wrapped_select_having_expr_empty_tail, wrapped_select_joins_empty_tail,
wrapped_select_order_expr_empty_tail, wrapped_select_window_expr_empty_tail,
wrapper_pullup_replacer, wrapper_pushdown_replacer, LogicalPlanLanguage, ProjectionAlias,
- WrappedSelectAlias, WrappedSelectUngrouped, WrapperPullupReplacerUngrouped,
+ WrappedSelectAlias, WrappedSelectUngrouped, WrappedSelectUngroupedScan,
+ WrapperPullupReplacerUngrouped,
},
var, var_iter,
};
@@ -26,6 +27,7 @@ impl WrapperRules {
"?cube_scan_input",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
"CubeScanWrapperFinalized:false",
@@ -40,34 +42,45 @@ impl WrapperRules {
"?expr",
"?alias_to_cube",
"?ungrouped",
+ "WrapperPullupReplacerInProjection:true",
"?cube_members",
),
wrapper_pullup_replacer(
wrapped_select_group_expr_empty_tail(),
"?alias_to_cube",
"?ungrouped",
+ "WrapperPullupReplacerInProjection:true",
"?cube_members",
),
wrapper_pullup_replacer(
wrapped_select_aggr_expr_empty_tail(),
"?alias_to_cube",
"?ungrouped",
+ "WrapperPullupReplacerInProjection:true",
"?cube_members",
),
wrapper_pullup_replacer(
wrapped_select_window_expr_empty_tail(),
"?alias_to_cube",
"?ungrouped",
+ "WrapperPullupReplacerInProjection:true",
"?cube_members",
),
wrapper_pullup_replacer(
"?cube_scan_input",
"?alias_to_cube",
"?ungrouped",
+ "WrapperPullupReplacerInProjection:true",
"?cube_members",
),
wrapped_select_joins_empty_tail(),
- wrapped_select_filter_expr_empty_tail(),
+ wrapper_pullup_replacer(
+ wrapped_select_filter_expr_empty_tail(),
+ "?alias_to_cube",
+ "?ungrouped",
+ "WrapperPullupReplacerInProjection:true",
+ "?cube_members",
+ ),
wrapped_select_having_expr_empty_tail(),
"WrappedSelectLimit:None",
"WrappedSelectOffset:None",
@@ -75,10 +88,12 @@ impl WrapperRules {
wrapped_select_order_expr_empty_tail(),
"?alias_to_cube",
"?ungrouped",
+ "WrapperPullupReplacerInProjection:true",
"?cube_members",
),
"?select_alias",
"?select_ungrouped",
+ "?select_ungrouped_scan",
),
"CubeScanWrapperFinalized:false",
),
@@ -87,6 +102,7 @@ impl WrapperRules {
"?ungrouped",
"?select_alias",
"?select_ungrouped",
+ "?select_ungrouped_scan",
),
)]);
@@ -104,11 +120,13 @@ impl WrapperRules {
ungrouped_var: &'static str,
select_alias_var: &'static str,
select_ungrouped_var: &'static str,
+ select_ungrouped_scan_var: &'static str,
) -> impl Fn(&mut EGraph, &mut Subst) -> bool {
let projection_alias_var = var!(projection_alias_var);
let ungrouped_var = var!(ungrouped_var);
let select_alias_var = var!(select_alias_var);
let select_ungrouped_var = var!(select_ungrouped_var);
+ let select_ungrouped_scan_var = var!(select_ungrouped_scan_var);
move |egraph, subst| {
for projection_alias in
var_iter!(egraph[subst[projection_alias_var]], ProjectionAlias).cloned()
@@ -122,6 +140,12 @@ impl WrapperRules {
WrappedSelectUngrouped(ungrouped),
)),
);
+ subst.insert(
+ select_ungrouped_scan_var,
+ egraph.add(LogicalPlanLanguage::WrappedSelectUngroupedScan(
+ WrappedSelectUngroupedScan(ungrouped),
+ )),
+ );
subst.insert(
select_alias_var,
egraph.add(LogicalPlanLanguage::WrappedSelectAlias(WrappedSelectAlias(
diff --git a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/scalar_function.rs b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/scalar_function.rs
index 501ef6ad38..a91686561b 100644
--- a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/scalar_function.rs
+++ b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/scalar_function.rs
@@ -21,6 +21,7 @@ impl WrapperRules {
fun_expr_var_arg("?fun", "?args"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
fun_expr_var_arg(
@@ -29,6 +30,7 @@ impl WrapperRules {
"?args",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
),
@@ -41,6 +43,7 @@ impl WrapperRules {
"?args",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
),
@@ -48,6 +51,7 @@ impl WrapperRules {
fun_expr_var_arg("?fun", "?args"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
self.transform_fun_expr("?fun", "?alias_to_cube"),
@@ -58,6 +62,7 @@ impl WrapperRules {
scalar_fun_expr_args("?left", "?right"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
scalar_fun_expr_args(
@@ -65,12 +70,14 @@ impl WrapperRules {
"?left",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pushdown_replacer(
"?right",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
),
@@ -82,12 +89,14 @@ impl WrapperRules {
"?left",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pullup_replacer(
"?right",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
),
@@ -95,6 +104,7 @@ impl WrapperRules {
scalar_fun_expr_args("?left", "?right"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
),
@@ -104,12 +114,14 @@ impl WrapperRules {
scalar_fun_expr_args_empty_tail(),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pullup_replacer(
scalar_fun_expr_args_empty_tail(),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
),
diff --git a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/sort_expr.rs b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/sort_expr.rs
index 6f14763f1a..e378f93208 100644
--- a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/sort_expr.rs
+++ b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/sort_expr.rs
@@ -16,6 +16,7 @@ impl WrapperRules {
sort_expr("?expr", "?asc", "?nulls_first"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
sort_expr(
@@ -23,6 +24,7 @@ impl WrapperRules {
"?expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
"?asc",
@@ -36,6 +38,7 @@ impl WrapperRules {
"?expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
"?asc",
@@ -45,6 +48,7 @@ impl WrapperRules {
sort_expr("?expr", "?asc", "?nulls_first"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
),
diff --git a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/udf_function.rs b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/udf_function.rs
index 34e72c7d1b..d50f64b8f4 100644
--- a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/udf_function.rs
+++ b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/udf_function.rs
@@ -21,6 +21,7 @@ impl WrapperRules {
udf_expr_var_arg("?fun", "?args"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
udf_expr_var_arg(
@@ -29,6 +30,7 @@ impl WrapperRules {
"?args",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
),
@@ -41,6 +43,7 @@ impl WrapperRules {
"?args",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
),
@@ -48,6 +51,7 @@ impl WrapperRules {
udf_expr_var_arg("?fun", "?args"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
self.transform_udf_expr("?fun", "?alias_to_cube"),
@@ -58,6 +62,7 @@ impl WrapperRules {
udf_fun_expr_args("?left", "?right"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
udf_fun_expr_args(
@@ -65,12 +70,14 @@ impl WrapperRules {
"?left",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pushdown_replacer(
"?right",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
),
@@ -82,12 +89,14 @@ impl WrapperRules {
"?left",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pullup_replacer(
"?right",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
),
@@ -95,6 +104,7 @@ impl WrapperRules {
udf_fun_expr_args("?left", "?right"),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
),
@@ -104,12 +114,14 @@ impl WrapperRules {
udf_fun_expr_args_empty_tail(),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pullup_replacer(
udf_fun_expr_args_empty_tail(),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
),
diff --git a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/window.rs b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/window.rs
index 81c366cb10..5bebbc1a3d 100644
--- a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/window.rs
+++ b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/window.rs
@@ -27,9 +27,11 @@ impl WrapperRules {
"?order_expr",
"?select_alias",
"?select_ungrouped",
+ "?select_ungrouped_scan",
),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
"CubeScanWrapperFinalized:false",
@@ -43,34 +45,45 @@ impl WrapperRules {
"?projection_expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pullup_replacer(
"?group_expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pullup_replacer(
"?aggr_expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pushdown_replacer(
"?window_expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pullup_replacer(
"?cube_scan_input",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
"?joins",
- "?filter_expr",
+ wrapper_pullup_replacer(
+ "?filter_expr",
+ "?alias_to_cube",
+ "?ungrouped",
+ "?in_projection",
+ "?cube_members",
+ ),
"?having_expr",
"?limit",
"?offset",
@@ -78,10 +91,12 @@ impl WrapperRules {
"?order_expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
"?select_alias",
"?select_ungrouped",
+ "?select_ungrouped_scan",
),
"CubeScanWrapperFinalized:false",
),
diff --git a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/window_function.rs b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/window_function.rs
index 0c2010e06c..73bb990bc4 100644
--- a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/window_function.rs
+++ b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/window_function.rs
@@ -27,6 +27,7 @@ impl WrapperRules {
),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
window_fun_expr_var_arg(
@@ -35,18 +36,21 @@ impl WrapperRules {
"?expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pushdown_replacer(
"?partition_by",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pushdown_replacer(
"?order_by",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
"?window_frame",
@@ -60,18 +64,21 @@ impl WrapperRules {
"?expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pullup_replacer(
"?partition_by",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pullup_replacer(
"?order_by",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
"?window_frame",
@@ -86,6 +93,7 @@ impl WrapperRules {
),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
self.transform_window_fun_expr("?fun", "?alias_to_cube"),
diff --git a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/wrapper_pull_up.rs b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/wrapper_pull_up.rs
index fa701c9f29..e24f08e62c 100644
--- a/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/wrapper_pull_up.rs
+++ b/rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/wrapper_pull_up.rs
@@ -1,9 +1,9 @@
use crate::{
compile::rewrite::{
analysis::LogicalPlanAnalysis, cube_scan_wrapper, rules::wrapper::WrapperRules,
- transforming_rewrite, wrapped_select, wrapped_select_filter_expr_empty_tail,
- wrapped_select_having_expr_empty_tail, wrapped_select_joins_empty_tail,
- wrapper_pullup_replacer, LogicalPlanLanguage, WrappedSelectSelectType, WrappedSelectType,
+ transforming_rewrite, wrapped_select, wrapped_select_having_expr_empty_tail,
+ wrapped_select_joins_empty_tail, wrapper_pullup_replacer, LogicalPlanLanguage,
+ WrappedSelectSelectType, WrappedSelectType,
},
var, var_iter, var_list_iter,
};
@@ -24,34 +24,45 @@ impl WrapperRules {
"?projection_expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pullup_replacer(
"?group_expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pullup_replacer(
"?aggr_expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pullup_replacer(
"?window_expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pullup_replacer(
"?cube_scan_input",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapped_select_joins_empty_tail(),
- wrapped_select_filter_expr_empty_tail(),
+ wrapper_pullup_replacer(
+ "?filter_expr",
+ "?alias_to_cube",
+ "?ungrouped",
+ "?in_projection",
+ "?cube_members",
+ ),
wrapped_select_having_expr_empty_tail(),
"WrappedSelectLimit:None",
"WrappedSelectOffset:None",
@@ -59,10 +70,12 @@ impl WrapperRules {
"?order_expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
"?select_alias",
"?select_ungrouped",
+ "?select_ungrouped_scan",
),
"CubeScanWrapperFinalized:false",
),
@@ -76,17 +89,19 @@ impl WrapperRules {
"?window_expr",
"?cube_scan_input",
wrapped_select_joins_empty_tail(),
- wrapped_select_filter_expr_empty_tail(),
+ "?filter_expr",
wrapped_select_having_expr_empty_tail(),
"WrappedSelectLimit:None",
"WrappedSelectOffset:None",
"?order_expr",
"?select_alias",
"?select_ungrouped",
+ "?select_ungrouped_scan",
),
"?alias_to_cube",
// TODO in fact ungrouped flag is being used not only to indicate that underlying query is ungrouped however to indicate that WrappedSelect won't push down Cube members. Do we need separate flags?
"WrapperPullupReplacerUngrouped:false",
+ "?in_projection",
"?cube_members",
),
"CubeScanWrapperFinalized:false",
@@ -102,24 +117,28 @@ impl WrapperRules {
"?projection_expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pullup_replacer(
"?group_expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pullup_replacer(
"?aggr_expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pullup_replacer(
"?window_expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapper_pullup_replacer(
@@ -138,13 +157,21 @@ impl WrapperRules {
"?inner_order_expr",
"?inner_alias",
"?inner_ungrouped",
+ "?inner_ungrouped_scan",
),
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
wrapped_select_joins_empty_tail(),
- wrapped_select_filter_expr_empty_tail(),
+ wrapper_pullup_replacer(
+ "?filter_expr",
+ "?alias_to_cube",
+ "?ungrouped",
+ "?in_projection",
+ "?cube_members",
+ ),
wrapped_select_having_expr_empty_tail(),
"WrappedSelectLimit:None",
"WrappedSelectOffset:None",
@@ -152,10 +179,12 @@ impl WrapperRules {
"?order_expr",
"?alias_to_cube",
"?ungrouped",
+ "?in_projection",
"?cube_members",
),
"?select_alias",
"?select_ungrouped",
+ "?select_ungrouped_scan",
),
"CubeScanWrapperFinalized:false",
),
@@ -182,18 +211,21 @@ impl WrapperRules {
"?inner_order_expr",
"?inner_alias",
"?inner_ungrouped",
+ "?inner_ungrouped_scan",
),
wrapped_select_joins_empty_tail(),
- wrapped_select_filter_expr_empty_tail(),
+ "?filter_expr",
wrapped_select_having_expr_empty_tail(),
"WrappedSelectLimit:None",
"WrappedSelectOffset:None",
"?order_expr",
"?select_alias",
"?select_ungrouped",
+ "?select_ungrouped_scan",
),
"?alias_to_cube",
"WrapperPullupReplacerUngrouped:false",
+ "?inner_projection_expr",
"?cube_members",
),
"CubeScanWrapperFinalized:false",
diff --git a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__cast_float_to_text.snap b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__cast_float_to_text.snap
new file mode 100644
index 0000000000..65b07285c5
--- /dev/null
+++ b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__cast_float_to_text.snap
@@ -0,0 +1,9 @@
+---
+source: cubesql/src/compile/mod.rs
+expression: "execute_query(\"SELECT (11.0::double precision)::text AS eleven;\".to_string(),\n DatabaseProtocol::PostgreSQL).await?"
+---
++--------+
+| eleven |
++--------+
+| 11 |
++--------+
diff --git a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__test_cast_to_timestamp_timezone_utc_1.snap b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__test_cast_to_timestamp_timezone_utc_1.snap
index 31581fb673..f9b3e4cde2 100644
--- a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__test_cast_to_timestamp_timezone_utc_1.snap
+++ b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__test_cast_to_timestamp_timezone_utc_1.snap
@@ -2,8 +2,8 @@
source: cubesql/src/compile/mod.rs
expression: "execute_query(\"select CAST ('2020-12-25 22:48:48.000' AS timestamptz)\".to_string(),\n DatabaseProtocol::PostgreSQL).await?"
---
-+------------------------------------------------+
-| TimestampNanosecond(1608936528000000000, None) |
-+------------------------------------------------+
-| 2020-12-25T22:48:48.000 |
-+------------------------------------------------+
++----------------------------------------------------------------------+
+| CAST(Utf8("2020-12-25 22:48:48.000") AS Timestamp(Nanosecond, None)) |
++----------------------------------------------------------------------+
+| 2020-12-25T22:48:48.000 |
++----------------------------------------------------------------------+
diff --git a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__test_cast_to_timestamp_timezone_utc_2.snap b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__test_cast_to_timestamp_timezone_utc_2.snap
index e90f38245c..7910067eda 100644
--- a/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__test_cast_to_timestamp_timezone_utc_2.snap
+++ b/rust/cubesql/cubesql/src/compile/snapshots/cubesql__compile__tests__test_cast_to_timestamp_timezone_utc_2.snap
@@ -2,8 +2,8 @@
source: cubesql/src/compile/mod.rs
expression: "execute_query(\"select CAST ('2020-12-25 22:48:48.000' AS timestamp)\".to_string(),\n DatabaseProtocol::PostgreSQL).await?"
---
-+------------------------------------------------+
-| TimestampNanosecond(1608936528000000000, None) |
-+------------------------------------------------+
-| 2020-12-25T22:48:48.000 |
-+------------------------------------------------+
++----------------------------------------------------------------------+
+| CAST(Utf8("2020-12-25 22:48:48.000") AS Timestamp(Nanosecond, None)) |
++----------------------------------------------------------------------+
+| 2020-12-25T22:48:48.000 |
++----------------------------------------------------------------------+
diff --git a/rust/cubesql/cubesql/src/compile/test/mod.rs b/rust/cubesql/cubesql/src/compile/test/mod.rs
index 8105402e89..439c8fa2dd 100644
--- a/rust/cubesql/cubesql/src/compile/test/mod.rs
+++ b/rust/cubesql/cubesql/src/compile/test/mod.rs
@@ -237,6 +237,36 @@ pub fn get_string_cube_meta() -> Vec {
}]
}
+pub fn get_sixteen_char_member_cube() -> Vec {
+ vec![V1CubeMeta {
+ name: "SixteenChar".to_string(),
+ title: None,
+ dimensions: vec![],
+ measures: vec![
+ V1CubeMetaMeasure {
+ name: "SixteenChar.sixteen_charchar".to_string(),
+ title: None,
+ _type: "number".to_string(),
+ agg_type: Some("sum".to_string()),
+ },
+ V1CubeMetaMeasure {
+ name: "SixteenChar.sixteen_charchar_foo".to_string(),
+ title: None,
+ _type: "number".to_string(),
+ agg_type: Some("avg".to_string()),
+ },
+ V1CubeMetaMeasure {
+ name: "SixteenChar.sixteen_charchar_bar".to_string(),
+ title: None,
+ _type: "number".to_string(),
+ agg_type: Some("count".to_string()),
+ },
+ ],
+ segments: vec![],
+ joins: None,
+ }]
+}
+
#[derive(Debug)]
pub struct SqlGeneratorMock {
pub sql_templates: Arc,
@@ -262,7 +292,27 @@ pub fn get_test_tenant_ctx() -> Arc {
}
pub fn get_test_tenant_ctx_customized(custom_templates: Vec<(String, String)>) -> Arc {
- let sql_generator: Arc = Arc::new(SqlGeneratorMock {
+ Arc::new(MetaContext::new(
+ get_test_meta(),
+ vec![
+ (
+ "KibanaSampleDataEcommerce".to_string(),
+ "default".to_string(),
+ ),
+ ("Logs".to_string(), "default".to_string()),
+ ("NumberCube".to_string(), "default".to_string()),
+ ]
+ .into_iter()
+ .collect(),
+ vec![("default".to_string(), sql_generator(custom_templates))]
+ .into_iter()
+ .collect(),
+ Uuid::new_v4(),
+ ))
+}
+
+fn sql_generator(custom_templates: Vec<(String, String)>) -> Arc {
+ Arc::new(SqlGeneratorMock {
sql_templates: Arc::new(
SqlTemplates::new(
vec![
@@ -287,15 +337,20 @@ pub fn get_test_tenant_ctx_customized(custom_templates: Vec<(String, String)>) -
("functions/DATE_ADD".to_string(), "DATE_ADD({{ args_concat }})".to_string()),
("functions/CONCAT".to_string(), "CONCAT({{ args_concat }})".to_string()),
("functions/DATE".to_string(), "DATE({{ args_concat }})".to_string()),
+ ("functions/LEFT".to_string(), "LEFT({{ args_concat }})".to_string()),
+ ("functions/RIGHT".to_string(), "RIGHT({{ args_concat }})".to_string()),
("expressions/extract".to_string(), "EXTRACT({{ date_part }} FROM {{ expr }})".to_string()),
(
"statements/select".to_string(),
r#"SELECT {{ select_concat | map(attribute='aliased') | join(', ') }}
- FROM ({{ from }}) AS {{ from_alias }}
- {% if group_by %} GROUP BY {{ group_by | map(attribute='index') | join(', ') }}{% endif %}
- {% if order_by %} ORDER BY {{ order_by | map(attribute='expr') | join(', ') }}{% endif %}{% if limit %}
- LIMIT {{ limit }}{% endif %}{% if offset %}
- OFFSET {{ offset }}{% endif %}"#.to_string(),
+FROM (
+ {{ from | indent(2) }}
+) AS {{ from_alias }}{% if filter %}
+WHERE {{ filter }}{% endif %}{% if group_by %}
+GROUP BY {{ group_by | map(attribute='index') | join(', ') }}{% endif %}{% if order_by %}
+ORDER BY {{ order_by | map(attribute='expr') | join(', ') }}{% endif %}{% if limit %}
+LIMIT {{ limit }}{% endif %}{% if offset %}
+OFFSET {{ offset }}{% endif %}"#.to_string(),
),
(
"expressions/column_aliased".to_string(),
@@ -313,41 +368,30 @@ pub fn get_test_tenant_ctx_customized(custom_templates: Vec<(String, String)>) -
("expressions/not".to_string(), "NOT ({{ expr }})".to_string()),
("expressions/true".to_string(), "TRUE".to_string()),
("expressions/false".to_string(), "FALSE".to_string()),
+ ("expressions/timestamp_literal".to_string(), "timestamptz '{{ value }}'".to_string()),
("quotes/identifiers".to_string(), "\"".to_string()),
("quotes/escape".to_string(), "\"\"".to_string()),
("params/param".to_string(), "${{ param_index + 1 }}".to_string())
]
- .into_iter().chain(custom_templates.into_iter())
- .collect(),
+ .into_iter().chain(custom_templates.into_iter())
+ .collect(),
)
- .unwrap(),
+ .unwrap(),
),
- });
- Arc::new(MetaContext::new(
- get_test_meta(),
- vec![
- (
- "KibanaSampleDataEcommerce".to_string(),
- "default".to_string(),
- ),
- ("Logs".to_string(), "default".to_string()),
- ("NumberCube".to_string(), "default".to_string()),
- ]
- .into_iter()
- .collect(),
- vec![("default".to_string(), sql_generator)]
- .into_iter()
- .collect(),
- Uuid::new_v4(),
- ))
+ })
}
pub fn get_test_tenant_ctx_with_meta(meta: Vec) -> Arc {
- // TODO
+ let cube_to_data_source = meta
+ .iter()
+ .map(|c| (c.name.clone(), "default".to_string()))
+ .collect();
Arc::new(MetaContext::new(
meta,
- HashMap::new(),
- HashMap::new(),
+ cube_to_data_source,
+ vec![("default".to_string(), sql_generator(vec![]))]
+ .into_iter()
+ .collect(),
Uuid::new_v4(),
))
}
diff --git a/rust/cubesql/cubesql/src/config/mod.rs b/rust/cubesql/cubesql/src/config/mod.rs
index 82e92ed9d7..91ccbf7c72 100644
--- a/rust/cubesql/cubesql/src/config/mod.rs
+++ b/rust/cubesql/cubesql/src/config/mod.rs
@@ -133,6 +133,10 @@ pub trait ConfigObj: DIService + Debug {
fn enable_rewrite_cache(&self) -> bool;
fn push_down_pull_up_split(&self) -> bool;
+
+ fn stream_mode(&self) -> bool;
+
+ fn non_streaming_query_max_row_limit(&self) -> i32;
}
#[derive(Debug, Clone)]
@@ -149,6 +153,8 @@ pub struct ConfigObjImpl {
pub enable_parameterized_rewrite_cache: bool,
pub enable_rewrite_cache: bool,
pub push_down_pull_up_split: bool,
+ pub stream_mode: bool,
+ pub non_streaming_query_max_row_limit: i32,
}
impl ConfigObjImpl {
@@ -182,6 +188,8 @@ impl ConfigObjImpl {
enable_rewrite_cache: env_optparse("CUBESQL_REWRITE_CACHE").unwrap_or(sql_push_down),
push_down_pull_up_split: env_optparse("CUBESQL_PUSH_DOWN_PULL_UP_SPLIT")
.unwrap_or(sql_push_down),
+ stream_mode: env_parse("CUBESQL_STREAM_MODE", false),
+ non_streaming_query_max_row_limit: env_parse("CUBEJS_DB_QUERY_LIMIT", 50000),
}
}
}
@@ -232,6 +240,14 @@ impl ConfigObj for ConfigObjImpl {
fn push_down_pull_up_split(&self) -> bool {
self.push_down_pull_up_split
}
+
+ fn stream_mode(&self) -> bool {
+ self.stream_mode
+ }
+
+ fn non_streaming_query_max_row_limit(&self) -> i32 {
+ self.non_streaming_query_max_row_limit
+ }
}
lazy_static! {
@@ -247,7 +263,7 @@ impl Config {
}
}
- pub fn test(_name: &str) -> Config {
+ pub fn test() -> Config {
let query_timeout = 15;
let timezone = Some("UTC".to_string());
Config {
@@ -265,6 +281,8 @@ impl Config {
enable_parameterized_rewrite_cache: false,
enable_rewrite_cache: false,
push_down_pull_up_split: true,
+ stream_mode: false,
+ non_streaming_query_max_row_limit: 50000,
}),
}
}
diff --git a/rust/cubesql/cubesql/src/sql/postgres/extended.rs b/rust/cubesql/cubesql/src/sql/postgres/extended.rs
index 015646897b..b837b6cadd 100644
--- a/rust/cubesql/cubesql/src/sql/postgres/extended.rs
+++ b/rust/cubesql/cubesql/src/sql/postgres/extended.rs
@@ -520,7 +520,7 @@ impl Portal {
let temp_table = TempTable::new(Arc::clone(plan.schema()), vec![record_batch]);
let save_result = tokio::task::spawn_blocking(move || {
temp_tables.save(&name.to_ascii_lowercase(), temp_table)
- }).await;
+ }).await?;
if let Err(err) = save_result {
return yield Err(err.into())
};
diff --git a/rust/cubesql/cubesql/src/sql/postgres/shim.rs b/rust/cubesql/cubesql/src/sql/postgres/shim.rs
index 671cce1da8..609ed73aee 100644
--- a/rust/cubesql/cubesql/src/sql/postgres/shim.rs
+++ b/rust/cubesql/cubesql/src/sql/postgres/shim.rs
@@ -1327,10 +1327,7 @@ impl AsyncPostgresShim {
hold,
} => {
// TODO: move envs to config
- let stream_mode = std::env::var("CUBESQL_STREAM_MODE")
- .ok()
- .map(|v| v.parse::().unwrap())
- .unwrap_or(false);
+ let stream_mode = self.session.server.config_obj.stream_mode();
if stream_mode {
return Err(ConnectionError::Protocol(
protocol::ErrorResponse::error(
diff --git a/rust/cubesql/cubesql/src/sql/session.rs b/rust/cubesql/cubesql/src/sql/session.rs
index bd26c21e25..5b76643dcb 100644
--- a/rust/cubesql/cubesql/src/sql/session.rs
+++ b/rust/cubesql/cubesql/src/sql/session.rs
@@ -3,7 +3,7 @@ use log::trace;
use rand::Rng;
use std::{
collections::HashMap,
- sync::{Arc, RwLock as RwLockSync},
+ sync::{Arc, RwLock as RwLockSync, Weak},
time::{Duration, SystemTime},
};
use tokio_util::sync::CancellationToken;
@@ -118,6 +118,7 @@ impl SessionState {
protocol: DatabaseProtocol,
auth_context: Option,
auth_context_expiration: Duration,
+ session_manager: Weak,
) -> Self {
let mut rng = rand::thread_rng();
@@ -128,7 +129,7 @@ impl SessionState {
client_port,
protocol,
variables: RwLockSync::new(None),
- temp_tables: Arc::new(TempTableManager::new()),
+ temp_tables: Arc::new(TempTableManager::new(session_manager)),
properties: RwLockSync::new(SessionProperties::new(None, None)),
auth_context: RwLockSync::new((auth_context, SystemTime::now())),
transaction: RwLockSync::new(TransactionState::None),
diff --git a/rust/cubesql/cubesql/src/sql/session_manager.rs b/rust/cubesql/cubesql/src/sql/session_manager.rs
index d2947f404f..82a0daab64 100644
--- a/rust/cubesql/cubesql/src/sql/session_manager.rs
+++ b/rust/cubesql/cubesql/src/sql/session_manager.rs
@@ -2,7 +2,7 @@ use crate::{CubeError, RWLockAsync};
use std::{
collections::HashMap,
sync::{
- atomic::{AtomicU32, Ordering},
+ atomic::{AtomicU32, AtomicUsize, Ordering},
Arc,
},
time::Duration,
@@ -18,6 +18,7 @@ pub struct SessionManager {
// Sessions
last_id: AtomicU32,
sessions: RWLockAsync>>,
+ pub temp_table_size: AtomicUsize,
// Backref
pub server: Arc,
}
@@ -29,6 +30,7 @@ impl SessionManager {
Self {
last_id: AtomicU32::new(1),
sessions: RWLockAsync::new(HashMap::new()),
+ temp_table_size: AtomicUsize::new(0),
server,
}
}
@@ -51,6 +53,7 @@ impl SessionManager {
protocol,
None,
Duration::from_secs(self.server.config_obj.auth_expire_secs()),
+ Arc::downgrade(self),
)),
};
@@ -90,6 +93,11 @@ impl SessionManager {
pub async fn drop_session(&self, connection_id: u32) {
let mut guard = self.sessions.write().await;
- guard.remove(&connection_id);
+ if let Some(connection) = guard.remove(&connection_id) {
+ self.temp_table_size.fetch_sub(
+ connection.state.temp_tables().physical_size(),
+ Ordering::SeqCst,
+ );
+ }
}
}
diff --git a/rust/cubesql/cubesql/src/sql/statement.rs b/rust/cubesql/cubesql/src/sql/statement.rs
index d171e8394a..9250101f80 100644
--- a/rust/cubesql/cubesql/src/sql/statement.rs
+++ b/rust/cubesql/cubesql/src/sql/statement.rs
@@ -120,6 +120,9 @@ trait Visitor<'ast, E: Error> {
self.visit_expr(expr)?;
self.visit_query(subquery)?;
}
+ Expr::AnyAllSubquery(query) => {
+ self.visit_query(query)?;
+ }
Expr::InUnnest {
expr, array_expr, ..
} => {
@@ -371,6 +374,14 @@ trait Visitor<'ast, E: Error> {
if let Some(limit) = query.limit.as_mut() {
self.visit_expr_with_placeholder_type(limit, PlaceholderType::Number)?;
}
+ if let Some(offset) = query.offset.as_mut() {
+ self.visit_expr_with_placeholder_type(&mut offset.value, PlaceholderType::Number)?;
+ }
+ if let Some(fetch) = query.fetch.as_mut() {
+ if let Some(quantity) = fetch.quantity.as_mut() {
+ self.visit_expr_with_placeholder_type(quantity, PlaceholderType::Number)?;
+ }
+ }
Ok(())
}
@@ -1379,6 +1390,16 @@ mod tests {
],
)?;
+ assert_pg_params_finder(
+ "SELECT 1 OFFSET $1",
+ vec![FoundParameter::new(ColumnType::Int64)],
+ )?;
+
+ assert_pg_params_finder(
+ "SELECT 1 FETCH FIRST $1 ROWS ONLY",
+ vec![FoundParameter::new(ColumnType::Int64)],
+ )?;
+
Ok(())
}
@@ -1418,6 +1439,11 @@ mod tests {
fn test_placeholder_replacer() -> Result<(), CubeError> {
assert_placeholder_replacer("SELECT ?", "SELECT 'replaced_placeholder'")?;
assert_placeholder_replacer("SELECT 1 LIMIT ?", "SELECT 1 LIMIT 1")?;
+ assert_placeholder_replacer("SELECT 1 OFFSET ?", "SELECT 1 OFFSET 1")?;
+ assert_placeholder_replacer(
+ "SELECT 1 FETCH FIRST ? ROWS ONLY",
+ "SELECT 1 FETCH FIRST 1 ROWS ONLY",
+ )?;
Ok(())
}
diff --git a/rust/cubesql/cubesql/src/sql/temp_tables.rs b/rust/cubesql/cubesql/src/sql/temp_tables.rs
index 2e75134307..03079343ce 100644
--- a/rust/cubesql/cubesql/src/sql/temp_tables.rs
+++ b/rust/cubesql/cubesql/src/sql/temp_tables.rs
@@ -1,4 +1,12 @@
-use std::{any::Any, collections::HashMap, sync::Arc};
+use std::{
+ any::Any,
+ collections::HashMap,
+ env,
+ sync::{
+ atomic::{AtomicUsize, Ordering},
+ Arc, Weak,
+ },
+};
use async_trait::async_trait;
use datafusion::{
@@ -14,15 +22,22 @@ use datafusion::{
use crate::{CubeError, RWLockSync};
+use super::SessionManager;
+
#[derive(Debug)]
pub struct TempTableManager {
temp_tables: RWLockSync>>,
+ cached_size: AtomicUsize,
+ // Backref
+ session_manager: Weak,
}
impl TempTableManager {
- pub fn new() -> Self {
+ pub fn new(session_manager: Weak) -> Self {
Self {
temp_tables: RWLockSync::new(HashMap::new()),
+ cached_size: AtomicUsize::new(0),
+ session_manager,
}
}
@@ -42,6 +57,19 @@ impl TempTableManager {
}
pub fn save(&self, name: &str, temp_table: TempTable) -> Result<(), CubeError> {
+ let session_manager = self
+ .session_manager
+ .upgrade()
+ .ok_or_else(|| CubeError::internal("session manager is unavailable".to_string()))?;
+
+ let size_session_limit = env::var("CUBESQL_TEMP_TABLE_SESSION_MEM")
+ .map(|v| v.parse::().unwrap())
+ .unwrap_or(10); // in MiB
+
+ let size_total_limit = env::var("CUBESQL_TEMP_TABLE_TOTAL_MEM")
+ .map(|v| v.parse::().unwrap())
+ .unwrap_or(100); // in MiB
+
let mut guard = self
.temp_tables
.write()
@@ -54,39 +82,96 @@ impl TempTableManager {
)));
}
+ self.cached_size
+ .fetch_update(Ordering::SeqCst, Ordering::SeqCst, |current_size| {
+ if current_size + temp_table.size > size_session_limit * 1024 * 1024 {
+ return None;
+ }
+ session_manager
+ .temp_table_size
+ .fetch_update(Ordering::SeqCst, Ordering::SeqCst, |current_size| {
+ if current_size + temp_table.size > size_total_limit * 1024 * 1024 {
+ return None;
+ }
+ Some(current_size + temp_table.size)
+ })
+ .ok()?;
+ Some(current_size + temp_table.size)
+ })
+ .map_err(|_| {
+ CubeError::user(format!(
+ "temporary table memory limit reached ({} MiB session, {} MiB total)",
+ size_session_limit, size_total_limit,
+ ))
+ })?;
+
guard.insert(name.to_string(), Arc::new(temp_table));
Ok(())
}
pub fn remove(&self, name: &str) -> Result<(), CubeError> {
- let mut guard = self
- .temp_tables
- .write()
- .expect("failed to unlock temp tables for writing");
-
- if guard.remove(name).is_none() {
+ let session_manager = self
+ .session_manager
+ .upgrade()
+ .ok_or_else(|| CubeError::internal("session manager is unavailable".to_string()))?;
+
+ let Some(temp_table) = ({
+ let mut guard = self
+ .temp_tables
+ .write()
+ .expect("failed to unlock temp tables for writing");
+
+ guard.remove(name)
+ }) else {
return Err(CubeError::user(format!(
"table \"{}\" does not exist",
name
)));
- }
+ };
+
+ self.cached_size
+ .fetch_sub(temp_table.size, Ordering::SeqCst);
+ session_manager
+ .temp_table_size
+ .fetch_sub(temp_table.size, Ordering::SeqCst);
Ok(())
}
+
+ pub fn physical_size(&self) -> usize {
+ self.cached_size.load(Ordering::SeqCst)
+ }
}
#[derive(Debug, Clone)]
pub struct TempTable {
schema: SchemaRef,
record_batch: Vec>,
+ size: usize,
}
impl TempTable {
pub fn new(schema: DFSchemaRef, record_batch: Vec>) -> Self {
let arrow_schema = df_schema_to_arrow_schema(&schema);
+ let size = record_batch
+ .iter()
+ .map(|record_batch| {
+ record_batch
+ .iter()
+ .map(|record_batch| {
+ record_batch
+ .columns()
+ .iter()
+ .map(|column| column.get_array_memory_size())
+ .sum::()
+ })
+ .sum::()
+ })
+ .sum();
Self {
schema: arrow_schema,
record_batch,
+ size,
}
}
}
diff --git a/rust/cubesql/cubesql/src/transport/service.rs b/rust/cubesql/cubesql/src/transport/service.rs
index bafd50cf0c..233bbc2968 100644
--- a/rust/cubesql/cubesql/src/transport/service.rs
+++ b/rust/cubesql/cubesql/src/transport/service.rs
@@ -383,7 +383,7 @@ impl SqlTemplates {
group_by: Vec,
aggregate: Vec,
alias: String,
- _filter: Option,
+ filter: Option,
_having: Option,
order_by: Vec,
limit: Option,
@@ -409,6 +409,7 @@ impl SqlTemplates {
aggregate => aggregate,
projection => projection,
order_by => order_by,
+ filter => filter,
from_alias => quoted_from_alias,
limit => limit,
offset => offset,
@@ -654,6 +655,10 @@ impl SqlTemplates {
}
}
+ pub fn timestamp_literal_expr(&self, value: String) -> Result {
+ self.render_template("expressions/timestamp_literal", context! { value => value })
+ }
+
pub fn param(&self, param_index: usize) -> Result {
self.render_template("params/param", context! { param_index => param_index })
}
diff --git a/rust/cubesql/package.json b/rust/cubesql/package.json
index d23d20af9e..608edf85ca 100644
--- a/rust/cubesql/package.json
+++ b/rust/cubesql/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-backend/cubesql",
- "version": "0.34.56",
+ "version": "0.34.60",
"description": "SQL API for Cube as proxy over MySQL protocol.",
"engines": {
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
diff --git a/rust/cubestore/CHANGELOG.md b/rust/cubestore/CHANGELOG.md
index 9380b30c4c..75460f3b36 100644
--- a/rust/cubestore/CHANGELOG.md
+++ b/rust/cubestore/CHANGELOG.md
@@ -3,6 +3,30 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.34.60](https://github.com/cube-js/cube.js/compare/v0.34.59...v0.34.60) (2024-03-02)
+
+**Note:** Version bump only for package @cubejs-backend/cubestore
+
+
+
+
+
+## [0.34.58](https://github.com/cube-js/cube.js/compare/v0.34.57...v0.34.58) (2024-02-27)
+
+**Note:** Version bump only for package @cubejs-backend/cubestore
+
+
+
+
+
+## [0.34.57](https://github.com/cube-js/cube.js/compare/v0.34.56...v0.34.57) (2024-02-26)
+
+**Note:** Version bump only for package @cubejs-backend/cubestore
+
+
+
+
+
## [0.34.55](https://github.com/cube-js/cube.js/compare/v0.34.54...v0.34.55) (2024-02-15)
**Note:** Version bump only for package @cubejs-backend/cubestore
diff --git a/rust/cubestore/package.json b/rust/cubestore/package.json
index bf9d8cc42b..42f2b58828 100644
--- a/rust/cubestore/package.json
+++ b/rust/cubestore/package.json
@@ -1,6 +1,6 @@
{
"name": "@cubejs-backend/cubestore",
- "version": "0.34.55",
+ "version": "0.34.60",
"description": "Cube.js pre-aggregation storage layer.",
"main": "dist/src/index.js",
"typings": "dist/src/index.d.ts",
@@ -37,7 +37,7 @@
"access": "public"
},
"dependencies": {
- "@cubejs-backend/shared": "^0.34.55",
+ "@cubejs-backend/shared": "^0.34.60",
"@octokit/core": "^3.2.5",
"source-map-support": "^0.5.19"
},
diff --git a/yarn.lock b/yarn.lock
index 3aa205cd5a..3884913ac1 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -299,1677 +299,696 @@
lodash "^4.17.21"
resize-observer-polyfill "^1.5.0"
-"@apla/clickhouse@^1.5.5":
- version "1.6.4"
- resolved "https://registry.yarnpkg.com/@apla/clickhouse/-/clickhouse-1.6.4.tgz#d0afcc2e9b88ad8a4d6053970247a5d26549d797"
- integrity sha512-zOLL/lOaXrk+l8XS8eDGZfqOy1yKwYQirQtHtyrLxAHlJMNRKBosjK2gVUyCZ94fAIpE8lLUZRxFDid2Vmqxnw==
-
-"@assemblyscript/loader@^0.10.1":
- version "0.10.1"
- resolved "https://registry.yarnpkg.com/@assemblyscript/loader/-/loader-0.10.1.tgz#70e45678f06c72fa2e350e8553ec4a4d72b92e06"
- integrity sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==
-
-"@aw-web-design/x-default-browser@1.4.126":
- version "1.4.126"
- resolved "https://registry.yarnpkg.com/@aw-web-design/x-default-browser/-/x-default-browser-1.4.126.tgz#43e4bd8f0314ed907a8718d7e862a203af79bc16"
- integrity sha512-Xk1sIhyNC/esHGGVjL/niHLowM0csl/kFO5uawBy4IrWwy0o1G8LGt3jP6nmWGz+USxeeqbihAmp/oVZju6wug==
- dependencies:
- default-browser-id "3.0.0"
-
-"@aws-crypto/crc32@2.0.0":
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-2.0.0.tgz#4ad432a3c03ec3087c5540ff6e41e6565d2dc153"
- integrity sha512-TvE1r2CUueyXOuHdEigYjIZVesInd9KN+K/TFFNfkkxRThiNxO6i4ZqqAVMoEjAamZZ1AA8WXJkjCz7YShHPQA==
- dependencies:
- "@aws-crypto/util" "^2.0.0"
- "@aws-sdk/types" "^3.1.0"
- tslib "^1.11.1"
-
-"@aws-crypto/ie11-detection@^2.0.0":
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-2.0.0.tgz#bb6c2facf8f03457e949dcf0921477397ffa4c6e"
- integrity sha512-pkVXf/dq6PITJ0jzYZ69VhL8VFOFoPZLZqtU/12SGnzYuJOOGNfF41q9GxdI1yqC8R13Rq3jOLKDFpUJFT5eTA==
- dependencies:
- tslib "^1.11.1"
-
-"@aws-crypto/sha256-browser@2.0.0":
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-2.0.0.tgz#741c9024df55ec59b51e5b1f5d806a4852699fb5"
- integrity sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A==
- dependencies:
- "@aws-crypto/ie11-detection" "^2.0.0"
- "@aws-crypto/sha256-js" "^2.0.0"
- "@aws-crypto/supports-web-crypto" "^2.0.0"
- "@aws-crypto/util" "^2.0.0"
- "@aws-sdk/types" "^3.1.0"
- "@aws-sdk/util-locate-window" "^3.0.0"
- "@aws-sdk/util-utf8-browser" "^3.0.0"
- tslib "^1.11.1"
-
-"@aws-crypto/sha256-js@2.0.0":
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-2.0.0.tgz#f1f936039bdebd0b9e2dd834d65afdc2aac4efcb"
- integrity sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig==
- dependencies:
- "@aws-crypto/util" "^2.0.0"
- "@aws-sdk/types" "^3.1.0"
- tslib "^1.11.1"
-
-"@aws-crypto/sha256-js@^2.0.0":
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-2.0.1.tgz#79e1e6cf61f652ef2089c08d471c722ecf1626a9"
- integrity sha512-mbHTBSPBvg6o/mN/c18Z/zifM05eJrapj5ggoOIeHIWckvkv5VgGi7r/wYpt+QAO2ySKXLNvH2d8L7bne4xrMQ==
- dependencies:
- "@aws-crypto/util" "^2.0.1"
- "@aws-sdk/types" "^3.1.0"
- tslib "^1.11.1"
-
-"@aws-crypto/supports-web-crypto@^2.0.0":
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-2.0.0.tgz#fd6cde30b88f77d5a4f57b2c37c560d918014f9e"
- integrity sha512-Ge7WQ3E0OC7FHYprsZV3h0QIcpdyJLvIeg+uTuHqRYm8D6qCFJoiC+edSzSyFiHtZf+NOQDJ1q46qxjtzIY2nA==
- dependencies:
- tslib "^1.11.1"
-
-"@aws-crypto/util@^2.0.0", "@aws-crypto/util@^2.0.1":
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-2.0.1.tgz#976cf619cf85084ca85ec5eb947a6ac6b8b5c98c"
- integrity sha512-JJmFFwvbm08lULw4Nm5QOLg8+lAQeC8aCXK5xrtxntYzYXCGfHwUJ4Is3770Q7HmICsXthGQ+ZsDL7C2uH3yBQ==
- dependencies:
- "@aws-sdk/types" "^3.1.0"
- "@aws-sdk/util-utf8-browser" "^3.0.0"
- tslib "^1.11.1"
-
-"@aws-sdk/abort-controller@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/abort-controller/-/abort-controller-3.40.0.tgz#e17299776782483835439d9b1b5300add24adc3f"
- integrity sha512-S7LzLvNuwuf0q7r4q7zqGzxd/W2xYsn8cpZ90MMb3ObolhbkLySrikUJujmXae8k+2/KFCOr+FVC0YLrATSUgQ==
- dependencies:
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/abort-controller@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/abort-controller/-/abort-controller-3.49.0.tgz#c5fbff76b8ad3782f52bef9ad6fd7a917846a753"
- integrity sha512-1qLlgOgg3yrtm+AJEP7yoIk90o6ns3Dia8S9DRjj29jY40446etH3v/tIbHPE+em69HLXl1K6e5KD6t7EDxnlg==
- dependencies:
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/chunked-blob-reader-native@3.37.0":
- version "3.37.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/chunked-blob-reader-native/-/chunked-blob-reader-native-3.37.0.tgz#4dcb3624246377079f8626de698b8f05552b9dca"
- integrity sha512-h9OYq6EvDrpb7SKod+Kow+d3aRNFVBYR1a8G8ahEDDQe3AtmA2Smyvni4kt/ABTiKvYdof2//Pq3BL/IUV9n9Q==
- dependencies:
- "@aws-sdk/util-base64-browser" "3.37.0"
- tslib "^2.3.0"
-
-"@aws-sdk/chunked-blob-reader-native@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/chunked-blob-reader-native/-/chunked-blob-reader-native-3.49.0.tgz#f33b98572dd806265298cea727c1a377e9d6a608"
- integrity sha512-ppjmDWyufMB41Hmq5Gixd2+/c4kk2IPKKWT9zI9spKOYbbL/vY3FmRq4beQ6n5kWOzDPxKZ6wv04yrMS9yBy1A==
- dependencies:
- "@aws-sdk/util-base64-browser" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/chunked-blob-reader@3.37.0":
- version "3.37.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/chunked-blob-reader/-/chunked-blob-reader-3.37.0.tgz#8549adddb89dfecfedab53571c0b92a9951bbbcf"
- integrity sha512-uDacnFaczeO962RnVttwAQddS4rgDfI7nfeY8NV6iZkDv5uxGzHTfH4jT7WvPDM1pSMcOMDx8RJ+Tmtsd1VTsA==
- dependencies:
- tslib "^2.3.0"
-
-"@aws-sdk/chunked-blob-reader@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/chunked-blob-reader/-/chunked-blob-reader-3.49.0.tgz#f933abdf16fc9ee4d82245d375a15f19bea25c64"
- integrity sha512-UI1rK4aBgwsQ6dOQs5Im1cNSb3c/RH1wKjD49zcwWyxe8e96C5G2LcshhVH3onWY5NgqQgs/ffEsXziGcNXRIg==
- dependencies:
- tslib "^2.3.0"
-
-"@aws-sdk/client-athena@^3.22.0":
- version "3.43.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/client-athena/-/client-athena-3.43.0.tgz#2bf9662a86a83b6b2c5803f3af1672aa8a06a590"
- integrity sha512-pXQzhO+cJbHUCtJTloFQcSf5ws4hLPJ+PcreJGXiKE/JHmu9ABHQARI2O5vM0HEekJ9I7tLhPhXbgsTKI+UjwA==
- dependencies:
- "@aws-crypto/sha256-browser" "2.0.0"
- "@aws-crypto/sha256-js" "2.0.0"
- "@aws-sdk/client-sts" "3.43.0"
- "@aws-sdk/config-resolver" "3.40.0"
- "@aws-sdk/credential-provider-node" "3.41.0"
- "@aws-sdk/fetch-http-handler" "3.40.0"
- "@aws-sdk/hash-node" "3.40.0"
- "@aws-sdk/invalid-dependency" "3.40.0"
- "@aws-sdk/middleware-content-length" "3.40.0"
- "@aws-sdk/middleware-host-header" "3.40.0"
- "@aws-sdk/middleware-logger" "3.40.0"
- "@aws-sdk/middleware-retry" "3.40.0"
- "@aws-sdk/middleware-serde" "3.40.0"
- "@aws-sdk/middleware-signing" "3.40.0"
- "@aws-sdk/middleware-stack" "3.40.0"
- "@aws-sdk/middleware-user-agent" "3.40.0"
- "@aws-sdk/node-config-provider" "3.40.0"
- "@aws-sdk/node-http-handler" "3.40.0"
- "@aws-sdk/protocol-http" "3.40.0"
- "@aws-sdk/smithy-client" "3.41.0"
- "@aws-sdk/types" "3.40.0"
- "@aws-sdk/url-parser" "3.40.0"
- "@aws-sdk/util-base64-browser" "3.37.0"
- "@aws-sdk/util-base64-node" "3.37.0"
- "@aws-sdk/util-body-length-browser" "3.37.0"
- "@aws-sdk/util-body-length-node" "3.37.0"
- "@aws-sdk/util-user-agent-browser" "3.40.0"
- "@aws-sdk/util-user-agent-node" "3.40.0"
- "@aws-sdk/util-utf8-browser" "3.37.0"
- "@aws-sdk/util-utf8-node" "3.37.0"
- tslib "^2.3.0"
- uuid "^8.3.2"
-
-"@aws-sdk/client-s3@^3.16.0", "@aws-sdk/client-s3@^3.17.0":
- version "3.44.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.44.0.tgz#1eb824cec9622a2aa9081cf147508371ec72a327"
- integrity sha512-vv3w5RhAZnT/LfiV0SICvvzv5SAeH61erbwm6FpKC9W7lGdcA6o7F2/Bls44fyMW41awYIRZKoPGZApYCrFR6A==
- dependencies:
- "@aws-crypto/sha256-browser" "2.0.0"
- "@aws-crypto/sha256-js" "2.0.0"
- "@aws-sdk/client-sts" "3.43.0"
- "@aws-sdk/config-resolver" "3.40.0"
- "@aws-sdk/credential-provider-node" "3.41.0"
- "@aws-sdk/eventstream-serde-browser" "3.40.0"
- "@aws-sdk/eventstream-serde-config-resolver" "3.40.0"
- "@aws-sdk/eventstream-serde-node" "3.40.0"
- "@aws-sdk/fetch-http-handler" "3.40.0"
- "@aws-sdk/hash-blob-browser" "3.40.0"
- "@aws-sdk/hash-node" "3.40.0"
- "@aws-sdk/hash-stream-node" "3.40.0"
- "@aws-sdk/invalid-dependency" "3.40.0"
- "@aws-sdk/md5-js" "3.40.0"
- "@aws-sdk/middleware-apply-body-checksum" "3.40.0"
- "@aws-sdk/middleware-bucket-endpoint" "3.41.0"
- "@aws-sdk/middleware-content-length" "3.40.0"
- "@aws-sdk/middleware-expect-continue" "3.40.0"
- "@aws-sdk/middleware-host-header" "3.40.0"
- "@aws-sdk/middleware-location-constraint" "3.40.0"
- "@aws-sdk/middleware-logger" "3.40.0"
- "@aws-sdk/middleware-retry" "3.40.0"
- "@aws-sdk/middleware-sdk-s3" "3.41.0"
- "@aws-sdk/middleware-serde" "3.40.0"
- "@aws-sdk/middleware-signing" "3.40.0"
- "@aws-sdk/middleware-ssec" "3.40.0"
- "@aws-sdk/middleware-stack" "3.40.0"
- "@aws-sdk/middleware-user-agent" "3.40.0"
- "@aws-sdk/node-config-provider" "3.40.0"
- "@aws-sdk/node-http-handler" "3.40.0"
- "@aws-sdk/protocol-http" "3.40.0"
- "@aws-sdk/smithy-client" "3.41.0"
- "@aws-sdk/types" "3.40.0"
- "@aws-sdk/url-parser" "3.40.0"
- "@aws-sdk/util-base64-browser" "3.37.0"
- "@aws-sdk/util-base64-node" "3.37.0"
- "@aws-sdk/util-body-length-browser" "3.37.0"
- "@aws-sdk/util-body-length-node" "3.37.0"
- "@aws-sdk/util-user-agent-browser" "3.40.0"
- "@aws-sdk/util-user-agent-node" "3.40.0"
- "@aws-sdk/util-utf8-browser" "3.37.0"
- "@aws-sdk/util-utf8-node" "3.37.0"
- "@aws-sdk/util-waiter" "3.40.0"
- "@aws-sdk/xml-builder" "3.37.0"
- entities "2.2.0"
- fast-xml-parser "3.19.0"
- tslib "^2.3.0"
-
-"@aws-sdk/client-s3@^3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.49.0.tgz#4504f01f55856f8df4ffeb2a6af2942a4d5e1426"
- integrity sha512-LidddhZFxYb/jlEtHnbBpqVZmjgZNKY/jaZy3jRNcVhw8L0m1IYVigqgw5E6ta9/dma5EwLOA8Z21O/rCuDapw==
- dependencies:
- "@aws-crypto/sha256-browser" "2.0.0"
- "@aws-crypto/sha256-js" "2.0.0"
- "@aws-sdk/client-sts" "3.49.0"
- "@aws-sdk/config-resolver" "3.49.0"
- "@aws-sdk/credential-provider-node" "3.49.0"
- "@aws-sdk/eventstream-serde-browser" "3.49.0"
- "@aws-sdk/eventstream-serde-config-resolver" "3.49.0"
- "@aws-sdk/eventstream-serde-node" "3.49.0"
- "@aws-sdk/fetch-http-handler" "3.49.0"
- "@aws-sdk/hash-blob-browser" "3.49.0"
- "@aws-sdk/hash-node" "3.49.0"
- "@aws-sdk/hash-stream-node" "3.49.0"
- "@aws-sdk/invalid-dependency" "3.49.0"
- "@aws-sdk/md5-js" "3.49.0"
- "@aws-sdk/middleware-apply-body-checksum" "3.49.0"
- "@aws-sdk/middleware-bucket-endpoint" "3.49.0"
- "@aws-sdk/middleware-content-length" "3.49.0"
- "@aws-sdk/middleware-expect-continue" "3.49.0"
- "@aws-sdk/middleware-host-header" "3.49.0"
- "@aws-sdk/middleware-location-constraint" "3.49.0"
- "@aws-sdk/middleware-logger" "3.49.0"
- "@aws-sdk/middleware-retry" "3.49.0"
- "@aws-sdk/middleware-sdk-s3" "3.49.0"
- "@aws-sdk/middleware-serde" "3.49.0"
- "@aws-sdk/middleware-signing" "3.49.0"
- "@aws-sdk/middleware-ssec" "3.49.0"
- "@aws-sdk/middleware-stack" "3.49.0"
- "@aws-sdk/middleware-user-agent" "3.49.0"
- "@aws-sdk/node-config-provider" "3.49.0"
- "@aws-sdk/node-http-handler" "3.49.0"
- "@aws-sdk/protocol-http" "3.49.0"
- "@aws-sdk/smithy-client" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- "@aws-sdk/url-parser" "3.49.0"
- "@aws-sdk/util-base64-browser" "3.49.0"
- "@aws-sdk/util-base64-node" "3.49.0"
- "@aws-sdk/util-body-length-browser" "3.49.0"
- "@aws-sdk/util-body-length-node" "3.49.0"
- "@aws-sdk/util-defaults-mode-browser" "3.49.0"
- "@aws-sdk/util-defaults-mode-node" "3.49.0"
- "@aws-sdk/util-user-agent-browser" "3.49.0"
- "@aws-sdk/util-user-agent-node" "3.49.0"
- "@aws-sdk/util-utf8-browser" "3.49.0"
- "@aws-sdk/util-utf8-node" "3.49.0"
- "@aws-sdk/util-waiter" "3.49.0"
- "@aws-sdk/xml-builder" "3.49.0"
- entities "2.2.0"
- fast-xml-parser "3.19.0"
- tslib "^2.3.0"
-
-"@aws-sdk/client-sso@3.41.0":
- version "3.41.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.41.0.tgz#33d49e926ef6fff08278b256454241f1f982d8de"
- integrity sha512-xDvcy7wv3KdHhOpl5fZN+Ydw+dHBmsCZwMFI1ZdJVCSGO+ZKgl5KVWi1LCif6vjZP1pUuGl44oDOZz1ACqOzTg==
- dependencies:
- "@aws-crypto/sha256-browser" "2.0.0"
- "@aws-crypto/sha256-js" "2.0.0"
- "@aws-sdk/config-resolver" "3.40.0"
- "@aws-sdk/fetch-http-handler" "3.40.0"
- "@aws-sdk/hash-node" "3.40.0"
- "@aws-sdk/invalid-dependency" "3.40.0"
- "@aws-sdk/middleware-content-length" "3.40.0"
- "@aws-sdk/middleware-host-header" "3.40.0"
- "@aws-sdk/middleware-logger" "3.40.0"
- "@aws-sdk/middleware-retry" "3.40.0"
- "@aws-sdk/middleware-serde" "3.40.0"
- "@aws-sdk/middleware-stack" "3.40.0"
- "@aws-sdk/middleware-user-agent" "3.40.0"
- "@aws-sdk/node-config-provider" "3.40.0"
- "@aws-sdk/node-http-handler" "3.40.0"
- "@aws-sdk/protocol-http" "3.40.0"
- "@aws-sdk/smithy-client" "3.41.0"
- "@aws-sdk/types" "3.40.0"
- "@aws-sdk/url-parser" "3.40.0"
- "@aws-sdk/util-base64-browser" "3.37.0"
- "@aws-sdk/util-base64-node" "3.37.0"
- "@aws-sdk/util-body-length-browser" "3.37.0"
- "@aws-sdk/util-body-length-node" "3.37.0"
- "@aws-sdk/util-user-agent-browser" "3.40.0"
- "@aws-sdk/util-user-agent-node" "3.40.0"
- "@aws-sdk/util-utf8-browser" "3.37.0"
- "@aws-sdk/util-utf8-node" "3.37.0"
- tslib "^2.3.0"
-
-"@aws-sdk/client-sso@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.49.0.tgz#9811a400517fe0a5e42f4c7fe23b7eca044c722e"
- integrity sha512-rY8uZo4DeNwwKf+Sx0TX/5ysXJKf+0SQSCTWD9S4a0AjtiaLc6hKCX+sJY43VDHvNYieKtXLDYHBdhhqZKwG+g==
- dependencies:
- "@aws-crypto/sha256-browser" "2.0.0"
- "@aws-crypto/sha256-js" "2.0.0"
- "@aws-sdk/config-resolver" "3.49.0"
- "@aws-sdk/fetch-http-handler" "3.49.0"
- "@aws-sdk/hash-node" "3.49.0"
- "@aws-sdk/invalid-dependency" "3.49.0"
- "@aws-sdk/middleware-content-length" "3.49.0"
- "@aws-sdk/middleware-host-header" "3.49.0"
- "@aws-sdk/middleware-logger" "3.49.0"
- "@aws-sdk/middleware-retry" "3.49.0"
- "@aws-sdk/middleware-serde" "3.49.0"
- "@aws-sdk/middleware-stack" "3.49.0"
- "@aws-sdk/middleware-user-agent" "3.49.0"
- "@aws-sdk/node-config-provider" "3.49.0"
- "@aws-sdk/node-http-handler" "3.49.0"
- "@aws-sdk/protocol-http" "3.49.0"
- "@aws-sdk/smithy-client" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- "@aws-sdk/url-parser" "3.49.0"
- "@aws-sdk/util-base64-browser" "3.49.0"
- "@aws-sdk/util-base64-node" "3.49.0"
- "@aws-sdk/util-body-length-browser" "3.49.0"
- "@aws-sdk/util-body-length-node" "3.49.0"
- "@aws-sdk/util-defaults-mode-browser" "3.49.0"
- "@aws-sdk/util-defaults-mode-node" "3.49.0"
- "@aws-sdk/util-user-agent-browser" "3.49.0"
- "@aws-sdk/util-user-agent-node" "3.49.0"
- "@aws-sdk/util-utf8-browser" "3.49.0"
- "@aws-sdk/util-utf8-node" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/client-sts@3.43.0":
- version "3.43.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.43.0.tgz#c3d2dde8f3d3662235fd40f28cac249fa9247b2f"
- integrity sha512-4CKYimjhIEixVtJH0Y8FR5FXc7zIepZtfScy8QHgH+DERXm/YL5cuUbkJiL6ZRTpek0vztVvE+mNSQU0z1eXag==
- dependencies:
- "@aws-crypto/sha256-browser" "2.0.0"
- "@aws-crypto/sha256-js" "2.0.0"
- "@aws-sdk/config-resolver" "3.40.0"
- "@aws-sdk/credential-provider-node" "3.41.0"
- "@aws-sdk/fetch-http-handler" "3.40.0"
- "@aws-sdk/hash-node" "3.40.0"
- "@aws-sdk/invalid-dependency" "3.40.0"
- "@aws-sdk/middleware-content-length" "3.40.0"
- "@aws-sdk/middleware-host-header" "3.40.0"
- "@aws-sdk/middleware-logger" "3.40.0"
- "@aws-sdk/middleware-retry" "3.40.0"
- "@aws-sdk/middleware-sdk-sts" "3.40.0"
- "@aws-sdk/middleware-serde" "3.40.0"
- "@aws-sdk/middleware-signing" "3.40.0"
- "@aws-sdk/middleware-stack" "3.40.0"
- "@aws-sdk/middleware-user-agent" "3.40.0"
- "@aws-sdk/node-config-provider" "3.40.0"
- "@aws-sdk/node-http-handler" "3.40.0"
- "@aws-sdk/protocol-http" "3.40.0"
- "@aws-sdk/smithy-client" "3.41.0"
- "@aws-sdk/types" "3.40.0"
- "@aws-sdk/url-parser" "3.40.0"
- "@aws-sdk/util-base64-browser" "3.37.0"
- "@aws-sdk/util-base64-node" "3.37.0"
- "@aws-sdk/util-body-length-browser" "3.37.0"
- "@aws-sdk/util-body-length-node" "3.37.0"
- "@aws-sdk/util-user-agent-browser" "3.40.0"
- "@aws-sdk/util-user-agent-node" "3.40.0"
- "@aws-sdk/util-utf8-browser" "3.37.0"
- "@aws-sdk/util-utf8-node" "3.37.0"
- entities "2.2.0"
- fast-xml-parser "3.19.0"
- tslib "^2.3.0"
-
-"@aws-sdk/client-sts@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.49.0.tgz#984fbdec83ac61ae7c692d149aeb7863e4b6163d"
- integrity sha512-vqHNCuQriMZV1aeXc6cza5S9A/2zgfNiTelsmbDQdlCiZQ+YL3nTp1WFeYHap4ffYlLOAD0xv0yz/+naV4oHtQ==
- dependencies:
- "@aws-crypto/sha256-browser" "2.0.0"
- "@aws-crypto/sha256-js" "2.0.0"
- "@aws-sdk/config-resolver" "3.49.0"
- "@aws-sdk/credential-provider-node" "3.49.0"
- "@aws-sdk/fetch-http-handler" "3.49.0"
- "@aws-sdk/hash-node" "3.49.0"
- "@aws-sdk/invalid-dependency" "3.49.0"
- "@aws-sdk/middleware-content-length" "3.49.0"
- "@aws-sdk/middleware-host-header" "3.49.0"
- "@aws-sdk/middleware-logger" "3.49.0"
- "@aws-sdk/middleware-retry" "3.49.0"
- "@aws-sdk/middleware-sdk-sts" "3.49.0"
- "@aws-sdk/middleware-serde" "3.49.0"
- "@aws-sdk/middleware-signing" "3.49.0"
- "@aws-sdk/middleware-stack" "3.49.0"
- "@aws-sdk/middleware-user-agent" "3.49.0"
- "@aws-sdk/node-config-provider" "3.49.0"
- "@aws-sdk/node-http-handler" "3.49.0"
- "@aws-sdk/protocol-http" "3.49.0"
- "@aws-sdk/smithy-client" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- "@aws-sdk/url-parser" "3.49.0"
- "@aws-sdk/util-base64-browser" "3.49.0"
- "@aws-sdk/util-base64-node" "3.49.0"
- "@aws-sdk/util-body-length-browser" "3.49.0"
- "@aws-sdk/util-body-length-node" "3.49.0"
- "@aws-sdk/util-defaults-mode-browser" "3.49.0"
- "@aws-sdk/util-defaults-mode-node" "3.49.0"
- "@aws-sdk/util-user-agent-browser" "3.49.0"
- "@aws-sdk/util-user-agent-node" "3.49.0"
- "@aws-sdk/util-utf8-browser" "3.49.0"
- "@aws-sdk/util-utf8-node" "3.49.0"
- entities "2.2.0"
- fast-xml-parser "3.19.0"
- tslib "^2.3.0"
-
-"@aws-sdk/config-resolver@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/config-resolver/-/config-resolver-3.40.0.tgz#d7bd3180aebced797800661a2ed778a5db8ac7e5"
- integrity sha512-QYy6J2k31QL6J74hPBfptnLW1kQYdN+xjwH4UQ1mv7EUhRoJN9ZY2soStJowFy4at6IIOOVWbyG5dyqvrbEovg==
- dependencies:
- "@aws-sdk/signature-v4" "3.40.0"
- "@aws-sdk/types" "3.40.0"
- "@aws-sdk/util-config-provider" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/config-resolver@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/config-resolver/-/config-resolver-3.49.0.tgz#fbcf4a16326a61d62941251f4d51b706cbbe0a11"
- integrity sha512-4kYV+89E9MG+/wfPY3dmwqzquQxNd951jdfjQbSg1ii68X/owqmWda4bLulV0Z4iGUz9TXkbaJCWyRyjsFNe4w==
- dependencies:
- "@aws-sdk/signature-v4" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- "@aws-sdk/util-config-provider" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/credential-provider-env@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.40.0.tgz#0ca7611f13520dd6654e8eac7fa3e767d027ede6"
- integrity sha512-qHZdf2vxhzZkSygjw2I4SEYFL2dMZxxYvO4QlkqQouKY81OVxs/j69oiNCjPasQzGz5jaZZKI8xEAIfkSyr1lg==
- dependencies:
- "@aws-sdk/property-provider" "3.40.0"
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/credential-provider-env@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.49.0.tgz#92a659af841b7bd340f4935d927b5dfdb459eeb9"
- integrity sha512-mx82N0un6URmmiM11X3ObK3ka5R99lEFdhwPc0jqsCPnXRVioUtK5DXkJ8FmgixbDcs5Pdij9A8MINSeBrG0bQ==
- dependencies:
- "@aws-sdk/property-provider" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/credential-provider-imds@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.40.0.tgz#7c324eff731f85d4d40763c484e78673aa5dedfb"
- integrity sha512-Ty/wVa+BQrCFrP06AGl5S1CeLifDt68YrlYXUnkRn603SX4DvxBgVO7XFeDH58G8ziDCiqxfmVl4yjbncPPeSw==
- dependencies:
- "@aws-sdk/node-config-provider" "3.40.0"
- "@aws-sdk/property-provider" "3.40.0"
- "@aws-sdk/types" "3.40.0"
- "@aws-sdk/url-parser" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/credential-provider-imds@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.49.0.tgz#b031dd9e18583a01e6d66583cc33929d1cc4d783"
- integrity sha512-d/H5VgmRiIupQdPg9QcX16kdvuiS/YytRYCQOncVstNXHvYZM9EgeIXJLXyPNaD2W8SS7CBf4KKWYJn3V+9AZw==
- dependencies:
- "@aws-sdk/node-config-provider" "3.49.0"
- "@aws-sdk/property-provider" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- "@aws-sdk/url-parser" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/credential-provider-ini@3.41.0":
- version "3.41.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.41.0.tgz#a212444f6e4d03c0683ed1b6479bca72eab782dd"
- integrity sha512-98CGEHg7Tb6HxK5ZIdbAcijvD3IpLe0ddse1xMe/Ilhjz770FS/L2UNprOP6PZTqrSfBffiMrvfThUSuUaTlIQ==
- dependencies:
- "@aws-sdk/credential-provider-env" "3.40.0"
- "@aws-sdk/credential-provider-imds" "3.40.0"
- "@aws-sdk/credential-provider-sso" "3.41.0"
- "@aws-sdk/credential-provider-web-identity" "3.41.0"
- "@aws-sdk/property-provider" "3.40.0"
- "@aws-sdk/shared-ini-file-loader" "3.37.0"
- "@aws-sdk/types" "3.40.0"
- "@aws-sdk/util-credentials" "3.37.0"
- tslib "^2.3.0"
-
-"@aws-sdk/credential-provider-ini@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.49.0.tgz#df5167e216d2e970f7c3d717c171fe4dd4a96299"
- integrity sha512-QlWfxDwZVyX36pghgkKGBR+fBmX/mjmvc0kzxUmqGhUYAkDQ0YKR11ybpGBrxBKT4lIOE+9z6Tu4nLjp3OlJIg==
- dependencies:
- "@aws-sdk/credential-provider-env" "3.49.0"
- "@aws-sdk/credential-provider-imds" "3.49.0"
- "@aws-sdk/credential-provider-sso" "3.49.0"
- "@aws-sdk/credential-provider-web-identity" "3.49.0"
- "@aws-sdk/property-provider" "3.49.0"
- "@aws-sdk/shared-ini-file-loader" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- "@aws-sdk/util-credentials" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/credential-provider-node@3.41.0":
- version "3.41.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.41.0.tgz#ab4fc10ea6c7a2b42c903f4bdb68fea8ada5f5dd"
- integrity sha512-5FW6+wNJgyDCsbAd+mLm/1DBTDkyIYOMVzcxbr6Vi3pM4UrMFdeLdAP62edYW8usg78Xg+c6vaAoEv/M3zkS0Q==
- dependencies:
- "@aws-sdk/credential-provider-env" "3.40.0"
- "@aws-sdk/credential-provider-imds" "3.40.0"
- "@aws-sdk/credential-provider-ini" "3.41.0"
- "@aws-sdk/credential-provider-process" "3.40.0"
- "@aws-sdk/credential-provider-sso" "3.41.0"
- "@aws-sdk/credential-provider-web-identity" "3.41.0"
- "@aws-sdk/property-provider" "3.40.0"
- "@aws-sdk/shared-ini-file-loader" "3.37.0"
- "@aws-sdk/types" "3.40.0"
- "@aws-sdk/util-credentials" "3.37.0"
- tslib "^2.3.0"
-
-"@aws-sdk/credential-provider-node@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.49.0.tgz#74725846b79e1ae3df4327e2e05fe23ee78eabf1"
- integrity sha512-DonoqOZHcqfNuwMG1fGJpHJTqf1QinihRKzlOoUWzmseqBCiuagGouSN7nOQgee5BrzF0X9/nao9lnPc4on2TA==
- dependencies:
- "@aws-sdk/credential-provider-env" "3.49.0"
- "@aws-sdk/credential-provider-imds" "3.49.0"
- "@aws-sdk/credential-provider-ini" "3.49.0"
- "@aws-sdk/credential-provider-process" "3.49.0"
- "@aws-sdk/credential-provider-sso" "3.49.0"
- "@aws-sdk/credential-provider-web-identity" "3.49.0"
- "@aws-sdk/property-provider" "3.49.0"
- "@aws-sdk/shared-ini-file-loader" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- "@aws-sdk/util-credentials" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/credential-provider-process@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.40.0.tgz#b4f16e43ca9c855002e833ac9dc8e409b3c7ca23"
- integrity sha512-qsaNCDesW2GasDbzpeOA371gxugi05JWxt3EKonLbUfkGKBK7kmmL6EgLIxZuNm2/Ve4RS07PKp8yBGm4xIx9w==
- dependencies:
- "@aws-sdk/property-provider" "3.40.0"
- "@aws-sdk/shared-ini-file-loader" "3.37.0"
- "@aws-sdk/types" "3.40.0"
- "@aws-sdk/util-credentials" "3.37.0"
- tslib "^2.3.0"
-
-"@aws-sdk/credential-provider-process@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.49.0.tgz#16ad8b941d0c1bca65e0ce59f34a7523d5b253b5"
- integrity sha512-Zn7CJHoXln8O+yBKdTBvcwCz6GDh48s7HtIsqjoOrqoL0oZWhgy8gn8S9KQ+HIqpiO8N0lMMteXuPl5fbC2zGg==
- dependencies:
- "@aws-sdk/property-provider" "3.49.0"
- "@aws-sdk/shared-ini-file-loader" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- "@aws-sdk/util-credentials" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/credential-provider-sso@3.41.0":
- version "3.41.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.41.0.tgz#66c83a776ec42f08b4ea6d619351f0240d57f76a"
- integrity sha512-9s7SWu3RVIQ/MTcBCt35EMzxNQm3avivrbpSOKfJwxR5L+oNKPsV+gSqMlkNZGwOVJyUicIsZGcq/4ON6CjrOg==
- dependencies:
- "@aws-sdk/client-sso" "3.41.0"
- "@aws-sdk/property-provider" "3.40.0"
- "@aws-sdk/shared-ini-file-loader" "3.37.0"
- "@aws-sdk/types" "3.40.0"
- "@aws-sdk/util-credentials" "3.37.0"
- tslib "^2.3.0"
-
-"@aws-sdk/credential-provider-sso@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.49.0.tgz#68dc87d0566b99f61f915812a66362225797abf1"
- integrity sha512-sFTqbQOyGR88K10Y1OgauEPKDmEibxtAkLSFjkJ6Yw/Jyp+lftchoa+TxRrNvDY1zjZX+XauVI6UmD5Pi4E1NQ==
- dependencies:
- "@aws-sdk/client-sso" "3.49.0"
- "@aws-sdk/property-provider" "3.49.0"
- "@aws-sdk/shared-ini-file-loader" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- "@aws-sdk/util-credentials" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/credential-provider-web-identity@3.41.0":
- version "3.41.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.41.0.tgz#7f0e9cc5650eaf6ac32ef359fb0e0dea2ca0ce78"
- integrity sha512-VqvVoEh9C8xTXl4stKyJC5IKQhS8g1Gi5k6B9HPHLIxFRRfKxkE73DT4pMN6npnus7o0yi0MTFGQFQGYSrFO2g==
- dependencies:
- "@aws-sdk/property-provider" "3.40.0"
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/credential-provider-web-identity@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.49.0.tgz#c8cbd1b05c8d1df60bed0522c586141150fa2a12"
- integrity sha512-mlIHUTn04unB0HEwEO12YIY5848uE9B+gYI+YwlNZ70KXGs3lj2horOgPgbxeIfulCVw0aRTKChUg2ActTosYg==
- dependencies:
- "@aws-sdk/property-provider" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/eventstream-marshaller@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-marshaller/-/eventstream-marshaller-3.40.0.tgz#c98fee85a751d2a914d1c4b66217d16d4ee4db03"
- integrity sha512-zHGchfkG3B9M8OOKRpByeS5g1/15YQ0+QQHwxQRtm/CPtKBAIAsCZRQaCNBLu9uQMtBBKj5JsDUcjirhGeSvIg==
- dependencies:
- "@aws-crypto/crc32" "2.0.0"
- "@aws-sdk/types" "3.40.0"
- "@aws-sdk/util-hex-encoding" "3.37.0"
- tslib "^2.3.0"
-
-"@aws-sdk/eventstream-marshaller@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-marshaller/-/eventstream-marshaller-3.49.0.tgz#19399f137fca3e35f75c04d633a913a316aa121e"
- integrity sha512-EDE7aim4c/G9vCWE+jaHQNWHzrHgF1WlUEok1tgLj+fbvqKduDK/1SNleMZbMLC7tFRARN+KKFB0Ctegyp8j4w==
- dependencies:
- "@aws-crypto/crc32" "2.0.0"
- "@aws-sdk/types" "3.49.0"
- "@aws-sdk/util-hex-encoding" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/eventstream-serde-browser@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-browser/-/eventstream-serde-browser-3.40.0.tgz#2b0f8c5ed1908a4fdab07d7b590bdd724b5a13a2"
- integrity sha512-V0AXAfSkhY0hgxDJ0cNA+r42kL8295U7UTCp2Q2fvCaob3wKWh+54KZ2L4IOYTlK3yNzXJ5V6PP1zUuRlsUTew==
- dependencies:
- "@aws-sdk/eventstream-marshaller" "3.40.0"
- "@aws-sdk/eventstream-serde-universal" "3.40.0"
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/eventstream-serde-browser@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-browser/-/eventstream-serde-browser-3.49.0.tgz#6d16532f38fb54d3d0512424f214ff8523a8758f"
- integrity sha512-XHDHVGmxzEEXzHESzXYiycE3CxHLedBQljQPCIXKJkUhmwf84oUDB/cRsgWoOwOpcRQQBZGUPTPOOOHVWQOlZA==
- dependencies:
- "@aws-sdk/eventstream-marshaller" "3.49.0"
- "@aws-sdk/eventstream-serde-universal" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/eventstream-serde-config-resolver@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.40.0.tgz#4a6cced34cbdc376c95e174943b99cd352ed34b0"
- integrity sha512-GgGiJBsQ1/SBTpRM/wCdFBCMo1Nybvy46bNVkH1ujCdp8UTLc5PozzNpH+15V2IQbc9sPDYffMab6HSFjDp5vw==
- dependencies:
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/eventstream-serde-config-resolver@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.49.0.tgz#3888cc1daf1f9a5fc85d9b788b0150e678330431"
- integrity sha512-7xCaQGfZD0xLpWVUsGEQ2PDAkkfnl1gc10h4jLm0xtEGzr0x3B3fLrmDiZTz+wBxRRuCqjiaBaNuPT+HocGYmA==
- dependencies:
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/eventstream-serde-node@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-node/-/eventstream-serde-node-3.40.0.tgz#715c943c9648a5d2b86341ae27eaae5c3bab9c0c"
- integrity sha512-CnzX/JZGvhWlg+ooIPVZ78T+5wIm5Ld1BD7jwhlptJa8IjTMvkc8Nh4pAhc7T0ZScy4zZa/oTkqeVYCOVCyd1Q==
- dependencies:
- "@aws-sdk/eventstream-marshaller" "3.40.0"
- "@aws-sdk/eventstream-serde-universal" "3.40.0"
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/eventstream-serde-node@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-node/-/eventstream-serde-node-3.49.0.tgz#da2f5800100e678b0dc02405fde2ebaa3e0fb31c"
- integrity sha512-hRZa1QSCtSve3vSgOxtGRn7nlOJFGzaov6hDj+bFEWY6ukHWtG9lbit6ECALcud4BjxvaJet37kqToxnpDFMuQ==
- dependencies:
- "@aws-sdk/eventstream-marshaller" "3.49.0"
- "@aws-sdk/eventstream-serde-universal" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/eventstream-serde-universal@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-universal/-/eventstream-serde-universal-3.40.0.tgz#6d00ecd75d4910113e0f8f379b4cb6c30799dafe"
- integrity sha512-rkHwVMyZJMhp9iBixkuaAGQNer/DPxZ9kxDDtE+LuAMhepTYQ8c4lUW0QQhYbNMWf48QKD1G4FV3JXIj9JfP9A==
- dependencies:
- "@aws-sdk/eventstream-marshaller" "3.40.0"
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/eventstream-serde-universal@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-universal/-/eventstream-serde-universal-3.49.0.tgz#0339d5167ffcb358b480e4e0b558c8f26ab733a8"
- integrity sha512-oW/k0QdJTEwRLbdWpakIKABYKEOokBaPd+VSOYmCNceYPzv74RTDqlzTTRVIGj51Jp+Bm1af3l0k1cpjPDnWfQ==
- dependencies:
- "@aws-sdk/eventstream-marshaller" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/fetch-http-handler@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.40.0.tgz#5e6ecfb7fe1f32a5709e4e9c13b0536073477737"
- integrity sha512-w1HiZromoU+/bbEo89uO81l6UO/M+c2uOMnXntZqe6t3ZHUUUo3AbvhKh0QGVFqRQa+Oi0+95KqWmTHa72/9Iw==
- dependencies:
- "@aws-sdk/protocol-http" "3.40.0"
- "@aws-sdk/querystring-builder" "3.40.0"
- "@aws-sdk/types" "3.40.0"
- "@aws-sdk/util-base64-browser" "3.37.0"
- tslib "^2.3.0"
-
-"@aws-sdk/fetch-http-handler@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.49.0.tgz#e0cbbeca3a2c7834e2f235d198ca47ce2ad43276"
- integrity sha512-ougJRsvoIGP0qTgHSGVF1B5Ui95Y/SP5CpY/y6B8vMGrwJ+MmvcCUE3Qd2UJGjO1PfUneno8PHK4u5x7hc2ceA==
- dependencies:
- "@aws-sdk/protocol-http" "3.49.0"
- "@aws-sdk/querystring-builder" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- "@aws-sdk/util-base64-browser" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/hash-blob-browser@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/hash-blob-browser/-/hash-blob-browser-3.40.0.tgz#7bf071b84c59246736044499fd42255c6c8e3d46"
- integrity sha512-l8xyprVVKKH+720VrQ677X6VkvHttDXB4MxkMuxhSvwYBQwsRzP2Wppo7xIAtWGoS+oqlLmD4LCbHdhFRcN5yA==
- dependencies:
- "@aws-sdk/chunked-blob-reader" "3.37.0"
- "@aws-sdk/chunked-blob-reader-native" "3.37.0"
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/hash-blob-browser@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/hash-blob-browser/-/hash-blob-browser-3.49.0.tgz#f915c1801aa90a3312fefd49378998ca66a48f5b"
- integrity sha512-DLLP8dY0eYAXefJJzAYO1QxHW567MN4D2KDxyOKkWOVR2S6ZLgtJb24MhT9RpV3AOM/x686HOv5V4r1rPbuHhw==
- dependencies:
- "@aws-sdk/chunked-blob-reader" "3.49.0"
- "@aws-sdk/chunked-blob-reader-native" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/hash-node@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/hash-node/-/hash-node-3.40.0.tgz#bf4d31a41652cbc3c937055087c80096cfab67ae"
- integrity sha512-yOXXK85DdGDktdnQtXgMdaVKii4wtMjEhJ1mrvx2A9nMFNaPhxvERkVVIUKSWlJRa9ZujOw5jWOx8d2R51/Kjg==
- dependencies:
- "@aws-sdk/types" "3.40.0"
- "@aws-sdk/util-buffer-from" "3.37.0"
- tslib "^2.3.0"
-
-"@aws-sdk/hash-node@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/hash-node/-/hash-node-3.49.0.tgz#29c264dec2260368f1376b3d1605d91b9f2faa69"
- integrity sha512-nRNCmSkcJOzWzKU6NihlKW/6H1HxaaBjUe9ETnwWIgwPC7NZ6IWtri48Cf7Itvveu3dln3ZM2WSXN20TlQpuBw==
- dependencies:
- "@aws-sdk/types" "3.49.0"
- "@aws-sdk/util-buffer-from" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/hash-stream-node@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/hash-stream-node/-/hash-stream-node-3.40.0.tgz#0a6fda20faa0abebf946c6dae63a80c1e707c011"
- integrity sha512-4yvRwODMGYtj6qrt+fyydV5MwVwPPoyoeqDoXdLo9x75vRY71DT1pMRt8PDOoY/ZwWbIdEt4+V7x0sLt2uy9WA==
- dependencies:
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/hash-stream-node@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/hash-stream-node/-/hash-stream-node-3.49.0.tgz#d572c6e08ab8dc9e1a3059d67b2ddc6f77b159ad"
- integrity sha512-ZsqGEs3yp5YH5vk1LhpIiSAzNzXHW89DvKn+BSSiDPdufPdOjLks8wKIVhAUfADcJ+S/AATTAt4SoA4mD+IHvQ==
- dependencies:
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/invalid-dependency@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/invalid-dependency/-/invalid-dependency-3.40.0.tgz#023e37abfb2882676c3cef02da630342634aa429"
- integrity sha512-axIWtDwCBDDqEgAJipX1FB1ZNpWYXquVwKDMo+7G+ftPBZ4FEq4M1ELhXJL3hhNJ9ZmCQzv+4F6Wnt8dwuzUaQ==
- dependencies:
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/invalid-dependency@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/invalid-dependency/-/invalid-dependency-3.49.0.tgz#63f6aa61f13a59f008ed90669c8038a7988f9975"
- integrity sha512-MXf/9l/Oiy+KGKDvInv0RT4rtS+iNftYRTlTmUn3RR74Kz8Fvw+O0RcUjzSrNn5SpjCf/UsGrF+KBTm2gFYQCA==
- dependencies:
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/is-array-buffer@3.37.0":
- version "3.37.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/is-array-buffer/-/is-array-buffer-3.37.0.tgz#aa87619f8172b1a2a7ac8d573032025d98ae6c50"
- integrity sha512-XLjA/a6AuGnCvcJZLsMTy2jxF2upgGhqCCkoIJgLlzzXHSihur13KcmPvW/zcaGnCRj0SvKWXiJHl4vDlW75VQ==
- dependencies:
- tslib "^2.3.0"
-
-"@aws-sdk/is-array-buffer@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/is-array-buffer/-/is-array-buffer-3.49.0.tgz#5bd79e83f8dd77d6a25c645aa3725beb38c5855f"
- integrity sha512-tLba+xvlm1+aAnv+bGieVZo8DCENbqfS9kLf/hp+9hrUSiNAsxs9Pqi34JBpMKGn6h9qORp6f8ClRS+gK8yvWg==
- dependencies:
- tslib "^2.3.0"
-
-"@aws-sdk/md5-js@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/md5-js/-/md5-js-3.40.0.tgz#027ff231c795a6069ae854ccf7c8b57dbfd441fe"
- integrity sha512-P1tzEljMD/MkjSc00TkVBYvfaVv/7S+04YEwE7tpu/jtxWxMHnk3CMKqq/F2iMhY83DRoqoYy+YqnaF4Bzr1uA==
- dependencies:
- "@aws-sdk/types" "3.40.0"
- "@aws-sdk/util-utf8-browser" "3.37.0"
- "@aws-sdk/util-utf8-node" "3.37.0"
- tslib "^2.3.0"
-
-"@aws-sdk/md5-js@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/md5-js/-/md5-js-3.49.0.tgz#c9d794c59bb6b7e68b7ff084093c0dafcfd145e4"
- integrity sha512-CJJxl7FfTNseaw3RAPmihpys1cfbCyg7sLTev6PncqBhoVl+5AWOoITeZj3azE3CKevY2V7PEdmHjzKRNLmcdA==
- dependencies:
- "@aws-sdk/types" "3.49.0"
- "@aws-sdk/util-utf8-browser" "3.49.0"
- "@aws-sdk/util-utf8-node" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/middleware-apply-body-checksum@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-apply-body-checksum/-/middleware-apply-body-checksum-3.40.0.tgz#ebf6cf2f5c4078a4ca717d67dc72b292abe36f33"
- integrity sha512-gNSFlFu/O8cxAM0X64OwiLLN/NPXvK3FsAIJRsfhIW+dX0bEq4lsGPsdU8Tx+9eenaj/Z01uqgWZ6Izar8zVvQ==
- dependencies:
- "@aws-sdk/is-array-buffer" "3.37.0"
- "@aws-sdk/protocol-http" "3.40.0"
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/middleware-apply-body-checksum@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-apply-body-checksum/-/middleware-apply-body-checksum-3.49.0.tgz#09f27734538e34d6c52e0b603e6171b4a6465f43"
- integrity sha512-uNUETgYrOLCZNad+vVsTblTqzuaCVCt67o4VawsziR5QuOCxX/27Ni3x1VNtpI5pUhD8FiT/9/lBpcMTvCSIgA==
- dependencies:
- "@aws-sdk/is-array-buffer" "3.49.0"
- "@aws-sdk/protocol-http" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/middleware-bucket-endpoint@3.41.0":
- version "3.41.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.41.0.tgz#d1bb0fb59be1bb4176725c243561dd7897e710cb"
- integrity sha512-4A0kWHH2qemd4P7CZKS7XB6qtSUP2xMJ7Dn/llxYgvadR0mKEfGPeYPhAss/k7T1JGv+kSTIV30RwUXwdXgE/A==
- dependencies:
- "@aws-sdk/protocol-http" "3.40.0"
- "@aws-sdk/types" "3.40.0"
- "@aws-sdk/util-arn-parser" "3.37.0"
- "@aws-sdk/util-config-provider" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/middleware-bucket-endpoint@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.49.0.tgz#e28b365f38f0f4bdcd636cb3252a7d1156f66cb0"
- integrity sha512-6GK6BXNRRe+JpBUomW1Wrj7HGU3gdl9XvrQekj772kmiBLx/40ntAxZnhjFjkNKLy7IM+he8yygnEUhbV/dEmg==
- dependencies:
- "@aws-sdk/protocol-http" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- "@aws-sdk/util-arn-parser" "3.49.0"
- "@aws-sdk/util-config-provider" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/middleware-content-length@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-content-length/-/middleware-content-length-3.40.0.tgz#affe235fc0eb43c7b8e21189f85a238fdd0b4c3f"
- integrity sha512-sybAJb8v7I/vvL08R3+TI/XDAg9gybQTZ2treC24Ap4+jAOz4QBTHJPMKaUlEeFlMUcq4rj6/u2897ebYH6opw==
- dependencies:
- "@aws-sdk/protocol-http" "3.40.0"
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/middleware-content-length@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-content-length/-/middleware-content-length-3.49.0.tgz#c8e05b4085ae398bc86ac66ae0793908f98a1471"
- integrity sha512-7IaghPT7X92gNoyn9LzZj4V5YpGPDCYQTWhpzZoIlw88vOR4I0zKg7jwYeElRoNfRCI4OYhF26ajKnNHzNMlbA==
- dependencies:
- "@aws-sdk/protocol-http" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/middleware-expect-continue@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.40.0.tgz#380bb30c7c9d0b52bf044207b964d803e4cb5e3d"
- integrity sha512-FY6vT0u1ptDZ2bBj1yG/Iyk6HZB7U9fbrpeZNPYzgq8HJxBcTgfLwtB3VLobyhThQm9X2a7R2YZrwtArW8yQfQ==
- dependencies:
- "@aws-sdk/middleware-header-default" "3.40.0"
- "@aws-sdk/protocol-http" "3.40.0"
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/middleware-expect-continue@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.49.0.tgz#3d88dda6550c0741314542e8fa136799e86fa701"
- integrity sha512-i0FMywhvCdn3+gPuUgtM0ZRd3xBHozropbhvs3fu9Y6g1/YiOgTYuVVqHtObvktVWCV72i8fTvn8TEkyFHRDYQ==
- dependencies:
- "@aws-sdk/middleware-header-default" "3.49.0"
- "@aws-sdk/protocol-http" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/middleware-header-default@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-header-default/-/middleware-header-default-3.40.0.tgz#7e30d4e65404a7f914951b69703d54a425a0b3b0"
- integrity sha512-eXQ13x/AivPZKoG8/akp9g5xdNHuKftl83GMuk9K6tt4+eAa22TdxiFu4R0UVlKAvo2feqxFrNs5DhhhBeAQWA==
- dependencies:
- "@aws-sdk/protocol-http" "3.40.0"
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/middleware-header-default@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-header-default/-/middleware-header-default-3.49.0.tgz#91a8a24f0f363b6379c6314c3ae3fe5269f6356a"
- integrity sha512-3xRNPwFMWQqgGKgxDWMgQXNdIr4EVq5ltrLqwsZopXKZli9/fidOrDN9z9j4AW9YAXyEAYB0fscKT7LcsvxFZg==
- dependencies:
- "@aws-sdk/protocol-http" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/middleware-host-header@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.40.0.tgz#a6a1d52ab0da7f8e65a199c27d71750f8329eccc"
- integrity sha512-/wocR7JFOLM7/+BQM1DgAd6KCFYcdxYu1P7AhI451GlVNuYa5f89zh7p0gt3SRC6monI5lXgpL7RudhDm8fTrA==
- dependencies:
- "@aws-sdk/protocol-http" "3.40.0"
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/middleware-host-header@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.49.0.tgz#2039e5766c49b8e39608c7486fc90018922ab527"
- integrity sha512-5l1ILqHs2mGqNvJb5mRe7hHbTQOO292jghE/LItpNx2tiu7BBGzP1bslHcyEVYoRBX9Oqyfou7s9Ww2yBWtImQ==
- dependencies:
- "@aws-sdk/protocol-http" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/middleware-location-constraint@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.40.0.tgz#f689b2860b9932beb143b6d83281ec2d4527d175"
- integrity sha512-9XaVPYsDQVJbWJH96sNdv4HHY3j1raman+lYxMu4528Awp0OdWUeSsGRYRN+CnRPlkHnfNw4m6SKdWYHxdjshw==
- dependencies:
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/middleware-location-constraint@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.49.0.tgz#41ec3f9d759f0288b70c0df4e87432722228b72e"
- integrity sha512-PUQr06/9XQP0JfUY6nFvK5HHcO4aQbzn/iKvB8dl471IXcKVLnJdB2OuIjUUW6fQbKX1K4xcDEifWTSMIECIlg==
- dependencies:
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/middleware-logger@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.40.0.tgz#29d9616bd39dafa1493cef333a32363e4df2c607"
- integrity sha512-19kx0Xg5ymVRKoupmhdmfTBkROcv3DZj508agpyG2YAo0abOObMlIP4Jltg0VD4PhNjGzNh0jFGJnvhjdwv4/A==
- dependencies:
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/middleware-logger@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.49.0.tgz#62415af36102b4b06c82a23186029da710101474"
- integrity sha512-OicQ0w5sCJXgpeZ+t3XeJA2R/09YfuSe53Ma6aWZm/2/r8vG/SW0yAnwFvwJeCm3DKtBxU1qO2eWhFqvJuWRVA==
- dependencies:
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/middleware-retry@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-retry/-/middleware-retry-3.40.0.tgz#5cffe046b1fd208a62a09495de6659be48ef86f3"
- integrity sha512-SMUJrukugLL7YJE5X8B2ToukxMWMPwnf7jAFr84ptycCe8bdWv8x8klQ3EtVWpyqochtNlbTi6J/tTQBniUX7A==
- dependencies:
- "@aws-sdk/protocol-http" "3.40.0"
- "@aws-sdk/service-error-classification" "3.40.0"
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
- uuid "^8.3.2"
-
-"@aws-sdk/middleware-retry@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-retry/-/middleware-retry-3.49.0.tgz#ce78dc050ae7f4cb99a4dc545019cfcd1d6cff62"
- integrity sha512-RSS4R4PNULHA1b1eYR50YPPfOV2jRuXgLNLVVYMEzzC23MabKEXJYPge+pI1Q9rRrbahVj7aQcOTSpT0MsiEeA==
- dependencies:
- "@aws-sdk/protocol-http" "3.49.0"
- "@aws-sdk/service-error-classification" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
- uuid "^8.3.2"
-
-"@aws-sdk/middleware-sdk-s3@3.41.0":
- version "3.41.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.41.0.tgz#cd97433335af8436d6224194e9735bdecae28889"
- integrity sha512-B7JOpmIpm1zxERQEMwZCWj3FisTvwfUgpfQglYdqrB6VpIoCM8fk2pmi5KzU/JDeNBlhTouj6mwnhJL/z5jopA==
- dependencies:
- "@aws-sdk/protocol-http" "3.40.0"
- "@aws-sdk/signature-v4" "3.40.0"
- "@aws-sdk/types" "3.40.0"
- "@aws-sdk/util-arn-parser" "3.37.0"
- tslib "^2.3.0"
-
-"@aws-sdk/middleware-sdk-s3@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.49.0.tgz#5e6b7b74ca39d8ef2daecf8764be848b7a377643"
- integrity sha512-PeQHJsecGCnXILgOPLgcoZXCa4+2bctus2krhN08ES5oh1obeQB+EOC4v1sWV0DdfyTHEZMDSVLS9qTFHl9IUA==
- dependencies:
- "@aws-sdk/protocol-http" "3.49.0"
- "@aws-sdk/signature-v4" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- "@aws-sdk/util-arn-parser" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/middleware-sdk-sts@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.40.0.tgz#3efefc29176d5078915b61d17105f8bbee86ff5e"
- integrity sha512-TcrbCvj1PkabFZiNczT3yePZtuEm2fAIw1OVnQyLcF2KW+p62Hv5YkK4MPOfx3LA/0lzjOUO1RNl2x7gzV443Q==
- dependencies:
- "@aws-sdk/middleware-signing" "3.40.0"
- "@aws-sdk/property-provider" "3.40.0"
- "@aws-sdk/protocol-http" "3.40.0"
- "@aws-sdk/signature-v4" "3.40.0"
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/middleware-sdk-sts@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.49.0.tgz#48a3b1f084002ae7b23b5dec33081af37dd04055"
- integrity sha512-ZnLV37HKpMdK2x+69ZNqAqKr8rmweyMc//yZQRLtUKpKyQ/XSr0/KUBZXkgIny27aaBsrkplA5g1X2GrClRRZA==
- dependencies:
- "@aws-sdk/middleware-signing" "3.49.0"
- "@aws-sdk/property-provider" "3.49.0"
- "@aws-sdk/protocol-http" "3.49.0"
- "@aws-sdk/signature-v4" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/middleware-serde@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-serde/-/middleware-serde-3.40.0.tgz#90124ff60a7f23963bbcd00a5cc95862b29dddd9"
- integrity sha512-uOWfZjlAoBy6xPqp0d4ka83WNNbEVCWn9WwfqBUXThyoTdTooYSpXe5y2YzN0BJa8b+tEZTyWpgamnBpFLp47g==
- dependencies:
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/middleware-serde@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-serde/-/middleware-serde-3.49.0.tgz#228ebb4cce6e3085ba0c8de2d124d0990116f855"
- integrity sha512-bMAlwR19uFUZ4om+U+/vnPvkcyYw83HdtERF9wrjAqNUnqYsifA0xn4R7Sakg6CW8V0h82dsST6zVfmHd+E2VA==
- dependencies:
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/middleware-signing@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.40.0.tgz#bcbf5558a91db85a87918d5861ce98f306e40a88"
- integrity sha512-RqK5nPbfma0qInMvjtpVkDYY/KkFS6EKlOv3DWTdxbXJ4YuOxgKiuUromhmBUoyjFag0JO7LUWod07H+/DawoA==
- dependencies:
- "@aws-sdk/property-provider" "3.40.0"
- "@aws-sdk/protocol-http" "3.40.0"
- "@aws-sdk/signature-v4" "3.40.0"
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/middleware-signing@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.49.0.tgz#512909a6548d435d96b949d95f14f10db4d1306a"
- integrity sha512-9p0xZjxV9zEQdOpA4MtzmblPRUgchevg5Q70E23yAU/Wjwzwf/6J93cUxdcS8HnmOIl0zQjJaYMTcBsvgJF1eg==
- dependencies:
- "@aws-sdk/property-provider" "3.49.0"
- "@aws-sdk/protocol-http" "3.49.0"
- "@aws-sdk/signature-v4" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/middleware-ssec@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.40.0.tgz#e6877cbabc9532ca85e017f6521924c591d01520"
- integrity sha512-ZoRpaZeAIQa1Q+NyEh74ATwOR3nFGfcP6Nu0jFzgqoVijCReMnhtlCRx23ccBu1ZLZNUsNk6MhKjY+ZTfNsjEg==
- dependencies:
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/middleware-ssec@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.49.0.tgz#c0787590b932f3155a2a9303bce5ef2a43ae1319"
- integrity sha512-S7hfgOCYoqPe4YegSnwhQJ0KBVEhP6dIp7yLa1/yCJkqW2KSnLTvg6ao9vEFf/lhctZ72YZjm8v/2siXWCnDEA==
- dependencies:
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/middleware-stack@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-stack/-/middleware-stack-3.40.0.tgz#5aa614e49a4fc76cc63986fb45302f7afab6db87"
- integrity sha512-hby9HvESUYJxpdALX+6Dn2LPmS5jtMVurGB/+j3MWOvIcDYB4bcSXgVRvXzYnTKwbSupIdbX9zOE2ZAx2SJpUQ==
- dependencies:
- tslib "^2.3.0"
-
-"@aws-sdk/middleware-stack@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-stack/-/middleware-stack-3.49.0.tgz#a50c4387315d0ce41049cd2f20bee49e3690c615"
- integrity sha512-OZxs2P7EH58gkvkTI7ESlUPGam0TkE0ZxOX35KjCOcYMuWvTMshKBzHRLX64nz3DYdaHSIGHgB1v8LKELZjltw==
- dependencies:
- tslib "^2.3.0"
-
-"@aws-sdk/middleware-user-agent@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.40.0.tgz#bf03d2deddc00689c85e7eadd9b4e02f24b61c08"
- integrity sha512-dzC2fxWnanetFJ1oYgil8df3N36bR1yc/OCOpbdfQNiUk1FrXiCXqH5rHNO8zCvnwJAj8GHFwpFGd9a2Qube2w==
- dependencies:
- "@aws-sdk/protocol-http" "3.40.0"
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/middleware-user-agent@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.49.0.tgz#684423b47c747b343a3e60cb3cdc4c00ecf522ce"
- integrity sha512-uAcKgafZ12L8UnyeQGgSFtwOKUfiBWDLt4P2fEHvZRz/HAIcK4pu1PXPArjwteinhUiCDNFfPw8hAPvstMoG6w==
- dependencies:
- "@aws-sdk/protocol-http" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/node-config-provider@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/node-config-provider/-/node-config-provider-3.40.0.tgz#54a8abc4f6d78503093b270e6dff3d6174c59f95"
- integrity sha512-AmokjgUDECG8osoMfdRsPNweqI+L1pn4bYGk5iTLmzbBi0o4ot0U1FdX8Rf0qJZZwS4t1TXc3s8/PDVknmPxKg==
- dependencies:
- "@aws-sdk/property-provider" "3.40.0"
- "@aws-sdk/shared-ini-file-loader" "3.37.0"
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/node-config-provider@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/node-config-provider/-/node-config-provider-3.49.0.tgz#3167274310f878aa8eded39c7e46bc71e83258d9"
- integrity sha512-OCn5c6M/RJDEO80Q+Iy4ADSYgqd/uyEsvp+7lU4di4bMND9kYT4JO2ky2SWjIuARGq/mhMOhaN2DO9MbcqV20g==
- dependencies:
- "@aws-sdk/property-provider" "3.49.0"
- "@aws-sdk/shared-ini-file-loader" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/node-http-handler@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/node-http-handler/-/node-http-handler-3.40.0.tgz#26491f11dabbd673c6318376d06af154adc123df"
- integrity sha512-qjda6IbxDhbYr8NHmrMurKkbjgLUkfTMVgagDErDK24Nm3Dn5VaO6J4n6c0Q4OLHlmFaRcUfZSTrOo5DAubqCw==
- dependencies:
- "@aws-sdk/abort-controller" "3.40.0"
- "@aws-sdk/protocol-http" "3.40.0"
- "@aws-sdk/querystring-builder" "3.40.0"
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/node-http-handler@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/node-http-handler/-/node-http-handler-3.49.0.tgz#dce081a9bbc6e8ed5bf01f52a7dfdab6fc8b96a7"
- integrity sha512-t7D9hoSigBihC9RRgYrkzgSER0fYzZe7192pJAaP6jk13ZOpccQRfXZoKge/cm42aHJsTy8DdQdGtLg7wLTp0g==
- dependencies:
- "@aws-sdk/abort-controller" "3.49.0"
- "@aws-sdk/protocol-http" "3.49.0"
- "@aws-sdk/querystring-builder" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/property-provider@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/property-provider/-/property-provider-3.40.0.tgz#243cb1e87e36b1123ddc66d40d344e7580f80470"
- integrity sha512-Mx4lkShjsYRwW9ujHA1pcnuubrWQ4kF5/DXWNfUiXuSIO/0Lojp1qTLheyBm4vzkJIlx5umyP6NvRAUkEHSN4Q==
- dependencies:
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/property-provider@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/property-provider/-/property-provider-3.49.0.tgz#8f6bcacf386815ecd9f38ce52a185942f149f8ea"
- integrity sha512-6D48YpriOUpniezVuRI8J+MG+vgwb5C1SzBdgN4+S6DqbsEZy+kdEubXdoMICEd+Z8h7lH3p5zMr6po0icGCfA==
- dependencies:
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/protocol-http@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/protocol-http/-/protocol-http-3.40.0.tgz#ce6c7170a59e0a0eb63df5cd7cec87fe05bae680"
- integrity sha512-f4ea7/HZkjpvGBrnRIuzc/bhrExWrgDv7eulj4htPukZGHdTqSJD3Jk8lEXWvFuX2vUKQDGhEhCDsqup7YWJQQ==
- dependencies:
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/protocol-http@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/protocol-http/-/protocol-http-3.49.0.tgz#52885b6a27ae84f8c45b002208d5a357543a17ad"
- integrity sha512-lb9CO7/vm26v4UwveWb4jSapqWWP/p0b9SuHpRExq+yMuvHqwxcoGrxmvS7FsanWbepRF1895dxU/Ar6/4pviA==
- dependencies:
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/querystring-builder@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-builder/-/querystring-builder-3.40.0.tgz#f57212e60519d2d79ce6173cbe00fbe17a69bc0d"
- integrity sha512-gO24oipnNaxJRBXB7lhLfa96vIMOd8gtMBqJTjelTjS2e1ZP1YY12CNKKTWwafSk8Ge021erZAG/YTOaXGpv+g==
- dependencies:
- "@aws-sdk/types" "3.40.0"
- "@aws-sdk/util-uri-escape" "3.37.0"
- tslib "^2.3.0"
-
-"@aws-sdk/querystring-builder@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-builder/-/querystring-builder-3.49.0.tgz#86826ba3762536f20dcc87ac1e4d6a37b7f0709e"
- integrity sha512-+NlgIYihVyUetZcrF1ADY0eg8WW1/ETD5bzTwguTiKduXVHmavSakXK1jJF5vg05mefljToZXjQnOaEs9+K9LA==
- dependencies:
- "@aws-sdk/types" "3.49.0"
- "@aws-sdk/util-uri-escape" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/querystring-parser@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-parser/-/querystring-parser-3.40.0.tgz#5a5ba9c095ad3125a0daf37c33ed1cc8a600d53e"
- integrity sha512-XZIyaKQIiZAM6zelCBcsLHhVDOLafi7XIOd3jy6SymGN8ajj3HqUJ/vdQ5G6ISTk18OrqgqcCOI9oNzv+nrBcA==
- dependencies:
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/querystring-parser@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-parser/-/querystring-parser-3.49.0.tgz#1cba61054809a40217bb50da9120aa770703bcf2"
- integrity sha512-4bSCHI5A8wi+JjsD1gAhMuGRGjDmlw6MoMWUiv4R2J8Ow/9mV8biKRo2ZytUPiSSu4G5JQ7mEkqFsm/VgkstDQ==
- dependencies:
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/s3-request-presigner@^3.16.0", "@aws-sdk/s3-request-presigner@^3.17.0":
- version "3.44.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.44.0.tgz#d465ae86d3194137fe7960a0c92ff27deb2b3e4a"
- integrity sha512-PYAgoYu5dMaKSrr7eJlTGUROb5G98iYt0Vq8a7MMa1ZvIArsPB2b8tPS7DzvpMb4Jx8C7ni6kf+0F9YWMmOOpQ==
- dependencies:
- "@aws-sdk/middleware-sdk-s3" "3.41.0"
- "@aws-sdk/protocol-http" "3.40.0"
- "@aws-sdk/signature-v4" "3.40.0"
- "@aws-sdk/smithy-client" "3.41.0"
- "@aws-sdk/types" "3.40.0"
- "@aws-sdk/util-create-request" "3.41.0"
- "@aws-sdk/util-format-url" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/s3-request-presigner@^3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.49.0.tgz#1703b1193b4b8a4ee861396e84587bb3e22dbd5a"
- integrity sha512-kFLEt2m4Iql4HhF6jdHD9dSMbD48ldYEYTsLThk8zGuepDs7k9md3QziMY1g47LMX+f9rSGLKBLMtfNvArG6JQ==
- dependencies:
- "@aws-sdk/middleware-sdk-s3" "3.49.0"
- "@aws-sdk/protocol-http" "3.49.0"
- "@aws-sdk/signature-v4" "3.49.0"
- "@aws-sdk/smithy-client" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- "@aws-sdk/util-create-request" "3.49.0"
- "@aws-sdk/util-format-url" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/service-error-classification@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/service-error-classification/-/service-error-classification-3.40.0.tgz#c98cbb781bd50e5d90649742ff954d754201c44d"
- integrity sha512-c8btKmkvjXczWudXubGdbO3JgmjySBUVC/gCrZDNfwNGsG8RYJJQYYcnmt1gWjelUZsgMDl/2PIzxTlxVF91rA==
-
-"@aws-sdk/service-error-classification@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/service-error-classification/-/service-error-classification-3.49.0.tgz#d9dae48523f63c418a7afa7344ee2d1584255a66"
- integrity sha512-iVmf7RcrIsM/We5ip8fe14RzEpSLF5eN8oqhCMftEdmMVnOYMd/9x0f1w69fbyBJNIIpyREqM8eAKz5OWQn5/g==
-
-"@aws-sdk/shared-ini-file-loader@3.37.0":
- version "3.37.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.37.0.tgz#ca595d9745150f46805f68be6a6c1607d618ad94"
- integrity sha512-+vRBSlfa48R9KL7DpQt3dsu5/+5atjRgoCISblWo3SLpjrx41pKcjKneo7a1u0aP1Xc2oG2TfIyqTWZuOXsmEQ==
- dependencies:
- tslib "^2.3.0"
-
-"@aws-sdk/shared-ini-file-loader@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.49.0.tgz#a4d7b84046d9aa28be8158f34f40c21bce1dffda"
- integrity sha512-TcgKU6U/3JZpenRFhGSy5R5QsBWkYoeawTK1rTK6deu3UbxVwtOkietbfwP3kIwKZ4hz6OkNeHcOJtXX/InZKw==
- dependencies:
- tslib "^2.3.0"
-
-"@aws-sdk/signature-v4@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4/-/signature-v4-3.40.0.tgz#9de1b4e1130f68394df3232882805896c2d20e45"
- integrity sha512-Q1GNZJRCS3W2qsRtDsX/b6EOSfMXfr6TW46N3LnLTGYZ3KAN2SOSJ1DsW59AuGpEZyRmOhJ9L/Q5U403+bZMXQ==
- dependencies:
- "@aws-sdk/is-array-buffer" "3.37.0"
- "@aws-sdk/types" "3.40.0"
- "@aws-sdk/util-hex-encoding" "3.37.0"
- "@aws-sdk/util-uri-escape" "3.37.0"
- tslib "^2.3.0"
-
-"@aws-sdk/signature-v4@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4/-/signature-v4-3.49.0.tgz#dab5799b07f3be0e8eeb3cf9699793b1744cb4ba"
- integrity sha512-mQSGclWmv/9/MsgthBuKMHN6nkkhGTLXspkhqJ9xSUhjhoaHQVwMoJc39PowJGbYFn1AtCvHAqJtFXTGsMRwPA==
- dependencies:
- "@aws-sdk/is-array-buffer" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- "@aws-sdk/util-hex-encoding" "3.49.0"
- "@aws-sdk/util-uri-escape" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/smithy-client@3.41.0":
- version "3.41.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/smithy-client/-/smithy-client-3.41.0.tgz#61154b4813a01dc079e7083805a20e1bc05d3199"
- integrity sha512-ldhS0Pf3v6yHCd//kk5DvKcdyeUkKEwxNDRanAp+ekTW68J3XcYgKaPC9sNDhVTDH1zrywTvtEz5zWHEvXjQow==
- dependencies:
- "@aws-sdk/middleware-stack" "3.40.0"
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/smithy-client@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/smithy-client/-/smithy-client-3.49.0.tgz#b9956290107597177c0364aa7e49693b58f12b70"
- integrity sha512-ANh9SlEvuru1DcalVoQ7K6wSCYuw4jyeTsIDsJSa13ckrmXAg+ql9vq61ELAXTSNVmuAISuuPjbVaWvOYCtdCQ==
- dependencies:
- "@aws-sdk/middleware-stack" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/types@3.40.0", "@aws-sdk/types@^3.1.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.40.0.tgz#a9d7926fcb9b699bc46be975033559d2293e60d1"
- integrity sha512-KpILcfvRaL88TLvo3SY4OuCCg90SvcNLPyjDwUuBqiOyWODjrKShHtAPJzej4CLp92lofh+ul0UnBfV9Jb/5PA==
-
-"@aws-sdk/types@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.49.0.tgz#d9fb882f7d0e70c301a9b512136e0502680f96fe"
- integrity sha512-8bCqEpquTlPN6xkjaJ+s+RoEFIu5r4G8oXOsQ5HYBvBdpx62HnCqzHLFNHycL2b8sE+VysQgNvmdQYR98vdMGQ==
-
-"@aws-sdk/url-parser@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/url-parser/-/url-parser-3.40.0.tgz#9ccd00a2026605d5eaef630e94b6632cc9598ec3"
- integrity sha512-HwNV+HX7bHgLk5FzTOgdXANsC0SeVz5PMC4Nh+TLz2IoeQnrw4H8dsA4YNonncjern5oC5veKRjQeOoCL5SlSQ==
- dependencies:
- "@aws-sdk/querystring-parser" "3.40.0"
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/url-parser@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/url-parser/-/url-parser-3.49.0.tgz#8afb38df53445caf8ddfc48ae461634a5c32b885"
- integrity sha512-l5td6eu+sIjzNsZYVGr7Mz6vssf2j/8/QrrTYF76J2R6OoceCsKdyJgJPP/tXBdcp4HUZDdVcMqtWRbxGC4izQ==
- dependencies:
- "@aws-sdk/querystring-parser" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/util-arn-parser@3.37.0":
- version "3.37.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.37.0.tgz#807691690c4c52c1e8e0a362bf5767291b626f1f"
- integrity sha512-njIYn8gzm7Ms17A2oEu0vN/0GJpgq7cNFFtzBrM1cPtrc1jhMRJx5hzS7uX5h6ll8BM92bA3y00evRZFHxQPVQ==
- dependencies:
- tslib "^2.3.0"
-
-"@aws-sdk/util-arn-parser@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.49.0.tgz#31fb6a58c224ed6aaf807b0c18af46039f803f2e"
- integrity sha512-mAF4lzxqMUFMQAf+NQSxW7jC5hYXNM7mPItBFs/yI3F25MXBw88Q+wAof7iIyRnRcpJvgZ3I7P8vJriAwrSbFg==
- dependencies:
- tslib "^2.3.0"
-
-"@aws-sdk/util-base64-browser@3.37.0":
- version "3.37.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-base64-browser/-/util-base64-browser-3.37.0.tgz#4bf105de91e5e17ded644557dac6851c30e992d2"
- integrity sha512-o4s/rHVm5k8eC/T7grJQINyYA/mKfDmEWKMA9wk5iBroXlI2rUm7x649TBk5hzoddufk/mffEeNz/1wM7yTmlg==
- dependencies:
- tslib "^2.3.0"
-
-"@aws-sdk/util-base64-browser@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-base64-browser/-/util-base64-browser-3.49.0.tgz#372ec36c7c8a37c3e79b6af0dc62453c57e6d343"
- integrity sha512-HFXJbsJC6AfrnO9M8KuFDo4ihvLbCbCFCfpWy0Gs4t8kTcvGqH8fIpfVsQKAtFHMmb8fen2LduOk+NNSA7srYw==
- dependencies:
- tslib "^2.3.0"
-
-"@aws-sdk/util-base64-node@3.37.0":
- version "3.37.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-base64-node/-/util-base64-node-3.37.0.tgz#81ff164d227db8faeb910af33ff5f861269d6d67"
- integrity sha512-1UPxly1GPrGZtlIWvbNCDIAund4Oyp8cFi9neA43TeNACvrmEQu/nG01pDbOoo0ENoVSVJrNAVBeqKEpqjH2GA==
- dependencies:
- "@aws-sdk/util-buffer-from" "3.37.0"
- tslib "^2.3.0"
-
-"@aws-sdk/util-base64-node@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-base64-node/-/util-base64-node-3.49.0.tgz#ac76df845ae90ca3580b8d95e9e990ec46e1b9ff"
- integrity sha512-xFAzOLZJOEZipG3KVLjB5z1g5PJSi6cmZOGWg2NC2/H5N0/Z+e5ObnIH8mpfO1d6kWchUuo3qJ6fTOvg/ynw7A==
- dependencies:
- "@aws-sdk/util-buffer-from" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/util-body-length-browser@3.37.0":
- version "3.37.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.37.0.tgz#2e3a375ac191a9bacd40a6b3479ee402dcb5769d"
- integrity sha512-tClmH1uYelqWT43xxmnOsVFbCQJiIwizp6y4E109G2LIof07inxrO0L8nbwBpjhugVplx6NZr9IaqTFqbdM1gA==
- dependencies:
- tslib "^2.3.0"
-
-"@aws-sdk/util-body-length-browser@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.49.0.tgz#8a8ad5c93ac8ed2767434454a872912829775bff"
- integrity sha512-4a9Bw33JGKefaZDORlosQRMKxJGEYEiDD5kgNvwIv+KRl5yj2unePia6aFWMqXTWqidOb9WVlqc0Lh73ei5pTg==
- dependencies:
- tslib "^2.3.0"
-
-"@aws-sdk/util-body-length-node@3.37.0":
- version "3.37.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-body-length-node/-/util-body-length-node-3.37.0.tgz#d6170dafd351799687d583f818a4a3924b61cbec"
- integrity sha512-aY3mXdbEajruRi9CHgq/heM89R+Gectj/Xrs1naewmamaN8NJrvjDm3s+cw//lqqSOW903LYHXDgm7wvCzUnFA==
- dependencies:
- tslib "^2.3.0"
-
-"@aws-sdk/util-body-length-node@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-body-length-node/-/util-body-length-node-3.49.0.tgz#572201e3669cfed98917763a3f099bf0a34ce1a6"
- integrity sha512-ME5Sc8jo9BzToUjWskQKZM/NqN9PpwRDTOSH6EISDBUiH5bhWfY8MLkZqIN2UZz/XOiV3yOeWAU+fMYNnGdAQQ==
- dependencies:
- tslib "^2.3.0"
-
-"@aws-sdk/util-buffer-from@3.37.0":
- version "3.37.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-buffer-from/-/util-buffer-from-3.37.0.tgz#298d4a925b9f0ca23f99617648cd9fb3896b573c"
- integrity sha512-aa3SBwjLwImuJoE4+hxDIWQ9REz3UFb3p7KFPe9qopdXb/yB12RTcbrXVb4whUux4i4mO6KRij0ZNjFZrjrKPg==
- dependencies:
- "@aws-sdk/is-array-buffer" "3.37.0"
- tslib "^2.3.0"
-
-"@aws-sdk/util-buffer-from@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-buffer-from/-/util-buffer-from-3.49.0.tgz#128a44f94d4e4676461d441e4da81be94a5c17fc"
- integrity sha512-8JbIPYn91f+16QpDk000PdIBlBZu8/SoL1nF2fpAJ+M98jXpKUws3oiCztJ2FPIKRe/3ikKuZM4HxWrDyJa40Q==
- dependencies:
- "@aws-sdk/is-array-buffer" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/util-config-provider@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-config-provider/-/util-config-provider-3.40.0.tgz#acefff264d6650450a1f8b056a63830a454b756d"
- integrity sha512-NjZGrA4mqhpr6gkVCAUweurP0Z9d3vFyXJCtulC0BFbpKAnKCf/crSK56NwUaNhAEMCkSuBvjRFzkbfT+HO8bA==
- dependencies:
- tslib "^2.3.0"
-
-"@aws-sdk/util-config-provider@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-config-provider/-/util-config-provider-3.49.0.tgz#bfe46ac5559c65fe9443e26d9510abc2584a4d1c"
- integrity sha512-oVGT9q9UIGdv9Cra4B51QNciWKYQXTlfh8oD2FgLp91NbGTIkQLvK7Pah4TbBoa5+0u/obBI07UwCVn7wphWBQ==
- dependencies:
- tslib "^2.3.0"
+"@assemblyscript/loader@^0.10.1":
+ version "0.10.1"
+ resolved "https://registry.yarnpkg.com/@assemblyscript/loader/-/loader-0.10.1.tgz#70e45678f06c72fa2e350e8553ec4a4d72b92e06"
+ integrity sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==
-"@aws-sdk/util-create-request@3.41.0":
- version "3.41.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-create-request/-/util-create-request-3.41.0.tgz#bd1d7b056197b28fce5ef19ce4301a7944cbab9a"
- integrity sha512-mKTMCDTaQ9HH+ppg1QMcBiSlbvRmw8AOllXTkYS1pdO7gi/Sl21krXfIja2MakuK6cB6D+B8MFP8rfq14Vhhlg==
+"@aw-web-design/x-default-browser@1.4.126":
+ version "1.4.126"
+ resolved "https://registry.yarnpkg.com/@aw-web-design/x-default-browser/-/x-default-browser-1.4.126.tgz#43e4bd8f0314ed907a8718d7e862a203af79bc16"
+ integrity sha512-Xk1sIhyNC/esHGGVjL/niHLowM0csl/kFO5uawBy4IrWwy0o1G8LGt3jP6nmWGz+USxeeqbihAmp/oVZju6wug==
dependencies:
- "@aws-sdk/middleware-stack" "3.40.0"
- "@aws-sdk/smithy-client" "3.41.0"
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
+ default-browser-id "3.0.0"
-"@aws-sdk/util-create-request@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-create-request/-/util-create-request-3.49.0.tgz#6cc179230c78de4649211fbba529c51f8e8f5d77"
- integrity sha512-iFU2NVQHXIcSknCSLVSo0YNO8H5IiFjAm9NYUeMI+c+cROfyuOhqfahEQPpTZLjMR8z64imSZlICRY6i858EXQ==
+"@aws-crypto/crc32@3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-3.0.0.tgz#07300eca214409c33e3ff769cd5697b57fdd38fa"
+ integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==
dependencies:
- "@aws-sdk/middleware-stack" "3.49.0"
- "@aws-sdk/smithy-client" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
+ "@aws-crypto/util" "^3.0.0"
+ "@aws-sdk/types" "^3.222.0"
+ tslib "^1.11.1"
-"@aws-sdk/util-credentials@3.37.0":
- version "3.37.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-credentials/-/util-credentials-3.37.0.tgz#76261c3d7c20bee5d28e5c17741adf19558b3b67"
- integrity sha512-zcLhSZDKgBLhUjSU5HoQpuQiP3v8oE86NmV/tiZVPEaO6YVULEAB2Cfj1hpM/b/JXWzjSHfT06KXT7QUODKS+A==
+"@aws-crypto/crc32c@3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz#016c92da559ef638a84a245eecb75c3e97cb664f"
+ integrity sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==
dependencies:
- "@aws-sdk/shared-ini-file-loader" "3.37.0"
- tslib "^2.3.0"
+ "@aws-crypto/util" "^3.0.0"
+ "@aws-sdk/types" "^3.222.0"
+ tslib "^1.11.1"
-"@aws-sdk/util-credentials@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-credentials/-/util-credentials-3.49.0.tgz#ca12506c572e988aa5d4ab230499ba2f0934fcf1"
- integrity sha512-RzbKeuylb56m0zPuLGl5/TkN07+c4PKhZu3hikpsvN8n8n7aFHWPUus63QEGgVaUMCZD0QV6HqJfsCVVFF7UIg==
+"@aws-crypto/ie11-detection@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688"
+ integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==
dependencies:
- "@aws-sdk/shared-ini-file-loader" "3.49.0"
- tslib "^2.3.0"
+ tslib "^1.11.1"
-"@aws-sdk/util-defaults-mode-browser@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.49.0.tgz#aac47e0787a647b7970b3d3728dbc836d65ec8fd"
- integrity sha512-MNOvFET5TNBHgvsmfcLuxVDDUV0OIjE1lxrdbXWol7bMgLc2uL3/QOXWKCOUzcFCqTOnWCvbnwkOjs3f7Dpzmw==
+"@aws-crypto/sha1-browser@3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz#f9083c00782b24714f528b1a1fef2174002266a3"
+ integrity sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==
dependencies:
- "@aws-sdk/property-provider" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- bowser "^2.11.0"
- tslib "^2.3.0"
+ "@aws-crypto/ie11-detection" "^3.0.0"
+ "@aws-crypto/supports-web-crypto" "^3.0.0"
+ "@aws-crypto/util" "^3.0.0"
+ "@aws-sdk/types" "^3.222.0"
+ "@aws-sdk/util-locate-window" "^3.0.0"
+ "@aws-sdk/util-utf8-browser" "^3.0.0"
+ tslib "^1.11.1"
-"@aws-sdk/util-defaults-mode-node@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.49.0.tgz#cd6107cd63e5c265a144a3e2f85c2856462298e3"
- integrity sha512-bd5/ZJlNIX25n83mvcCh9eYQiDdf6gLHNH6ZftA/EbFfkE0o/qHrFhBhiB9HBY9ZoHhtoqrJNv5W9qKFHx1EIA==
- dependencies:
- "@aws-sdk/config-resolver" "3.49.0"
- "@aws-sdk/credential-provider-imds" "3.49.0"
- "@aws-sdk/node-config-provider" "3.49.0"
- "@aws-sdk/property-provider" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
+"@aws-crypto/sha256-browser@3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766"
+ integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==
+ dependencies:
+ "@aws-crypto/ie11-detection" "^3.0.0"
+ "@aws-crypto/sha256-js" "^3.0.0"
+ "@aws-crypto/supports-web-crypto" "^3.0.0"
+ "@aws-crypto/util" "^3.0.0"
+ "@aws-sdk/types" "^3.222.0"
+ "@aws-sdk/util-locate-window" "^3.0.0"
+ "@aws-sdk/util-utf8-browser" "^3.0.0"
+ tslib "^1.11.1"
-"@aws-sdk/util-format-url@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-format-url/-/util-format-url-3.40.0.tgz#95be9d8bc792f3311dd5c8268a3fe0e9fb369c40"
- integrity sha512-eOKeYwAvsCQjTSCAW1LVhnjmTyyGK6lZjGTa9wXxxjVE6Fhc66+cCykS8u/u8Vj7BCS+ixiLetXtH1/qd+Bl+g==
+"@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2"
+ integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==
dependencies:
- "@aws-sdk/querystring-builder" "3.40.0"
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
+ "@aws-crypto/util" "^3.0.0"
+ "@aws-sdk/types" "^3.222.0"
+ tslib "^1.11.1"
-"@aws-sdk/util-format-url@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-format-url/-/util-format-url-3.49.0.tgz#029a52780d2c3e857519c7f20d976495aa2c52cf"
- integrity sha512-8033WCPOtUfue7QpqDkjFBAsMuy9+VcXtnNQQG4+NNbEjGYsAp2qomUwGstM7qDfoMA4OuCDGF0jlXIF5ghwBQ==
+"@aws-crypto/supports-web-crypto@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2"
+ integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==
dependencies:
- "@aws-sdk/querystring-builder" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
+ tslib "^1.11.1"
-"@aws-sdk/util-hex-encoding@3.37.0":
- version "3.37.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.37.0.tgz#40ce21b5ff682e811e98ac7476692ee55ae61493"
- integrity sha512-tn5UpfaeM+rZWqynoNqB8lwtcAXil5YYO3HLGH9himpWAdft/2Z7LK6bsYDpctaAI1WHgMDcL0bw3Id04ZUbhA==
+"@aws-crypto/util@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0"
+ integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==
dependencies:
- tslib "^2.3.0"
+ "@aws-sdk/types" "^3.222.0"
+ "@aws-sdk/util-utf8-browser" "^3.0.0"
+ tslib "^1.11.1"
-"@aws-sdk/util-hex-encoding@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.49.0.tgz#04d153679a1b14b2fecb4c38175d79b4a8fa8002"
- integrity sha512-ZbPu8Dd3Qm0BMP71FWUH7KPpZA/6izfkDlxbvHxtHdW7XYZALuJ0cVRpWGIY2fCSuA9X8Jfn60KMyjuSAuzM1w==
- dependencies:
- tslib "^2.3.0"
+"@aws-sdk/client-athena@^3.22.0":
+ version "3.525.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/client-athena/-/client-athena-3.525.0.tgz#4fdbac18f25a8c3127323e6bbcc4aa37b551c085"
+ integrity sha512-nW6DyqY4CgkpUqgOsCh9xiw8ieMD1UVc+cPhbuQIXgy3pZr3ze3tYsDUYAREpJfhADmG6ylHpa/DJKAI/Yi7YQ==
+ dependencies:
+ "@aws-crypto/sha256-browser" "3.0.0"
+ "@aws-crypto/sha256-js" "3.0.0"
+ "@aws-sdk/client-sts" "3.525.0"
+ "@aws-sdk/core" "3.525.0"
+ "@aws-sdk/credential-provider-node" "3.525.0"
+ "@aws-sdk/middleware-host-header" "3.523.0"
+ "@aws-sdk/middleware-logger" "3.523.0"
+ "@aws-sdk/middleware-recursion-detection" "3.523.0"
+ "@aws-sdk/middleware-user-agent" "3.525.0"
+ "@aws-sdk/region-config-resolver" "3.525.0"
+ "@aws-sdk/types" "3.523.0"
+ "@aws-sdk/util-endpoints" "3.525.0"
+ "@aws-sdk/util-user-agent-browser" "3.523.0"
+ "@aws-sdk/util-user-agent-node" "3.525.0"
+ "@smithy/config-resolver" "^2.1.4"
+ "@smithy/core" "^1.3.5"
+ "@smithy/fetch-http-handler" "^2.4.3"
+ "@smithy/hash-node" "^2.1.3"
+ "@smithy/invalid-dependency" "^2.1.3"
+ "@smithy/middleware-content-length" "^2.1.3"
+ "@smithy/middleware-endpoint" "^2.4.4"
+ "@smithy/middleware-retry" "^2.1.4"
+ "@smithy/middleware-serde" "^2.1.3"
+ "@smithy/middleware-stack" "^2.1.3"
+ "@smithy/node-config-provider" "^2.2.4"
+ "@smithy/node-http-handler" "^2.4.1"
+ "@smithy/protocol-http" "^3.2.1"
+ "@smithy/smithy-client" "^2.4.2"
+ "@smithy/types" "^2.10.1"
+ "@smithy/url-parser" "^2.1.3"
+ "@smithy/util-base64" "^2.1.1"
+ "@smithy/util-body-length-browser" "^2.1.1"
+ "@smithy/util-body-length-node" "^2.2.1"
+ "@smithy/util-defaults-mode-browser" "^2.1.4"
+ "@smithy/util-defaults-mode-node" "^2.2.3"
+ "@smithy/util-endpoints" "^1.1.4"
+ "@smithy/util-middleware" "^2.1.3"
+ "@smithy/util-retry" "^2.1.3"
+ "@smithy/util-utf8" "^2.1.1"
+ tslib "^2.5.0"
+ uuid "^9.0.1"
+
+"@aws-sdk/client-s3@^3.17.0", "@aws-sdk/client-s3@^3.49.0":
+ version "3.525.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.525.0.tgz#965ed5b70c067d74c7a3c4aea26dfce53db4cd06"
+ integrity sha512-hoMGH8G9rezZDiJPsMjsyRVNfVHHa4u6lcZ09SQMmtFHWK0FUcC0DIKR5ripV5qGDbnV54i2JotXlLzAv0aNCQ==
+ dependencies:
+ "@aws-crypto/sha1-browser" "3.0.0"
+ "@aws-crypto/sha256-browser" "3.0.0"
+ "@aws-crypto/sha256-js" "3.0.0"
+ "@aws-sdk/client-sts" "3.525.0"
+ "@aws-sdk/core" "3.525.0"
+ "@aws-sdk/credential-provider-node" "3.525.0"
+ "@aws-sdk/middleware-bucket-endpoint" "3.525.0"
+ "@aws-sdk/middleware-expect-continue" "3.523.0"
+ "@aws-sdk/middleware-flexible-checksums" "3.523.0"
+ "@aws-sdk/middleware-host-header" "3.523.0"
+ "@aws-sdk/middleware-location-constraint" "3.523.0"
+ "@aws-sdk/middleware-logger" "3.523.0"
+ "@aws-sdk/middleware-recursion-detection" "3.523.0"
+ "@aws-sdk/middleware-sdk-s3" "3.525.0"
+ "@aws-sdk/middleware-signing" "3.523.0"
+ "@aws-sdk/middleware-ssec" "3.523.0"
+ "@aws-sdk/middleware-user-agent" "3.525.0"
+ "@aws-sdk/region-config-resolver" "3.525.0"
+ "@aws-sdk/signature-v4-multi-region" "3.525.0"
+ "@aws-sdk/types" "3.523.0"
+ "@aws-sdk/util-endpoints" "3.525.0"
+ "@aws-sdk/util-user-agent-browser" "3.523.0"
+ "@aws-sdk/util-user-agent-node" "3.525.0"
+ "@aws-sdk/xml-builder" "3.523.0"
+ "@smithy/config-resolver" "^2.1.4"
+ "@smithy/core" "^1.3.5"
+ "@smithy/eventstream-serde-browser" "^2.1.3"
+ "@smithy/eventstream-serde-config-resolver" "^2.1.3"
+ "@smithy/eventstream-serde-node" "^2.1.3"
+ "@smithy/fetch-http-handler" "^2.4.3"
+ "@smithy/hash-blob-browser" "^2.1.3"
+ "@smithy/hash-node" "^2.1.3"
+ "@smithy/hash-stream-node" "^2.1.3"
+ "@smithy/invalid-dependency" "^2.1.3"
+ "@smithy/md5-js" "^2.1.3"
+ "@smithy/middleware-content-length" "^2.1.3"
+ "@smithy/middleware-endpoint" "^2.4.4"
+ "@smithy/middleware-retry" "^2.1.4"
+ "@smithy/middleware-serde" "^2.1.3"
+ "@smithy/middleware-stack" "^2.1.3"
+ "@smithy/node-config-provider" "^2.2.4"
+ "@smithy/node-http-handler" "^2.4.1"
+ "@smithy/protocol-http" "^3.2.1"
+ "@smithy/smithy-client" "^2.4.2"
+ "@smithy/types" "^2.10.1"
+ "@smithy/url-parser" "^2.1.3"
+ "@smithy/util-base64" "^2.1.1"
+ "@smithy/util-body-length-browser" "^2.1.1"
+ "@smithy/util-body-length-node" "^2.2.1"
+ "@smithy/util-defaults-mode-browser" "^2.1.4"
+ "@smithy/util-defaults-mode-node" "^2.2.3"
+ "@smithy/util-endpoints" "^1.1.4"
+ "@smithy/util-retry" "^2.1.3"
+ "@smithy/util-stream" "^2.1.3"
+ "@smithy/util-utf8" "^2.1.1"
+ "@smithy/util-waiter" "^2.1.3"
+ fast-xml-parser "4.2.5"
+ tslib "^2.5.0"
+
+"@aws-sdk/client-sso-oidc@3.525.0":
+ version "3.525.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.525.0.tgz#0f80242d997adc7cf259f50f9e590d515a123fac"
+ integrity sha512-zz13k/6RkjPSLmReSeGxd8wzGiiZa4Odr2Tv3wTcxClM4wOjD+zOgGv4Fe32b9AMqaueiCdjbvdu7AKcYxFA4A==
+ dependencies:
+ "@aws-crypto/sha256-browser" "3.0.0"
+ "@aws-crypto/sha256-js" "3.0.0"
+ "@aws-sdk/client-sts" "3.525.0"
+ "@aws-sdk/core" "3.525.0"
+ "@aws-sdk/middleware-host-header" "3.523.0"
+ "@aws-sdk/middleware-logger" "3.523.0"
+ "@aws-sdk/middleware-recursion-detection" "3.523.0"
+ "@aws-sdk/middleware-user-agent" "3.525.0"
+ "@aws-sdk/region-config-resolver" "3.525.0"
+ "@aws-sdk/types" "3.523.0"
+ "@aws-sdk/util-endpoints" "3.525.0"
+ "@aws-sdk/util-user-agent-browser" "3.523.0"
+ "@aws-sdk/util-user-agent-node" "3.525.0"
+ "@smithy/config-resolver" "^2.1.4"
+ "@smithy/core" "^1.3.5"
+ "@smithy/fetch-http-handler" "^2.4.3"
+ "@smithy/hash-node" "^2.1.3"
+ "@smithy/invalid-dependency" "^2.1.3"
+ "@smithy/middleware-content-length" "^2.1.3"
+ "@smithy/middleware-endpoint" "^2.4.4"
+ "@smithy/middleware-retry" "^2.1.4"
+ "@smithy/middleware-serde" "^2.1.3"
+ "@smithy/middleware-stack" "^2.1.3"
+ "@smithy/node-config-provider" "^2.2.4"
+ "@smithy/node-http-handler" "^2.4.1"
+ "@smithy/protocol-http" "^3.2.1"
+ "@smithy/smithy-client" "^2.4.2"
+ "@smithy/types" "^2.10.1"
+ "@smithy/url-parser" "^2.1.3"
+ "@smithy/util-base64" "^2.1.1"
+ "@smithy/util-body-length-browser" "^2.1.1"
+ "@smithy/util-body-length-node" "^2.2.1"
+ "@smithy/util-defaults-mode-browser" "^2.1.4"
+ "@smithy/util-defaults-mode-node" "^2.2.3"
+ "@smithy/util-endpoints" "^1.1.4"
+ "@smithy/util-middleware" "^2.1.3"
+ "@smithy/util-retry" "^2.1.3"
+ "@smithy/util-utf8" "^2.1.1"
+ tslib "^2.5.0"
+
+"@aws-sdk/client-sso@3.525.0":
+ version "3.525.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.525.0.tgz#2af5028a56a72a8067cb6b149ca1cc433beb9fa4"
+ integrity sha512-6KwGQWFoNLH1UupdWPFdKPfTgjSz1kN8/r8aCzuvvXBe4Pz+iDUZ6FEJzGWNc9AapjvZDNO1hs23slomM9rTaA==
+ dependencies:
+ "@aws-crypto/sha256-browser" "3.0.0"
+ "@aws-crypto/sha256-js" "3.0.0"
+ "@aws-sdk/core" "3.525.0"
+ "@aws-sdk/middleware-host-header" "3.523.0"
+ "@aws-sdk/middleware-logger" "3.523.0"
+ "@aws-sdk/middleware-recursion-detection" "3.523.0"
+ "@aws-sdk/middleware-user-agent" "3.525.0"
+ "@aws-sdk/region-config-resolver" "3.525.0"
+ "@aws-sdk/types" "3.523.0"
+ "@aws-sdk/util-endpoints" "3.525.0"
+ "@aws-sdk/util-user-agent-browser" "3.523.0"
+ "@aws-sdk/util-user-agent-node" "3.525.0"
+ "@smithy/config-resolver" "^2.1.4"
+ "@smithy/core" "^1.3.5"
+ "@smithy/fetch-http-handler" "^2.4.3"
+ "@smithy/hash-node" "^2.1.3"
+ "@smithy/invalid-dependency" "^2.1.3"
+ "@smithy/middleware-content-length" "^2.1.3"
+ "@smithy/middleware-endpoint" "^2.4.4"
+ "@smithy/middleware-retry" "^2.1.4"
+ "@smithy/middleware-serde" "^2.1.3"
+ "@smithy/middleware-stack" "^2.1.3"
+ "@smithy/node-config-provider" "^2.2.4"
+ "@smithy/node-http-handler" "^2.4.1"
+ "@smithy/protocol-http" "^3.2.1"
+ "@smithy/smithy-client" "^2.4.2"
+ "@smithy/types" "^2.10.1"
+ "@smithy/url-parser" "^2.1.3"
+ "@smithy/util-base64" "^2.1.1"
+ "@smithy/util-body-length-browser" "^2.1.1"
+ "@smithy/util-body-length-node" "^2.2.1"
+ "@smithy/util-defaults-mode-browser" "^2.1.4"
+ "@smithy/util-defaults-mode-node" "^2.2.3"
+ "@smithy/util-endpoints" "^1.1.4"
+ "@smithy/util-middleware" "^2.1.3"
+ "@smithy/util-retry" "^2.1.3"
+ "@smithy/util-utf8" "^2.1.1"
+ tslib "^2.5.0"
+
+"@aws-sdk/client-sts@3.525.0":
+ version "3.525.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.525.0.tgz#5c59c39950f24d9fb4a42b226ada6a72955c0672"
+ integrity sha512-a8NUGRvO6rkfTZCbMaCsjDjLbERCwIUU9dIywFYcRgbFhkupJ7fSaZz3Het98U51M9ZbTEpaTa3fz0HaJv8VJw==
+ dependencies:
+ "@aws-crypto/sha256-browser" "3.0.0"
+ "@aws-crypto/sha256-js" "3.0.0"
+ "@aws-sdk/core" "3.525.0"
+ "@aws-sdk/middleware-host-header" "3.523.0"
+ "@aws-sdk/middleware-logger" "3.523.0"
+ "@aws-sdk/middleware-recursion-detection" "3.523.0"
+ "@aws-sdk/middleware-user-agent" "3.525.0"
+ "@aws-sdk/region-config-resolver" "3.525.0"
+ "@aws-sdk/types" "3.523.0"
+ "@aws-sdk/util-endpoints" "3.525.0"
+ "@aws-sdk/util-user-agent-browser" "3.523.0"
+ "@aws-sdk/util-user-agent-node" "3.525.0"
+ "@smithy/config-resolver" "^2.1.4"
+ "@smithy/core" "^1.3.5"
+ "@smithy/fetch-http-handler" "^2.4.3"
+ "@smithy/hash-node" "^2.1.3"
+ "@smithy/invalid-dependency" "^2.1.3"
+ "@smithy/middleware-content-length" "^2.1.3"
+ "@smithy/middleware-endpoint" "^2.4.4"
+ "@smithy/middleware-retry" "^2.1.4"
+ "@smithy/middleware-serde" "^2.1.3"
+ "@smithy/middleware-stack" "^2.1.3"
+ "@smithy/node-config-provider" "^2.2.4"
+ "@smithy/node-http-handler" "^2.4.1"
+ "@smithy/protocol-http" "^3.2.1"
+ "@smithy/smithy-client" "^2.4.2"
+ "@smithy/types" "^2.10.1"
+ "@smithy/url-parser" "^2.1.3"
+ "@smithy/util-base64" "^2.1.1"
+ "@smithy/util-body-length-browser" "^2.1.1"
+ "@smithy/util-body-length-node" "^2.2.1"
+ "@smithy/util-defaults-mode-browser" "^2.1.4"
+ "@smithy/util-defaults-mode-node" "^2.2.3"
+ "@smithy/util-endpoints" "^1.1.4"
+ "@smithy/util-middleware" "^2.1.3"
+ "@smithy/util-retry" "^2.1.3"
+ "@smithy/util-utf8" "^2.1.1"
+ fast-xml-parser "4.2.5"
+ tslib "^2.5.0"
+
+"@aws-sdk/core@3.525.0":
+ version "3.525.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.525.0.tgz#710740ff96551e04f595fc156a40b54793a37b01"
+ integrity sha512-E3LtEtMWCriQOFZpVKpLYzbdw/v2PAOEAMhn2VRRZ1g0/g1TXzQrfhEU2yd8l/vQEJaCJ82ooGGg7YECviBUxA==
+ dependencies:
+ "@smithy/core" "^1.3.5"
+ "@smithy/protocol-http" "^3.2.1"
+ "@smithy/signature-v4" "^2.1.3"
+ "@smithy/smithy-client" "^2.4.2"
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@aws-sdk/credential-provider-env@3.523.0":
+ version "3.523.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.523.0.tgz#4bc04b32c15ff7237ba1de866b96ccea24e433c7"
+ integrity sha512-Y6DWdH6/OuMDoNKVzZlNeBc6f1Yjk1lYMjANKpIhMbkRCvLJw/PYZKOZa8WpXbTYdgg9XLjKybnLIb3ww3uuzA==
+ dependencies:
+ "@aws-sdk/types" "3.523.0"
+ "@smithy/property-provider" "^2.1.3"
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@aws-sdk/credential-provider-http@3.525.0":
+ version "3.525.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.525.0.tgz#3a785ea8724200596ad1a48cf8485658401eb589"
+ integrity sha512-RNWQGuSBQZhl3iqklOslUEfQ4br1V3DCPboMpeqFtddUWJV3m2u2extFur9/4Uy+1EHVF120IwZUKtd8dF+ibw==
+ dependencies:
+ "@aws-sdk/types" "3.523.0"
+ "@smithy/fetch-http-handler" "^2.4.3"
+ "@smithy/node-http-handler" "^2.4.1"
+ "@smithy/property-provider" "^2.1.3"
+ "@smithy/protocol-http" "^3.2.1"
+ "@smithy/smithy-client" "^2.4.2"
+ "@smithy/types" "^2.10.1"
+ "@smithy/util-stream" "^2.1.3"
+ tslib "^2.5.0"
+
+"@aws-sdk/credential-provider-ini@3.525.0":
+ version "3.525.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.525.0.tgz#e672842bfdc3bcde221def0284f4a8af30bee2bb"
+ integrity sha512-JDnccfK5JRb9jcgpc9lirL9PyCwGIqY0nKdw3LlX5WL5vTpTG4E1q7rLAlpNh7/tFD1n66Itarfv2tsyHMIqCw==
+ dependencies:
+ "@aws-sdk/client-sts" "3.525.0"
+ "@aws-sdk/credential-provider-env" "3.523.0"
+ "@aws-sdk/credential-provider-process" "3.523.0"
+ "@aws-sdk/credential-provider-sso" "3.525.0"
+ "@aws-sdk/credential-provider-web-identity" "3.525.0"
+ "@aws-sdk/types" "3.523.0"
+ "@smithy/credential-provider-imds" "^2.2.3"
+ "@smithy/property-provider" "^2.1.3"
+ "@smithy/shared-ini-file-loader" "^2.3.3"
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@aws-sdk/credential-provider-node@3.525.0":
+ version "3.525.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.525.0.tgz#fde02124df4f8afd4a58475452c9cd7f91a60b01"
+ integrity sha512-RJXlO8goGXpnoHQAyrCcJ0QtWEOFa34LSbfdqBIjQX/fwnjUuEmiGdXTV3AZmwYQ7juk49tfBneHbtOP3AGqsQ==
+ dependencies:
+ "@aws-sdk/credential-provider-env" "3.523.0"
+ "@aws-sdk/credential-provider-http" "3.525.0"
+ "@aws-sdk/credential-provider-ini" "3.525.0"
+ "@aws-sdk/credential-provider-process" "3.523.0"
+ "@aws-sdk/credential-provider-sso" "3.525.0"
+ "@aws-sdk/credential-provider-web-identity" "3.525.0"
+ "@aws-sdk/types" "3.523.0"
+ "@smithy/credential-provider-imds" "^2.2.3"
+ "@smithy/property-provider" "^2.1.3"
+ "@smithy/shared-ini-file-loader" "^2.3.3"
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@aws-sdk/credential-provider-process@3.523.0":
+ version "3.523.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.523.0.tgz#8cf85637f5075065a164d008f392d3ae3539ea23"
+ integrity sha512-f0LP9KlFmMvPWdKeUKYlZ6FkQAECUeZMmISsv6NKtvPCI9e4O4cLTeR09telwDK8P0HrgcRuZfXM7E30m8re0Q==
+ dependencies:
+ "@aws-sdk/types" "3.523.0"
+ "@smithy/property-provider" "^2.1.3"
+ "@smithy/shared-ini-file-loader" "^2.3.3"
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@aws-sdk/credential-provider-sso@3.525.0":
+ version "3.525.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.525.0.tgz#b79f263fcde291250b35af41ee83743bdfec7d13"
+ integrity sha512-7V7ybtufxdD3plxeIeB6aqHZeFIUlAyPphXIUgXrGY10iNcosL970rQPBeggsohe4gCM6UvY2TfMeEcr+ZE8FA==
+ dependencies:
+ "@aws-sdk/client-sso" "3.525.0"
+ "@aws-sdk/token-providers" "3.525.0"
+ "@aws-sdk/types" "3.523.0"
+ "@smithy/property-provider" "^2.1.3"
+ "@smithy/shared-ini-file-loader" "^2.3.3"
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@aws-sdk/credential-provider-web-identity@3.525.0":
+ version "3.525.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.525.0.tgz#f71a7a322209468de89b2dee6acd961e386a89cc"
+ integrity sha512-sAukOjR1oKb2JXG4nPpuBFpSwGUhrrY17PG/xbTy8NAoLLhrqRwnErcLfdTfmj6tH+3094k6ws/Sh8a35ae7fA==
+ dependencies:
+ "@aws-sdk/client-sts" "3.525.0"
+ "@aws-sdk/types" "3.523.0"
+ "@smithy/property-provider" "^2.1.3"
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@aws-sdk/middleware-bucket-endpoint@3.525.0":
+ version "3.525.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.525.0.tgz#f354fbc0b4a55b0b13ab704672382c5aeafae0b3"
+ integrity sha512-nYfQ2Xspfef7j8mZO7varUWLPH6HQlXateH7tBVtBNUAazyQE4UJEvC0fbQ+Y01e+FKlirim/m2umkdMXqAlTg==
+ dependencies:
+ "@aws-sdk/types" "3.523.0"
+ "@aws-sdk/util-arn-parser" "3.495.0"
+ "@smithy/node-config-provider" "^2.2.4"
+ "@smithy/protocol-http" "^3.2.1"
+ "@smithy/types" "^2.10.1"
+ "@smithy/util-config-provider" "^2.2.1"
+ tslib "^2.5.0"
+
+"@aws-sdk/middleware-expect-continue@3.523.0":
+ version "3.523.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.523.0.tgz#9db5a9dd54a41fb71d40e744ff800a697a82e969"
+ integrity sha512-E5DyRAHU39VHaAlQLqXYS/IKpgk3vsryuU6kkOcIIK8Dgw0a2tjoh5AOCaNa8pD+KgAGrFp35JIMSX1zui5diA==
+ dependencies:
+ "@aws-sdk/types" "3.523.0"
+ "@smithy/protocol-http" "^3.2.1"
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@aws-sdk/middleware-flexible-checksums@3.523.0":
+ version "3.523.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.523.0.tgz#7f0e4a98aac00f08b154cb283d33a36993dd730d"
+ integrity sha512-lIa1TdWY9q4zsDFarfSnYcdrwPR+nypaU4n6hb95i620/1F5M5s6H8P0hYtwTNNvx+slrR8F3VBML9pjBtzAHw==
+ dependencies:
+ "@aws-crypto/crc32" "3.0.0"
+ "@aws-crypto/crc32c" "3.0.0"
+ "@aws-sdk/types" "3.523.0"
+ "@smithy/is-array-buffer" "^2.1.1"
+ "@smithy/protocol-http" "^3.2.1"
+ "@smithy/types" "^2.10.1"
+ "@smithy/util-utf8" "^2.1.1"
+ tslib "^2.5.0"
+
+"@aws-sdk/middleware-host-header@3.523.0":
+ version "3.523.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.523.0.tgz#9aaa29edd668905eed8ee8af482b96162dafdeb1"
+ integrity sha512-4g3q7Ta9sdD9TMUuohBAkbx/e3I/juTqfKi7TPgP+8jxcYX72MOsgemAMHuP6CX27eyj4dpvjH+w4SIVDiDSmg==
+ dependencies:
+ "@aws-sdk/types" "3.523.0"
+ "@smithy/protocol-http" "^3.2.1"
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@aws-sdk/middleware-location-constraint@3.523.0":
+ version "3.523.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.523.0.tgz#c5b2395119ece973773f80f67eef43603d159c12"
+ integrity sha512-1QAUXX3U0jkARnU0yyjk81EO4Uw5dCeQOtvUY5s3bUOHatR3ThosQeIr6y9BCsbXHzNnDe1ytCjqAPyo8r/bYw==
+ dependencies:
+ "@aws-sdk/types" "3.523.0"
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@aws-sdk/middleware-logger@3.523.0":
+ version "3.523.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.523.0.tgz#ad61bfdd73b5983ab8a8926b9c01825bc048babf"
+ integrity sha512-PeDNJNhfiaZx54LBaLTXzUaJ9LXFwDFFIksipjqjvxMafnoVcQwKbkoPUWLe5ytT4nnL1LogD3s55mERFUsnwg==
+ dependencies:
+ "@aws-sdk/types" "3.523.0"
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@aws-sdk/middleware-recursion-detection@3.523.0":
+ version "3.523.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.523.0.tgz#21d9ec52700545d7935d6c943cb40bffa69ab4b4"
+ integrity sha512-nZ3Vt7ehfSDYnrcg/aAfjjvpdE+61B3Zk68i6/hSUIegT3IH9H1vSW67NDKVp+50hcEfzWwM2HMPXxlzuyFyrw==
+ dependencies:
+ "@aws-sdk/types" "3.523.0"
+ "@smithy/protocol-http" "^3.2.1"
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@aws-sdk/middleware-sdk-s3@3.525.0":
+ version "3.525.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.525.0.tgz#c3ce03940240fa7a42bfa3f1916d2ce9fa0fafbf"
+ integrity sha512-ewFyyFM6wdFTOqCiId5GQNi7owDdLEonQhB4h8tF6r3HV52bRlDvZA4aDos+ft6N/XY2J6L0qlFTFq+/oiurXw==
+ dependencies:
+ "@aws-sdk/types" "3.523.0"
+ "@aws-sdk/util-arn-parser" "3.495.0"
+ "@smithy/node-config-provider" "^2.2.4"
+ "@smithy/protocol-http" "^3.2.1"
+ "@smithy/signature-v4" "^2.1.3"
+ "@smithy/smithy-client" "^2.4.2"
+ "@smithy/types" "^2.10.1"
+ "@smithy/util-config-provider" "^2.2.1"
+ tslib "^2.5.0"
+
+"@aws-sdk/middleware-signing@3.523.0":
+ version "3.523.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.523.0.tgz#1b2c458eb6a00da45b0800916ee463ff727c0717"
+ integrity sha512-pFXV4don6qcmew/OvEjLUr2foVjzoJ8o5k57Oz9yAHz8INx3RHK8MP/K4mVhHo6n0SquRcWrm4kY/Tw+89gkEA==
+ dependencies:
+ "@aws-sdk/types" "3.523.0"
+ "@smithy/property-provider" "^2.1.3"
+ "@smithy/protocol-http" "^3.2.1"
+ "@smithy/signature-v4" "^2.1.3"
+ "@smithy/types" "^2.10.1"
+ "@smithy/util-middleware" "^2.1.3"
+ tslib "^2.5.0"
+
+"@aws-sdk/middleware-ssec@3.523.0":
+ version "3.523.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.523.0.tgz#1bc0b57859a3e90af7e6103341903896f601e622"
+ integrity sha512-FaqAZQeF5cQzZLOIboIJRaWVOQ2F2pJZAXGF5D7nJsxYNFChotA0O0iWimBRxU35RNn7yirVxz35zQzs20ddIw==
+ dependencies:
+ "@aws-sdk/types" "3.523.0"
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@aws-sdk/middleware-user-agent@3.525.0":
+ version "3.525.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.525.0.tgz#3ac154829460271c53ad49d8301d4c849e9afb9f"
+ integrity sha512-4al/6uO+t/QIYXK2OgqzDKQzzLAYJza1vWFS+S0lJ3jLNGyLB5BMU5KqWjDzevYZ4eCnz2Nn7z0FveUTNz8YdQ==
+ dependencies:
+ "@aws-sdk/types" "3.523.0"
+ "@aws-sdk/util-endpoints" "3.525.0"
+ "@smithy/protocol-http" "^3.2.1"
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@aws-sdk/region-config-resolver@3.525.0":
+ version "3.525.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.525.0.tgz#ebd7edd0059857f59ed605c37cf5752542cf8914"
+ integrity sha512-8kFqXk6UyKgTMi7N7QlhA6qM4pGPWbiUXqEY2RgUWngtxqNFGeM9JTexZeuavQI+qLLe09VPShPNX71fEDcM6w==
+ dependencies:
+ "@aws-sdk/types" "3.523.0"
+ "@smithy/node-config-provider" "^2.2.4"
+ "@smithy/types" "^2.10.1"
+ "@smithy/util-config-provider" "^2.2.1"
+ "@smithy/util-middleware" "^2.1.3"
+ tslib "^2.5.0"
+
+"@aws-sdk/s3-request-presigner@^3.17.0", "@aws-sdk/s3-request-presigner@^3.49.0":
+ version "3.525.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.525.0.tgz#8c56b44431bfea57946e6e6c479d7dd371b357aa"
+ integrity sha512-EllqWqzzzLs8QgUENgOF8qlSuZI6QiPypazSVbCuaAR5B6+s6E8XuBPlX99bV28pGbmtG06d/qqwu2pzXORbBg==
+ dependencies:
+ "@aws-sdk/signature-v4-multi-region" "3.525.0"
+ "@aws-sdk/types" "3.523.0"
+ "@aws-sdk/util-format-url" "3.523.0"
+ "@smithy/middleware-endpoint" "^2.4.4"
+ "@smithy/protocol-http" "^3.2.1"
+ "@smithy/smithy-client" "^2.4.2"
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@aws-sdk/signature-v4-multi-region@3.525.0":
+ version "3.525.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.525.0.tgz#b9b7e1079b0a8a1df4bb282216aa20b56d139ba5"
+ integrity sha512-j8gkdfiokaherRgokfZBl2azYBMHlegT7pOnR/3Y79TSz6G+bJeIkuNk8aUbJArr6R8nvAM1j4dt1rBM+efolQ==
+ dependencies:
+ "@aws-sdk/middleware-sdk-s3" "3.525.0"
+ "@aws-sdk/types" "3.523.0"
+ "@smithy/protocol-http" "^3.2.1"
+ "@smithy/signature-v4" "^2.1.3"
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@aws-sdk/token-providers@3.525.0":
+ version "3.525.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.525.0.tgz#370d206a06e77e29ec0f76408654b16d6612f0d2"
+ integrity sha512-puVjbxuK0Dq7PTQ2HdddHy2eQjOH8GZbump74yWJa6JVpRW84LlOcNmP+79x4Kscvz2ldWB8XDFw/pcCiSDe5A==
+ dependencies:
+ "@aws-sdk/client-sso-oidc" "3.525.0"
+ "@aws-sdk/types" "3.523.0"
+ "@smithy/property-provider" "^2.1.3"
+ "@smithy/shared-ini-file-loader" "^2.3.3"
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@aws-sdk/types@3.523.0", "@aws-sdk/types@^3.222.0":
+ version "3.523.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.523.0.tgz#2bb11390023949f31d9211212f41e245a7f03489"
+ integrity sha512-AqGIu4u+SxPiUuNBp2acCVcq80KDUFjxe6e3cMTvKWTzCbrVk1AXv0dAaJnCmdkWIha6zJDWxpIk/aL4EGhZ9A==
+ dependencies:
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@aws-sdk/util-arn-parser@3.495.0":
+ version "3.495.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.495.0.tgz#539f2d6dfef343a80324348f1f9a1b7eed2390f3"
+ integrity sha512-hwdA3XAippSEUxs7jpznwD63YYFR+LtQvlEcebPTgWR9oQgG9TfS+39PUfbnEeje1ICuOrN3lrFqFbmP9uzbMg==
+ dependencies:
+ tslib "^2.5.0"
+
+"@aws-sdk/util-endpoints@3.525.0":
+ version "3.525.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.525.0.tgz#d9f53b60e69dbe4623a4200d10be1be2ac73438f"
+ integrity sha512-DIW7WWU5tIGkeeKX6NJUyrEIdWMiqjLQG3XBzaUj+ufIENwNjdAHhlD8l2vX7Yr3JZRT6yN/84wBCj7Tw1xd1g==
+ dependencies:
+ "@aws-sdk/types" "3.523.0"
+ "@smithy/types" "^2.10.1"
+ "@smithy/util-endpoints" "^1.1.4"
+ tslib "^2.5.0"
+
+"@aws-sdk/util-format-url@3.523.0":
+ version "3.523.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/util-format-url/-/util-format-url-3.523.0.tgz#4c769d46f34dd351051d7f10c2cdd4499244219d"
+ integrity sha512-OWi+8bsEfxG4DvHkWauxyWVZMbYrezC49DbGDEu1lJgk9eqQALlyGkZHt9O8KKfyT/mdqQbR8qbpkxqYcGuHVA==
+ dependencies:
+ "@aws-sdk/types" "3.523.0"
+ "@smithy/querystring-builder" "^2.1.3"
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
"@aws-sdk/util-locate-window@^3.0.0":
- version "3.37.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.37.0.tgz#e041f411e5e6a235e5bcffacc4b7fa90f25d8d01"
- integrity sha512-NvDCfOhLLVHp27oGUUs8EVirhz91aX5gdxGS7J/sh5PF0cNN8rwaR1vSLR7BxPmJHMO7NH7i9EwiELfLfYcq6g==
- dependencies:
- tslib "^2.3.0"
-
-"@aws-sdk/util-uri-escape@3.37.0":
- version "3.37.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-uri-escape/-/util-uri-escape-3.37.0.tgz#42b8393a51dcc04f228e70d1c94c2fe38a738994"
- integrity sha512-8pKf4YJTELP5lm/CEgYw2atyJBB1RWWqFa0sZx6YJmTlOtLF5G6raUdAi4iDa2hldGt2B6IAdIIyuusT8zeU8Q==
- dependencies:
- tslib "^2.3.0"
-
-"@aws-sdk/util-uri-escape@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-uri-escape/-/util-uri-escape-3.49.0.tgz#190d7cce32ffa44e1fc6e02b0a59c65a8954bbb3"
- integrity sha512-NH7iQUYvijYZEOzZkF/QQrp8kBOA9H0Z89hR/63FDCjr1M0Cdcs1bLaFO0a0qbW9NQtoYNsMBMk7pTveDrAzTw==
- dependencies:
- tslib "^2.3.0"
-
-"@aws-sdk/util-user-agent-browser@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.40.0.tgz#d9f4f49af35895df260598a333a8b792b56e9f76"
- integrity sha512-C69sTI26bV2EprTv3DTXu9XP7kD9Wu4YVPBzqztOYArd2GDYw3w+jS8SEg3XRbjAKY/mOPZ2Thw4StjpZlWZiA==
+ version "3.495.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.495.0.tgz#9034fd8db77991b28ed20e067acdd53e8b8f824b"
+ integrity sha512-MfaPXT0kLX2tQaR90saBT9fWQq2DHqSSJRzW+MZWsmF+y5LGCOhO22ac/2o6TKSQm7h0HRc2GaADqYYYor62yg==
dependencies:
- "@aws-sdk/types" "3.40.0"
- bowser "^2.11.0"
- tslib "^2.3.0"
+ tslib "^2.5.0"
-"@aws-sdk/util-user-agent-browser@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.49.0.tgz#a45456997d4a162e967517ecd3e7ffd46e1913b5"
- integrity sha512-RR4E6WlDSu9SivPjx/Jddo87PeVg6dhRL0XGdDBpew7i8bfwqCvxQydkbWIetxucLrt9zII9QnLDQUPBue1xUw==
+"@aws-sdk/util-user-agent-browser@3.523.0":
+ version "3.523.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.523.0.tgz#77188e83f9d470ddf140fe8c5d4d51049c9d5898"
+ integrity sha512-6ZRNdGHX6+HQFqTbIA5+i8RWzxFyxsZv8D3soRfpdyWIKkzhSz8IyRKXRciwKBJDaC7OX2jzGE90wxRQft27nA==
dependencies:
- "@aws-sdk/types" "3.49.0"
+ "@aws-sdk/types" "3.523.0"
+ "@smithy/types" "^2.10.1"
bowser "^2.11.0"
- tslib "^2.3.0"
-
-"@aws-sdk/util-user-agent-node@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.40.0.tgz#76240a4ee05e409ad1267854761c53e746e9bcdf"
- integrity sha512-cjIzd0hRZFTTh7iLJD6Bciu++Em1iaM1clyG02xRl0JD5DEtDSR1zO02uu+AeM7GSLGOxIvwOkK2j8ySPAOmBA==
- dependencies:
- "@aws-sdk/node-config-provider" "3.40.0"
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/util-user-agent-node@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.49.0.tgz#cb8b3a834cf53856b01617e4ce36f75c2abd361e"
- integrity sha512-ixUkF6kcDfsWO0kivyOKAnBITJm7InGa04ALbgAfuuE7RU1cVkXVMFIn5vux7QkziK7+JwozM9SNPIwNukElDw==
- dependencies:
- "@aws-sdk/node-config-provider" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/util-utf8-browser@3.37.0", "@aws-sdk/util-utf8-browser@^3.0.0":
- version "3.37.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.37.0.tgz#d896899f4c475ceeaf8b77c5d7cdc453e5fe6b83"
- integrity sha512-tuiOxzfqet1kKGYzlgpMGfhr64AHJnYsFx2jZiH/O6Yq8XQg43ryjQlbJlim/K/XHGNzY0R+nabeJg34q3Ua1g==
- dependencies:
- tslib "^2.3.0"
+ tslib "^2.5.0"
-"@aws-sdk/util-utf8-browser@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.49.0.tgz#d98f19098cc8072214237e749e64d41bb88c598d"
- integrity sha512-u9ZgAiTWX9yZFQ/ptlnVpYJ/rXF7aE2Wagar1IjhZrnxXbpVJvcX1EeRayxI1P5AAp2y2fiEKHZzX9ugTwOcEg==
+"@aws-sdk/util-user-agent-node@3.525.0":
+ version "3.525.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.525.0.tgz#aa96c28bad8360d2a350c30c3c209c35f99ac5ee"
+ integrity sha512-88Wjt4efyUSBGcyIuh1dvoMqY1k15jpJc5A/3yi67clBQEFsu9QCodQCQPqmRjV3VRcMtBOk+jeCTiUzTY5dRQ==
dependencies:
- tslib "^2.3.0"
-
-"@aws-sdk/util-utf8-node@3.37.0":
- version "3.37.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-node/-/util-utf8-node-3.37.0.tgz#300912cce55d72c18213190237d6ab943e17b5bf"
- integrity sha512-fUAgd7UTCULL36j9/vnXHxVhxvswnq23mYgTCIT8NQ7wHN30q2a89ym1e9DwGeQkJEBOkOcKLn6nsMsN7YQMDQ==
- dependencies:
- "@aws-sdk/util-buffer-from" "3.37.0"
- tslib "^2.3.0"
-
-"@aws-sdk/util-utf8-node@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-node/-/util-utf8-node-3.49.0.tgz#f1ae484e949de248278cdfa11df09287129a124e"
- integrity sha512-QTF5b5OT2y6xsQl8sDiiXqg2n/VtgqFA+tP3WMooOSFd/ZFBbT6HoiSHXHMeTjpB/L9ZT+eUaCoBz8Jq09lBDg==
- dependencies:
- "@aws-sdk/util-buffer-from" "3.49.0"
- tslib "^2.3.0"
-
-"@aws-sdk/util-waiter@3.40.0":
- version "3.40.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-waiter/-/util-waiter-3.40.0.tgz#91c537efc9d0129fb24d9bdab86acbfd797ddf1f"
- integrity sha512-jdxwNEZdID49ZvyAnxaeNm5w2moIfMLOwj/q6TxKlxYoXMs16FQWkhyfGue0vEASzchS49ewbyt+KBqpT31Ebg==
- dependencies:
- "@aws-sdk/abort-controller" "3.40.0"
- "@aws-sdk/types" "3.40.0"
- tslib "^2.3.0"
-
-"@aws-sdk/util-waiter@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-waiter/-/util-waiter-3.49.0.tgz#328075567b246a2b584dcfefe3a135344e3e475f"
- integrity sha512-eKrKOLcIhjA/MyjIfwgLL6ZUfGYf6VxBXryuRf8CmJKAo71ZO6ipAsy1X3uYrfwQQBMKV4VZu48BJx5PUBM7GA==
- dependencies:
- "@aws-sdk/abort-controller" "3.49.0"
- "@aws-sdk/types" "3.49.0"
- tslib "^2.3.0"
+ "@aws-sdk/types" "3.523.0"
+ "@smithy/node-config-provider" "^2.2.4"
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
-"@aws-sdk/xml-builder@3.37.0":
- version "3.37.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.37.0.tgz#17aceb34188a58b5c25b49344f66135b0fe95f79"
- integrity sha512-Vf0f4ZQ+IBo/l9wUaTOXLqqQO9b/Ll5yPbg+EhHx8zlHbTHIm89ettkVCGyT/taGagC1X+ZeTK9maX6ymEOBow==
+"@aws-sdk/util-utf8-browser@^3.0.0":
+ version "3.259.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff"
+ integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==
dependencies:
- tslib "^2.3.0"
+ tslib "^2.3.1"
-"@aws-sdk/xml-builder@3.49.0":
- version "3.49.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.49.0.tgz#809eec53a2e30293c510451a06c99703b5297bcb"
- integrity sha512-eU5sIZRWq8pNmw++RfpFI8396UtDW8JxYLcKfJLGQC/qDhwCo+sNPKydXFmDrXTIt/khs3K0qx/vZ5V76irc2Q==
+"@aws-sdk/xml-builder@3.523.0":
+ version "3.523.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.523.0.tgz#6abdaf5716f6c7153c328bbbd499345fae755dce"
+ integrity sha512-wfvyVymj2TUw7SuDor9IuFcAzJZvWRBZotvY/wQJOlYa3UP3Oezzecy64N4FWfBJEsZdrTN+HOZFl+IzTWWnUA==
dependencies:
- tslib "^2.3.0"
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
"@azure/abort-controller@^1.0.0":
version "1.0.4"
@@ -4979,6 +3998,11 @@
tiny-invariant "^1.3.1"
valid-url "^1.0.9"
+"@cubejs-backend/apla-clickhouse@^1.7", "@cubejs-backend/apla-clickhouse@^1.7.0":
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/@cubejs-backend/apla-clickhouse/-/apla-clickhouse-1.7.0.tgz#6359f46c56492d1704d18be0210c7546fdac5f5e"
+ integrity sha512-qwXapTC/qosA6RprElRjnl8gmlDQaxtJPtbgcdjyNvkmiyao1HI+w5QkjHWCiVm6aTzE0gjFr6/2y87TZ9fojg==
+
"@cubejs-backend/dotenv@^9.0.2":
version "9.0.2"
resolved "https://registry.yarnpkg.com/@cubejs-backend/dotenv/-/dotenv-9.0.2.tgz#c3679091b702f0fd38de120c5a63943fcdc0dcbf"
@@ -8646,6 +7670,470 @@
dependencies:
"@sinonjs/commons" "^1.7.0"
+"@smithy/abort-controller@^2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-2.1.3.tgz#19997b701b36294c8d27bbc5e59167da2c719fae"
+ integrity sha512-c2aYH2Wu1RVE3rLlVgg2kQOBJGM0WbjReQi5DnPTm2Zb7F0gk7J2aeQeaX2u/lQZoHl6gv8Oac7mt9alU3+f4A==
+ dependencies:
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@smithy/chunked-blob-reader-native@^2.1.1":
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.1.1.tgz#6b98479c8f6ea94832dd6a6e5ca78969a44eafe1"
+ integrity sha512-zNW+43dltfNMUrBEYLMWgI8lQr0uhtTcUyxkgC9EP4j17WREzgSFMPUFVrVV6Rc2+QtWERYjb4tzZnQGa7R9fQ==
+ dependencies:
+ "@smithy/util-base64" "^2.1.1"
+ tslib "^2.5.0"
+
+"@smithy/chunked-blob-reader@^2.1.1":
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.1.1.tgz#997faba8e197e0cb9824dad30ae581466e386e57"
+ integrity sha512-NjNFCKxC4jVvn+lUr3Yo4/PmUJj3tbyqH6GNHueyTGS5Q27vlEJ1MkNhUDV8QGxJI7Bodnc2pD18lU2zRfhHlQ==
+ dependencies:
+ tslib "^2.5.0"
+
+"@smithy/config-resolver@^2.1.4":
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.1.4.tgz#cb870f82494b10c223c60ba4298b438d9185b4be"
+ integrity sha512-AW2WUZmBAzgO3V3ovKtsUbI3aBNMeQKFDumoqkNxaVDWF/xfnxAWqBKDr/NuG7c06N2Rm4xeZLPiJH/d+na0HA==
+ dependencies:
+ "@smithy/node-config-provider" "^2.2.4"
+ "@smithy/types" "^2.10.1"
+ "@smithy/util-config-provider" "^2.2.1"
+ "@smithy/util-middleware" "^2.1.3"
+ tslib "^2.5.0"
+
+"@smithy/core@^1.3.5":
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/@smithy/core/-/core-1.3.5.tgz#7523da67b49e165e09ee8019601bea410bf92c38"
+ integrity sha512-Rrc+e2Jj6Gu7Xbn0jvrzZlSiP2CZocIOfZ9aNUA82+1sa6GBnxqL9+iZ9EKHeD9aqD1nU8EK4+oN2EiFpSv7Yw==
+ dependencies:
+ "@smithy/middleware-endpoint" "^2.4.4"
+ "@smithy/middleware-retry" "^2.1.4"
+ "@smithy/middleware-serde" "^2.1.3"
+ "@smithy/protocol-http" "^3.2.1"
+ "@smithy/smithy-client" "^2.4.2"
+ "@smithy/types" "^2.10.1"
+ "@smithy/util-middleware" "^2.1.3"
+ tslib "^2.5.0"
+
+"@smithy/credential-provider-imds@^2.2.3", "@smithy/credential-provider-imds@^2.2.4":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.2.4.tgz#7b237ad8623b782578335b61a616c5463b13451b"
+ integrity sha512-DdatjmBZQnhGe1FhI8gO98f7NmvQFSDiZTwC3WMvLTCKQUY+Y1SVkhJqIuLu50Eb7pTheoXQmK+hKYUgpUWsNA==
+ dependencies:
+ "@smithy/node-config-provider" "^2.2.4"
+ "@smithy/property-provider" "^2.1.3"
+ "@smithy/types" "^2.10.1"
+ "@smithy/url-parser" "^2.1.3"
+ tslib "^2.5.0"
+
+"@smithy/eventstream-codec@^2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-2.1.3.tgz#6be114d3c4d94f3bfd2e32cb258851baa6129acf"
+ integrity sha512-rGlCVuwSDv6qfKH4/lRxFjcZQnIE0LZ3D4lkMHg7ZSltK9rA74r0VuGSvWVQ4N/d70VZPaniFhp4Z14QYZsa+A==
+ dependencies:
+ "@aws-crypto/crc32" "3.0.0"
+ "@smithy/types" "^2.10.1"
+ "@smithy/util-hex-encoding" "^2.1.1"
+ tslib "^2.5.0"
+
+"@smithy/eventstream-serde-browser@^2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.1.3.tgz#97427465aa277e66d3dcacab5f2bae890949a890"
+ integrity sha512-qAgKbZ9m2oBfSyJWWurX/MvQFRPrYypj79cDSleEgDwBoez6Tfd+FTpu2L/j3ZeC3mDlDHIKWksoeaXZpLLAHw==
+ dependencies:
+ "@smithy/eventstream-serde-universal" "^2.1.3"
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@smithy/eventstream-serde-config-resolver@^2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.1.3.tgz#09487fd5e3c22c7e53ff74d14de3924ab16b8751"
+ integrity sha512-48rvsNv/MgAFCxOE0qwR7ZwKhaEdDoTxqH5HM+T6SDxICmPGb7gEuQzjTxQhcieCPgqyXeZFW8cU0QJxdowuIg==
+ dependencies:
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@smithy/eventstream-serde-node@^2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.1.3.tgz#f51bf8e4eba9d1aaa995200a36c3d3fb5a29734d"
+ integrity sha512-RPJWWDhj8isk3NtGfm3Xt1WdHyX9ZE42V+m1nLU1I0zZ1hEol/oawHsTnhva/VR5bn+bJ2zscx+BYr0cEPRtmg==
+ dependencies:
+ "@smithy/eventstream-serde-universal" "^2.1.3"
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@smithy/eventstream-serde-universal@^2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.1.3.tgz#79ab2e313c4e6621d8d9ecb98e0c826e9d8d21da"
+ integrity sha512-ssvSMk1LX2jRhiOVgVLGfNJXdB8SvyjieKcJDHq698Gi3LOog6g/+l7ggrN+hZxyjUiDF4cUxgKaZTBUghzhLw==
+ dependencies:
+ "@smithy/eventstream-codec" "^2.1.3"
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@smithy/fetch-http-handler@^2.4.3":
+ version "2.4.3"
+ resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.4.3.tgz#568bd2031af242fc9172e41dfb364d36d48631d1"
+ integrity sha512-Fn/KYJFo6L5I4YPG8WQb2hOmExgRmNpVH5IK2zU3JKrY5FKW7y9ar5e0BexiIC9DhSKqKX+HeWq/Y18fq7Dkpw==
+ dependencies:
+ "@smithy/protocol-http" "^3.2.1"
+ "@smithy/querystring-builder" "^2.1.3"
+ "@smithy/types" "^2.10.1"
+ "@smithy/util-base64" "^2.1.1"
+ tslib "^2.5.0"
+
+"@smithy/hash-blob-browser@^2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-2.1.3.tgz#f63b391a8bedf640ad120d576c485a10f16c280b"
+ integrity sha512-sHLTM5xQYw5Wxz07DFo+eh1PVC6P5+kazQRF1k5nsvOhZG5VnkIy4LZ7N0ZNWqJx16g9otGd5MvqUOpb3WWtgA==
+ dependencies:
+ "@smithy/chunked-blob-reader" "^2.1.1"
+ "@smithy/chunked-blob-reader-native" "^2.1.1"
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@smithy/hash-node@^2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-2.1.3.tgz#649b056966e1cba9f738236cbf4f05e8e9820deb"
+ integrity sha512-FsAPCUj7VNJIdHbSxMd5uiZiF20G2zdSDgrgrDrHqIs/VMxK85Vqk5kMVNNDMCZmMezp6UKnac0B4nAyx7HJ9g==
+ dependencies:
+ "@smithy/types" "^2.10.1"
+ "@smithy/util-buffer-from" "^2.1.1"
+ "@smithy/util-utf8" "^2.1.1"
+ tslib "^2.5.0"
+
+"@smithy/hash-stream-node@^2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-2.1.3.tgz#c61f5d10cc236cef69af1278a552a42162bc254c"
+ integrity sha512-fWpUx2ca/u5lcD5RhNJogEG5FD7H0RDDpYmfQgxFqIUv3Ow7bZsapMukh8uzQPVO8R+NDAvSdxmgXoy4Hz8sFw==
+ dependencies:
+ "@smithy/types" "^2.10.1"
+ "@smithy/util-utf8" "^2.1.1"
+ tslib "^2.5.0"
+
+"@smithy/invalid-dependency@^2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-2.1.3.tgz#0f0895d3db2e03493f933e10c27551f059b92b6c"
+ integrity sha512-wkra7d/G4CbngV4xsjYyAYOvdAhahQje/WymuQdVEnXFExJopEu7fbL5AEAlBPgWHXwu94VnCSG00gVzRfExyg==
+ dependencies:
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@smithy/is-array-buffer@^2.1.1":
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-2.1.1.tgz#07b4c77ae67ed58a84400c76edd482271f9f957b"
+ integrity sha512-xozSQrcUinPpNPNPds4S7z/FakDTh1MZWtRP/2vQtYB/u3HYrX2UXuZs+VhaKBd6Vc7g2XPr2ZtwGBNDN6fNKQ==
+ dependencies:
+ tslib "^2.5.0"
+
+"@smithy/md5-js@^2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-2.1.3.tgz#edf6a570a06fe84a126db90e335d6a5a12b25c69"
+ integrity sha512-zmn3M6+mP4IJlSmXBN9964AztgkIO8b5lRzAgdJn9AdCFwA6xLkcW2B6uEnpBjvotxtQMmXTUP19tIO7NmFPpw==
+ dependencies:
+ "@smithy/types" "^2.10.1"
+ "@smithy/util-utf8" "^2.1.1"
+ tslib "^2.5.0"
+
+"@smithy/middleware-content-length@^2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-2.1.3.tgz#243d74789a311366948dec5a85b03146ac580c51"
+ integrity sha512-aJduhkC+dcXxdnv5ZpM3uMmtGmVFKx412R1gbeykS5HXDmRU6oSsyy2SoHENCkfOGKAQOjVE2WVqDJibC0d21g==
+ dependencies:
+ "@smithy/protocol-http" "^3.2.1"
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@smithy/middleware-endpoint@^2.4.4":
+ version "2.4.4"
+ resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.4.4.tgz#aa42dc8340a8511a8c66d597cf774e27f0109dd9"
+ integrity sha512-4yjHyHK2Jul4JUDBo2sTsWY9UshYUnXeb/TAK/MTaPEb8XQvDmpwSFnfIRDU45RY1a6iC9LCnmJNg/yHyfxqkw==
+ dependencies:
+ "@smithy/middleware-serde" "^2.1.3"
+ "@smithy/node-config-provider" "^2.2.4"
+ "@smithy/shared-ini-file-loader" "^2.3.4"
+ "@smithy/types" "^2.10.1"
+ "@smithy/url-parser" "^2.1.3"
+ "@smithy/util-middleware" "^2.1.3"
+ tslib "^2.5.0"
+
+"@smithy/middleware-retry@^2.1.4":
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.1.4.tgz#a468c64b0186b8edeef444ee9249a88675f3fe23"
+ integrity sha512-Cyolv9YckZTPli1EkkaS39UklonxMd08VskiuMhURDjC0HHa/AD6aK/YoD21CHv9s0QLg0WMLvk9YeLTKkXaFQ==
+ dependencies:
+ "@smithy/node-config-provider" "^2.2.4"
+ "@smithy/protocol-http" "^3.2.1"
+ "@smithy/service-error-classification" "^2.1.3"
+ "@smithy/smithy-client" "^2.4.2"
+ "@smithy/types" "^2.10.1"
+ "@smithy/util-middleware" "^2.1.3"
+ "@smithy/util-retry" "^2.1.3"
+ tslib "^2.5.0"
+ uuid "^8.3.2"
+
+"@smithy/middleware-serde@^2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-2.1.3.tgz#dbb3c4257b66fdab3019809106b02f953bd42a44"
+ integrity sha512-s76LId+TwASrHhUa9QS4k/zeXDUAuNuddKklQzRgumbzge5BftVXHXIqL4wQxKGLocPwfgAOXWx+HdWhQk9hTg==
+ dependencies:
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@smithy/middleware-stack@^2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-2.1.3.tgz#7cf77e6ad5c885bc0b8b0857e9349017d530f7d1"
+ integrity sha512-opMFufVQgvBSld/b7mD7OOEBxF6STyraVr1xel1j0abVILM8ALJvRoFbqSWHGmaDlRGIiV9Q5cGbWi0sdiEaLQ==
+ dependencies:
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@smithy/node-config-provider@^2.2.4":
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.2.4.tgz#6c2406a47c4ece45f158a282bb148a6be7867817"
+ integrity sha512-nqazHCp8r4KHSFhRQ+T0VEkeqvA0U+RhehBSr1gunUuNW3X7j0uDrWBxB2gE9eutzy6kE3Y7L+Dov/UXT871vg==
+ dependencies:
+ "@smithy/property-provider" "^2.1.3"
+ "@smithy/shared-ini-file-loader" "^2.3.4"
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@smithy/node-http-handler@^2.4.1":
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-2.4.1.tgz#08409108460fcfaa9068f78e1ef655d7af952fef"
+ integrity sha512-HCkb94soYhJMxPCa61wGKgmeKpJ3Gftx1XD6bcWEB2wMV1L9/SkQu/6/ysKBnbOzWRE01FGzwrTxucHypZ8rdg==
+ dependencies:
+ "@smithy/abort-controller" "^2.1.3"
+ "@smithy/protocol-http" "^3.2.1"
+ "@smithy/querystring-builder" "^2.1.3"
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@smithy/property-provider@^2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.1.3.tgz#faaa9b7f605725168493e74600a74beca1b059fb"
+ integrity sha512-bMz3se+ySKWNrgm7eIiQMa2HO/0fl2D0HvLAdg9pTMcpgp4SqOAh6bz7Ik6y7uQqSrk4rLjIKgbQ6yzYgGehCQ==
+ dependencies:
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@smithy/protocol-http@^3.2.1":
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-3.2.1.tgz#946fcd076525f8208d659fbc70e2a32d21ed1291"
+ integrity sha512-KLrQkEw4yJCeAmAH7hctE8g9KwA7+H2nSJwxgwIxchbp/L0B5exTdOQi9D5HinPLlothoervGmhpYKelZ6AxIA==
+ dependencies:
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@smithy/querystring-builder@^2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-2.1.3.tgz#e64e126f565b2aae6e9abd1bebc9aa0839842e8d"
+ integrity sha512-kFD3PnNqKELe6m9GRHQw/ftFFSZpnSeQD4qvgDB6BQN6hREHELSosVFUMPN4M3MDKN2jAwk35vXHLoDrNfKu0A==
+ dependencies:
+ "@smithy/types" "^2.10.1"
+ "@smithy/util-uri-escape" "^2.1.1"
+ tslib "^2.5.0"
+
+"@smithy/querystring-parser@^2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-2.1.3.tgz#2786dfa36ac6c7a691eb651339fbcaf160891e69"
+ integrity sha512-3+CWJoAqcBMR+yvz6D+Fc5VdoGFtfenW6wqSWATWajrRMGVwJGPT3Vy2eb2bnMktJc4HU4bpjeovFa566P3knQ==
+ dependencies:
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@smithy/service-error-classification@^2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-2.1.3.tgz#13dd43ad56576e2b1b7c5a1581affdb9e34dc8ed"
+ integrity sha512-iUrpSsem97bbXHHT/v3s7vaq8IIeMo6P6cXdeYHrx0wOJpMeBGQF7CB0mbJSiTm3//iq3L55JiEm8rA7CTVI8A==
+ dependencies:
+ "@smithy/types" "^2.10.1"
+
+"@smithy/shared-ini-file-loader@^2.3.3", "@smithy/shared-ini-file-loader@^2.3.4":
+ version "2.3.4"
+ resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.3.4.tgz#2357bd9dfbb67a951ccd06ca9c872aa845fad888"
+ integrity sha512-CiZmPg9GeDKbKmJGEFvJBsJcFnh0AQRzOtQAzj1XEa8N/0/uSN/v1LYzgO7ry8hhO8+9KB7+DhSW0weqBra4Aw==
+ dependencies:
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@smithy/signature-v4@^2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-2.1.3.tgz#ff6b812ce562be97ce182376aeb22e558b64776b"
+ integrity sha512-Jq4iPPdCmJojZTsPePn4r1ULShh6ONkokLuxp1Lnk4Sq7r7rJp4HlA1LbPBq4bD64TIzQezIpr1X+eh5NYkNxw==
+ dependencies:
+ "@smithy/eventstream-codec" "^2.1.3"
+ "@smithy/is-array-buffer" "^2.1.1"
+ "@smithy/types" "^2.10.1"
+ "@smithy/util-hex-encoding" "^2.1.1"
+ "@smithy/util-middleware" "^2.1.3"
+ "@smithy/util-uri-escape" "^2.1.1"
+ "@smithy/util-utf8" "^2.1.1"
+ tslib "^2.5.0"
+
+"@smithy/smithy-client@^2.4.2":
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-2.4.2.tgz#79e960c8761ae7dc06f592d2691419706745aab7"
+ integrity sha512-ntAFYN51zu3N3mCd95YFcFi/8rmvm//uX+HnK24CRbI6k5Rjackn0JhgKz5zOx/tbNvOpgQIwhSX+1EvEsBLbA==
+ dependencies:
+ "@smithy/middleware-endpoint" "^2.4.4"
+ "@smithy/middleware-stack" "^2.1.3"
+ "@smithy/protocol-http" "^3.2.1"
+ "@smithy/types" "^2.10.1"
+ "@smithy/util-stream" "^2.1.3"
+ tslib "^2.5.0"
+
+"@smithy/types@^2.10.1":
+ version "2.10.1"
+ resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.10.1.tgz#f2a923fd080447ad2ca19bfd8a77abf15be0b8e8"
+ integrity sha512-hjQO+4ru4cQ58FluQvKKiyMsFg0A6iRpGm2kqdH8fniyNd2WyanoOsYJfMX/IFLuLxEoW6gnRkNZy1y6fUUhtA==
+ dependencies:
+ tslib "^2.5.0"
+
+"@smithy/url-parser@^2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-2.1.3.tgz#f8a7176fb6fdd38a960d546606576541ae6eb7c0"
+ integrity sha512-X1NRA4WzK/ihgyzTpeGvI9Wn45y8HmqF4AZ/FazwAv8V203Ex+4lXqcYI70naX9ETqbqKVzFk88W6WJJzCggTQ==
+ dependencies:
+ "@smithy/querystring-parser" "^2.1.3"
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@smithy/util-base64@^2.1.1":
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-2.1.1.tgz#af729085cc9d92ebd54a5d2c5d0aa5a0c31f83bf"
+ integrity sha512-UfHVpY7qfF/MrgndI5PexSKVTxSZIdz9InghTFa49QOvuu9I52zLPLUHXvHpNuMb1iD2vmc6R+zbv/bdMipR/g==
+ dependencies:
+ "@smithy/util-buffer-from" "^2.1.1"
+ tslib "^2.5.0"
+
+"@smithy/util-body-length-browser@^2.1.1":
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-2.1.1.tgz#1fc77072768013ae646415eedb9833cd252d055d"
+ integrity sha512-ekOGBLvs1VS2d1zM2ER4JEeBWAvIOUKeaFch29UjjJsxmZ/f0L3K3x0dEETgh3Q9bkZNHgT+rkdl/J/VUqSRag==
+ dependencies:
+ tslib "^2.5.0"
+
+"@smithy/util-body-length-node@^2.2.1":
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-2.2.1.tgz#a6f5c9911f1c3e23efb340d5ce7a590b62f2056e"
+ integrity sha512-/ggJG+ta3IDtpNVq4ktmEUtOkH1LW64RHB5B0hcr5ZaWBmo96UX2cIOVbjCqqDickTXqBWZ4ZO0APuaPrD7Abg==
+ dependencies:
+ tslib "^2.5.0"
+
+"@smithy/util-buffer-from@^2.1.1":
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-2.1.1.tgz#f9346bf8b23c5ba6f6bdb61dd9db779441ba8d08"
+ integrity sha512-clhNjbyfqIv9Md2Mg6FffGVrJxw7bgK7s3Iax36xnfVj6cg0fUG7I4RH0XgXJF8bxi+saY5HR21g2UPKSxVCXg==
+ dependencies:
+ "@smithy/is-array-buffer" "^2.1.1"
+ tslib "^2.5.0"
+
+"@smithy/util-config-provider@^2.2.1":
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-2.2.1.tgz#aea0a80236d6cedaee60473802899cff4a8cc0ba"
+ integrity sha512-50VL/tx9oYYcjJn/qKqNy7sCtpD0+s8XEBamIFo4mFFTclKMNp+rsnymD796uybjiIquB7VCB/DeafduL0y2kw==
+ dependencies:
+ tslib "^2.5.0"
+
+"@smithy/util-defaults-mode-browser@^2.1.4":
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.1.4.tgz#e3e85f44480bf8c83a2e22247dd5a7a820ceb655"
+ integrity sha512-J6XAVY+/g7jf03QMnvqPyU+8jqGrrtXoKWFVOS+n1sz0Lg8HjHJ1ANqaDN+KTTKZRZlvG8nU5ZrJOUL6VdwgcQ==
+ dependencies:
+ "@smithy/property-provider" "^2.1.3"
+ "@smithy/smithy-client" "^2.4.2"
+ "@smithy/types" "^2.10.1"
+ bowser "^2.11.0"
+ tslib "^2.5.0"
+
+"@smithy/util-defaults-mode-node@^2.2.3":
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.2.3.tgz#23f876eb107ef066c042b4dfdeef637a7c330bb5"
+ integrity sha512-ttUISrv1uVOjTlDa3nznX33f0pthoUlP+4grhTvOzcLhzArx8qHB94/untGACOG3nlf8vU20nI2iWImfzoLkYA==
+ dependencies:
+ "@smithy/config-resolver" "^2.1.4"
+ "@smithy/credential-provider-imds" "^2.2.4"
+ "@smithy/node-config-provider" "^2.2.4"
+ "@smithy/property-provider" "^2.1.3"
+ "@smithy/smithy-client" "^2.4.2"
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@smithy/util-endpoints@^1.1.4":
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-1.1.4.tgz#4a75de883ac59d042ae5426c9a7d8e274d047980"
+ integrity sha512-/qAeHmK5l4yQ4/bCIJ9p49wDe9rwWtOzhPHblu386fwPNT3pxmodgcs9jDCV52yK9b4rB8o9Sj31P/7Vzka1cg==
+ dependencies:
+ "@smithy/node-config-provider" "^2.2.4"
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@smithy/util-hex-encoding@^2.1.1":
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.1.1.tgz#978252b9fb242e0a59bae4ead491210688e0d15f"
+ integrity sha512-3UNdP2pkYUUBGEXzQI9ODTDK+Tcu1BlCyDBaRHwyxhA+8xLP8agEKQq4MGmpjqb4VQAjq9TwlCQX0kP6XDKYLg==
+ dependencies:
+ tslib "^2.5.0"
+
+"@smithy/util-middleware@^2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-2.1.3.tgz#6169d7b1088d2bb29d0129c9146c856a61026e98"
+ integrity sha512-/+2fm7AZ2ozl5h8wM++ZP0ovE9/tiUUAHIbCfGfb3Zd3+Dyk17WODPKXBeJ/TnK5U+x743QmA0xHzlSm8I/qhw==
+ dependencies:
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@smithy/util-retry@^2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-2.1.3.tgz#715a5c02c194ae56b9be49fda510b362fb075af3"
+ integrity sha512-Kbvd+GEMuozbNUU3B89mb99tbufwREcyx2BOX0X2+qHjq6Gvsah8xSDDgxISDwcOHoDqUWO425F0Uc/QIRhYkg==
+ dependencies:
+ "@smithy/service-error-classification" "^2.1.3"
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
+"@smithy/util-stream@^2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-2.1.3.tgz#fd0de1d8dcb0015a95735df7229b4a1ded06b50e"
+ integrity sha512-HvpEQbP8raTy9n86ZfXiAkf3ezp1c3qeeO//zGqwZdrfaoOpGKQgF2Sv1IqZp7wjhna7pvczWaGUHjcOPuQwKw==
+ dependencies:
+ "@smithy/fetch-http-handler" "^2.4.3"
+ "@smithy/node-http-handler" "^2.4.1"
+ "@smithy/types" "^2.10.1"
+ "@smithy/util-base64" "^2.1.1"
+ "@smithy/util-buffer-from" "^2.1.1"
+ "@smithy/util-hex-encoding" "^2.1.1"
+ "@smithy/util-utf8" "^2.1.1"
+ tslib "^2.5.0"
+
+"@smithy/util-uri-escape@^2.1.1":
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-2.1.1.tgz#7eedc93b73ecda68f12fb9cf92e9fa0fbbed4d83"
+ integrity sha512-saVzI1h6iRBUVSqtnlOnc9ssU09ypo7n+shdQ8hBTZno/9rZ3AuRYvoHInV57VF7Qn7B+pFJG7qTzFiHxWlWBw==
+ dependencies:
+ tslib "^2.5.0"
+
+"@smithy/util-utf8@^2.1.1":
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.1.1.tgz#690018dd28f47f014114497735e51417ea5900a6"
+ integrity sha512-BqTpzYEcUMDwAKr7/mVRUtHDhs6ZoXDi9NypMvMfOr/+u1NW7JgqodPDECiiLboEm6bobcPcECxzjtQh865e9A==
+ dependencies:
+ "@smithy/util-buffer-from" "^2.1.1"
+ tslib "^2.5.0"
+
+"@smithy/util-waiter@^2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-2.1.3.tgz#b3e4c0374e5ee46ecc9eae7812fa870d7b192897"
+ integrity sha512-3R0wNFAQQoH9e4m+bVLDYNOst2qNxtxFgq03WoNHWTBOqQT3jFnOBRj1W51Rf563xDA5kwqjziksxn6RKkHB+Q==
+ dependencies:
+ "@smithy/abort-controller" "^2.1.3"
+ "@smithy/types" "^2.10.1"
+ tslib "^2.5.0"
+
"@soda/friendly-errors-webpack-plugin@^1.8.0":
version "1.8.1"
resolved "https://registry.yarnpkg.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz#4d4fbb1108993aaa362116247c3d18188a2c6c85"
@@ -15489,7 +14977,7 @@ ent@^2.2.0:
resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d"
integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0=
-entities@2.2.0, entities@^2.0.0:
+entities@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
@@ -16628,10 +16116,12 @@ fast-text-encoding@^1.0.0, fast-text-encoding@^1.0.3:
resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz#ec02ac8e01ab8a319af182dae2681213cfe9ce53"
integrity sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==
-fast-xml-parser@3.19.0:
- version "3.19.0"
- resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz#cb637ec3f3999f51406dd8ff0e6fc4d83e520d01"
- integrity sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg==
+fast-xml-parser@4.2.5:
+ version "4.2.5"
+ resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz#a6747a09296a6cb34f2ae634019bf1738f3b421f"
+ integrity sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==
+ dependencies:
+ strnum "^1.0.5"
fast-xml-parser@^4.2.2, fast-xml-parser@^4.2.5:
version "4.3.1"
@@ -28933,7 +28423,7 @@ tslib@^2, tslib@^2.0.0, tslib@^2.0.3, tslib@^2.2.0, tslib@^2.3.0, tslib@^2.3.1,
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01"
integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==
-tslib@^2.0.1, tslib@^2.4.0:
+tslib@^2.0.1, tslib@^2.4.0, tslib@^2.5.0:
version "2.6.2"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
@@ -29480,7 +28970,7 @@ uuid@^3.1.0, uuid@^3.3.2:
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
-uuid@^9.0.0:
+uuid@^9.0.0, uuid@^9.0.1:
version "9.0.1"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30"
integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==