sqlglot 30.22.0__tar.gz → 30.24.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-30.22.0 → sqlglot-30.24.0}/CHANGELOG.md +259 -0
- {sqlglot-30.22.0/sqlglot.egg-info → sqlglot-30.24.0}/PKG-INFO +3 -3
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/_version.py +3 -3
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/anonymize.py +1 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/athena.py +17 -1
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/clickhouse.py +1 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/databricks.py +1 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/dialect.py +40 -1
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/oracle.py +28 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/postgres.py +4 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/snowflake.py +5 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/starrocks.py +18 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/expressions/array.py +1 -5
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/expressions/builders.py +54 -5
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/expressions/constraints.py +1 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/expressions/core.py +13 -3
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/expressions/ddl.py +2 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/expressions/json.py +1 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/expressions/properties.py +17 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/expressions/query.py +17 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generator.py +44 -2
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/athena.py +5 -1
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/bigquery.py +142 -1
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/clickhouse.py +35 -2
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/doris.py +6 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/duckdb.py +45 -42
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/fabric.py +5 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/hive.py +4 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/mysql.py +3 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/oracle.py +22 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/postgres.py +8 -3
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/presto.py +16 -8
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/snowflake.py +15 -7
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/spark2.py +24 -2
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/starrocks.py +56 -4
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/teradata.py +30 -1
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/helper.py +17 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/optimizer/annotate_types.py +24 -16
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/optimizer/merge_subqueries.py +7 -3
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/optimizer/optimize_joins.py +5 -1
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/optimizer/qualify_columns.py +36 -12
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/optimizer/qualify_tables.py +4 -1
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/optimizer/scope.py +8 -7
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/optimizer/simplify.py +23 -5
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/optimizer/unnest_subqueries.py +32 -3
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parser.py +177 -44
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/athena.py +8 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/clickhouse.py +11 -1
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/doris.py +40 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/dremio.py +3 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/drill.py +3 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/duckdb.py +41 -8
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/hive.py +13 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/mysql.py +84 -3
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/oracle.py +80 -3
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/postgres.py +4 -1
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/presto.py +2 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/prql.py +2 -8
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/redshift.py +3 -1
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/singlestore.py +3 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/snowflake.py +4 -4
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/spark2.py +11 -5
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/sqlite.py +14 -1
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/starrocks.py +145 -11
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/teradata.py +59 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/trino.py +6 -1
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/tokenizer_core.py +4 -1
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/tokens.py +3 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/transforms.py +3 -3
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/typing/__init__.py +1 -1
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/typing/duckdb.py +18 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0/sqlglot.egg-info}/PKG-INFO +3 -3
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot.egg-info/SOURCES.txt +1 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot.egg-info/requires.txt +2 -2
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot.egg-info/scm_file_list.json +1 -0
- sqlglot-30.24.0/sqlglot.egg-info/scm_version.json +8 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglotc/setup.py +17 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_athena.py +36 -1
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_bigquery.py +74 -2
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_clickhouse.py +108 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_databricks.py +23 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_dialect.py +199 -13
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_doris.py +63 -1
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_duckdb.py +108 -30
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_fabric.py +7 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_hive.py +32 -13
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_mysql.py +124 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_oracle.py +277 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_postgres.py +124 -2
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_presto.py +10 -16
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_snowflake.py +10 -19
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_spark.py +52 -11
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_sqlite.py +40 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_starrocks.py +220 -1
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_teradata.py +76 -1
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_trino.py +125 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/eliminate_subqueries.sql +4 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/merge_subqueries.sql +52 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/optimizer.sql +18 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/qualify_columns.sql +21 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/qualify_tables.sql +25 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/simplify.sql +64 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/test_anonymize.py +1 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/test_build.py +2 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/test_expressions.py +111 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/test_generator.py +9 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/test_helper.py +21 -1
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/test_optimizer.py +197 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/test_parser.py +132 -6
- sqlglot-30.24.0/tests/test_sqlglotc.py +113 -0
- sqlglot-30.22.0/sqlglot.egg-info/scm_version.json +0 -8
- {sqlglot-30.22.0 → sqlglot-30.24.0}/.gitignore +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/.gitmodules +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/.gitpod.yml +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/.pre-commit-config.yaml +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/AGENTS.md +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/CLAUDE.md +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/CONTRIBUTING.md +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/LICENSE +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/MANIFEST.in +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/Makefile +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/README.md +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/pyproject.toml +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/setup.cfg +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/setup.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/__init__.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/__main__.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/_typing.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/__init__.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/bigquery.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/dax.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/doris.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/dremio.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/drill.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/druid.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/duckdb.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/dune.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/exasol.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/fabric.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/hive.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/materialize.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/mysql.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/presto.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/prql.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/redshift.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/risingwave.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/singlestore.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/solr.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/spark.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/spark2.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/sqlite.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/tableau.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/teradata.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/trino.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/dialects/tsql.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/diff.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/errors.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/executor/__init__.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/executor/context.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/executor/env.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/executor/python.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/executor/table.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/expressions/__init__.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/expressions/aggregate.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/expressions/datatypes.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/expressions/dml.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/expressions/functions.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/expressions/math.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/expressions/string.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/expressions/temporal.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/__init__.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/databricks.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/dax.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/dremio.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/drill.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/druid.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/dune.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/exasol.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/materialize.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/prql.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/python.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/redshift.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/risingwave.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/singlestore.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/solr.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/spark.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/sqlite.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/tableau.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/trino.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/generators/tsql.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/jsonpath.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/lineage.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/optimizer/__init__.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/optimizer/canonicalize.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/optimizer/canonicalize_internal_names.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/optimizer/eliminate_ctes.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/optimizer/eliminate_joins.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/optimizer/eliminate_subqueries.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/optimizer/helpers.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/optimizer/isolate_table_selects.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/optimizer/journal.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/optimizer/normalize.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/optimizer/normalize_identifiers.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/optimizer/optimizer.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/optimizer/pushdown_predicates.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/optimizer/pushdown_projections.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/optimizer/qualify.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/optimizer/resolver.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/__init__.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/base.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/bigquery.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/databricks.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/dax.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/druid.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/dune.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/exasol.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/fabric.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/materialize.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/risingwave.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/solr.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/spark.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/tableau.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/parsers/tsql.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/planner.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/py.typed +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/schema.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/serde.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/time.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/trie.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/typing/bigquery.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/typing/clickhouse.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/typing/databricks.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/typing/hive.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/typing/mysql.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/typing/postgres.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/typing/presto.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/typing/redshift.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/typing/snowflake.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/typing/spark.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/typing/spark2.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot/typing/tsql.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot.egg-info/dependency_links.txt +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot.egg-info/top_level.txt +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglot.png +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglotc/MANIFEST.in +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/sqlglotc/pyproject.toml +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/__init__.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/__init__.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_dax.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_dremio.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_drill.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_druid.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_dune.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_exasol.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_materialize.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_pipe_syntax.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_prql.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_redshift.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_risingwave.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_singlestore.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_solr.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_tableau.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/dialects/test_tsql.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/identity.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/jsonpath/LICENSE +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/jsonpath/cts.json +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/annotate_functions.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/annotate_types.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/canonicalize.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/canonicalize_internal_names.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/eliminate_ctes.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/eliminate_joins.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/isolate_table_selects.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/normalize.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/normalize_identifiers.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/optimize_joins.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/pushdown_cte_alias_columns.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/pushdown_predicates.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/pushdown_projections.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/qualify_columns__invalid.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/qualify_columns__with_invisible.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/qualify_columns_ddl.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/quote_identifiers.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-ds/call_center.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-ds/catalog_page.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-ds/catalog_returns.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-ds/catalog_sales.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-ds/customer.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-ds/customer_address.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-ds/customer_demographics.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-ds/date_dim.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-ds/household_demographics.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-ds/income_band.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-ds/inventory.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-ds/item.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-ds/promotion.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-ds/reason.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-ds/ship_mode.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-ds/store.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-ds/store_returns.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-ds/store_sales.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-ds/time_dim.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-ds/tpc-ds.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-ds/warehouse.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-ds/web_page.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-ds/web_returns.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-ds/web_sales.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-ds/web_site.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-h/customer.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-h/lineitem.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-h/nation.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-h/orders.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-h/part.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-h/partsupp.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-h/region.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-h/supplier.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/tpc-h/tpc-h.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/optimizer/unnest_subqueries.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/partial.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/fixtures/pretty.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/gen_fixtures.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/helpers.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/leakcheck.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/sqlglot/__init__.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/test_dialect_entry_points.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/test_dialect_imports.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/test_diff.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/test_docs.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/test_errors.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/test_executor.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/test_integration_loader.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/test_jsonpath.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/test_lineage.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/test_schema.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/test_serde.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/test_time.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/test_tokens.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/test_transforms.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/test_transpile.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.24.0}/tests/test_typing.py +0 -0
|
@@ -1,6 +1,263 @@
|
|
|
1
1
|
Changelog
|
|
2
2
|
=========
|
|
3
3
|
|
|
4
|
+
## [v30.23.0] - 2026-10-14
|
|
5
|
+
### :boom: BREAKING CHANGES
|
|
6
|
+
- due to [`cf39265`](https://github.com/tobymao/sqlglot/commit/cf39265a3e8efd8c32bab7f9c9b4f123fdfbf682) - hash flag for case-sensitive nodes [CLAUDE] *(PR [#8599](https://github.com/tobymao/sqlglot/pull/8599) by [@laravioli](https://github.com/laravioli))*:
|
|
7
|
+
|
|
8
|
+
hash flag for case-sensitive nodes [CLAUDE] (#8599)
|
|
9
|
+
|
|
10
|
+
- due to [`4d7d7ca`](https://github.com/tobymao/sqlglot/commit/4d7d7ca94250269dc1903d7175b7b8aa96e9a480) - generate JSONExtractRaw for JSON-valued extraction *(PR [#8601](https://github.com/tobymao/sqlglot/pull/8601) by [@ebarkhordar](https://github.com/ebarkhordar))*:
|
|
11
|
+
|
|
12
|
+
generate JSONExtractRaw for JSON-valued extraction (#8601)
|
|
13
|
+
|
|
14
|
+
- due to [`623dc88`](https://github.com/tobymao/sqlglot/commit/623dc8889ba7bffa9b006fd1d1641715b73d5ce4) - infer correct types for temporal interval arithmetic *(PR [#8622](https://github.com/tobymao/sqlglot/pull/8622) by [@georgesittas](https://github.com/georgesittas))*:
|
|
15
|
+
|
|
16
|
+
infer correct types for temporal interval arithmetic (#8622)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### :sparkles: New Features
|
|
20
|
+
- [`8abe7f8`](https://github.com/tobymao/sqlglot/commit/8abe7f8382c80f95cb1e5a8a985969f6c11fd03a) - **starrocks**: parse TIME_SLICE into exp.TimeSlice [CLAUDE] *(PR [#8555](https://github.com/tobymao/sqlglot/pull/8555) by [@nytai](https://github.com/nytai))*
|
|
21
|
+
- [`f3a6eb9`](https://github.com/tobymao/sqlglot/commit/f3a6eb95e424ef03bf20fca05a0431a666946e90) - **doris**: parse full-text search operators [CLAUDE] *(PR [#8585](https://github.com/tobymao/sqlglot/pull/8585) by [@kaya-abdullah](https://github.com/kaya-abdullah))*
|
|
22
|
+
- :arrow_lower_right: *addresses issue [#8584](https://github.com/tobymao/sqlglot/issues/8584) opened by [@kaya-abdullah](https://github.com/kaya-abdullah)*
|
|
23
|
+
- [`3ba19ee`](https://github.com/tobymao/sqlglot/commit/3ba19eedd7b381f990f9926266457eda7a60095b) - **starrocks**: support AGGREGATE KEY tables [CLAUDE] *(PR [#8591](https://github.com/tobymao/sqlglot/pull/8591) by [@nytai](https://github.com/nytai))*
|
|
24
|
+
- [`9114355`](https://github.com/tobymao/sqlglot/commit/9114355463fd02a9b505c869edb0561503a07b19) - **mysql**: Allow constraints without names. *(PR [#8600](https://github.com/tobymao/sqlglot/pull/8600) by [@burnison](https://github.com/burnison))*
|
|
25
|
+
- [`6202d94`](https://github.com/tobymao/sqlglot/commit/6202d94764305621117dc6229cda79575ca103e5) - **starrocks**: support HLL columns and the HLL_UNION aggregation type [CLAUDE] *(PR [#8612](https://github.com/tobymao/sqlglot/pull/8612) by [@nytai](https://github.com/nytai))*
|
|
26
|
+
- [`0b00178`](https://github.com/tobymao/sqlglot/commit/0b0017821590b08497529d37387396adb6c3aa5b) - **spark**: parse all ALTER TABLE DROP COLUMN[S] forms [CLAUDE] *(PR [#8611](https://github.com/tobymao/sqlglot/pull/8611) by [@tsamaras](https://github.com/tsamaras))*
|
|
27
|
+
- [`59a96d8`](https://github.com/tobymao/sqlglot/commit/59a96d868a6b8ed114ac3e216201106fea8bc351) - **starrocks**: support REFRESH MATERIALIZED VIEW options [CLAUDE] *(PR [#8613](https://github.com/tobymao/sqlglot/pull/8613) by [@nytai](https://github.com/nytai))*
|
|
28
|
+
- [`676ba36`](https://github.com/tobymao/sqlglot/commit/676ba365497215dadf89c3fa57f4872529745650) - **mysql**: Support named `FOREIGN KEY` indexes. *(PR [#8615](https://github.com/tobymao/sqlglot/pull/8615) by [@burnison](https://github.com/burnison))*
|
|
29
|
+
- [`b679d0c`](https://github.com/tobymao/sqlglot/commit/b679d0cf8cad5bab7bb5004d9b8f8ce51d542b42) - **databricks**: match_recognize support closes [#8617](https://github.com/tobymao/sqlglot/pull/8617) *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
30
|
+
|
|
31
|
+
### :bug: Bug Fixes
|
|
32
|
+
- [`a00dc2e`](https://github.com/tobymao/sqlglot/commit/a00dc2e5c489214bea53bacbbeba8713f21ebce1) - **postgres**: improve json_value support closes [#8579](https://github.com/tobymao/sqlglot/pull/8579) *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
33
|
+
- [`ffb9721`](https://github.com/tobymao/sqlglot/commit/ffb9721df98984c62817701ec8cd895cb3b1ee82) - **oracle**: tokenize q'...' quoted string literals [CLAUDE] *(PR [#8582](https://github.com/tobymao/sqlglot/pull/8582) by [@DylanMerigaud](https://github.com/DylanMerigaud))*
|
|
34
|
+
- [`e237d59`](https://github.com/tobymao/sqlglot/commit/e237d5980e8084cd2eceb874280efc3f3369c0ba) - **optimizer**: keep the alias outside of COALESCE when unnesting a COUNT subquery [CLAUDE] *(PR [#8589](https://github.com/tobymao/sqlglot/pull/8589) by [@anishmehta24](https://github.com/anishmehta24))*
|
|
35
|
+
- [`98bedf6`](https://github.com/tobymao/sqlglot/commit/98bedf649b244d321782a213944320d54f7cc868) - **oracle**: parse partition clauses and flashback queries [CODEX] *(PR [#8588](https://github.com/tobymao/sqlglot/pull/8588) by [@yousefissa](https://github.com/yousefissa))*
|
|
36
|
+
- :arrow_lower_right: *fixes issue [#8587](https://github.com/tobymao/sqlglot/issues/8587) opened by [@cofin](https://github.com/cofin)*
|
|
37
|
+
- [`09481ce`](https://github.com/tobymao/sqlglot/commit/09481cec085106bc77fb584e4d322f7e179a5a11) - **optimizer**: qualify bare USING columns after SEMI/ANTI JOIN closes [#8590](https://github.com/tobymao/sqlglot/pull/8590) *(PR [#8592](https://github.com/tobymao/sqlglot/pull/8592) by [@ansh-rohilla](https://github.com/ansh-rohilla))*
|
|
38
|
+
- :arrow_lower_right: *fixes issue [#8590](https://github.com/tobymao/sqlglot/issues/8590) opened by [@jackr-xceleration](https://github.com/jackr-xceleration)*
|
|
39
|
+
- [`df0a300`](https://github.com/tobymao/sqlglot/commit/df0a3006c485010e2bde4f2b6ce16594885772f0) - **duckdb**: append on 1-based ARRAY_INSERT -1 *(PR [#8597](https://github.com/tobymao/sqlglot/pull/8597) by [@siddharthsarda](https://github.com/siddharthsarda))*
|
|
40
|
+
- [`7d9a6cd`](https://github.com/tobymao/sqlglot/commit/7d9a6cd599c41e4bd886c757e1b9e60b39bef70c) - allow `EXTERNAL FUNCTION` in Athena `CTAS` *(PR [#8602](https://github.com/tobymao/sqlglot/pull/8602) by [@matthias-Q](https://github.com/matthias-Q))*
|
|
41
|
+
- [`e38929e`](https://github.com/tobymao/sqlglot/commit/e38929edd78a20f74fc19fee819e14ac23add687) - **teradata**: default window aggregate frame to the whole partition [CLAUDE] *(PR [#8596](https://github.com/tobymao/sqlglot/pull/8596) by [@bhuvan-uda](https://github.com/bhuvan-uda))*
|
|
42
|
+
- :arrow_lower_right: *fixes issue [#8595](https://github.com/tobymao/sqlglot/issues/8595) opened by [@bhuvan-uda](https://github.com/bhuvan-uda)*
|
|
43
|
+
- [`cf39265`](https://github.com/tobymao/sqlglot/commit/cf39265a3e8efd8c32bab7f9c9b4f123fdfbf682) - **expressions**: hash flag for case-sensitive nodes [CLAUDE] *(PR [#8599](https://github.com/tobymao/sqlglot/pull/8599) by [@laravioli](https://github.com/laravioli))*
|
|
44
|
+
- :arrow_lower_right: *fixes issue [#8598](https://github.com/tobymao/sqlglot/issues/8598) opened by [@laravioli](https://github.com/laravioli)*
|
|
45
|
+
- [`ab0a291`](https://github.com/tobymao/sqlglot/commit/ab0a291f91f1ba8c32058340bf76738c4ea685ea) - **oracle**: normalize flashback timestamps and simplify parsing *(PR [#8608](https://github.com/tobymao/sqlglot/pull/8608) by [@georgesittas](https://github.com/georgesittas))*
|
|
46
|
+
- [`a0cc28b`](https://github.com/tobymao/sqlglot/commit/a0cc28b91c3d186801d478e83967e967b86c90dd) - **doris**: round-trip MATCH operands and quoted analyzers *(PR [#8607](https://github.com/tobymao/sqlglot/pull/8607) by [@georgesittas](https://github.com/georgesittas))*
|
|
47
|
+
- [`4d7d7ca`](https://github.com/tobymao/sqlglot/commit/4d7d7ca94250269dc1903d7175b7b8aa96e9a480) - **clickhouse**: generate JSONExtractRaw for JSON-valued extraction *(PR [#8601](https://github.com/tobymao/sqlglot/pull/8601) by [@ebarkhordar](https://github.com/ebarkhordar))*
|
|
48
|
+
- [`1f8d15b`](https://github.com/tobymao/sqlglot/commit/1f8d15bbd68586704666533b21a5b35d710d68f0) - convert DuckDB ARRAY_SLICE endpoints to SLICE lengths *(PR [#8609](https://github.com/tobymao/sqlglot/pull/8609) by [@georgesittas](https://github.com/georgesittas))*
|
|
49
|
+
- [`61c3ca4`](https://github.com/tobymao/sqlglot/commit/61c3ca4479c167d9c90d51f73184568769fa0635) - **oracle**: parse CREATE TABLE TABLESPACE *(PR [#8605](https://github.com/tobymao/sqlglot/pull/8605) by [@cmodiano](https://github.com/cmodiano))*
|
|
50
|
+
- [`08f2405`](https://github.com/tobymao/sqlglot/commit/08f2405cfddc874f4366cbcca9e25233fcb11281) - **oracle**: expand alternative quoting and support national literals *(PR [#8606](https://github.com/tobymao/sqlglot/pull/8606) by [@georgesittas](https://github.com/georgesittas))*
|
|
51
|
+
- :arrow_lower_right: *fixes issue [#8580](https://github.com/tobymao/sqlglot/issues/8580) opened by [@cmodiano](https://github.com/cmodiano)*
|
|
52
|
+
- [`5b949bd`](https://github.com/tobymao/sqlglot/commit/5b949bd6b7f1db1474a87ac34d3a9246fa7de237) - **oracle**: parse CREATE TABLE physical attributes and storage clauses closes [#8581](https://github.com/tobymao/sqlglot/pull/8581) *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
53
|
+
- [`ba643d3`](https://github.com/tobymao/sqlglot/commit/ba643d33285475774c3253551e1ed18ac89e6c22) - **clickhouse**: transpile RegexpCount to countMatches [CLAUDE] *(PR [#8616](https://github.com/tobymao/sqlglot/pull/8616) by [@ekut](https://github.com/ekut))*
|
|
54
|
+
- [`623dc88`](https://github.com/tobymao/sqlglot/commit/623dc8889ba7bffa9b006fd1d1641715b73d5ce4) - **duckdb**: infer correct types for temporal interval arithmetic *(PR [#8622](https://github.com/tobymao/sqlglot/pull/8622) by [@georgesittas](https://github.com/georgesittas))*
|
|
55
|
+
- [`b1b244b`](https://github.com/tobymao/sqlglot/commit/b1b244b1f38a3000c94a7b21ee6dfae1959dd4b2) - **optimizer**: qualify columns for SPLIT_TO_TABLE *(PR [#8625](https://github.com/tobymao/sqlglot/pull/8625) by [@andrjohns](https://github.com/andrjohns))*
|
|
56
|
+
- [`e92c222`](https://github.com/tobymao/sqlglot/commit/e92c22287ff73a66e9dece115acedb81133f0dbf) - **duckdb**: cast array elements to text before applying the ARRAY_TO_STRING null replacement [CLAUDE] *(PR [#8627](https://github.com/tobymao/sqlglot/pull/8627) by [@anishmehta24](https://github.com/anishmehta24))*
|
|
57
|
+
- [`fbda0b9`](https://github.com/tobymao/sqlglot/commit/fbda0b91481d679f17844af15fb998cc559533be) - **parser**: keep the whole statement when REFRESH falls back to a cmd *(PR [#8621](https://github.com/tobymao/sqlglot/pull/8621) by [@nytai](https://github.com/nytai))*
|
|
58
|
+
- [`fdba492`](https://github.com/tobymao/sqlglot/commit/fdba492cec5a1fbe012add7f1aed18f46739c2a3) - **optimizer**: include semi/anti join refs when identifying alias collisions *(PR [#8623](https://github.com/tobymao/sqlglot/pull/8623) by [@treysp](https://github.com/treysp))*
|
|
59
|
+
- [`2c7b928`](https://github.com/tobymao/sqlglot/commit/2c7b928071ed32e72b218011a1a3c011dba26b24) - **athena**: route by each engine's rules when the combined tokenizer fails [CLAUDE] *(PR [#8629](https://github.com/tobymao/sqlglot/pull/8629) by [@masiljangajji](https://github.com/masiljangajji))*
|
|
60
|
+
- :arrow_lower_right: *fixes issue [#8628](https://github.com/tobymao/sqlglot/issues/8628) opened by [@masiljangajji](https://github.com/masiljangajji)*
|
|
61
|
+
- [`ad8764a`](https://github.com/tobymao/sqlglot/commit/ad8764a0436a7b5c500b783ebe50dbf20c1e477c) - keep a replacement's grouping in replace_placeholders *(PR [#8624](https://github.com/tobymao/sqlglot/pull/8624) by [@tobymao](https://github.com/tobymao))*
|
|
62
|
+
|
|
63
|
+
### :wrench: Chores
|
|
64
|
+
- [`579789d`](https://github.com/tobymao/sqlglot/commit/579789dc3d368daf6aa0919ed5c0994187472a4b) - add support for Python 3.15 *(PR [#8586](https://github.com/tobymao/sqlglot/pull/8586) by [@Viicos](https://github.com/Viicos))*
|
|
65
|
+
- [`c0a9457`](https://github.com/tobymao/sqlglot/commit/c0a945740e55facdc7120c17cda2771dc55c7903) - **mysql**: tests for named FOREIGN KEY indexes *(commit by [@geooo109](https://github.com/geooo109))*
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
## [v30.22.0] - 2026-10-09
|
|
69
|
+
### :boom: BREAKING CHANGES
|
|
70
|
+
- due to [`5d997d9`](https://github.com/tobymao/sqlglot/commit/5d997d94d8041ed12db5abe7a1155b30df057b43) - Parse bare `ALTER TABLE ... DROP c`. *(PR [#8432](https://github.com/tobymao/sqlglot/pull/8432) by [@burnison](https://github.com/burnison))*:
|
|
71
|
+
|
|
72
|
+
Parse bare `ALTER TABLE ... DROP c`. (#8432)
|
|
73
|
+
|
|
74
|
+
- due to [`fdc0339`](https://github.com/tobymao/sqlglot/commit/fdc0339b219da56b4433198e3cd53e7604d53188) - decode string escapes and preserve byte literals *(PR [#8479](https://github.com/tobymao/sqlglot/pull/8479) by [@georgesittas](https://github.com/georgesittas))*:
|
|
75
|
+
|
|
76
|
+
decode string escapes and preserve byte literals (#8479)
|
|
77
|
+
|
|
78
|
+
- due to [`5cc5ef0`](https://github.com/tobymao/sqlglot/commit/5cc5ef046e8213dcb373c82f6c00fcf918fb4a5b) - preserve backslashes in string literals *(PR [#8481](https://github.com/tobymao/sqlglot/pull/8481) by [@georgesittas](https://github.com/georgesittas))*:
|
|
79
|
+
|
|
80
|
+
preserve backslashes in string literals (#8481)
|
|
81
|
+
|
|
82
|
+
- due to [`5fe5606`](https://github.com/tobymao/sqlglot/commit/5fe5606b905f38930017149c4a6e3d1b3a3a5616) - correct PostgreSQL, DuckDB, Redshift, and ClickHouse string escapes *(PR [#8484](https://github.com/tobymao/sqlglot/pull/8484) by [@georgesittas](https://github.com/georgesittas))*:
|
|
83
|
+
|
|
84
|
+
correct PostgreSQL, DuckDB, Redshift, and ClickHouse string escapes (#8484)
|
|
85
|
+
|
|
86
|
+
- due to [`fc4964b`](https://github.com/tobymao/sqlglot/commit/fc4964bbe8a8efdf28d2c4cbc7a5d66b160e7946) - support mixed-operation `ALTER`s. *(PR [#8419](https://github.com/tobymao/sqlglot/pull/8419) by [@burnison](https://github.com/burnison))*:
|
|
87
|
+
|
|
88
|
+
support mixed-operation `ALTER`s. (#8419)
|
|
89
|
+
|
|
90
|
+
- due to [`47b94d4`](https://github.com/tobymao/sqlglot/commit/47b94d424a05768a2e3b416cc4282b8449f8197f) - MySQL accepts non-CSV table options. *(PR [#8503](https://github.com/tobymao/sqlglot/pull/8503) by [@burnison](https://github.com/burnison))*:
|
|
91
|
+
|
|
92
|
+
MySQL accepts non-CSV table options. (#8503)
|
|
93
|
+
|
|
94
|
+
- due to [`a980f01`](https://github.com/tobymao/sqlglot/commit/a980f017130a5d9c485c53c878982155362ca4de) - scope preserved function names to their dialect *(PR [#8512](https://github.com/tobymao/sqlglot/pull/8512) by [@georgesittas](https://github.com/georgesittas))*:
|
|
95
|
+
|
|
96
|
+
scope preserved function names to their dialect (#8512)
|
|
97
|
+
|
|
98
|
+
- due to [`ee7567c`](https://github.com/tobymao/sqlglot/commit/ee7567c86d9a418cc517f80194e6fc35e075be4a) - expand stars in the order sources appear in FROM *(PR [#8529](https://github.com/tobymao/sqlglot/pull/8529) by [@VaggelisD](https://github.com/VaggelisD))*:
|
|
99
|
+
|
|
100
|
+
expand stars in the order sources appear in FROM (#8529)
|
|
101
|
+
|
|
102
|
+
- due to [`e3ed748`](https://github.com/tobymao/sqlglot/commit/e3ed74860fd5a44d31347b2e2cf62cf5030e9222) - support FROM-first multi-table INSERT [CLAUDE] *(PR [#8527](https://github.com/tobymao/sqlglot/pull/8527) by [@LeeChaeRok](https://github.com/LeeChaeRok))*:
|
|
103
|
+
|
|
104
|
+
support FROM-first multi-table INSERT [CLAUDE] (#8527)
|
|
105
|
+
|
|
106
|
+
- due to [`5b7b413`](https://github.com/tobymao/sqlglot/commit/5b7b413451e2a7a35bfc8c076d3b3636f8a7b203) - expand nested join constructs in qualify_tables *(PR [#8530](https://github.com/tobymao/sqlglot/pull/8530) by [@VaggelisD](https://github.com/VaggelisD))*:
|
|
107
|
+
|
|
108
|
+
expand nested join constructs in qualify_tables (#8530)
|
|
109
|
+
|
|
110
|
+
- due to [`6de29fd`](https://github.com/tobymao/sqlglot/commit/6de29fdce762e564002e0ae0d8d09c388ebc4cfb) - FROM-first multi-table INSERT cleanup *(PR [#8535](https://github.com/tobymao/sqlglot/pull/8535) by [@geooo109](https://github.com/geooo109))*:
|
|
111
|
+
|
|
112
|
+
FROM-first multi-table INSERT cleanup (#8535)
|
|
113
|
+
|
|
114
|
+
- due to [`e1e0d2e`](https://github.com/tobymao/sqlglot/commit/e1e0d2e52f45247bfa0ab815eb8a7388ea50a0e8) - preserve precision for timestamp and time literals ([#8534](https://github.com/tobymao/sqlglot/pull/8534)) *(PR [#8538](https://github.com/tobymao/sqlglot/pull/8538) by [@ansh-rohilla](https://github.com/ansh-rohilla))*:
|
|
115
|
+
|
|
116
|
+
preserve precision for timestamp and time literals (#8534) (#8538)
|
|
117
|
+
|
|
118
|
+
- due to [`f5dd70b`](https://github.com/tobymao/sqlglot/commit/f5dd70bff7ebce048d6bdd3f782328104c6c119d) - truncate integer division towards zero instead of rounding *(PR [#8532](https://github.com/tobymao/sqlglot/pull/8532) by [@georgesittas](https://github.com/georgesittas))*:
|
|
119
|
+
|
|
120
|
+
truncate integer division towards zero instead of rounding (#8532)
|
|
121
|
+
|
|
122
|
+
- due to [`b7e5153`](https://github.com/tobymao/sqlglot/commit/b7e515399a589e720b2bd081e5bb395f408feff8) - preserve bracket flags in gen serialization *(commit by [@georgesittas](https://github.com/georgesittas))*:
|
|
123
|
+
|
|
124
|
+
preserve bracket flags in gen serialization
|
|
125
|
+
|
|
126
|
+
- due to [`aa64321`](https://github.com/tobymao/sqlglot/commit/aa64321744bcb38828146b33ead1c0529dd64652) - expand USING columns first in star expansion *(PR [#8536](https://github.com/tobymao/sqlglot/pull/8536) by [@VaggelisD](https://github.com/VaggelisD))*:
|
|
127
|
+
|
|
128
|
+
expand USING columns first in star expansion (#8536)
|
|
129
|
+
|
|
130
|
+
- due to [`f2b81bf`](https://github.com/tobymao/sqlglot/commit/f2b81bfb2d2cf5b14b01be5211e022b23b6bec19) - annotate FLOOR, CEIL and SIGN by their arg type *(PR [#8547](https://github.com/tobymao/sqlglot/pull/8547) by [@georgesittas](https://github.com/georgesittas))*:
|
|
131
|
+
|
|
132
|
+
annotate FLOOR, CEIL and SIGN by their arg type (#8547)
|
|
133
|
+
|
|
134
|
+
- due to [`7f1cf60`](https://github.com/tobymao/sqlglot/commit/7f1cf60c884868a295f76dfd42745b931dd9cfbb) - Make `ALTER` actions optional. *(PR [#8539](https://github.com/tobymao/sqlglot/pull/8539) by [@burnison](https://github.com/burnison))*:
|
|
135
|
+
|
|
136
|
+
Make `ALTER` actions optional. (#8539)
|
|
137
|
+
|
|
138
|
+
- due to [`1e2cc21`](https://github.com/tobymao/sqlglot/commit/1e2cc210e2a336defd9037dfc66d9dae1e72780e) - preserve CASE branches before always-true conditions *(PR [#8572](https://github.com/tobymao/sqlglot/pull/8572) by [@georgesittas](https://github.com/georgesittas))*:
|
|
139
|
+
|
|
140
|
+
preserve CASE branches before always-true conditions (#8572)
|
|
141
|
+
|
|
142
|
+
- due to [`9f2f4cd`](https://github.com/tobymao/sqlglot/commit/9f2f4cd5a2d25e967142d0c90d107128d4dc70e5) - resolve correlated UNNEST fields from projection types *(PR [#8571](https://github.com/tobymao/sqlglot/pull/8571) by [@georgesittas](https://github.com/georgesittas))*:
|
|
143
|
+
|
|
144
|
+
resolve correlated UNNEST fields from projection types (#8571)
|
|
145
|
+
|
|
146
|
+
- due to [`6683ad2`](https://github.com/tobymao/sqlglot/commit/6683ad28a45a8b803de0ce650d737adec609fbd4) - resolve correlated UNNEST fields from projection types *(PR [#8571](https://github.com/tobymao/sqlglot/pull/8571) by [@georgesittas](https://github.com/georgesittas))*:
|
|
147
|
+
|
|
148
|
+
resolve correlated UNNEST fields from projection types (#8571)
|
|
149
|
+
|
|
150
|
+
- due to [`51864e7`](https://github.com/tobymao/sqlglot/commit/51864e76b42b26f1fdeb829e349bd43db4d81598) - edge case in array generation *(commit by [@georgesittas](https://github.com/georgesittas))*:
|
|
151
|
+
|
|
152
|
+
edge case in array generation
|
|
153
|
+
|
|
154
|
+
- due to [`1d8e1c9`](https://github.com/tobymao/sqlglot/commit/1d8e1c9963e36652a57dd837989b3e4bcb7fc90a) - annotate sha2 for redshift properly *(PR [#8577](https://github.com/tobymao/sqlglot/pull/8577) by [@georgesittas](https://github.com/georgesittas))*:
|
|
155
|
+
|
|
156
|
+
annotate sha2 for redshift properly (#8577)
|
|
157
|
+
|
|
158
|
+
- due to [`b8333a8`](https://github.com/tobymao/sqlglot/commit/b8333a81f02fafaa040bb3b8535f1c17eb9caf0c) - remove infer_schema from optimizer *(PR [#8552](https://github.com/tobymao/sqlglot/pull/8552) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*:
|
|
159
|
+
|
|
160
|
+
remove infer_schema from optimizer (#8552)
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
### :sparkles: New Features
|
|
164
|
+
- [`5d997d9`](https://github.com/tobymao/sqlglot/commit/5d997d94d8041ed12db5abe7a1155b30df057b43) - **parser**: Parse bare `ALTER TABLE ... DROP c`. *(PR [#8432](https://github.com/tobymao/sqlglot/pull/8432) by [@burnison](https://github.com/burnison))*
|
|
165
|
+
- [`db3931c`](https://github.com/tobymao/sqlglot/commit/db3931c8bac748038751ce20f40fd6c54619a7e1) - **mysql**: Fix sqlglot tokenizer to incorporate mysql rules *(PR [#8465](https://github.com/tobymao/sqlglot/pull/8465) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
|
|
166
|
+
- [`fc4964b`](https://github.com/tobymao/sqlglot/commit/fc4964bbe8a8efdf28d2c4cbc7a5d66b160e7946) - **parser**: support mixed-operation `ALTER`s. *(PR [#8419](https://github.com/tobymao/sqlglot/pull/8419) by [@burnison](https://github.com/burnison))*
|
|
167
|
+
- [`47b94d4`](https://github.com/tobymao/sqlglot/commit/47b94d424a05768a2e3b416cc4282b8449f8197f) - **parser**: MySQL accepts non-CSV table options. *(PR [#8503](https://github.com/tobymao/sqlglot/pull/8503) by [@burnison](https://github.com/burnison))*
|
|
168
|
+
- [`e3ed748`](https://github.com/tobymao/sqlglot/commit/e3ed74860fd5a44d31347b2e2cf62cf5030e9222) - **hive**: support FROM-first multi-table INSERT [CLAUDE] *(PR [#8527](https://github.com/tobymao/sqlglot/pull/8527) by [@LeeChaeRok](https://github.com/LeeChaeRok))*
|
|
169
|
+
- [`7f1cf60`](https://github.com/tobymao/sqlglot/commit/7f1cf60c884868a295f76dfd42745b931dd9cfbb) - **parser**: Make `ALTER` actions optional. *(PR [#8539](https://github.com/tobymao/sqlglot/pull/8539) by [@burnison](https://github.com/burnison))*
|
|
170
|
+
- [`54e1455`](https://github.com/tobymao/sqlglot/commit/54e1455fd7566b2f0b8450a49b5c274b6161d625) - **databricks**: Retain LIMIT ALL in recursive CTEs during roundtrip *(PR [#8537](https://github.com/tobymao/sqlglot/pull/8537) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
|
|
171
|
+
- :arrow_lower_right: *addresses issue [#8513](https://github.com/tobymao/sqlglot/issues/8513) opened by [@paddy-devan](https://github.com/paddy-devan)*
|
|
172
|
+
- [`2471dd6`](https://github.com/tobymao/sqlglot/commit/2471dd6f91b10bdba2a26d012e454ce3923d427e) - **optimizer**: ! annotate function Mode for duckdb *(PR [#8560](https://github.com/tobymao/sqlglot/pull/8560) by [@Anuja006](https://github.com/Anuja006))*
|
|
173
|
+
- [`9214453`](https://github.com/tobymao/sqlglot/commit/921445341b7fc8afa40359bebb8b59f53a86916c) - **mysql**: parse ASCII and UNICODE. *(PR [#8561](https://github.com/tobymao/sqlglot/pull/8561) by [@burnison](https://github.com/burnison))*
|
|
174
|
+
- [`54005bf`](https://github.com/tobymao/sqlglot/commit/54005bf19b32d1dbcaecbd9f752059bc647339c5) - **bigquery,tsql**: rewrite AGG(...) FILTER (WHERE cond) into conditional aggregates [CLAUDE] *(PR [#8563](https://github.com/tobymao/sqlglot/pull/8563) by [@VaggelisD](https://github.com/VaggelisD))*
|
|
175
|
+
- [`ffe2c73`](https://github.com/tobymao/sqlglot/commit/ffe2c73694fc88e5b44b0deff1f1fb92a6a9fe95) - **spark**: parse dotted column identifiers in column definitions [CLAUDE] *(PR [#8570](https://github.com/tobymao/sqlglot/pull/8570) by [@tsamaras](https://github.com/tsamaras))*
|
|
176
|
+
|
|
177
|
+
### :bug: Bug Fixes
|
|
178
|
+
- [`61fc386`](https://github.com/tobymao/sqlglot/commit/61fc386dc713e281523768d41ff2bb8b5450e751) - **clickhouse**: generate toDayOfMonth and toDayOfYear *(PR [#8473](https://github.com/tobymao/sqlglot/pull/8473) by [@ekut](https://github.com/ekut))*
|
|
179
|
+
- [`4afe079`](https://github.com/tobymao/sqlglot/commit/4afe079f91f06440b2f4c4a2cad754e0ee8d23fa) - **ci**: wait for sqlglotc before publishing sqlglot [CODEX] *(commit by [@tobymao](https://github.com/tobymao))*
|
|
180
|
+
- [`cb5d8da`](https://github.com/tobymao/sqlglot/commit/cb5d8da1bac8eafb2b64618ff205dddbe53664f7) - **duckdb**: check for an empty regexp pattern before embedding flags *(PR [#8474](https://github.com/tobymao/sqlglot/pull/8474) by [@ekut](https://github.com/ekut))*
|
|
181
|
+
- [`ac084c5`](https://github.com/tobymao/sqlglot/commit/ac084c5bdb2f188ff878687000273ae2247db24b) - **builders**: allow None table name in table_ for sqlglotc *(PR [#8476](https://github.com/tobymao/sqlglot/pull/8476) by [@VaggelisD](https://github.com/VaggelisD))*
|
|
182
|
+
- :arrow_lower_right: *fixes issue [#8475](https://github.com/tobymao/sqlglot/issues/8475) opened by [@asikeero](https://github.com/asikeero)*
|
|
183
|
+
- [`c7778cf`](https://github.com/tobymao/sqlglot/commit/c7778cf56d90e409c75e59b82842544b118fa850) - **parser**: bare ALTER DROP refactor and indexes named concurrently *(commit by [@geooo109](https://github.com/geooo109))*
|
|
184
|
+
- [`15a77f1`](https://github.com/tobymao/sqlglot/commit/15a77f1d89c3c6baac93230173e48b626497027d) - **mysql**: decode backslash string escapes *(PR [#8471](https://github.com/tobymao/sqlglot/pull/8471) by [@georgesittas](https://github.com/georgesittas))*
|
|
185
|
+
- [`49d6ed4`](https://github.com/tobymao/sqlglot/commit/49d6ed436647447a775f4bba5f1af94702f31055) - **hive**: decode backslash string escapes *(PR [#8478](https://github.com/tobymao/sqlglot/pull/8478) by [@georgesittas](https://github.com/georgesittas))*
|
|
186
|
+
- [`fdc0339`](https://github.com/tobymao/sqlglot/commit/fdc0339b219da56b4433198e3cd53e7604d53188) - **bigquery**: decode string escapes and preserve byte literals *(PR [#8479](https://github.com/tobymao/sqlglot/pull/8479) by [@georgesittas](https://github.com/georgesittas))*
|
|
187
|
+
- [`5cc5ef0`](https://github.com/tobymao/sqlglot/commit/5cc5ef046e8213dcb373c82f6c00fcf918fb4a5b) - **drill**: preserve backslashes in string literals *(PR [#8481](https://github.com/tobymao/sqlglot/pull/8481) by [@georgesittas](https://github.com/georgesittas))*
|
|
188
|
+
- [`13463de`](https://github.com/tobymao/sqlglot/commit/13463de608e9d74d36fb57da045c537e0ce1a7f6) - **clickhouse**: parse isInfinite *(PR [#8487](https://github.com/tobymao/sqlglot/pull/8487) by [@ekut](https://github.com/ekut))*
|
|
189
|
+
- [`5fe5606`](https://github.com/tobymao/sqlglot/commit/5fe5606b905f38930017149c4a6e3d1b3a3a5616) - correct PostgreSQL, DuckDB, Redshift, and ClickHouse string escapes *(PR [#8484](https://github.com/tobymao/sqlglot/pull/8484) by [@georgesittas](https://github.com/georgesittas))*
|
|
190
|
+
- [`268ad02`](https://github.com/tobymao/sqlglot/commit/268ad021b8bfaf164be3b0774657952c3d70bed4) - **parser**: parse ALTER TABLE DROP with multiple columns *(PR [#8486](https://github.com/tobymao/sqlglot/pull/8486) by [@Madin-H23](https://github.com/Madin-H23))*
|
|
191
|
+
- :arrow_lower_right: *fixes issue [#8485](https://github.com/tobymao/sqlglot/issues/8485) opened by [@ultrabear](https://github.com/ultrabear)*
|
|
192
|
+
- [`1d2a99b`](https://github.com/tobymao/sqlglot/commit/1d2a99b9cc0acf671fd2688ef02097a69404057d) - **parser**: ALTER DROP/ALTER COLUMN cleanups *(commit by [@geooo109](https://github.com/geooo109))*
|
|
193
|
+
- [`5fc93a9`](https://github.com/tobymao/sqlglot/commit/5fc93a9eab142393c0ef688c82d898329bcddb67) - **snowflake**: support for SPLIT_TO_TABLE *(PR [#8488](https://github.com/tobymao/sqlglot/pull/8488) by [@andrjohns](https://github.com/andrjohns))*
|
|
194
|
+
- [`b65592b`](https://github.com/tobymao/sqlglot/commit/b65592b45831df5e7f13d418e50f24c4cea118f0) - **postgres**: parse ^@ as STARTS_WITH closes [#8490](https://github.com/tobymao/sqlglot/pull/8490) *(commit by [@geooo109](https://github.com/geooo109))*
|
|
195
|
+
- [`bffcdef`](https://github.com/tobymao/sqlglot/commit/bffcdefc16b01527ee252ad2bf322b0bbff33bc8) - **snowflake**: parse (+) outer join markers *(PR [#8492](https://github.com/tobymao/sqlglot/pull/8492) by [@DG47](https://github.com/DG47))*
|
|
196
|
+
- [`0ceaf13`](https://github.com/tobymao/sqlglot/commit/0ceaf1319e6506fe7644021c0825c10af4f0ae6a) - **clickhouse**: map ISO calendar functions in both directions [CLAUDE] *(PR [#8494](https://github.com/tobymao/sqlglot/pull/8494) by [@ekut](https://github.com/ekut))*
|
|
197
|
+
- [`a6698b7`](https://github.com/tobymao/sqlglot/commit/a6698b765b006b4b3b181fcdc75319f7f990164f) - drop wrong Dialect cast in build_formatted_time [CLAUDE] *(commit by [@tobymao](https://github.com/tobymao))*
|
|
198
|
+
- [`5e6887a`](https://github.com/tobymao/sqlglot/commit/5e6887adc805ee13b359e25b1d17e062b0a60342) - **tsql**: parse bare table hints [CODEX: GPT-6.1 Sol] *(PR [#8493](https://github.com/tobymao/sqlglot/pull/8493) by [@mikamikasuki](https://github.com/mikamikasuki))*
|
|
199
|
+
- [`f337c70`](https://github.com/tobymao/sqlglot/commit/f337c70ee42614bb3224fe8c54b7af5be286eb85) - **snowflake**: parse LIST and LS stage commands [GPT-6.1] *(PR [#8502](https://github.com/tobymao/sqlglot/pull/8502) by [@tekumara](https://github.com/tekumara))*
|
|
200
|
+
- :arrow_lower_right: *fixes issue [#8500](https://github.com/tobymao/sqlglot/issues/8500) opened by [@tekumara](https://github.com/tekumara)*
|
|
201
|
+
- [`7fb054f`](https://github.com/tobymao/sqlglot/commit/7fb054f17f0b86bf572884a524067ca9eb883fb4) - **clickhouse**: generate POSITION(...) > 0 for Contains *(PR [#8507](https://github.com/tobymao/sqlglot/pull/8507) by [@ekut](https://github.com/ekut))*
|
|
202
|
+
- [`a980f01`](https://github.com/tobymao/sqlglot/commit/a980f017130a5d9c485c53c878982155362ca4de) - scope preserved function names to their dialect *(PR [#8512](https://github.com/tobymao/sqlglot/pull/8512) by [@georgesittas](https://github.com/georgesittas))*
|
|
203
|
+
- :arrow_lower_right: *fixes issue [#8497](https://github.com/tobymao/sqlglot/issues/8497) opened by [@ekut](https://github.com/ekut)*
|
|
204
|
+
- [`c7957e8`](https://github.com/tobymao/sqlglot/commit/c7957e8c867e42654d91b1d9c20d5e9b77ddf5b9) - **generator**: only resolve a query's own ORDER BY aliases in NULLS simulation *(PR [#8514](https://github.com/tobymao/sqlglot/pull/8514) by [@geooo109](https://github.com/geooo109))*
|
|
205
|
+
- :arrow_lower_right: *fixes issue [#8489](https://github.com/tobymao/sqlglot/issues/8489) opened by [@goldmedal](https://github.com/goldmedal)*
|
|
206
|
+
- [`51587ff`](https://github.com/tobymao/sqlglot/commit/51587ffdecfc8b2c08ee1da24b543312ded90d39) - **mysql**: Parse `DROP KEY`, `DROP CHECK` and `SIGNED`. *(PR [#8515](https://github.com/tobymao/sqlglot/pull/8515) by [@burnison](https://github.com/burnison))*
|
|
207
|
+
- [`50d7ce4`](https://github.com/tobymao/sqlglot/commit/50d7ce4a9808aed6beb4127c4f60d309219c664d) - **duckdb**: read the UNIFORM seed set by the Databricks parser *(PR [#8519](https://github.com/tobymao/sqlglot/pull/8519) by [@Ayoubhm07](https://github.com/Ayoubhm07))*
|
|
208
|
+
- :arrow_lower_right: *fixes issue [#8518](https://github.com/tobymao/sqlglot/issues/8518) opened by [@Ayoubhm07](https://github.com/Ayoubhm07)*
|
|
209
|
+
- [`ee7567c`](https://github.com/tobymao/sqlglot/commit/ee7567c86d9a418cc517f80194e6fc35e075be4a) - **optimizer**: expand stars in the order sources appear in FROM *(PR [#8529](https://github.com/tobymao/sqlglot/pull/8529) by [@VaggelisD](https://github.com/VaggelisD))*
|
|
210
|
+
- [`fc8178e`](https://github.com/tobymao/sqlglot/commit/fc8178edd3e4717db5acf1c735a03aeb67951c92) - **parser**: `DROP INDEX` accepts `db.t` syntax. *(PR [#8526](https://github.com/tobymao/sqlglot/pull/8526) by [@burnison](https://github.com/burnison))*
|
|
211
|
+
- [`d5d436b`](https://github.com/tobymao/sqlglot/commit/d5d436bc32030c019ca07e1dcb4a247f5b4a0f53) - **generator**: escape identifier escape chars when generating quoted identifiers *(PR [#8533](https://github.com/tobymao/sqlglot/pull/8533) by [@georgesittas](https://github.com/georgesittas))*
|
|
212
|
+
- [`5b7b413`](https://github.com/tobymao/sqlglot/commit/5b7b413451e2a7a35bfc8c076d3b3636f8a7b203) - **optimizer**: expand nested join constructs in qualify_tables *(PR [#8530](https://github.com/tobymao/sqlglot/pull/8530) by [@VaggelisD](https://github.com/VaggelisD))*
|
|
213
|
+
- :arrow_lower_right: *fixes issue [#8505](https://github.com/tobymao/sqlglot/issues/8505) opened by [@laravioli](https://github.com/laravioli)*
|
|
214
|
+
- :arrow_lower_right: *fixes issue [#8508](https://github.com/tobymao/sqlglot/issues/8508) opened by [@yousefissa](https://github.com/yousefissa)*
|
|
215
|
+
- [`30958d6`](https://github.com/tobymao/sqlglot/commit/30958d61522b84765973a8fa6c76ea03d7f97373) - **optimizer**: column resolution for TVFs, PIVOTs, and Snowflake schemas *(PR [#8472](https://github.com/tobymao/sqlglot/pull/8472) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
|
|
216
|
+
- [`48beaa6`](https://github.com/tobymao/sqlglot/commit/48beaa64b8d3348c31a8eab2e7daf90836d151b2) - **optimizer**: preserve all OR arms during DNF pushdown for multi-table branches *(PR [#8525](https://github.com/tobymao/sqlglot/pull/8525) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
|
|
217
|
+
- [`8184834`](https://github.com/tobymao/sqlglot/commit/818483464bf50a1b41d6982dbc172e7934141c52) - **duckdb**: preserve Spark array slice length *(PR [#8524](https://github.com/tobymao/sqlglot/pull/8524) by [@subotac](https://github.com/subotac))*
|
|
218
|
+
- :arrow_lower_right: *fixes issue [#8520](https://github.com/tobymao/sqlglot/issues/8520) opened by [@Sharpiro](https://github.com/Sharpiro)*
|
|
219
|
+
- [`e1e0d2e`](https://github.com/tobymao/sqlglot/commit/e1e0d2e52f45247bfa0ab815eb8a7388ea50a0e8) - **trino**: preserve precision for timestamp and time literals ([#8534](https://github.com/tobymao/sqlglot/pull/8534)) *(PR [#8538](https://github.com/tobymao/sqlglot/pull/8538) by [@ansh-rohilla](https://github.com/ansh-rohilla))*
|
|
220
|
+
- :arrow_lower_right: *fixes issue [#8534](https://github.com/tobymao/sqlglot/issues/8534) opened by [@ramcasa](https://github.com/ramcasa)*
|
|
221
|
+
- [`f5dd70b`](https://github.com/tobymao/sqlglot/commit/f5dd70bff7ebce048d6bdd3f782328104c6c119d) - truncate integer division towards zero instead of rounding *(PR [#8532](https://github.com/tobymao/sqlglot/pull/8532) by [@georgesittas](https://github.com/georgesittas))*
|
|
222
|
+
- :arrow_lower_right: *fixes issue [#8531](https://github.com/tobymao/sqlglot/issues/8531) opened by [@ramcasa](https://github.com/ramcasa)*
|
|
223
|
+
- [`f8606fe`](https://github.com/tobymao/sqlglot/commit/f8606fe8f97a10a3ba00f42104836add1299966f) - **tsql**: treat `output` as a valid identifier closes [#8545](https://github.com/tobymao/sqlglot/pull/8545) *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
224
|
+
- [`3096a59`](https://github.com/tobymao/sqlglot/commit/3096a591d65b1b00ba9abdf482fc7b7973a6e6af) - **duckdb**: transpile Spark CONCAT_WS on arrays to ARRAY_TO_STRING ([#8521](https://github.com/tobymao/sqlglot/pull/8521)) *(PR [#8523](https://github.com/tobymao/sqlglot/pull/8523) by [@ansh-rohilla](https://github.com/ansh-rohilla))*
|
|
225
|
+
- :arrow_lower_right: *fixes issue [#8521](https://github.com/tobymao/sqlglot/issues/8521) opened by [@Sharpiro](https://github.com/Sharpiro)*
|
|
226
|
+
- [`b7e5153`](https://github.com/tobymao/sqlglot/commit/b7e515399a589e720b2bd081e5bb395f408feff8) - **optimizer**: preserve bracket flags in gen serialization *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
227
|
+
- [`aa64321`](https://github.com/tobymao/sqlglot/commit/aa64321744bcb38828146b33ead1c0529dd64652) - **optimizer**: expand USING columns first in star expansion *(PR [#8536](https://github.com/tobymao/sqlglot/pull/8536) by [@VaggelisD](https://github.com/VaggelisD))*
|
|
228
|
+
- :arrow_lower_right: *fixes issue [#8516](https://github.com/tobymao/sqlglot/issues/8516) opened by [@laravioli](https://github.com/laravioli)*
|
|
229
|
+
- [`022bb41`](https://github.com/tobymao/sqlglot/commit/022bb41fc5f9b35ab303a5989edd1f9544ec11bb) - **duckdb**: generate USING SAMPLE before ORDER BY and LIMIT [CLAUDE] *(PR [#8550](https://github.com/tobymao/sqlglot/pull/8550) by [@Fcabla](https://github.com/Fcabla))*
|
|
230
|
+
- :arrow_lower_right: *fixes issue [#8546](https://github.com/tobymao/sqlglot/issues/8546) opened by [@Fcabla](https://github.com/Fcabla)*
|
|
231
|
+
- [`f2b81bf`](https://github.com/tobymao/sqlglot/commit/f2b81bfb2d2cf5b14b01be5211e022b23b6bec19) - **optimizer**: annotate FLOOR, CEIL and SIGN by their arg type *(PR [#8547](https://github.com/tobymao/sqlglot/pull/8547) by [@georgesittas](https://github.com/georgesittas))*
|
|
232
|
+
- [`97a2fa2`](https://github.com/tobymao/sqlglot/commit/97a2fa2ed6351835f07303bd839fec96a01c472e) - **mysql**: Misplaced table and index options. *(PR [#8553](https://github.com/tobymao/sqlglot/pull/8553) by [@burnison](https://github.com/burnison))*
|
|
233
|
+
- [`025a2f4`](https://github.com/tobymao/sqlglot/commit/025a2f46f9a29fcfc68d88ad0290c9c7f7e05320) - **clickhouse**: map bitwise aggregates to groupBitAnd/Or/Xor *(PR [#8556](https://github.com/tobymao/sqlglot/pull/8556) by [@ekut](https://github.com/ekut))*
|
|
234
|
+
- [`93aa16d`](https://github.com/tobymao/sqlglot/commit/93aa16deb98a0f85b4613405e2cfd2a5685bc3fb) - **mysql**: keep the CHAR length in CHARACTER SET casts [CLAUDE] *(PR [#8559](https://github.com/tobymao/sqlglot/pull/8559) by [@DylanMerigaud](https://github.com/DylanMerigaud))*
|
|
235
|
+
- [`507cbf9`](https://github.com/tobymao/sqlglot/commit/507cbf99ca3f34b7f7f7fc26a90a94031c2452cd) - **optimizer**: qualify DuckDB list comprehension variables *(PR [#8557](https://github.com/tobymao/sqlglot/pull/8557) by [@georgesittas](https://github.com/georgesittas))*
|
|
236
|
+
- [`862fd55`](https://github.com/tobymao/sqlglot/commit/862fd55467e09527e07240725c6e78c793099ff1) - **trino**: preserve precision for all temporal literals *(PR [#8564](https://github.com/tobymao/sqlglot/pull/8564) by [@georgesittas](https://github.com/georgesittas))*
|
|
237
|
+
- :arrow_lower_right: *fixes issue [#8562](https://github.com/tobymao/sqlglot/issues/8562) opened by [@ansh-rohilla](https://github.com/ansh-rohilla)*
|
|
238
|
+
- [`1a0fc42`](https://github.com/tobymao/sqlglot/commit/1a0fc4299add581c61a21c92d0c41d13698b20c5) - **parser**: `ALTER` actions/options in any order. *(PR [#8565](https://github.com/tobymao/sqlglot/pull/8565) by [@burnison](https://github.com/burnison))*
|
|
239
|
+
- [`56910fd`](https://github.com/tobymao/sqlglot/commit/56910fd955e62d8e20ba85c1264123656698c178) - **optimizer**: allow simplification to scalar subqueries *(PR [#8573](https://github.com/tobymao/sqlglot/pull/8573) by [@georgesittas](https://github.com/georgesittas))*
|
|
240
|
+
- :arrow_lower_right: *fixes issue [#8568](https://github.com/tobymao/sqlglot/issues/8568) opened by [@laravioli](https://github.com/laravioli)*
|
|
241
|
+
- [`1e2cc21`](https://github.com/tobymao/sqlglot/commit/1e2cc210e2a336defd9037dfc66d9dae1e72780e) - **optimizer**: preserve CASE branches before always-true conditions *(PR [#8572](https://github.com/tobymao/sqlglot/pull/8572) by [@georgesittas](https://github.com/georgesittas))*
|
|
242
|
+
- :arrow_lower_right: *fixes issue [#8567](https://github.com/tobymao/sqlglot/issues/8567) opened by [@laravioli](https://github.com/laravioli)*
|
|
243
|
+
- [`9f2f4cd`](https://github.com/tobymao/sqlglot/commit/9f2f4cd5a2d25e967142d0c90d107128d4dc70e5) - **optimizer**: resolve correlated UNNEST fields from projection types *(PR [#8571](https://github.com/tobymao/sqlglot/pull/8571) by [@georgesittas](https://github.com/georgesittas))*
|
|
244
|
+
- [`6683ad2`](https://github.com/tobymao/sqlglot/commit/6683ad28a45a8b803de0ce650d737adec609fbd4) - **optimizer**: resolve correlated UNNEST fields from projection types *(PR [#8571](https://github.com/tobymao/sqlglot/pull/8571) by [@georgesittas](https://github.com/georgesittas))*
|
|
245
|
+
- [`361b23b`](https://github.com/tobymao/sqlglot/commit/361b23b87b5ee3a3a301c07daaf02d703aad21fe) - **parser**: allow SEARCH + CYCLE and CYCLE TO ... DEFAULT [CLAUDE] *(PR [#8574](https://github.com/tobymao/sqlglot/pull/8574) by [@DylanMerigaud](https://github.com/DylanMerigaud))*
|
|
246
|
+
- :arrow_lower_right: *fixes issue [#8569](https://github.com/tobymao/sqlglot/issues/8569) opened by [@hustontrevor](https://github.com/hustontrevor)*
|
|
247
|
+
- [`bea35b3`](https://github.com/tobymao/sqlglot/commit/bea35b336cba03cb528a6e34c17b265c84ed9793) - **bigquery,duckdb**: don't drop array elements after a subquery *(PR [#8575](https://github.com/tobymao/sqlglot/pull/8575) by [@blackmad-cradle](https://github.com/blackmad-cradle))*
|
|
248
|
+
- [`51864e7`](https://github.com/tobymao/sqlglot/commit/51864e76b42b26f1fdeb829e349bd43db4d81598) - **bigquery**: edge case in array generation *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
249
|
+
- [`1d8e1c9`](https://github.com/tobymao/sqlglot/commit/1d8e1c9963e36652a57dd837989b3e4bcb7fc90a) - **optimizer**: annotate sha2 for redshift properly *(PR [#8577](https://github.com/tobymao/sqlglot/pull/8577) by [@georgesittas](https://github.com/georgesittas))*
|
|
250
|
+
- [`b8333a8`](https://github.com/tobymao/sqlglot/commit/b8333a81f02fafaa040bb3b8535f1c17eb9caf0c) - **optimizer**: remove infer_schema from optimizer *(PR [#8552](https://github.com/tobymao/sqlglot/pull/8552) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
|
|
251
|
+
|
|
252
|
+
### :wrench: Chores
|
|
253
|
+
- [`8f0d751`](https://github.com/tobymao/sqlglot/commit/8f0d751dd28b5cfa610c33691ca371d6389d392e) - fix multi-processing py313 CI warnings *(PR [#8477](https://github.com/tobymao/sqlglot/pull/8477) by [@georgesittas](https://github.com/georgesittas))*
|
|
254
|
+
- [`b12b50f`](https://github.com/tobymao/sqlglot/commit/b12b50fc068730fd04f864a3757cd8d356afccfa) - remove qualify for SPLIT_TO_TABLE *(commit by [@geooo109](https://github.com/geooo109))*
|
|
255
|
+
- [`971d004`](https://github.com/tobymao/sqlglot/commit/971d004474ff010eaf247f186d71dc39ae1151f9) - switch sqlglot[c] from sqlglot-mypy to upstream mypy *(PR [#8517](https://github.com/tobymao/sqlglot/pull/8517) by [@VaggelisD](https://github.com/VaggelisD))*
|
|
256
|
+
- [`6de29fd`](https://github.com/tobymao/sqlglot/commit/6de29fdce762e564002e0ae0d8d09c388ebc4cfb) - FROM-first multi-table INSERT cleanup *(PR [#8535](https://github.com/tobymao/sqlglot/pull/8535) by [@geooo109](https://github.com/geooo109))*
|
|
257
|
+
- [`aa58ce6`](https://github.com/tobymao/sqlglot/commit/aa58ce602e3f50b87192f2e1bd2994d56da10c3c) - **optimizer**: optionally copy input ast *(PR [#8566](https://github.com/tobymao/sqlglot/pull/8566) by [@georgesittas](https://github.com/georgesittas))*
|
|
258
|
+
- [`b78bd9c`](https://github.com/tobymao/sqlglot/commit/b78bd9cc28aef86e94f05031538a0c32ee6980f8) - avoid compiling schema.py *(PR [#8576](https://github.com/tobymao/sqlglot/pull/8576) by [@geooo109](https://github.com/geooo109))*
|
|
259
|
+
|
|
260
|
+
|
|
4
261
|
## [v30.21.0] - 2026-09-30
|
|
5
262
|
### :boom: BREAKING CHANGES
|
|
6
263
|
- due to [`2be1e0e`](https://github.com/tobymao/sqlglot/commit/2be1e0e2addc0ef01cfa3fd3cf2ef751cdbf411d) - annotate `bit_xor` for duckdb *(PR [#8452](https://github.com/tobymao/sqlglot/pull/8452) by [@opencode13241-eng](https://github.com/opencode13241-eng))*:
|
|
@@ -16045,3 +16302,5 @@ pip install "sqlglot[c]" # compiled — faster, but no subclassing
|
|
|
16045
16302
|
[v30.19.0]: https://github.com/tobymao/sqlglot/compare/v30.18.0...v30.19.0
|
|
16046
16303
|
[v30.20.0]: https://github.com/tobymao/sqlglot/compare/v30.19.0...v30.20.0
|
|
16047
16304
|
[v30.21.0]: https://github.com/tobymao/sqlglot/compare/v30.20.0...v30.21.0
|
|
16305
|
+
[v30.22.0]: https://github.com/tobymao/sqlglot/compare/v30.21.0...v30.22.0
|
|
16306
|
+
[v30.23.0]: https://github.com/tobymao/sqlglot/compare/v30.22.0...v30.23.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sqlglot
|
|
3
|
-
Version: 30.
|
|
3
|
+
Version: 30.24.0
|
|
4
4
|
Summary: An easily customizable SQL parser and transpiler
|
|
5
5
|
Author-email: Toby Mao <toby.mao@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -34,10 +34,10 @@ Requires-Dist: types-pytz; extra == "dev"
|
|
|
34
34
|
Requires-Dist: typing_extensions; extra == "dev"
|
|
35
35
|
Requires-Dist: pyperf; extra == "dev"
|
|
36
36
|
Provides-Extra: c
|
|
37
|
-
Requires-Dist: sqlglotc==30.
|
|
37
|
+
Requires-Dist: sqlglotc==30.24.0; python_version >= "3.10" and extra == "c"
|
|
38
38
|
Provides-Extra: rs
|
|
39
39
|
Requires-Dist: sqlglotrs==0.13.0; extra == "rs"
|
|
40
|
-
Requires-Dist: sqlglotc==30.
|
|
40
|
+
Requires-Dist: sqlglotc==30.24.0; python_version >= "3.10" and extra == "rs"
|
|
41
41
|
Dynamic: license-file
|
|
42
42
|
Dynamic: provides-extra
|
|
43
43
|
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '30.
|
|
22
|
-
__version_tuple__ = version_tuple = (30,
|
|
21
|
+
__version__ = version = '30.24.0'
|
|
22
|
+
__version_tuple__ = version_tuple = (30, 24, 0)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g5d588c0f3'
|
|
@@ -3,6 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
|
|
4
4
|
from sqlglot import tokens
|
|
5
5
|
from sqlglot.dialects.dialect import DialectType
|
|
6
|
+
from sqlglot.errors import TokenError
|
|
6
7
|
from sqlglot.generators.athena import AthenaGenerator
|
|
7
8
|
from sqlglot.parsers.athena import AthenaParser
|
|
8
9
|
from sqlglot.tokens import TokenType, Token
|
|
@@ -74,7 +75,22 @@ class Athena(Trino):
|
|
|
74
75
|
self._trino_tokenizer = _TrinoTokenizer(Trino())
|
|
75
76
|
|
|
76
77
|
def tokenize(self, sql: str) -> list[Token]:
|
|
77
|
-
|
|
78
|
+
try:
|
|
79
|
+
tokens = super().tokenize(sql)
|
|
80
|
+
except TokenError:
|
|
81
|
+
# Combined rules can reject literals valid in only one engine.
|
|
82
|
+
for tokenizer, hive in (
|
|
83
|
+
(self._trino_tokenizer, False),
|
|
84
|
+
(self._hive_tokenizer, True),
|
|
85
|
+
):
|
|
86
|
+
try:
|
|
87
|
+
tokens = tokenizer.tokenize(sql)
|
|
88
|
+
except TokenError:
|
|
89
|
+
continue
|
|
90
|
+
|
|
91
|
+
if _tokenize_as_hive(tokens) == hive:
|
|
92
|
+
return [Token(TokenType.HIVE_TOKEN_STREAM, "")] + tokens if hive else tokens
|
|
93
|
+
raise
|
|
78
94
|
|
|
79
95
|
if _tokenize_as_hive(tokens):
|
|
80
96
|
return [Token(TokenType.HIVE_TOKEN_STREAM, "")] + self._hive_tokenizer.tokenize(sql)
|
|
@@ -1304,6 +1304,31 @@ def bracket_to_element_at_sql(self: Generator, expression: exp.Bracket) -> str:
|
|
|
1304
1304
|
return self.func("ELEMENT_AT", expression.this, index)
|
|
1305
1305
|
|
|
1306
1306
|
|
|
1307
|
+
def array_slice_to_slice_sql(self: Generator, expression: exp.ArraySlice) -> str:
|
|
1308
|
+
start = expression.args["start"]
|
|
1309
|
+
end = expression.args.get("end")
|
|
1310
|
+
|
|
1311
|
+
# Preserve unmarked slices and bounds that require runtime normalization or narrowing.
|
|
1312
|
+
if (
|
|
1313
|
+
expression.args.get("is_length") is False
|
|
1314
|
+
and expression.args.get("step") is None
|
|
1315
|
+
and start.is_int
|
|
1316
|
+
and 0 <= start.to_py() <= 2**31 - 1
|
|
1317
|
+
and end is not None
|
|
1318
|
+
and end.is_int
|
|
1319
|
+
and 0 <= end.to_py() <= 2**31 - 1
|
|
1320
|
+
):
|
|
1321
|
+
start_value = max(start.to_py(), 1)
|
|
1322
|
+
return self.func(
|
|
1323
|
+
"SLICE",
|
|
1324
|
+
expression.this,
|
|
1325
|
+
exp.Literal.number(start_value),
|
|
1326
|
+
exp.Literal.number(max(end.to_py() - start_value + 1, 0)),
|
|
1327
|
+
)
|
|
1328
|
+
|
|
1329
|
+
return rename_func("SLICE")(self, expression)
|
|
1330
|
+
|
|
1331
|
+
|
|
1307
1332
|
@unsupported_args("accuracy")
|
|
1308
1333
|
def approx_count_distinct_sql(self: Generator, expression: exp.ApproxDistinct) -> str:
|
|
1309
1334
|
return self.func("APPROX_COUNT_DISTINCT", expression.this)
|
|
@@ -2115,7 +2140,10 @@ def is_parse_json(expression: exp.Expr) -> bool:
|
|
|
2115
2140
|
|
|
2116
2141
|
|
|
2117
2142
|
def isnull_to_is_null(args: BuilderArgs) -> exp.Expr:
|
|
2118
|
-
|
|
2143
|
+
this = seq_get(args, 0)
|
|
2144
|
+
if isinstance(this, (exp.Predicate, exp.Connector, exp.Not)):
|
|
2145
|
+
this = exp.Paren(this=this)
|
|
2146
|
+
return exp.Paren(this=exp.Is(this=this, expression=exp.null()))
|
|
2119
2147
|
|
|
2120
2148
|
|
|
2121
2149
|
def generatedasidentitycolumnconstraint_sql(
|
|
@@ -2749,6 +2777,17 @@ def build_timetostr_or_tochar(
|
|
|
2749
2777
|
return exp.ToChar.from_arg_list(args)
|
|
2750
2778
|
|
|
2751
2779
|
|
|
2780
|
+
def array_sort_order(expression: exp.ArraySort) -> tuple[bool, bool | None] | None:
|
|
2781
|
+
"""Whether an ArraySort is ascending and puts NULLs first, or None if either isn't a literal."""
|
|
2782
|
+
asc = expression.args.get("asc") or exp.true()
|
|
2783
|
+
nulls_first = expression.args.get("nulls_first")
|
|
2784
|
+
if not isinstance(asc, exp.Boolean):
|
|
2785
|
+
return None
|
|
2786
|
+
if nulls_first is None:
|
|
2787
|
+
return asc.this, None
|
|
2788
|
+
return (asc.this, nulls_first.this) if isinstance(nulls_first, exp.Boolean) else None
|
|
2789
|
+
|
|
2790
|
+
|
|
2752
2791
|
def build_replace_with_optional_replacement(args: BuilderArgs) -> exp.Replace:
|
|
2753
2792
|
return exp.Replace(
|
|
2754
2793
|
this=seq_get(args, 0),
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import string
|
|
3
4
|
import typing as t
|
|
4
5
|
|
|
5
6
|
from sqlglot import exp, tokens
|
|
@@ -36,6 +37,7 @@ class Oracle(Dialect):
|
|
|
36
37
|
"HH12": "%I", # alias for HH
|
|
37
38
|
"HH24": "%H", # Hour of day (0-23)
|
|
38
39
|
"IW": "%V", # Calendar week of year (1-52 or 1-53), as defined by the ISO 8601 standard
|
|
40
|
+
"IYYY": "%G", # 4-digit year of the ISO 8601 week-numbering calendar
|
|
39
41
|
"MI": "%M", # Minute (0-59)
|
|
40
42
|
"MM": "%m", # Month (01-12; January = 01)
|
|
41
43
|
"MON": "%b", # Abbreviated name of month
|
|
@@ -65,6 +67,31 @@ class Oracle(Dialect):
|
|
|
65
67
|
for prefix in ("U", "u")
|
|
66
68
|
]
|
|
67
69
|
|
|
70
|
+
# https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/Literals.html
|
|
71
|
+
# Alternative quoting, e.g. q'[it's]': the delimiters are part of the quote, so the
|
|
72
|
+
# text in between is taken as is, without escapes
|
|
73
|
+
RAW_STRINGS = [
|
|
74
|
+
(f"{prefix}'{start}", f"{end}'")
|
|
75
|
+
for prefix in ("q", "Q")
|
|
76
|
+
for start, end in (
|
|
77
|
+
("[", "]"),
|
|
78
|
+
("{", "}"),
|
|
79
|
+
("(", ")"),
|
|
80
|
+
("<", ">"),
|
|
81
|
+
*(
|
|
82
|
+
(c, c)
|
|
83
|
+
for c in string.ascii_letters + string.digits + string.punctuation
|
|
84
|
+
if c not in "[{(<"
|
|
85
|
+
),
|
|
86
|
+
)
|
|
87
|
+
]
|
|
88
|
+
NATIONAL_RAW_STRINGS = [
|
|
89
|
+
(prefix + start, end)
|
|
90
|
+
for start, end in t.cast(list[tuple[str, str]], RAW_STRINGS)
|
|
91
|
+
for prefix in ("n", "N")
|
|
92
|
+
]
|
|
93
|
+
STRING_ESCAPES_ALLOWED_IN_RAW_STRINGS = False
|
|
94
|
+
|
|
68
95
|
NESTED_COMMENTS = False
|
|
69
96
|
|
|
70
97
|
KEYWORDS = {
|
|
@@ -82,6 +109,7 @@ class Oracle(Dialect):
|
|
|
82
109
|
"ORDER SIBLINGS BY": TokenType.ORDER_SIBLINGS_BY,
|
|
83
110
|
"SAMPLE": TokenType.TABLE_SAMPLE,
|
|
84
111
|
"START": TokenType.BEGIN,
|
|
112
|
+
"SUBPARTITION": TokenType.PARTITION,
|
|
85
113
|
"TOP": TokenType.TOP,
|
|
86
114
|
"VARCHAR2": TokenType.VARCHAR,
|
|
87
115
|
"SYSTIMESTAMP": TokenType.SYSTIMESTAMP,
|
|
@@ -44,6 +44,10 @@ class Postgres(Dialect):
|
|
|
44
44
|
"FMSS": "%-S", # Second
|
|
45
45
|
"HH12": "%I", # 09
|
|
46
46
|
"HH24": "%H", # 09
|
|
47
|
+
"iw": "%V", # ISO 8601 week of year
|
|
48
|
+
"IW": "%V", # ISO 8601 week of year
|
|
49
|
+
"iyyy": "%G", # ISO 8601 week-numbering year
|
|
50
|
+
"IYYY": "%G", # ISO 8601 week-numbering year
|
|
47
51
|
"mi": "%M", # zero padded minute
|
|
48
52
|
"MI": "%M", # zero padded minute
|
|
49
53
|
"mm": "%m", # 01
|
|
@@ -35,6 +35,11 @@ class Snowflake(Dialect):
|
|
|
35
35
|
UUID_IS_STRING_TYPE = True
|
|
36
36
|
STAR_ILIKE_BACKSLASH_ESCAPE = True
|
|
37
37
|
|
|
38
|
+
# https://docs.snowflake.com/en/sql-reference/functions/split_to_table
|
|
39
|
+
DEFAULT_FUNCTIONS_COLUMN_NAMES = {
|
|
40
|
+
exp.SplitToTable: ("seq", "index", "value"),
|
|
41
|
+
}
|
|
42
|
+
|
|
38
43
|
EXPRESSION_METADATA = EXPRESSION_METADATA.copy()
|
|
39
44
|
|
|
40
45
|
# https://docs.snowflake.com/en/en/sql-reference/functions/initcap
|
|
@@ -18,15 +18,33 @@ class StarRocks(MySQL):
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
class Tokenizer(MySQL.Tokenizer):
|
|
21
|
+
# Unlike MySQL, "#" doesn't start a comment
|
|
22
|
+
COMMENTS = ["--", ("/*", "*/")]
|
|
21
23
|
DASH_COMMENT_REQUIRES_BOUNDARY = False
|
|
22
24
|
COMMENTS_TERMINATE_AT_NEWLINE_ONLY = False
|
|
23
25
|
|
|
24
26
|
KEYWORDS = {
|
|
25
27
|
**MySQL.Tokenizer.KEYWORDS,
|
|
28
|
+
"ADMIN": TokenType.COMMAND,
|
|
29
|
+
"BACKUP": TokenType.COMMAND,
|
|
30
|
+
"CANCEL": TokenType.COMMAND,
|
|
31
|
+
"DEALLOCATE": TokenType.COMMAND,
|
|
32
|
+
"EXPORT": TokenType.COMMAND,
|
|
33
|
+
"HLL": TokenType.HLLSKETCH,
|
|
34
|
+
"INSTALL": TokenType.COMMAND,
|
|
26
35
|
"LARGEINT": TokenType.INT128,
|
|
36
|
+
"PAUSE": TokenType.COMMAND,
|
|
37
|
+
"RECOVER": TokenType.COMMAND,
|
|
27
38
|
"REFRESH": TokenType.REFRESH,
|
|
39
|
+
"RESTORE": TokenType.COMMAND,
|
|
40
|
+
"RESUME": TokenType.COMMAND,
|
|
41
|
+
"STOP": TokenType.COMMAND,
|
|
42
|
+
"SUBMIT": TokenType.COMMAND,
|
|
43
|
+
"UNINSTALL": TokenType.COMMAND,
|
|
28
44
|
}
|
|
29
45
|
KEYWORDS.pop("IGNORE")
|
|
46
|
+
KEYWORDS.pop("#>")
|
|
47
|
+
KEYWORDS.pop("#>>")
|
|
30
48
|
|
|
31
49
|
Parser = StarRocksParser
|
|
32
50
|
|
|
@@ -98,17 +98,13 @@ class ArraySlice(Expression, Func):
|
|
|
98
98
|
|
|
99
99
|
|
|
100
100
|
class ArraySort(Expression, Func):
|
|
101
|
-
arg_types = {"this": True, "expression": False}
|
|
101
|
+
arg_types = {"this": True, "expression": False, "asc": False, "nulls_first": False}
|
|
102
102
|
|
|
103
103
|
|
|
104
104
|
class Shuffle(Expression, Func):
|
|
105
105
|
pass
|
|
106
106
|
|
|
107
107
|
|
|
108
|
-
class SortArray(Expression, Func):
|
|
109
|
-
arg_types = {"this": True, "asc": False, "nulls_first": False}
|
|
110
|
-
|
|
111
|
-
|
|
112
108
|
# Array predicates / search
|
|
113
109
|
|
|
114
110
|
|