sqlglot 26.26.0__tar.gz → 26.27.1__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-26.26.0 → sqlglot-26.27.1}/CHANGELOG.md +46 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/PKG-INFO +1 -1
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/_version.py +2 -2
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/hive.py +1 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/mysql.py +25 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/postgres.py +12 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/snowflake.py +8 -1
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/sqlite.py +2 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/expressions.py +14 -8
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/generator.py +4 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/parser.py +204 -143
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/transforms.py +87 -78
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot.egg-info/PKG-INFO +1 -1
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_bigquery.py +1 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_dialect.py +106 -25
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_hive.py +11 -3
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_mysql.py +14 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_postgres.py +11 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_snowflake.py +7 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_spark.py +2 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_sqlite.py +6 -2
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_tsql.py +1 -1
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/identity.sql +3 -1
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_parser.py +6 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_transforms.py +38 -1
- {sqlglot-26.26.0 → sqlglot-26.27.1}/.gitignore +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/.gitpod.yml +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/.pre-commit-config.yaml +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/CONTRIBUTING.md +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/LICENSE +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/MANIFEST.in +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/Makefile +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/README.md +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/pyproject.toml +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/setup.cfg +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/setup.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/__init__.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/__main__.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/_typing.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/__init__.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/athena.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/bigquery.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/clickhouse.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/databricks.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/dialect.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/doris.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/drill.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/druid.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/duckdb.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/dune.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/materialize.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/oracle.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/presto.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/prql.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/redshift.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/risingwave.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/spark.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/spark2.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/starrocks.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/tableau.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/teradata.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/trino.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/tsql.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/diff.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/errors.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/executor/__init__.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/executor/context.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/executor/env.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/executor/python.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/executor/table.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/helper.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/jsonpath.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/lineage.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/__init__.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/annotate_types.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/canonicalize.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/eliminate_ctes.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/eliminate_joins.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/eliminate_subqueries.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/isolate_table_selects.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/merge_subqueries.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/normalize.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/normalize_identifiers.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/optimize_joins.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/optimizer.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/pushdown_predicates.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/pushdown_projections.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/qualify.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/qualify_columns.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/qualify_tables.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/scope.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/simplify.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/unnest_subqueries.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/planner.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/py.typed +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/schema.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/serde.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/time.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/tokens.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/trie.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot.egg-info/SOURCES.txt +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot.egg-info/dependency_links.txt +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot.egg-info/requires.txt +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot.egg-info/top_level.txt +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot.png +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglotrs/Cargo.lock +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglotrs/Cargo.toml +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglotrs/benches/dialect_settings.json +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglotrs/benches/long.rs +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglotrs/benches/token_type_settings.json +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglotrs/benches/tokenizer_dialect_settings.json +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglotrs/benches/tokenizer_settings.json +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglotrs/pyproject.toml +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglotrs/src/lib.rs +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglotrs/src/settings.rs +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglotrs/src/token.rs +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglotrs/src/tokenizer.rs +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglotrs/src/trie.rs +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/__init__.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/__init__.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_athena.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_clickhouse.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_databricks.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_doris.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_drill.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_druid.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_duckdb.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_dune.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_materialize.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_oracle.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_presto.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_prql.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_redshift.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_risingwave.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_starrocks.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_tableau.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_teradata.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_trino.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/jsonpath/LICENSE +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/jsonpath/cts.json +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/annotate_functions.sql +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/annotate_types.sql +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/canonicalize.sql +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/eliminate_ctes.sql +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/eliminate_joins.sql +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/eliminate_subqueries.sql +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/isolate_table_selects.sql +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/merge_subqueries.sql +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/normalize.sql +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/normalize_identifiers.sql +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/optimize_joins.sql +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/optimizer.sql +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/pushdown_cte_alias_columns.sql +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/pushdown_predicates.sql +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/pushdown_projections.sql +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/qualify_columns.sql +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/qualify_columns__invalid.sql +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/qualify_columns__with_invisible.sql +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/qualify_columns_ddl.sql +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/qualify_tables.sql +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/quote_identifiers.sql +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/simplify.sql +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/call_center.csv.gz +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/catalog_page.csv.gz +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/catalog_returns.csv.gz +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/catalog_sales.csv.gz +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/customer.csv.gz +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/customer_address.csv.gz +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/customer_demographics.csv.gz +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/date_dim.csv.gz +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/household_demographics.csv.gz +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/income_band.csv.gz +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/inventory.csv.gz +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/item.csv.gz +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/promotion.csv.gz +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/reason.csv.gz +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/ship_mode.csv.gz +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/store.csv.gz +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/store_returns.csv.gz +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/store_sales.csv.gz +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/time_dim.csv.gz +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/tpc-ds.sql +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/warehouse.csv.gz +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/web_page.csv.gz +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/web_returns.csv.gz +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/web_sales.csv.gz +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/web_site.csv.gz +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-h/customer.csv.gz +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-h/lineitem.csv.gz +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-h/nation.csv.gz +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-h/orders.csv.gz +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-h/part.csv.gz +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-h/partsupp.csv.gz +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-h/region.csv.gz +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-h/supplier.csv.gz +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-h/tpc-h.sql +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/unnest_subqueries.sql +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/partial.sql +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/pretty.sql +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/gen_fixtures.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/helpers.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_build.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_diff.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_docs.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_executor.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_expressions.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_generator.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_helper.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_jsonpath.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_lineage.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_optimizer.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_schema.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_serde.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_time.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_tokens.py +0 -0
- {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_transpile.py +0 -0
@@ -1,6 +1,51 @@
|
|
1
1
|
Changelog
|
2
2
|
=========
|
3
3
|
|
4
|
+
## [v26.26.0] - 2025-06-09
|
5
|
+
### :boom: BREAKING CHANGES
|
6
|
+
- due to [`434c45b`](https://github.com/tobymao/sqlglot/commit/434c45b547c3a5ea155dc8d7da2baab326eb6d4f) - improve support for ENDSWITH closes [#5170](https://github.com/tobymao/sqlglot/pull/5170) *(commit by [@georgesittas](https://github.com/georgesittas))*:
|
7
|
+
|
8
|
+
improve support for ENDSWITH closes #5170
|
9
|
+
|
10
|
+
- due to [`bc001ce`](https://github.com/tobymao/sqlglot/commit/bc001cef4c907d8fa421d3190b4fa91865d9ff6c) - Add support for ANY_VALUE for versions 16+ *(PR [#5179](https://github.com/tobymao/sqlglot/pull/5179) by [@VaggelisD](https://github.com/VaggelisD))*:
|
11
|
+
|
12
|
+
Add support for ANY_VALUE for versions 16+ (#5179)
|
13
|
+
|
14
|
+
- due to [`6a2cb39`](https://github.com/tobymao/sqlglot/commit/6a2cb39d0ceec091dc4fc228f26d4f457729a3cf) - virtual column with AS(expr) as ComputedColumnConstraint *(PR [#5180](https://github.com/tobymao/sqlglot/pull/5180) by [@geooo109](https://github.com/geooo109))*:
|
15
|
+
|
16
|
+
virtual column with AS(expr) as ComputedColumnConstraint (#5180)
|
17
|
+
|
18
|
+
- due to [`29e2f1d`](https://github.com/tobymao/sqlglot/commit/29e2f1d89c095c9fab0944a6962c99bd745c2c91) - Array_intersection transpilation support *(PR [#5186](https://github.com/tobymao/sqlglot/pull/5186) by [@HarishRavi96](https://github.com/HarishRavi96))*:
|
19
|
+
|
20
|
+
Array_intersection transpilation support (#5186)
|
21
|
+
|
22
|
+
|
23
|
+
### :sparkles: New Features
|
24
|
+
- [`434c45b`](https://github.com/tobymao/sqlglot/commit/434c45b547c3a5ea155dc8d7da2baab326eb6d4f) - improve support for ENDSWITH closes [#5170](https://github.com/tobymao/sqlglot/pull/5170) *(commit by [@georgesittas](https://github.com/georgesittas))*
|
25
|
+
- [`63f9cb4`](https://github.com/tobymao/sqlglot/commit/63f9cb4b158b88574136b32241ee60254352c9e6) - **sqlglotrs**: match the Python implementation of __repr__ for tokens *(PR [#5172](https://github.com/tobymao/sqlglot/pull/5172) by [@georgesittas](https://github.com/georgesittas))*
|
26
|
+
- [`c007afa`](https://github.com/tobymao/sqlglot/commit/c007afa23831e9bd86f401d85260e15edf00328f) - support Star instance as first arg of exp.column helper *(PR [#5177](https://github.com/tobymao/sqlglot/pull/5177) by [@georgesittas](https://github.com/georgesittas))*
|
27
|
+
- [`bc001ce`](https://github.com/tobymao/sqlglot/commit/bc001cef4c907d8fa421d3190b4fa91865d9ff6c) - **postgres**: Add support for ANY_VALUE for versions 16+ *(PR [#5179](https://github.com/tobymao/sqlglot/pull/5179) by [@VaggelisD](https://github.com/VaggelisD))*
|
28
|
+
- :arrow_lower_right: *addresses issue [#4674](https://github.com/TobikoData/sqlmesh/issues/4674) opened by [@petrikoro](https://github.com/petrikoro)*
|
29
|
+
- [`ba05ff6`](https://github.com/tobymao/sqlglot/commit/ba05ff67127e056d567fc2c1d3bcc8e3dcce7b7e) - **parser**: AGGREGATE with GROUP AND ORDER BY pipe syntax *(PR [#5171](https://github.com/tobymao/sqlglot/pull/5171) by [@geooo109](https://github.com/geooo109))*
|
30
|
+
- [`26077a4`](https://github.com/tobymao/sqlglot/commit/26077a47d9db750f44ab1baf9a434596b5bb613b) - make to_table more lenient *(PR [#5183](https://github.com/tobymao/sqlglot/pull/5183) by [@georgesittas](https://github.com/georgesittas))*
|
31
|
+
- [`29e2f1d`](https://github.com/tobymao/sqlglot/commit/29e2f1d89c095c9fab0944a6962c99bd745c2c91) - Array_intersection transpilation support *(PR [#5186](https://github.com/tobymao/sqlglot/pull/5186) by [@HarishRavi96](https://github.com/HarishRavi96))*
|
32
|
+
- [`d86a114`](https://github.com/tobymao/sqlglot/commit/d86a1147aeb866ed0ab2c342914ecf8cbfadac8a) - **sqlite**: implement RESPECT/IGNORE NULLS in first_value() *(PR [#5185](https://github.com/tobymao/sqlglot/pull/5185) by [@NickCrews](https://github.com/NickCrews))*
|
33
|
+
- [`1d50fca`](https://github.com/tobymao/sqlglot/commit/1d50fca8ffc34e4acbc1b791c4cdf5f184a748db) - improve transpilation of st_point and st_distance *(PR [#5194](https://github.com/tobymao/sqlglot/pull/5194) by [@georgesittas](https://github.com/georgesittas))*
|
34
|
+
- [`756ec3b`](https://github.com/tobymao/sqlglot/commit/756ec3b65db1eb2572d017a3ac12ece6bb44c726) - **parser**: SET OPERATORS with pipe syntax *(PR [#5184](https://github.com/tobymao/sqlglot/pull/5184) by [@geooo109](https://github.com/geooo109))*
|
35
|
+
|
36
|
+
### :bug: Bug Fixes
|
37
|
+
- [`6a2cb39`](https://github.com/tobymao/sqlglot/commit/6a2cb39d0ceec091dc4fc228f26d4f457729a3cf) - **parser**: virtual column with AS(expr) as ComputedColumnConstraint *(PR [#5180](https://github.com/tobymao/sqlglot/pull/5180) by [@geooo109](https://github.com/geooo109))*
|
38
|
+
- :arrow_lower_right: *fixes issue [#5173](https://github.com/tobymao/sqlglot/issues/5173) opened by [@suyah](https://github.com/suyah)*
|
39
|
+
- [`c87ae02`](https://github.com/tobymao/sqlglot/commit/c87ae02aa263be8463ca7283ebd090385a4bfd59) - **sqlite**: Add REPLACE to command tokens *(PR [#5192](https://github.com/tobymao/sqlglot/pull/5192) by [@VaggelisD](https://github.com/VaggelisD))*
|
40
|
+
- :arrow_lower_right: *fixes issue [#5187](https://github.com/tobymao/sqlglot/issues/5187) opened by [@stefanmalanik](https://github.com/stefanmalanik)*
|
41
|
+
- [`4b89afd`](https://github.com/tobymao/sqlglot/commit/4b89afdcc0063e70cbc64165c7f1f5102afaa87c) - **starrocks**: array_agg_transpilation_fix *(PR [#5190](https://github.com/tobymao/sqlglot/pull/5190) by [@Swathiraj23](https://github.com/Swathiraj23))*
|
42
|
+
- [`461b054`](https://github.com/tobymao/sqlglot/commit/461b0548832ab8d916c3a6638f27a49f681109fe) - **postgres**: support use_spheroid argument in ST_DISTANCE *(commit by [@georgesittas](https://github.com/georgesittas))*
|
43
|
+
|
44
|
+
### :wrench: Chores
|
45
|
+
- [`83de4e1`](https://github.com/tobymao/sqlglot/commit/83de4e11bc1547aa22b275b20c0326dfbe43b2b8) - improve benchmark result displaying *(PR [#5176](https://github.com/tobymao/sqlglot/pull/5176) by [@georgesittas](https://github.com/georgesittas))*
|
46
|
+
- [`5d5dc2f`](https://github.com/tobymao/sqlglot/commit/5d5dc2fa471bd53730e03ac8039804221949f843) - Clean up exp.ArrayIntersect PR *(PR [#5193](https://github.com/tobymao/sqlglot/pull/5193) by [@VaggelisD](https://github.com/VaggelisD))*
|
47
|
+
|
48
|
+
|
4
49
|
## [v26.25.3] - 2025-06-04
|
5
50
|
### :sparkles: New Features
|
6
51
|
- [`964b4a1`](https://github.com/tobymao/sqlglot/commit/964b4a1e367e00e243b80edf677cd48d453ed31e) - add line/col position for Star *(commit by [@georgesittas](https://github.com/georgesittas))*
|
@@ -4794,3 +4839,4 @@ Changelog
|
|
4794
4839
|
[v26.25.1]: https://github.com/tobymao/sqlglot/compare/v26.25.0...v26.25.1
|
4795
4840
|
[v26.25.2]: https://github.com/tobymao/sqlglot/compare/v26.25.1...v26.25.2
|
4796
4841
|
[v26.25.3]: https://github.com/tobymao/sqlglot/compare/v26.25.2...v26.25.3
|
4842
|
+
[v26.26.0]: https://github.com/tobymao/sqlglot/compare/v26.25.3...v26.26.0
|
@@ -557,6 +557,7 @@ class Hive(Dialect):
|
|
557
557
|
exp.GenerateDateArray: sequence_sql,
|
558
558
|
exp.If: if_sql(),
|
559
559
|
exp.ILike: no_ilike_sql,
|
560
|
+
exp.IntDiv: lambda self, e: self.binary(e, "DIV"),
|
560
561
|
exp.IsNan: rename_func("ISNAN"),
|
561
562
|
exp.JSONExtract: lambda self, e: self.func("GET_JSON_OBJECT", e.this, e.expression),
|
562
563
|
exp.JSONExtractScalar: lambda self, e: self.func(
|
@@ -489,6 +489,27 @@ class MySQL(Dialect):
|
|
489
489
|
VALUES_FOLLOWED_BY_PAREN = False
|
490
490
|
SUPPORTS_PARTITION_SELECTION = True
|
491
491
|
|
492
|
+
def _parse_generated_as_identity(
|
493
|
+
self,
|
494
|
+
) -> (
|
495
|
+
exp.GeneratedAsIdentityColumnConstraint
|
496
|
+
| exp.ComputedColumnConstraint
|
497
|
+
| exp.GeneratedAsRowColumnConstraint
|
498
|
+
):
|
499
|
+
this = super()._parse_generated_as_identity()
|
500
|
+
|
501
|
+
if self._match_texts(("STORED", "VIRTUAL")):
|
502
|
+
persisted = self._prev.text.upper() == "STORED"
|
503
|
+
|
504
|
+
if isinstance(this, exp.ComputedColumnConstraint):
|
505
|
+
this.set("persisted", persisted)
|
506
|
+
elif isinstance(this, exp.GeneratedAsIdentityColumnConstraint):
|
507
|
+
this = self.expression(
|
508
|
+
exp.ComputedColumnConstraint, this=this.expression, persisted=persisted
|
509
|
+
)
|
510
|
+
|
511
|
+
return this
|
512
|
+
|
492
513
|
def _parse_primary_key_part(self) -> t.Optional[exp.Expression]:
|
493
514
|
this = self._parse_id_var()
|
494
515
|
if not self._match(TokenType.L_PAREN):
|
@@ -1154,6 +1175,10 @@ class MySQL(Dialect):
|
|
1154
1175
|
"zerofill",
|
1155
1176
|
}
|
1156
1177
|
|
1178
|
+
def computedcolumnconstraint_sql(self, expression: exp.ComputedColumnConstraint) -> str:
|
1179
|
+
persisted = "STORED" if expression.args.get("persisted") else "VIRTUAL"
|
1180
|
+
return f"GENERATED ALWAYS AS ({self.sql(expression.this.unnest())}) {persisted}"
|
1181
|
+
|
1157
1182
|
def array_sql(self, expression: exp.Array) -> str:
|
1158
1183
|
self.unsupported("Arrays are not supported by MySQL")
|
1159
1184
|
return self.function_fallback_sql(expression)
|
@@ -512,6 +512,18 @@ class Postgres(Dialect):
|
|
512
512
|
|
513
513
|
return this
|
514
514
|
|
515
|
+
def _parse_user_defined_type(
|
516
|
+
self, identifier: exp.Identifier
|
517
|
+
) -> t.Optional[exp.Expression]:
|
518
|
+
udt_type: exp.Identifier | exp.Dot = identifier
|
519
|
+
|
520
|
+
while self._match(TokenType.DOT):
|
521
|
+
part = self._parse_id_var()
|
522
|
+
if part:
|
523
|
+
udt_type = exp.Dot(this=udt_type, expression=part)
|
524
|
+
|
525
|
+
return exp.DataType.build(udt_type, udt=True)
|
526
|
+
|
515
527
|
class Generator(generator.Generator):
|
516
528
|
SINGLE_STRING_INTERVAL = True
|
517
529
|
RENAME_TABLE_WITH_DB = False
|
@@ -863,8 +863,14 @@ class Snowflake(Dialect):
|
|
863
863
|
properties=self._parse_properties(),
|
864
864
|
)
|
865
865
|
|
866
|
-
def _parse_get(self) ->
|
866
|
+
def _parse_get(self) -> t.Optional[exp.Expression]:
|
867
867
|
start = self._prev
|
868
|
+
|
869
|
+
# If we detect GET( then we need to parse a function, not a statement
|
870
|
+
if self._match(TokenType.L_PAREN):
|
871
|
+
self._retreat(self._index - 2)
|
872
|
+
return self._parse_expression()
|
873
|
+
|
868
874
|
target = self._parse_location_path()
|
869
875
|
|
870
876
|
# Parse as command if unquoted file path
|
@@ -1100,6 +1106,7 @@ class Snowflake(Dialect):
|
|
1100
1106
|
self, e, func_name="CHARINDEX", supports_position=True
|
1101
1107
|
),
|
1102
1108
|
exp.StrToDate: lambda self, e: self.func("DATE", e.this, self.format_time(e)),
|
1109
|
+
exp.StringToArray: rename_func("STRTOK_TO_ARRAY"),
|
1103
1110
|
exp.Stuff: rename_func("INSERT"),
|
1104
1111
|
exp.StPoint: rename_func("ST_MAKEPOINT"),
|
1105
1112
|
exp.TimeAdd: date_delta_sql("TIMEADD"),
|
@@ -109,7 +109,9 @@ class SQLite(Dialect):
|
|
109
109
|
"DATETIME": lambda args: exp.Anonymous(this="DATETIME", expressions=args),
|
110
110
|
"TIME": lambda args: exp.Anonymous(this="TIME", expressions=args),
|
111
111
|
}
|
112
|
+
|
112
113
|
STRING_ALIASES = True
|
114
|
+
ALTER_RENAME_REQUIRES_COLUMN = False
|
113
115
|
|
114
116
|
def _parse_unique(self) -> exp.UniqueColumnConstraint:
|
115
117
|
# Do not consume more tokens if UNIQUE is used as a standalone constraint, e.g:
|
@@ -1724,15 +1724,15 @@ class Column(Condition):
|
|
1724
1724
|
if self.args.get(part)
|
1725
1725
|
]
|
1726
1726
|
|
1727
|
-
def to_dot(self) -> Dot | Identifier:
|
1727
|
+
def to_dot(self, include_dots: bool = True) -> Dot | Identifier:
|
1728
1728
|
"""Converts the column into a dot expression."""
|
1729
1729
|
parts = self.parts
|
1730
1730
|
parent = self.parent
|
1731
1731
|
|
1732
|
-
|
1733
|
-
|
1732
|
+
if include_dots:
|
1733
|
+
while isinstance(parent, Dot):
|
1734
1734
|
parts.append(parent.expression)
|
1735
|
-
|
1735
|
+
parent = parent.parent
|
1736
1736
|
|
1737
1737
|
return Dot.build(deepcopy(parts)) if len(parts) > 1 else parts[0]
|
1738
1738
|
|
@@ -4753,6 +4753,8 @@ class DataType(Expression):
|
|
4753
4753
|
if udt:
|
4754
4754
|
return DataType(this=DataType.Type.USERDEFINED, kind=dtype, **kwargs)
|
4755
4755
|
raise
|
4756
|
+
elif isinstance(dtype, (Identifier, Dot)) and udt:
|
4757
|
+
return DataType(this=DataType.Type.USERDEFINED, kind=dtype, **kwargs)
|
4756
4758
|
elif isinstance(dtype, DataType.Type):
|
4757
4759
|
data_type_exp = DataType(this=dtype)
|
4758
4760
|
elif isinstance(dtype, DataType):
|
@@ -4794,9 +4796,6 @@ class DataType(Expression):
|
|
4794
4796
|
return False
|
4795
4797
|
|
4796
4798
|
|
4797
|
-
DATA_TYPE = t.Union[str, DataType, DataType.Type]
|
4798
|
-
|
4799
|
-
|
4800
4799
|
# https://www.postgresql.org/docs/15/datatype-pseudo.html
|
4801
4800
|
class PseudoType(DataType):
|
4802
4801
|
arg_types = {"this": True}
|
@@ -4926,6 +4925,10 @@ class AddConstraint(Expression):
|
|
4926
4925
|
arg_types = {"expressions": True}
|
4927
4926
|
|
4928
4927
|
|
4928
|
+
class AddPartition(Expression):
|
4929
|
+
arg_types = {"this": True, "exists": False}
|
4930
|
+
|
4931
|
+
|
4929
4932
|
class AttachOption(Expression):
|
4930
4933
|
arg_types = {"this": True, "expression": False}
|
4931
4934
|
|
@@ -5026,6 +5029,9 @@ class Dot(Binary):
|
|
5026
5029
|
return parts
|
5027
5030
|
|
5028
5031
|
|
5032
|
+
DATA_TYPE = t.Union[str, Identifier, Dot, DataType, DataType.Type]
|
5033
|
+
|
5034
|
+
|
5029
5035
|
class DPipe(Binary):
|
5030
5036
|
arg_types = {"this": True, "expression": True, "safe": False}
|
5031
5037
|
|
@@ -5587,7 +5593,7 @@ class String(Func):
|
|
5587
5593
|
|
5588
5594
|
|
5589
5595
|
class StringToArray(Func):
|
5590
|
-
arg_types = {"this": True, "expression":
|
5596
|
+
arg_types = {"this": True, "expression": False, "null": False}
|
5591
5597
|
_sql_names = ["STRING_TO_ARRAY", "SPLIT_BY_STRING", "STRTOK_TO_ARRAY"]
|
5592
5598
|
|
5593
5599
|
|
@@ -3498,6 +3498,10 @@ class Generator(metaclass=_Generator):
|
|
3498
3498
|
def addconstraint_sql(self, expression: exp.AddConstraint) -> str:
|
3499
3499
|
return f"ADD {self.expressions(expression)}"
|
3500
3500
|
|
3501
|
+
def addpartition_sql(self, expression: exp.AddPartition) -> str:
|
3502
|
+
exists = "IF NOT EXISTS " if expression.args.get("exists") else ""
|
3503
|
+
return f"ADD {exists}{self.sql(expression.this)}"
|
3504
|
+
|
3501
3505
|
def distinct_sql(self, expression: exp.Distinct) -> str:
|
3502
3506
|
this = self.expressions(expression, flat=True)
|
3503
3507
|
|