sqlglot 27.6.0__tar.gz → 27.8.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sqlglot-27.6.0 → sqlglot-27.8.0}/CHANGELOG.md +156 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/PKG-INFO +2 -2
- {sqlglot-27.6.0 → sqlglot-27.8.0}/README.md +1 -1
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/_version.py +16 -3
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/bigquery.py +57 -8
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/clickhouse.py +27 -8
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/databricks.py +5 -1
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/dialect.py +82 -25
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/doris.py +43 -2
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/dremio.py +53 -11
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/duckdb.py +39 -43
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/exasol.py +30 -29
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/mysql.py +0 -15
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/presto.py +0 -2
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/singlestore.py +121 -1
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/snowflake.py +1 -1
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/spark.py +7 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/teradata.py +58 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/trino.py +1 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/expressions.py +86 -4
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/generator.py +27 -3
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/jsonpath.py +10 -3
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/optimizer/annotate_types.py +4 -1
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/optimizer/merge_subqueries.py +4 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/optimizer/qualify_tables.py +0 -8
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/parser.py +44 -6
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot.egg-info/PKG-INFO +2 -2
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/dialects/test_bigquery.py +27 -23
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/dialects/test_clickhouse.py +8 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/dialects/test_databricks.py +13 -1
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/dialects/test_dialect.py +272 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/dialects/test_doris.py +94 -1
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/dialects/test_dremio.py +40 -6
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/dialects/test_duckdb.py +16 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/dialects/test_exasol.py +29 -22
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/dialects/test_presto.py +0 -1
- sqlglot-27.8.0/tests/dialects/test_singlestore.py +195 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/dialects/test_snowflake.py +40 -2
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/dialects/test_teradata.py +35 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/dialects/test_trino.py +16 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/dialects/test_tsql.py +7 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/annotate_functions.sql +150 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/merge_subqueries.sql +9 -2
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/qualify_columns.sql +15 -2
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/test_optimizer.py +2 -1
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/test_parser.py +1 -0
- sqlglot-27.6.0/tests/dialects/test_singlestore.py +0 -75
- {sqlglot-27.6.0 → sqlglot-27.8.0}/.gitignore +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/.gitpod.yml +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/.pre-commit-config.yaml +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/CONTRIBUTING.md +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/LICENSE +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/MANIFEST.in +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/Makefile +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/pyproject.toml +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/setup.cfg +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/setup.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/__init__.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/__main__.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/_typing.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/__init__.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/athena.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/drill.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/druid.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/dune.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/fabric.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/hive.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/materialize.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/oracle.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/postgres.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/prql.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/redshift.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/risingwave.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/spark2.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/sqlite.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/starrocks.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/tableau.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/dialects/tsql.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/diff.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/errors.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/executor/__init__.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/executor/context.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/executor/env.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/executor/python.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/executor/table.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/helper.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/lineage.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/optimizer/__init__.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/optimizer/canonicalize.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/optimizer/eliminate_ctes.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/optimizer/eliminate_joins.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/optimizer/eliminate_subqueries.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/optimizer/isolate_table_selects.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/optimizer/normalize.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/optimizer/normalize_identifiers.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/optimizer/optimize_joins.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/optimizer/optimizer.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/optimizer/pushdown_predicates.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/optimizer/pushdown_projections.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/optimizer/qualify.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/optimizer/qualify_columns.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/optimizer/scope.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/optimizer/simplify.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/optimizer/unnest_subqueries.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/planner.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/py.typed +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/schema.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/serde.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/time.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/tokens.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/transforms.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot/trie.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot.egg-info/SOURCES.txt +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot.egg-info/dependency_links.txt +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot.egg-info/requires.txt +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot.egg-info/top_level.txt +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglot.png +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglotrs/Cargo.lock +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglotrs/Cargo.toml +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglotrs/benches/dialect_settings.json +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglotrs/benches/long.rs +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglotrs/benches/token_type_settings.json +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglotrs/benches/tokenizer_dialect_settings.json +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglotrs/benches/tokenizer_settings.json +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglotrs/pyproject.toml +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglotrs/src/lib.rs +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglotrs/src/settings.rs +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglotrs/src/token.rs +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglotrs/src/tokenizer.rs +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/sqlglotrs/src/trie.rs +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/__init__.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/dialects/__init__.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/dialects/test_athena.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/dialects/test_drill.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/dialects/test_druid.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/dialects/test_dune.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/dialects/test_fabric.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/dialects/test_hive.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/dialects/test_materialize.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/dialects/test_mysql.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/dialects/test_oracle.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/dialects/test_pipe_syntax.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/dialects/test_postgres.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/dialects/test_prql.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/dialects/test_redshift.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/dialects/test_risingwave.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/dialects/test_spark.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/dialects/test_sqlite.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/dialects/test_starrocks.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/dialects/test_tableau.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/identity.sql +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/jsonpath/LICENSE +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/jsonpath/cts.json +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/annotate_types.sql +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/canonicalize.sql +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/eliminate_ctes.sql +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/eliminate_joins.sql +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/eliminate_subqueries.sql +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/isolate_table_selects.sql +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/normalize.sql +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/normalize_identifiers.sql +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/optimize_joins.sql +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/optimizer.sql +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/pushdown_cte_alias_columns.sql +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/pushdown_predicates.sql +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/pushdown_projections.sql +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/qualify_columns__invalid.sql +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/qualify_columns__with_invisible.sql +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/qualify_columns_ddl.sql +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/qualify_tables.sql +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/quote_identifiers.sql +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/simplify.sql +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-ds/call_center.csv.gz +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-ds/catalog_page.csv.gz +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-ds/catalog_returns.csv.gz +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-ds/catalog_sales.csv.gz +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-ds/customer.csv.gz +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-ds/customer_address.csv.gz +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-ds/customer_demographics.csv.gz +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-ds/date_dim.csv.gz +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-ds/household_demographics.csv.gz +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-ds/income_band.csv.gz +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-ds/inventory.csv.gz +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-ds/item.csv.gz +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-ds/promotion.csv.gz +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-ds/reason.csv.gz +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-ds/ship_mode.csv.gz +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-ds/store.csv.gz +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-ds/store_returns.csv.gz +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-ds/store_sales.csv.gz +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-ds/time_dim.csv.gz +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-ds/tpc-ds.sql +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-ds/warehouse.csv.gz +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-ds/web_page.csv.gz +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-ds/web_returns.csv.gz +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-ds/web_sales.csv.gz +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-ds/web_site.csv.gz +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-h/customer.csv.gz +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-h/lineitem.csv.gz +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-h/nation.csv.gz +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-h/orders.csv.gz +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-h/part.csv.gz +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-h/partsupp.csv.gz +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-h/region.csv.gz +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-h/supplier.csv.gz +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/tpc-h/tpc-h.sql +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/optimizer/unnest_subqueries.sql +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/partial.sql +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/fixtures/pretty.sql +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/gen_fixtures.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/helpers.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/test_build.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/test_dialect_imports.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/test_diff.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/test_docs.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/test_executor.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/test_expressions.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/test_generator.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/test_helper.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/test_jsonpath.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/test_lineage.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/test_schema.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/test_serde.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/test_time.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/test_tokens.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/test_transforms.py +0 -0
- {sqlglot-27.6.0 → sqlglot-27.8.0}/tests/test_transpile.py +0 -0
|
@@ -1,6 +1,160 @@
|
|
|
1
1
|
Changelog
|
|
2
2
|
=========
|
|
3
3
|
|
|
4
|
+
## [v27.7.0] - 2025-08-13
|
|
5
|
+
### :boom: BREAKING CHANGES
|
|
6
|
+
- due to [`938f4b6`](https://github.com/tobymao/sqlglot/commit/938f4b6ebc1c0d26bd3c1400883978c79a435189) - annotate type for LAST_DAY *(PR [#5528](https://github.com/tobymao/sqlglot/pull/5528) by [@geooo109](https://github.com/geooo109))*:
|
|
7
|
+
|
|
8
|
+
annotate type for LAST_DAY (#5528)
|
|
9
|
+
|
|
10
|
+
- due to [`7d12dac`](https://github.com/tobymao/sqlglot/commit/7d12dac613ba5119334408f2c52cb270067156d9) - annotate type for bigquery GENERATE_TIMESTAMP_ARRAY *(PR [#5529](https://github.com/tobymao/sqlglot/pull/5529) by [@geooo109](https://github.com/geooo109))*:
|
|
11
|
+
|
|
12
|
+
annotate type for bigquery GENERATE_TIMESTAMP_ARRAY (#5529)
|
|
13
|
+
|
|
14
|
+
- due to [`d50ebe2`](https://github.com/tobymao/sqlglot/commit/d50ebe286dd8e2836b9eb2a3406f15976db3aa05) - annotate type for bigquery TIME_TRUNC *(PR [#5530](https://github.com/tobymao/sqlglot/pull/5530) by [@geooo109](https://github.com/geooo109))*:
|
|
15
|
+
|
|
16
|
+
annotate type for bigquery TIME_TRUNC (#5530)
|
|
17
|
+
|
|
18
|
+
- due to [`29748be`](https://github.com/tobymao/sqlglot/commit/29748be7dfc10edc9f29665c98327883dd25c13d) - annotate type for bigquery TIME *(PR [#5531](https://github.com/tobymao/sqlglot/pull/5531) by [@geooo109](https://github.com/geooo109))*:
|
|
19
|
+
|
|
20
|
+
annotate type for bigquery TIME (#5531)
|
|
21
|
+
|
|
22
|
+
- due to [`7003b3f`](https://github.com/tobymao/sqlglot/commit/7003b3fa39cd455e3643066364696708d1ac4f38) - parse and annotate type for bigquery DATE_FROM_UNIX_DATE *(PR [#5532](https://github.com/tobymao/sqlglot/pull/5532) by [@geooo109](https://github.com/geooo109))*:
|
|
23
|
+
|
|
24
|
+
parse and annotate type for bigquery DATE_FROM_UNIX_DATE (#5532)
|
|
25
|
+
|
|
26
|
+
- due to [`a276ca6`](https://github.com/tobymao/sqlglot/commit/a276ca6fd5f9d47fa8c90fcfa19f9864e7a28f8f) - parse and annotate type for bigquery JUSTIFY funcs *(PR [#5534](https://github.com/tobymao/sqlglot/pull/5534) by [@geooo109](https://github.com/geooo109))*:
|
|
27
|
+
|
|
28
|
+
parse and annotate type for bigquery JUSTIFY funcs (#5534)
|
|
29
|
+
|
|
30
|
+
- due to [`374178e`](https://github.com/tobymao/sqlglot/commit/374178e22fe8d2d2275b65fe08e27ef66c611220) - parse and annotate type for bigquery UNIX_MICROS and UNIX_MILLIS *(PR [#5535](https://github.com/tobymao/sqlglot/pull/5535) by [@geooo109](https://github.com/geooo109))*:
|
|
31
|
+
|
|
32
|
+
parse and annotate type for bigquery UNIX_MICROS and UNIX_MILLIS (#5535)
|
|
33
|
+
|
|
34
|
+
- due to [`1d8d1ab`](https://github.com/tobymao/sqlglot/commit/1d8d1abe459053a135a46525d0a13bb861220927) - annotate type for bigquery DATE_TRUNC *(PR [#5540](https://github.com/tobymao/sqlglot/pull/5540) by [@geooo109](https://github.com/geooo109))*:
|
|
35
|
+
|
|
36
|
+
annotate type for bigquery DATE_TRUNC (#5540)
|
|
37
|
+
|
|
38
|
+
- due to [`306ba65`](https://github.com/tobymao/sqlglot/commit/306ba6531839ea2823f5165de7bde01d17560845) - annotate type for bigquery TIMESTAMP_TRUNC *(PR [#5541](https://github.com/tobymao/sqlglot/pull/5541) by [@geooo109](https://github.com/geooo109))*:
|
|
39
|
+
|
|
40
|
+
annotate type for bigquery TIMESTAMP_TRUNC (#5541)
|
|
41
|
+
|
|
42
|
+
- due to [`d799c5a`](https://github.com/tobymao/sqlglot/commit/d799c5af23010a67c29edb6d45a40fb24903e1a3) - preserve projection names when merging subqueries *(commit by [@snovik75](https://github.com/snovik75))*:
|
|
43
|
+
|
|
44
|
+
preserve projection names when merging subqueries
|
|
45
|
+
|
|
46
|
+
- due to [`8130bd4`](https://github.com/tobymao/sqlglot/commit/8130bd40815803a6781ee8f20fccd30987516192) - WEEKDAY of WEEK as VAR *(PR [#5552](https://github.com/tobymao/sqlglot/pull/5552) by [@geooo109](https://github.com/geooo109))*:
|
|
47
|
+
|
|
48
|
+
WEEKDAY of WEEK as VAR (#5552)
|
|
49
|
+
|
|
50
|
+
- due to [`f3ffe19`](https://github.com/tobymao/sqlglot/commit/f3ffe19ec01533c5f27b9d3a7b6704b83c005118) - annotate type for bigquery format_time *(PR [#5559](https://github.com/tobymao/sqlglot/pull/5559) by [@geooo109](https://github.com/geooo109))*:
|
|
51
|
+
|
|
52
|
+
annotate type for bigquery format_time (#5559)
|
|
53
|
+
|
|
54
|
+
- due to [`6872b43`](https://github.com/tobymao/sqlglot/commit/6872b43ba17a39137172fd2fa9f0d059ce595ef9) - use dialect in DataType.build fixes [#5560](https://github.com/tobymao/sqlglot/pull/5560) *(commit by [@georgesittas](https://github.com/georgesittas))*:
|
|
55
|
+
|
|
56
|
+
use dialect in DataType.build fixes #5560
|
|
57
|
+
|
|
58
|
+
- due to [`3ab3690`](https://github.com/tobymao/sqlglot/commit/3ab369096313b418699b7942b1c513c0c66a5331) - parse and annotate type for bigquery PARSE_DATETIME *(PR [#5558](https://github.com/tobymao/sqlglot/pull/5558) by [@geooo109](https://github.com/geooo109))*:
|
|
59
|
+
|
|
60
|
+
parse and annotate type for bigquery PARSE_DATETIME (#5558)
|
|
61
|
+
|
|
62
|
+
- due to [`e5da951`](https://github.com/tobymao/sqlglot/commit/e5da951542eb55691bc43fbbfbec4a30100de038) - parse and annotate type for bigquery PARSE_TIME *(PR [#5561](https://github.com/tobymao/sqlglot/pull/5561) by [@geooo109](https://github.com/geooo109))*:
|
|
63
|
+
|
|
64
|
+
parse and annotate type for bigquery PARSE_TIME (#5561)
|
|
65
|
+
|
|
66
|
+
- due to [`798e213`](https://github.com/tobymao/sqlglot/commit/798e213fd10c3b61afbd8cef621546de65fa6f26) - improve transpilability of ANY_VALUE closes [#5563](https://github.com/tobymao/sqlglot/pull/5563) *(commit by [@georgesittas](https://github.com/georgesittas))*:
|
|
67
|
+
|
|
68
|
+
improve transpilability of ANY_VALUE closes #5563
|
|
69
|
+
|
|
70
|
+
- due to [`8c0cb76`](https://github.com/tobymao/sqlglot/commit/8c0cb764fd825062fb7334032b8eeffbc39627d5) - more robust CREATE SEQUENCE *(PR [#5566](https://github.com/tobymao/sqlglot/pull/5566) by [@geooo109](https://github.com/geooo109))*:
|
|
71
|
+
|
|
72
|
+
more robust CREATE SEQUENCE (#5566)
|
|
73
|
+
|
|
74
|
+
- due to [`c7041c7`](https://github.com/tobymao/sqlglot/commit/c7041c71250b17192c2f25fb8f33407324d332c2) - parse and annotate type for bigquery BYTE_LENGHT *(PR [#5568](https://github.com/tobymao/sqlglot/pull/5568) by [@geooo109](https://github.com/geooo109))*:
|
|
75
|
+
|
|
76
|
+
parse and annotate type for bigquery BYTE_LENGHT (#5568)
|
|
77
|
+
|
|
78
|
+
- due to [`a6c61c3`](https://github.com/tobymao/sqlglot/commit/a6c61c34f1e168c97dd5c2b8ec071372ba593992) - parse and annotate type for bigquery CODE_POINTS_TO_STRING *(PR [#5569](https://github.com/tobymao/sqlglot/pull/5569) by [@geooo109](https://github.com/geooo109))*:
|
|
79
|
+
|
|
80
|
+
parse and annotate type for bigquery CODE_POINTS_TO_STRING (#5569)
|
|
81
|
+
|
|
82
|
+
- due to [`51e0335`](https://github.com/tobymao/sqlglot/commit/51e0335377fe2bc2e2a94a623475791e9dd19fb9) - parse and annotate type for bigquery REVERSE *(PR [#5571](https://github.com/tobymao/sqlglot/pull/5571) by [@geooo109](https://github.com/geooo109))*:
|
|
83
|
+
|
|
84
|
+
parse and annotate type for bigquery REVERSE (#5571)
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
### :sparkles: New Features
|
|
88
|
+
- [`1fb90db`](https://github.com/tobymao/sqlglot/commit/1fb90db52b59e6e3a40597c6f611d0476b72025b) - **teradata**: Add support for Teradata set query band expression *(PR [#5519](https://github.com/tobymao/sqlglot/pull/5519) by [@treff7es](https://github.com/treff7es))*
|
|
89
|
+
- [`a49baaf`](https://github.com/tobymao/sqlglot/commit/a49baaf717cb41abb25ca51ae5adddc8473baa8b) - **doris**: Override table_sql to avoid AS keyword in UPDATE and DELETE statements *(PR [#5517](https://github.com/tobymao/sqlglot/pull/5517) by [@peterylh](https://github.com/peterylh))*
|
|
90
|
+
- [`75fd6d2`](https://github.com/tobymao/sqlglot/commit/75fd6d21fb7bc8399432e73d10b4837ae62d2ab5) - **exasol**: Add support for date difference functions in Exasol dialect *(PR [#5510](https://github.com/tobymao/sqlglot/pull/5510) by [@nnamdi16](https://github.com/nnamdi16))*
|
|
91
|
+
- [`2a91bb4`](https://github.com/tobymao/sqlglot/commit/2a91bb4f17c7569a5b409cc07e970e5d68235149) - **teradata**: Add support for Teradata locking select *(PR [#5524](https://github.com/tobymao/sqlglot/pull/5524) by [@treff7es](https://github.com/treff7es))*
|
|
92
|
+
- [`938f4b6`](https://github.com/tobymao/sqlglot/commit/938f4b6ebc1c0d26bd3c1400883978c79a435189) - **optimizer**: annotate type for LAST_DAY *(PR [#5528](https://github.com/tobymao/sqlglot/pull/5528) by [@geooo109](https://github.com/geooo109))*
|
|
93
|
+
- [`7d12dac`](https://github.com/tobymao/sqlglot/commit/7d12dac613ba5119334408f2c52cb270067156d9) - **optimizer**: annotate type for bigquery GENERATE_TIMESTAMP_ARRAY *(PR [#5529](https://github.com/tobymao/sqlglot/pull/5529) by [@geooo109](https://github.com/geooo109))*
|
|
94
|
+
- [`d50ebe2`](https://github.com/tobymao/sqlglot/commit/d50ebe286dd8e2836b9eb2a3406f15976db3aa05) - **optimizer**: annotate type for bigquery TIME_TRUNC *(PR [#5530](https://github.com/tobymao/sqlglot/pull/5530) by [@geooo109](https://github.com/geooo109))*
|
|
95
|
+
- [`29748be`](https://github.com/tobymao/sqlglot/commit/29748be7dfc10edc9f29665c98327883dd25c13d) - **optimizer**: annotate type for bigquery TIME *(PR [#5531](https://github.com/tobymao/sqlglot/pull/5531) by [@geooo109](https://github.com/geooo109))*
|
|
96
|
+
- [`7003b3f`](https://github.com/tobymao/sqlglot/commit/7003b3fa39cd455e3643066364696708d1ac4f38) - **optimizer**: parse and annotate type for bigquery DATE_FROM_UNIX_DATE *(PR [#5532](https://github.com/tobymao/sqlglot/pull/5532) by [@geooo109](https://github.com/geooo109))*
|
|
97
|
+
- [`a276ca6`](https://github.com/tobymao/sqlglot/commit/a276ca6fd5f9d47fa8c90fcfa19f9864e7a28f8f) - **optimizer**: parse and annotate type for bigquery JUSTIFY funcs *(PR [#5534](https://github.com/tobymao/sqlglot/pull/5534) by [@geooo109](https://github.com/geooo109))*
|
|
98
|
+
- [`374178e`](https://github.com/tobymao/sqlglot/commit/374178e22fe8d2d2275b65fe08e27ef66c611220) - **optimizer**: parse and annotate type for bigquery UNIX_MICROS and UNIX_MILLIS *(PR [#5535](https://github.com/tobymao/sqlglot/pull/5535) by [@geooo109](https://github.com/geooo109))*
|
|
99
|
+
- [`1d8d1ab`](https://github.com/tobymao/sqlglot/commit/1d8d1abe459053a135a46525d0a13bb861220927) - **optimizer**: annotate type for bigquery DATE_TRUNC *(PR [#5540](https://github.com/tobymao/sqlglot/pull/5540) by [@geooo109](https://github.com/geooo109))*
|
|
100
|
+
- [`306ba65`](https://github.com/tobymao/sqlglot/commit/306ba6531839ea2823f5165de7bde01d17560845) - **optimizer**: annotate type for bigquery TIMESTAMP_TRUNC *(PR [#5541](https://github.com/tobymao/sqlglot/pull/5541) by [@geooo109](https://github.com/geooo109))*
|
|
101
|
+
- [`6a68cca`](https://github.com/tobymao/sqlglot/commit/6a68cca97ad4bdd75c544ada0a5af0fa92ec4664) - **dremio**: support lowercase `TIME_MAPPING` formats *(PR [#5556](https://github.com/tobymao/sqlglot/pull/5556) by [@jasonthomassql](https://github.com/jasonthomassql))*
|
|
102
|
+
- [`f3ffe19`](https://github.com/tobymao/sqlglot/commit/f3ffe19ec01533c5f27b9d3a7b6704b83c005118) - **optimizer**: annotate type for bigquery format_time *(PR [#5559](https://github.com/tobymao/sqlglot/pull/5559) by [@geooo109](https://github.com/geooo109))*
|
|
103
|
+
- [`3ab3690`](https://github.com/tobymao/sqlglot/commit/3ab369096313b418699b7942b1c513c0c66a5331) - **optimizer**: parse and annotate type for bigquery PARSE_DATETIME *(PR [#5558](https://github.com/tobymao/sqlglot/pull/5558) by [@geooo109](https://github.com/geooo109))*
|
|
104
|
+
- [`e5da951`](https://github.com/tobymao/sqlglot/commit/e5da951542eb55691bc43fbbfbec4a30100de038) - **optimizer**: parse and annotate type for bigquery PARSE_TIME *(PR [#5561](https://github.com/tobymao/sqlglot/pull/5561) by [@geooo109](https://github.com/geooo109))*
|
|
105
|
+
- [`902a0cd`](https://github.com/tobymao/sqlglot/commit/902a0cdfe46f693aa55612d45a2de2def21f0b8c) - **singlestore**: Added parsing/generation of UNIXTIME functions *(PR [#5562](https://github.com/tobymao/sqlglot/pull/5562) by [@AdalbertMemSQL](https://github.com/AdalbertMemSQL))*
|
|
106
|
+
- [`798e213`](https://github.com/tobymao/sqlglot/commit/798e213fd10c3b61afbd8cef621546de65fa6f26) - **duckdb**: improve transpilability of ANY_VALUE closes [#5563](https://github.com/tobymao/sqlglot/pull/5563) *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
107
|
+
- [`c7041c7`](https://github.com/tobymao/sqlglot/commit/c7041c71250b17192c2f25fb8f33407324d332c2) - **optimizer**: parse and annotate type for bigquery BYTE_LENGHT *(PR [#5568](https://github.com/tobymao/sqlglot/pull/5568) by [@geooo109](https://github.com/geooo109))*
|
|
108
|
+
- [`a6c61c3`](https://github.com/tobymao/sqlglot/commit/a6c61c34f1e168c97dd5c2b8ec071372ba593992) - **optimizer**: parse and annotate type for bigquery CODE_POINTS_TO_STRING *(PR [#5569](https://github.com/tobymao/sqlglot/pull/5569) by [@geooo109](https://github.com/geooo109))*
|
|
109
|
+
|
|
110
|
+
### :bug: Bug Fixes
|
|
111
|
+
- [`9020684`](https://github.com/tobymao/sqlglot/commit/9020684a7e984a10fa4775339596ac5a0d6a6d93) - nested natural join performance closes [#5514](https://github.com/tobymao/sqlglot/pull/5514) *(PR [#5515](https://github.com/tobymao/sqlglot/pull/5515) by [@tobymao](https://github.com/tobymao))*
|
|
112
|
+
- [`394870a`](https://github.com/tobymao/sqlglot/commit/394870a7ee9bb3bc814b7c3847193687f06b432b) - **duckdb**: transpile ADD_MONTHS *(PR [#5523](https://github.com/tobymao/sqlglot/pull/5523) by [@geooo109](https://github.com/geooo109))*
|
|
113
|
+
- :arrow_lower_right: *fixes issue [#5505](https://github.com/tobymao/sqlglot/issues/5505) opened by [@kyle-cheung](https://github.com/kyle-cheung)*
|
|
114
|
+
- [`249692c`](https://github.com/tobymao/sqlglot/commit/249692c67450a1fe3775e1f35b6f62fdb0a62e1a) - **duckdb**: put guard in AddMonths generator before annotating it *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
115
|
+
- [`d799c5a`](https://github.com/tobymao/sqlglot/commit/d799c5af23010a67c29edb6d45a40fb24903e1a3) - **optimizer**: preserve projection names when merging subqueries *(commit by [@snovik75](https://github.com/snovik75))*
|
|
116
|
+
- [`8130bd4`](https://github.com/tobymao/sqlglot/commit/8130bd40815803a6781ee8f20fccd30987516192) - **parser**: WEEKDAY of WEEK as VAR *(PR [#5552](https://github.com/tobymao/sqlglot/pull/5552) by [@geooo109](https://github.com/geooo109))*
|
|
117
|
+
- :arrow_lower_right: *fixes issue [#5547](https://github.com/tobymao/sqlglot/issues/5547) opened by [@rloredo](https://github.com/rloredo)*
|
|
118
|
+
- [`4e1373f`](https://github.com/tobymao/sqlglot/commit/4e1373f301cbea3cb5762fc1430b65deae3f9d04) - **doris**: Rename Table *(PR [#5549](https://github.com/tobymao/sqlglot/pull/5549) by [@xinge-ji](https://github.com/xinge-ji))*
|
|
119
|
+
- [`16f544d`](https://github.com/tobymao/sqlglot/commit/16f544dc25d5d61277d32f02e4be18c10d16cf9f) - **doris**: fix DATE_TRUNC and partition by *(PR [#5553](https://github.com/tobymao/sqlglot/pull/5553) by [@xinge-ji](https://github.com/xinge-ji))*
|
|
120
|
+
- [`6295414`](https://github.com/tobymao/sqlglot/commit/6295414fb41401f92993e661b880a0727e74c087) - convert unit to Var instead of choosing default in `unit_to_var` *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
121
|
+
- [`6872b43`](https://github.com/tobymao/sqlglot/commit/6872b43ba17a39137172fd2fa9f0d059ce595ef9) - **parser**: use dialect in DataType.build fixes [#5560](https://github.com/tobymao/sqlglot/pull/5560) *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
122
|
+
- [`6f354d9`](https://github.com/tobymao/sqlglot/commit/6f354d958fb9ca9242b7fc1d2da86af74d57fedc) - **clickhouse**: add ROWS keyword in OFFSET followed by FETCH fixes [#5564](https://github.com/tobymao/sqlglot/pull/5564) *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
123
|
+
- [`8c0cb76`](https://github.com/tobymao/sqlglot/commit/8c0cb764fd825062fb7334032b8eeffbc39627d5) - **parser**: more robust CREATE SEQUENCE *(PR [#5566](https://github.com/tobymao/sqlglot/pull/5566) by [@geooo109](https://github.com/geooo109))*
|
|
124
|
+
- :arrow_lower_right: *fixes issue [#5537](https://github.com/tobymao/sqlglot/issues/5537) opened by [@tekumara](https://github.com/tekumara)*
|
|
125
|
+
- [`7e9df88`](https://github.com/tobymao/sqlglot/commit/7e9df880bc118d0dbb2dbd6344f805f79af2fe5e) - **doris**: CURRENT_DATE *(PR [#5567](https://github.com/tobymao/sqlglot/pull/5567) by [@xinge-ji](https://github.com/xinge-ji))*
|
|
126
|
+
- [`51e0335`](https://github.com/tobymao/sqlglot/commit/51e0335377fe2bc2e2a94a623475791e9dd19fb9) - **optimizer**: parse and annotate type for bigquery REVERSE *(PR [#5571](https://github.com/tobymao/sqlglot/pull/5571) by [@geooo109](https://github.com/geooo109))*
|
|
127
|
+
|
|
128
|
+
### :wrench: Chores
|
|
129
|
+
- [`720f634`](https://github.com/tobymao/sqlglot/commit/720f6343f6144e8986ec6b7e50419c3d7a331f0a) - Fix style on main, refactor exasol tests *(PR [#5527](https://github.com/tobymao/sqlglot/pull/5527) by [@VaggelisD](https://github.com/VaggelisD))*
|
|
130
|
+
- [`5653501`](https://github.com/tobymao/sqlglot/commit/5653501606f041282b6315c3efa33b9a3baf8d98) - Refactor PR 5517 *(PR [#5526](https://github.com/tobymao/sqlglot/pull/5526) by [@VaggelisD](https://github.com/VaggelisD))*
|
|
131
|
+
- [`d15dfe3`](https://github.com/tobymao/sqlglot/commit/d15dfe3f0f4444e4999ad65051b2474e62f422b3) - build type using dialect for bigquery *(PR [#5539](https://github.com/tobymao/sqlglot/pull/5539) by [@geooo109](https://github.com/geooo109))*
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
## [v27.6.0] - 2025-08-01
|
|
135
|
+
### :boom: BREAKING CHANGES
|
|
136
|
+
- due to [`6b691b3`](https://github.com/tobymao/sqlglot/commit/6b691b33c3528c0377bd8822a3df90de869c6cb1) - Parse and transpile GET(...) extract function *(PR [#5500](https://github.com/tobymao/sqlglot/pull/5500) by [@VaggelisD](https://github.com/VaggelisD))*:
|
|
137
|
+
|
|
138
|
+
Parse and transpile GET(...) extract function (#5500)
|
|
139
|
+
|
|
140
|
+
- due to [`964a275`](https://github.com/tobymao/sqlglot/commit/964a275b42314380de3b301ada9f9756602729f7) - Make `UNION` column qualification recursive *(PR [#5508](https://github.com/tobymao/sqlglot/pull/5508) by [@VaggelisD](https://github.com/VaggelisD))*:
|
|
141
|
+
|
|
142
|
+
Make `UNION` column qualification recursive (#5508)
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
### :sparkles: New Features
|
|
146
|
+
- [`6b691b3`](https://github.com/tobymao/sqlglot/commit/6b691b33c3528c0377bd8822a3df90de869c6cb1) - **snowflake**: Parse and transpile GET(...) extract function *(PR [#5500](https://github.com/tobymao/sqlglot/pull/5500) by [@VaggelisD](https://github.com/VaggelisD))*
|
|
147
|
+
- :arrow_lower_right: *addresses issue [#5495](https://github.com/tobymao/sqlglot/issues/5495) opened by [@kyle-cheung](https://github.com/kyle-cheung)*
|
|
148
|
+
- [`a2a2f0f`](https://github.com/tobymao/sqlglot/commit/a2a2f0fe910228651c5c39beebcc02172a0b7e94) - **exasol**: Add support for IF, NULLIFZERO, and ZEROIFNULL functions *(PR [#5502](https://github.com/tobymao/sqlglot/pull/5502) by [@nnamdi16](https://github.com/nnamdi16))*
|
|
149
|
+
- [`2d8ce58`](https://github.com/tobymao/sqlglot/commit/2d8ce587c75f21b188ec4c201936eedac3b051e8) - **singlestore**: Added cast operator *(PR [#5504](https://github.com/tobymao/sqlglot/pull/5504) by [@AdalbertMemSQL](https://github.com/AdalbertMemSQL))*
|
|
150
|
+
- [`6256348`](https://github.com/tobymao/sqlglot/commit/6256348a28b72ae9052d4244736846af209410b0) - **exasol**: add support for ADD_DAYS function in exasol dialect *(PR [#5507](https://github.com/tobymao/sqlglot/pull/5507) by [@nnamdi16](https://github.com/nnamdi16))*
|
|
151
|
+
- [`2f40fc5`](https://github.com/tobymao/sqlglot/commit/2f40fc578a840c9276a4c3b91351fb8d95c837fc) - add more pseudocols to bq which are not expanded by star *(PR [#5509](https://github.com/tobymao/sqlglot/pull/5509) by [@z3z1ma](https://github.com/z3z1ma))*
|
|
152
|
+
|
|
153
|
+
### :bug: Bug Fixes
|
|
154
|
+
- [`3b52061`](https://github.com/tobymao/sqlglot/commit/3b520611c5a894ddea935d13aadd27c791a8a755) - **exasol**: fix TokenType.TEXT mapping in exasol dialect *(PR [#5506](https://github.com/tobymao/sqlglot/pull/5506) by [@nnamdi16](https://github.com/nnamdi16))*
|
|
155
|
+
- [`964a275`](https://github.com/tobymao/sqlglot/commit/964a275b42314380de3b301ada9f9756602729f7) - Make `UNION` column qualification recursive *(PR [#5508](https://github.com/tobymao/sqlglot/pull/5508) by [@VaggelisD](https://github.com/VaggelisD))*
|
|
156
|
+
|
|
157
|
+
|
|
4
158
|
## [v27.5.1] - 2025-07-30
|
|
5
159
|
### :bug: Bug Fixes
|
|
6
160
|
- [`caf71d6`](https://github.com/tobymao/sqlglot/commit/caf71d687c0048d2346fddaee58b519e4f2e7945) - `between` builder should not set `symmetric` by default *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
@@ -6379,3 +6533,5 @@ Changelog
|
|
|
6379
6533
|
[v27.4.1]: https://github.com/tobymao/sqlglot/compare/v27.4.0...v27.4.1
|
|
6380
6534
|
[v27.5.0]: https://github.com/tobymao/sqlglot/compare/v27.4.1...v27.5.0
|
|
6381
6535
|
[v27.5.1]: https://github.com/tobymao/sqlglot/compare/v27.5.0...v27.5.1
|
|
6536
|
+
[v27.6.0]: https://github.com/tobymao/sqlglot/compare/v27.5.1...v27.6.0
|
|
6537
|
+
[v27.7.0]: https://github.com/tobymao/sqlglot/compare/v27.6.0...v27.7.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sqlglot
|
|
3
|
-
Version: 27.
|
|
3
|
+
Version: 27.8.0
|
|
4
4
|
Summary: An easily customizable SQL parser and transpiler
|
|
5
5
|
Author-email: Toby Mao <toby.mao@gmail.com>
|
|
6
6
|
Project-URL: Homepage, https://sqlglot.com/
|
|
@@ -256,7 +256,7 @@ sqlglot.errors.ParseError: Expecting ). Line 1, Col: 34.
|
|
|
256
256
|
Structured syntax errors are accessible for programmatic use:
|
|
257
257
|
|
|
258
258
|
```python
|
|
259
|
-
import sqlglot
|
|
259
|
+
import sqlglot.errors
|
|
260
260
|
try:
|
|
261
261
|
sqlglot.transpile("SELECT foo FROM (SELECT baz FROM t")
|
|
262
262
|
except sqlglot.errors.ParseError as e:
|
|
@@ -218,7 +218,7 @@ sqlglot.errors.ParseError: Expecting ). Line 1, Col: 34.
|
|
|
218
218
|
Structured syntax errors are accessible for programmatic use:
|
|
219
219
|
|
|
220
220
|
```python
|
|
221
|
-
import sqlglot
|
|
221
|
+
import sqlglot.errors
|
|
222
222
|
try:
|
|
223
223
|
sqlglot.transpile("SELECT foo FROM (SELECT baz FROM t")
|
|
224
224
|
except sqlglot.errors.ParseError as e:
|
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
# file generated by setuptools-scm
|
|
2
2
|
# don't change, don't track in version control
|
|
3
3
|
|
|
4
|
-
__all__ = [
|
|
4
|
+
__all__ = [
|
|
5
|
+
"__version__",
|
|
6
|
+
"__version_tuple__",
|
|
7
|
+
"version",
|
|
8
|
+
"version_tuple",
|
|
9
|
+
"__commit_id__",
|
|
10
|
+
"commit_id",
|
|
11
|
+
]
|
|
5
12
|
|
|
6
13
|
TYPE_CHECKING = False
|
|
7
14
|
if TYPE_CHECKING:
|
|
@@ -9,13 +16,19 @@ if TYPE_CHECKING:
|
|
|
9
16
|
from typing import Union
|
|
10
17
|
|
|
11
18
|
VERSION_TUPLE = Tuple[Union[int, str], ...]
|
|
19
|
+
COMMIT_ID = Union[str, None]
|
|
12
20
|
else:
|
|
13
21
|
VERSION_TUPLE = object
|
|
22
|
+
COMMIT_ID = object
|
|
14
23
|
|
|
15
24
|
version: str
|
|
16
25
|
__version__: str
|
|
17
26
|
__version_tuple__: VERSION_TUPLE
|
|
18
27
|
version_tuple: VERSION_TUPLE
|
|
28
|
+
commit_id: COMMIT_ID
|
|
29
|
+
__commit_id__: COMMIT_ID
|
|
19
30
|
|
|
20
|
-
__version__ = version = '27.
|
|
21
|
-
__version_tuple__ = version_tuple = (27,
|
|
31
|
+
__version__ = version = '27.8.0'
|
|
32
|
+
__version_tuple__ = version_tuple = (27, 8, 0)
|
|
33
|
+
|
|
34
|
+
__commit_id__ = commit_id = 'g093f35c20'
|
|
@@ -4,7 +4,7 @@ import logging
|
|
|
4
4
|
import re
|
|
5
5
|
import typing as t
|
|
6
6
|
|
|
7
|
-
from sqlglot import exp, generator, parser, tokens, transforms
|
|
7
|
+
from sqlglot import exp, generator, jsonpath, parser, tokens, transforms
|
|
8
8
|
from sqlglot._typing import E
|
|
9
9
|
from sqlglot.dialects.dialect import (
|
|
10
10
|
Dialect,
|
|
@@ -30,7 +30,6 @@ from sqlglot.dialects.dialect import (
|
|
|
30
30
|
unit_to_var,
|
|
31
31
|
strposition_sql,
|
|
32
32
|
groupconcat_sql,
|
|
33
|
-
space_sql,
|
|
34
33
|
)
|
|
35
34
|
from sqlglot.helper import seq_get, split_num_words
|
|
36
35
|
from sqlglot.tokens import TokenType
|
|
@@ -474,6 +473,8 @@ class BigQuery(Dialect):
|
|
|
474
473
|
exp.Substring,
|
|
475
474
|
)
|
|
476
475
|
},
|
|
476
|
+
exp.ArgMax: lambda self, e: self._annotate_by_args(e, "this"),
|
|
477
|
+
exp.ArgMin: lambda self, e: self._annotate_by_args(e, "this"),
|
|
477
478
|
exp.Array: _annotate_array,
|
|
478
479
|
exp.ArrayConcat: lambda self, e: self._annotate_by_args(e, "this", "expressions"),
|
|
479
480
|
exp.Ascii: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.BIGINT),
|
|
@@ -481,10 +482,21 @@ class BigQuery(Dialect):
|
|
|
481
482
|
exp.BitwiseOrAgg: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.BIGINT),
|
|
482
483
|
exp.BitwiseXorAgg: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.BIGINT),
|
|
483
484
|
exp.BitwiseCountAgg: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.BIGINT),
|
|
485
|
+
exp.ByteLength: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.BIGINT),
|
|
486
|
+
exp.ByteString: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.BINARY),
|
|
487
|
+
exp.CodePointsToString: lambda self, e: self._annotate_with_type(
|
|
488
|
+
e, exp.DataType.Type.VARCHAR
|
|
489
|
+
),
|
|
484
490
|
exp.Concat: _annotate_concat,
|
|
485
491
|
exp.Corr: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.DOUBLE),
|
|
486
492
|
exp.CovarPop: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.DOUBLE),
|
|
487
493
|
exp.CovarSamp: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.DOUBLE),
|
|
494
|
+
exp.DateFromUnixDate: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.DATE),
|
|
495
|
+
exp.DateTrunc: lambda self, e: self._annotate_by_args(e, "this"),
|
|
496
|
+
exp.GenerateTimestampArray: lambda self, e: self._annotate_with_type(
|
|
497
|
+
e, exp.DataType.build("ARRAY<TIMESTAMP>", dialect="bigquery")
|
|
498
|
+
),
|
|
499
|
+
exp.Grouping: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.BIGINT),
|
|
488
500
|
exp.JSONArray: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.JSON),
|
|
489
501
|
exp.JSONExtractScalar: lambda self, e: self._annotate_with_type(
|
|
490
502
|
e, exp.DataType.Type.VARCHAR
|
|
@@ -494,6 +506,13 @@ class BigQuery(Dialect):
|
|
|
494
506
|
),
|
|
495
507
|
exp.JSONType: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.VARCHAR),
|
|
496
508
|
exp.Lag: lambda self, e: self._annotate_by_args(e, "this", "default"),
|
|
509
|
+
exp.MD5Digest: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.BINARY),
|
|
510
|
+
exp.ParseTime: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.TIME),
|
|
511
|
+
exp.ParseDatetime: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.DATETIME),
|
|
512
|
+
exp.RegexpExtractAll: lambda self, e: self._annotate_by_args(e, "this", array=True),
|
|
513
|
+
exp.Replace: lambda self, e: self._annotate_by_args(e, "this"),
|
|
514
|
+
exp.Reverse: lambda self, e: self._annotate_by_args(e, "this"),
|
|
515
|
+
exp.Soundex: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.VARCHAR),
|
|
497
516
|
exp.SHA: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.BINARY),
|
|
498
517
|
exp.SHA2: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.BINARY),
|
|
499
518
|
exp.Sign: lambda self, e: self._annotate_by_args(e, "this"),
|
|
@@ -501,6 +520,11 @@ class BigQuery(Dialect):
|
|
|
501
520
|
exp.TimestampFromParts: lambda self, e: self._annotate_with_type(
|
|
502
521
|
e, exp.DataType.Type.DATETIME
|
|
503
522
|
),
|
|
523
|
+
exp.TimestampTrunc: lambda self, e: self._annotate_by_args(e, "this"),
|
|
524
|
+
exp.TimeFromParts: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.TIME),
|
|
525
|
+
exp.TsOrDsToTime: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.TIME),
|
|
526
|
+
exp.TimeTrunc: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.TIME),
|
|
527
|
+
exp.Translate: lambda self, e: self._annotate_by_args(e, "this"),
|
|
504
528
|
exp.Unicode: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.BIGINT),
|
|
505
529
|
}
|
|
506
530
|
|
|
@@ -533,6 +557,12 @@ class BigQuery(Dialect):
|
|
|
533
557
|
|
|
534
558
|
return super().normalize_identifier(expression)
|
|
535
559
|
|
|
560
|
+
class JSONPathTokenizer(jsonpath.JSONPathTokenizer):
|
|
561
|
+
VAR_TOKENS = {
|
|
562
|
+
TokenType.DASH,
|
|
563
|
+
TokenType.VAR,
|
|
564
|
+
}
|
|
565
|
+
|
|
536
566
|
class Tokenizer(tokens.Tokenizer):
|
|
537
567
|
QUOTES = ["'", '"', '"""', "'''"]
|
|
538
568
|
COMMENTS = ["--", "#", ("/*", "*/")]
|
|
@@ -621,7 +651,13 @@ class BigQuery(Dialect):
|
|
|
621
651
|
"PARSE_DATE": lambda args: build_formatted_time(exp.StrToDate, "bigquery")(
|
|
622
652
|
[seq_get(args, 1), seq_get(args, 0)]
|
|
623
653
|
),
|
|
654
|
+
"PARSE_TIME": lambda args: build_formatted_time(exp.ParseTime, "bigquery")(
|
|
655
|
+
[seq_get(args, 1), seq_get(args, 0)]
|
|
656
|
+
),
|
|
624
657
|
"PARSE_TIMESTAMP": _build_parse_timestamp,
|
|
658
|
+
"PARSE_DATETIME": lambda args: build_formatted_time(exp.ParseDatetime, "bigquery")(
|
|
659
|
+
[seq_get(args, 1), seq_get(args, 0)]
|
|
660
|
+
),
|
|
625
661
|
"REGEXP_CONTAINS": exp.RegexpLike.from_arg_list,
|
|
626
662
|
"REGEXP_EXTRACT": _build_regexp_extract(exp.RegexpExtract),
|
|
627
663
|
"REGEXP_SUBSTR": _build_regexp_extract(exp.RegexpExtract),
|
|
@@ -652,6 +688,8 @@ class BigQuery(Dialect):
|
|
|
652
688
|
"TO_JSON_STRING": exp.JSONFormat.from_arg_list,
|
|
653
689
|
"FORMAT_DATETIME": _build_format_time(exp.TsOrDsToDatetime),
|
|
654
690
|
"FORMAT_TIMESTAMP": _build_format_time(exp.TsOrDsToTimestamp),
|
|
691
|
+
"FORMAT_TIME": _build_format_time(exp.TsOrDsToTime),
|
|
692
|
+
"WEEK": lambda args: exp.WeekStart(this=exp.var(seq_get(args, 0))),
|
|
655
693
|
}
|
|
656
694
|
|
|
657
695
|
FUNCTION_PARSERS = {
|
|
@@ -994,6 +1032,15 @@ class BigQuery(Dialect):
|
|
|
994
1032
|
EXCEPT_INTERSECT_SUPPORT_ALL_CLAUSE = False
|
|
995
1033
|
SUPPORTS_UNIX_SECONDS = True
|
|
996
1034
|
|
|
1035
|
+
SAFE_JSON_PATH_KEY_RE = re.compile(r"^[_\-a-zA-Z][\-\w]*$")
|
|
1036
|
+
|
|
1037
|
+
TS_OR_DS_TYPES = (
|
|
1038
|
+
exp.TsOrDsToDatetime,
|
|
1039
|
+
exp.TsOrDsToTimestamp,
|
|
1040
|
+
exp.TsOrDsToTime,
|
|
1041
|
+
exp.TsOrDsToDate,
|
|
1042
|
+
)
|
|
1043
|
+
|
|
997
1044
|
TRANSFORMS = {
|
|
998
1045
|
**generator.Generator.TRANSFORMS,
|
|
999
1046
|
exp.ApproxDistinct: rename_func("APPROX_COUNT_DISTINCT"),
|
|
@@ -1022,6 +1069,7 @@ class BigQuery(Dialect):
|
|
|
1022
1069
|
exp.DateSub: date_add_interval_sql("DATE", "SUB"),
|
|
1023
1070
|
exp.DatetimeAdd: date_add_interval_sql("DATETIME", "ADD"),
|
|
1024
1071
|
exp.DatetimeSub: date_add_interval_sql("DATETIME", "SUB"),
|
|
1072
|
+
exp.DateFromUnixDate: rename_func("DATE_FROM_UNIX_DATE"),
|
|
1025
1073
|
exp.FromTimeZone: lambda self, e: self.func(
|
|
1026
1074
|
"DATETIME", self.func("TIMESTAMP", e.this, e.args.get("zone")), "'UTC'"
|
|
1027
1075
|
),
|
|
@@ -1059,6 +1107,10 @@ class BigQuery(Dialect):
|
|
|
1059
1107
|
exp.RegexpLike: rename_func("REGEXP_CONTAINS"),
|
|
1060
1108
|
exp.ReturnsProperty: _returnsproperty_sql,
|
|
1061
1109
|
exp.Rollback: lambda *_: "ROLLBACK TRANSACTION",
|
|
1110
|
+
exp.ParseTime: lambda self, e: self.func("PARSE_TIME", self.format_time(e), e.this),
|
|
1111
|
+
exp.ParseDatetime: lambda self, e: self.func(
|
|
1112
|
+
"PARSE_DATETIME", self.format_time(e), e.this
|
|
1113
|
+
),
|
|
1062
1114
|
exp.Select: transforms.preprocess(
|
|
1063
1115
|
[
|
|
1064
1116
|
transforms.explode_projection_to_unnest(),
|
|
@@ -1070,7 +1122,6 @@ class BigQuery(Dialect):
|
|
|
1070
1122
|
),
|
|
1071
1123
|
exp.SHA: rename_func("SHA1"),
|
|
1072
1124
|
exp.SHA2: sha256_sql,
|
|
1073
|
-
exp.Space: space_sql,
|
|
1074
1125
|
exp.StabilityProperty: lambda self, e: (
|
|
1075
1126
|
"DETERMINISTIC" if e.name == "IMMUTABLE" else "NOT DETERMINISTIC"
|
|
1076
1127
|
),
|
|
@@ -1297,14 +1348,12 @@ class BigQuery(Dialect):
|
|
|
1297
1348
|
func_name = "FORMAT_DATETIME"
|
|
1298
1349
|
elif isinstance(this, exp.TsOrDsToTimestamp):
|
|
1299
1350
|
func_name = "FORMAT_TIMESTAMP"
|
|
1351
|
+
elif isinstance(this, exp.TsOrDsToTime):
|
|
1352
|
+
func_name = "FORMAT_TIME"
|
|
1300
1353
|
else:
|
|
1301
1354
|
func_name = "FORMAT_DATE"
|
|
1302
1355
|
|
|
1303
|
-
time_expr = (
|
|
1304
|
-
this
|
|
1305
|
-
if isinstance(this, (exp.TsOrDsToDatetime, exp.TsOrDsToTimestamp, exp.TsOrDsToDate))
|
|
1306
|
-
else expression
|
|
1307
|
-
)
|
|
1356
|
+
time_expr = this if isinstance(this, self.TS_OR_DS_TYPES) else expression
|
|
1308
1357
|
return self.func(
|
|
1309
1358
|
func_name, self.format_time(expression), time_expr.this, expression.args.get("zone")
|
|
1310
1359
|
)
|
|
@@ -2,6 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
import typing as t
|
|
3
3
|
import datetime
|
|
4
4
|
from sqlglot import exp, generator, parser, tokens
|
|
5
|
+
from sqlglot._typing import E
|
|
5
6
|
from sqlglot.dialects.dialect import (
|
|
6
7
|
Dialect,
|
|
7
8
|
NormalizationStrategy,
|
|
@@ -31,14 +32,19 @@ from sqlglot.generator import unsupported_args
|
|
|
31
32
|
DATEΤΙΜΕ_DELTA = t.Union[exp.DateAdd, exp.DateDiff, exp.DateSub, exp.TimestampSub, exp.TimestampAdd]
|
|
32
33
|
|
|
33
34
|
|
|
34
|
-
def
|
|
35
|
-
|
|
35
|
+
def _build_datetime_format(
|
|
36
|
+
expr_type: t.Type[E],
|
|
37
|
+
) -> t.Callable[[t.List], E]:
|
|
38
|
+
def _builder(args: t.List) -> E:
|
|
39
|
+
expr = build_formatted_time(expr_type, "clickhouse")(args)
|
|
36
40
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
41
|
+
timezone = seq_get(args, 2)
|
|
42
|
+
if timezone:
|
|
43
|
+
expr.set("zone", timezone)
|
|
40
44
|
|
|
41
|
-
|
|
45
|
+
return expr
|
|
46
|
+
|
|
47
|
+
return _builder
|
|
42
48
|
|
|
43
49
|
|
|
44
50
|
def _unix_to_time_sql(self: ClickHouse.Generator, expression: exp.UnixToTime) -> str:
|
|
@@ -310,16 +316,17 @@ class ClickHouse(Dialect):
|
|
|
310
316
|
"DATEADD": build_date_delta(exp.DateAdd, default_unit=None),
|
|
311
317
|
"DATE_DIFF": build_date_delta(exp.DateDiff, default_unit=None, supports_timezone=True),
|
|
312
318
|
"DATEDIFF": build_date_delta(exp.DateDiff, default_unit=None, supports_timezone=True),
|
|
313
|
-
"DATE_FORMAT":
|
|
319
|
+
"DATE_FORMAT": _build_datetime_format(exp.TimeToStr),
|
|
314
320
|
"DATE_SUB": build_date_delta(exp.DateSub, default_unit=None),
|
|
315
321
|
"DATESUB": build_date_delta(exp.DateSub, default_unit=None),
|
|
316
|
-
"FORMATDATETIME":
|
|
322
|
+
"FORMATDATETIME": _build_datetime_format(exp.TimeToStr),
|
|
317
323
|
"JSONEXTRACTSTRING": build_json_extract_path(
|
|
318
324
|
exp.JSONExtractScalar, zero_based_indexing=False
|
|
319
325
|
),
|
|
320
326
|
"LENGTH": lambda args: exp.Length(this=seq_get(args, 0), binary=True),
|
|
321
327
|
"MAP": parser.build_var_map,
|
|
322
328
|
"MATCH": exp.RegexpLike.from_arg_list,
|
|
329
|
+
"PARSEDATETIME": _build_datetime_format(exp.ParseDatetime),
|
|
323
330
|
"RANDCANONICAL": exp.Rand.from_arg_list,
|
|
324
331
|
"STR_TO_DATE": _build_str_to_date,
|
|
325
332
|
"TUPLE": exp.Struct.from_arg_list,
|
|
@@ -1141,6 +1148,7 @@ class ClickHouse(Dialect):
|
|
|
1141
1148
|
exp.Levenshtein: unsupported_args("ins_cost", "del_cost", "sub_cost", "max_dist")(
|
|
1142
1149
|
rename_func("editDistance")
|
|
1143
1150
|
),
|
|
1151
|
+
exp.ParseDatetime: rename_func("parseDateTime"),
|
|
1144
1152
|
}
|
|
1145
1153
|
|
|
1146
1154
|
PROPERTIES_LOCATION = {
|
|
@@ -1177,6 +1185,17 @@ class ClickHouse(Dialect):
|
|
|
1177
1185
|
exp.DataType.Type.MULTIPOLYGON,
|
|
1178
1186
|
}
|
|
1179
1187
|
|
|
1188
|
+
def offset_sql(self, expression: exp.Offset) -> str:
|
|
1189
|
+
offset = super().offset_sql(expression)
|
|
1190
|
+
|
|
1191
|
+
# OFFSET ... FETCH syntax requires a "ROW" or "ROWS" keyword
|
|
1192
|
+
# https://clickhouse.com/docs/sql-reference/statements/select/offset
|
|
1193
|
+
parent = expression.parent
|
|
1194
|
+
if isinstance(parent, exp.Select) and isinstance(parent.args.get("limit"), exp.Fetch):
|
|
1195
|
+
offset = f"{offset} ROWS"
|
|
1196
|
+
|
|
1197
|
+
return offset
|
|
1198
|
+
|
|
1180
1199
|
def strtodate_sql(self, expression: exp.StrToDate) -> str:
|
|
1181
1200
|
strtodate_sql = self.function_fallback_sql(expression)
|
|
1182
1201
|
|
|
@@ -99,7 +99,11 @@ class Databricks(Spark):
|
|
|
99
99
|
exp.JSONExtract: _jsonextract_sql,
|
|
100
100
|
exp.JSONExtractScalar: _jsonextract_sql,
|
|
101
101
|
exp.JSONPathRoot: lambda *_: "",
|
|
102
|
-
exp.ToChar: lambda self, e:
|
|
102
|
+
exp.ToChar: lambda self, e: (
|
|
103
|
+
self.cast_sql(exp.Cast(this=e.this, to=exp.DataType(this="STRING")))
|
|
104
|
+
if e.args.get("is_numeric")
|
|
105
|
+
else self.function_fallback_sql(e)
|
|
106
|
+
),
|
|
103
107
|
}
|
|
104
108
|
|
|
105
109
|
TRANSFORMS.pop(exp.TryCast)
|