sqlglot 30.23.0__tar.gz → 30.25.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.23.0 → sqlglot-30.25.0}/CHANGELOG.md +146 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/Makefile +12 -2
- {sqlglot-30.23.0/sqlglot.egg-info → sqlglot-30.25.0}/PKG-INFO +3 -3
- {sqlglot-30.23.0 → sqlglot-30.25.0}/pyproject.toml +1 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/_version.py +3 -3
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/athena.py +35 -12
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/bigquery.py +1 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/clickhouse.py +1 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/dialect.py +36 -5
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/duckdb.py +3 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/oracle.py +1 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/postgres.py +4 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/snowflake.py +1 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/sqlite.py +4 -0
- sqlglot-30.25.0/sqlglot/dialects/starrocks.py +60 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/expressions/array.py +5 -5
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/expressions/builders.py +1 -1
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/expressions/constraints.py +2 -1
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/expressions/core.py +7 -8
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/expressions/datatypes.py +3 -1
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/expressions/ddl.py +8 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/expressions/query.py +16 -3
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generator.py +104 -21
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/bigquery.py +143 -1
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/clickhouse.py +9 -8
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/databricks.py +1 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/duckdb.py +107 -46
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/exasol.py +3 -6
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/fabric.py +5 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/hive.py +8 -1
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/mysql.py +3 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/oracle.py +0 -3
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/postgres.py +43 -5
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/presto.py +21 -9
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/python.py +5 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/snowflake.py +18 -7
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/spark2.py +22 -1
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/sqlite.py +6 -2
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/starrocks.py +35 -4
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/teradata.py +11 -1
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/tsql.py +4 -1
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/helper.py +17 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/optimizer/annotate_types.py +171 -106
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/optimizer/canonicalize.py +2 -2
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/optimizer/canonicalize_internal_names.py +11 -10
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/optimizer/eliminate_joins.py +19 -10
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/optimizer/merge_subqueries.py +6 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/optimizer/optimize_joins.py +6 -1
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/optimizer/pushdown_predicates.py +4 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/optimizer/qualify_columns.py +98 -138
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/optimizer/resolver.py +57 -8
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/optimizer/scope.py +24 -9
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/optimizer/simplify.py +28 -6
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/optimizer/unnest_subqueries.py +73 -3
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parser.py +186 -44
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/clickhouse.py +11 -5
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/doris.py +3 -3
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/dremio.py +3 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/drill.py +3 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/duckdb.py +115 -10
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/hive.py +13 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/mysql.py +71 -3
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/oracle.py +16 -1
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/postgres.py +36 -6
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/presto.py +2 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/prql.py +2 -8
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/redshift.py +3 -1
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/singlestore.py +3 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/snowflake.py +4 -4
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/spark2.py +4 -1
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/sqlite.py +46 -2
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/starrocks.py +73 -10
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/teradata.py +15 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/trino.py +6 -1
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/tokenizer_core.py +3 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/transforms.py +3 -3
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/typing/__init__.py +1 -1
- {sqlglot-30.23.0 → sqlglot-30.25.0/sqlglot.egg-info}/PKG-INFO +3 -3
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot.egg-info/SOURCES.txt +1 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot.egg-info/requires.txt +2 -2
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot.egg-info/scm_file_list.json +1 -0
- sqlglot-30.25.0/sqlglot.egg-info/scm_version.json +8 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglotc/pyproject.toml +1 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglotc/setup.py +17 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_athena.py +44 -1
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_bigquery.py +81 -2
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_clickhouse.py +32 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_databricks.py +19 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_dialect.py +197 -13
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_duckdb.py +420 -58
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_exasol.py +2 -2
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_fabric.py +7 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_hive.py +47 -13
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_mysql.py +107 -1
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_oracle.py +46 -2
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_postgres.py +146 -1
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_presto.py +11 -16
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_snowflake.py +62 -37
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_spark.py +28 -11
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_sqlite.py +133 -2
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_starrocks.py +130 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_teradata.py +38 -1
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_trino.py +125 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_tsql.py +4 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/canonicalize.sql +34 -5
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/canonicalize_internal_names.sql +30 -0
- sqlglot-30.25.0/tests/fixtures/optimizer/eliminate_joins.sql +636 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/merge_subqueries.sql +48 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/optimizer.sql +57 -13
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/qualify_columns.sql +81 -2
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/qualify_columns__invalid.sql +32 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/simplify.sql +70 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-h/tpc-h.sql +3 -1
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/unnest_subqueries.sql +159 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/helpers.py +6 -1
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/test_build.py +2 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/test_executor.py +11 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/test_expressions.py +21 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/test_generator.py +11 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/test_helper.py +21 -1
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/test_optimizer.py +655 -6
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/test_parser.py +143 -6
- sqlglot-30.25.0/tests/test_sqlglotc.py +126 -0
- sqlglot-30.23.0/sqlglot/dialects/starrocks.py +0 -34
- sqlglot-30.23.0/sqlglot.egg-info/scm_version.json +0 -8
- sqlglot-30.23.0/tests/fixtures/optimizer/eliminate_joins.sql +0 -336
- {sqlglot-30.23.0 → sqlglot-30.25.0}/.gitignore +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/.gitmodules +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/.gitpod.yml +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/.pre-commit-config.yaml +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/AGENTS.md +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/CLAUDE.md +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/CONTRIBUTING.md +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/LICENSE +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/MANIFEST.in +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/README.md +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/setup.cfg +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/setup.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/__init__.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/__main__.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/_typing.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/anonymize.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/__init__.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/databricks.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/dax.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/doris.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/dremio.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/drill.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/druid.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/dune.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/exasol.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/fabric.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/hive.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/materialize.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/mysql.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/presto.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/prql.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/redshift.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/risingwave.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/singlestore.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/solr.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/spark.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/spark2.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/tableau.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/teradata.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/trino.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/dialects/tsql.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/diff.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/errors.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/executor/__init__.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/executor/context.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/executor/env.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/executor/python.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/executor/table.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/expressions/__init__.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/expressions/aggregate.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/expressions/dml.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/expressions/functions.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/expressions/json.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/expressions/math.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/expressions/properties.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/expressions/string.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/expressions/temporal.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/__init__.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/athena.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/dax.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/doris.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/dremio.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/drill.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/druid.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/dune.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/materialize.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/prql.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/redshift.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/risingwave.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/singlestore.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/solr.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/spark.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/tableau.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/generators/trino.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/jsonpath.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/lineage.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/optimizer/__init__.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/optimizer/eliminate_ctes.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/optimizer/eliminate_subqueries.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/optimizer/helpers.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/optimizer/isolate_table_selects.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/optimizer/journal.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/optimizer/normalize.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/optimizer/normalize_identifiers.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/optimizer/optimizer.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/optimizer/pushdown_projections.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/optimizer/qualify.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/optimizer/qualify_tables.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/__init__.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/athena.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/base.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/bigquery.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/databricks.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/dax.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/druid.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/dune.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/exasol.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/fabric.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/materialize.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/risingwave.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/solr.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/spark.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/tableau.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/parsers/tsql.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/planner.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/py.typed +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/schema.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/serde.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/time.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/tokens.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/trie.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/typing/bigquery.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/typing/clickhouse.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/typing/databricks.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/typing/duckdb.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/typing/hive.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/typing/mysql.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/typing/postgres.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/typing/presto.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/typing/redshift.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/typing/snowflake.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/typing/spark.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/typing/spark2.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot/typing/tsql.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot.egg-info/dependency_links.txt +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot.egg-info/top_level.txt +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglot.png +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/sqlglotc/MANIFEST.in +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/__init__.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/__init__.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_dax.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_doris.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_dremio.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_drill.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_druid.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_dune.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_materialize.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_pipe_syntax.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_prql.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_redshift.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_risingwave.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_singlestore.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_solr.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/dialects/test_tableau.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/identity.sql +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/jsonpath/LICENSE +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/jsonpath/cts.json +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/annotate_functions.sql +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/annotate_types.sql +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/eliminate_ctes.sql +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/eliminate_subqueries.sql +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/isolate_table_selects.sql +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/normalize.sql +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/normalize_identifiers.sql +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/optimize_joins.sql +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/pushdown_cte_alias_columns.sql +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/pushdown_predicates.sql +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/pushdown_projections.sql +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/qualify_columns__with_invisible.sql +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/qualify_columns_ddl.sql +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/qualify_tables.sql +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/quote_identifiers.sql +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-ds/call_center.csv.gz +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-ds/catalog_page.csv.gz +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-ds/catalog_returns.csv.gz +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-ds/catalog_sales.csv.gz +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-ds/customer.csv.gz +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-ds/customer_address.csv.gz +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-ds/customer_demographics.csv.gz +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-ds/date_dim.csv.gz +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-ds/household_demographics.csv.gz +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-ds/income_band.csv.gz +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-ds/inventory.csv.gz +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-ds/item.csv.gz +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-ds/promotion.csv.gz +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-ds/reason.csv.gz +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-ds/ship_mode.csv.gz +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-ds/store.csv.gz +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-ds/store_returns.csv.gz +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-ds/store_sales.csv.gz +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-ds/time_dim.csv.gz +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-ds/tpc-ds.sql +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-ds/warehouse.csv.gz +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-ds/web_page.csv.gz +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-ds/web_returns.csv.gz +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-ds/web_sales.csv.gz +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-ds/web_site.csv.gz +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-h/customer.csv.gz +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-h/lineitem.csv.gz +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-h/nation.csv.gz +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-h/orders.csv.gz +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-h/part.csv.gz +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-h/partsupp.csv.gz +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-h/region.csv.gz +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/optimizer/tpc-h/supplier.csv.gz +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/partial.sql +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/fixtures/pretty.sql +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/gen_fixtures.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/leakcheck.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/sqlglot/__init__.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/test_anonymize.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/test_dialect_entry_points.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/test_dialect_imports.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/test_diff.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/test_docs.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/test_errors.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/test_integration_loader.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/test_jsonpath.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/test_lineage.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/test_schema.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/test_serde.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/test_time.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/test_tokens.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/test_transforms.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/test_transpile.py +0 -0
- {sqlglot-30.23.0 → sqlglot-30.25.0}/tests/test_typing.py +0 -0
|
@@ -1,6 +1,150 @@
|
|
|
1
1
|
Changelog
|
|
2
2
|
=========
|
|
3
3
|
|
|
4
|
+
## [v30.24.0] - 2026-10-20
|
|
5
|
+
### :boom: BREAKING CHANGES
|
|
6
|
+
- due to [`094509a`](https://github.com/tobymao/sqlglot/commit/094509aad83fff575f1b4d198e4d03c21c432e58) - merge SortArray into ArraySort with explicit NULL ordering *(PR [#8643](https://github.com/tobymao/sqlglot/pull/8643) by [@tobymao](https://github.com/tobymao))*:
|
|
7
|
+
|
|
8
|
+
merge SortArray into ArraySort with explicit NULL ordering (#8643)
|
|
9
|
+
|
|
10
|
+
- due to [`7af2aa8`](https://github.com/tobymao/sqlglot/commit/7af2aa8db5e9b9df0afea07201574ceeb9e66098) - register CTE reference alias when pivoted *(PR [#8667](https://github.com/tobymao/sqlglot/pull/8667) by [@ansh-rohilla](https://github.com/ansh-rohilla))*:
|
|
11
|
+
|
|
12
|
+
register CTE reference alias when pivoted (#8667)
|
|
13
|
+
|
|
14
|
+
- due to [`1e5c649`](https://github.com/tobymao/sqlglot/commit/1e5c649cc4157bf4451bba1361a3898d9504745b) - map ISO week format patterns IYYY and IW [CLAUDE] *(PR [#8672](https://github.com/tobymao/sqlglot/pull/8672) by [@vidigoat](https://github.com/vidigoat))*:
|
|
15
|
+
|
|
16
|
+
map ISO week format patterns IYYY and IW [CLAUDE] (#8672)
|
|
17
|
+
|
|
18
|
+
- due to [`479c4ca`](https://github.com/tobymao/sqlglot/commit/479c4cae0e38d60d10f4aac833c4091d5c2304e2) - respect dialect precedence of IS predicates *(PR [#8676](https://github.com/tobymao/sqlglot/pull/8676) by [@georgesittas](https://github.com/georgesittas))*:
|
|
19
|
+
|
|
20
|
+
respect dialect precedence of IS predicates (#8676)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
### :sparkles: New Features
|
|
24
|
+
- [`2444b6d`](https://github.com/tobymao/sqlglot/commit/2444b6db78f336b70c6f7aa980e43036367c7b0d) - **optimizer**: paste join support *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
25
|
+
- [`ec24376`](https://github.com/tobymao/sqlglot/commit/ec24376a58200dff16820fddcd15db102b6ead2e) - **starrocks**: parse admin and job-control statements as commands [CLAUDE] *(PR [#8681](https://github.com/tobymao/sqlglot/pull/8681) by [@nytai](https://github.com/nytai))*
|
|
26
|
+
|
|
27
|
+
### :bug: Bug Fixes
|
|
28
|
+
- [`f814e4c`](https://github.com/tobymao/sqlglot/commit/f814e4cb2a8743bba63e8818bae25207bbd3966f) - **mysql**: preserve population and sample aggregate semantics [CODEX] *(PR [#8632](https://github.com/tobymao/sqlglot/pull/8632) by [@yousefissa](https://github.com/yousefissa))*
|
|
29
|
+
- :arrow_lower_right: *fixes issue [#8626](https://github.com/tobymao/sqlglot/issues/8626) opened by [@bhargaviHQ](https://github.com/bhargaviHQ)*
|
|
30
|
+
- [`5527744`](https://github.com/tobymao/sqlglot/commit/552774469174ee686def95e6bcb2da46f61e047b) - **starrocks**: keep DATEDIFF's date-part semantics [CLAUDE] *(PR [#8636](https://github.com/tobymao/sqlglot/pull/8636) by [@nytai](https://github.com/nytai))*
|
|
31
|
+
- [`03744a2`](https://github.com/tobymao/sqlglot/commit/03744a2a8376af5f5f70230b04d1c5fbfb71dc61) - **hive,spark**: parse ALTER TABLE REPLACE COLUMNS [CLAUDE] *(PR [#8633](https://github.com/tobymao/sqlglot/pull/8633) by [@tsamaras](https://github.com/tsamaras))*
|
|
32
|
+
- [`021991f`](https://github.com/tobymao/sqlglot/commit/021991fb9a63060e2f71aeac48e134f67c77227f) - **optimizer**: evict dead refs from the type annotator cache *(PR [#8642](https://github.com/tobymao/sqlglot/pull/8642) by [@georgesittas](https://github.com/georgesittas))*
|
|
33
|
+
- :arrow_lower_right: *fixes issue [#8637](https://github.com/tobymao/sqlglot/issues/8637) opened by [@naveen-baton](https://github.com/naveen-baton)*
|
|
34
|
+
- [`00fce66`](https://github.com/tobymao/sqlglot/commit/00fce66dffd3dba4f90cda5534ec8df595bb1865) - **optimizer**: ensure generated decorrelation JOIN comes before reference in ON clause *(PR [#8638](https://github.com/tobymao/sqlglot/pull/8638) by [@treysp](https://github.com/treysp))*
|
|
35
|
+
- [`97134ff`](https://github.com/tobymao/sqlglot/commit/97134ffd3cd161222a42405b001a8a30a0a2c6f5) - **optimizer**: preserve precedence when unwrapping parens inside Mul *(PR [#8620](https://github.com/tobymao/sqlglot/pull/8620) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
|
|
36
|
+
- [`d747f5b`](https://github.com/tobymao/sqlglot/commit/d747f5b20dd71a379437dd3cf251ec130edd94b3) - don't materialize huge interval literals in simplify and the Postgres generator *(PR [#8641](https://github.com/tobymao/sqlglot/pull/8641) by [@tobymao](https://github.com/tobymao))*
|
|
37
|
+
- [`f321207`](https://github.com/tobymao/sqlglot/commit/f321207c8dcc2973d149744fcaa4d1a13edb0026) - **starrocks**: preserve LIKE argument order [CODEX] *(PR [#8645](https://github.com/tobymao/sqlglot/pull/8645) by [@01zhas](https://github.com/01zhas))*
|
|
38
|
+
- [`954cca1`](https://github.com/tobymao/sqlglot/commit/954cca1268ae38ae0384d5197e54fe50322ee9e3) - **starrocks**: preserve native TO_DAYS [CODEX] *(PR [#8648](https://github.com/tobymao/sqlglot/pull/8648) by [@01zhas](https://github.com/01zhas))*
|
|
39
|
+
- [`ce7f6e3`](https://github.com/tobymao/sqlglot/commit/ce7f6e39dbbbaa61ff01a307226ff867a3a9efb6) - **starrocks**: don't treat # as a comment [CLAUDE] *(PR [#8644](https://github.com/tobymao/sqlglot/pull/8644) by [@nytai](https://github.com/nytai))*
|
|
40
|
+
- [`c388227`](https://github.com/tobymao/sqlglot/commit/c388227a73fe4e6652e311db0a04b8d838c7c821) - remove obsolete sqlglotc extensions during builds *(PR [#8653](https://github.com/tobymao/sqlglot/pull/8653) by [@georgesittas](https://github.com/georgesittas))*
|
|
41
|
+
- [`d17c768`](https://github.com/tobymao/sqlglot/commit/d17c7680b70bccb5fda677aaf63980b2663224dc) - **bigquery**: transpile Trino date parts, FROM_BASE, APPROX_PERCENTILE, ARRAY_SORT and ARRAY_DISTINCT *(PR [#8639](https://github.com/tobymao/sqlglot/pull/8639) by [@tobymao](https://github.com/tobymao))*
|
|
42
|
+
- [`cb57d80`](https://github.com/tobymao/sqlglot/commit/cb57d80214bcd4a165194344b34bc930ef5318b8) - **optimizer**: clear child scope caches when projections are merged *(PR [#8646](https://github.com/tobymao/sqlglot/pull/8646) by [@treysp](https://github.com/treysp))*
|
|
43
|
+
- [`b50e43e`](https://github.com/tobymao/sqlglot/commit/b50e43e4407e010d15da9b313ff99df1b1099343) - **clickhouse**: parse PASTE JOIN instead of aliasing the table *(PR [#8662](https://github.com/tobymao/sqlglot/pull/8662) by [@spicysharkco](https://github.com/spicysharkco))*
|
|
44
|
+
- [`7af2aa8`](https://github.com/tobymao/sqlglot/commit/7af2aa8db5e9b9df0afea07201574ceeb9e66098) - **optimizer**: register CTE reference alias when pivoted *(PR [#8667](https://github.com/tobymao/sqlglot/pull/8667) by [@ansh-rohilla](https://github.com/ansh-rohilla))*
|
|
45
|
+
- :arrow_lower_right: *fixes issue [#8663](https://github.com/tobymao/sqlglot/issues/8663) opened by [@rob2244](https://github.com/rob2244)*
|
|
46
|
+
- [`513beed`](https://github.com/tobymao/sqlglot/commit/513beedd3753a22c1ce234059bd5d831f64e48f0) - **teradata**: drop LOCKING request modifier for other dialects instead of crashing [CLAUDE] *(PR [#8666](https://github.com/tobymao/sqlglot/pull/8666) by [@bhuvan-uda](https://github.com/bhuvan-uda))*
|
|
47
|
+
- :arrow_lower_right: *fixes issue [#8665](https://github.com/tobymao/sqlglot/issues/8665) opened by [@bhuvan-uda](https://github.com/bhuvan-uda)*
|
|
48
|
+
- [`9beb4ab`](https://github.com/tobymao/sqlglot/commit/9beb4ab2807839088f3439a2b937d222e598b617) - **transforms**: don't hoist explodes from nested queries in explode_projection_to_unnest [CLAUDE] *(PR [#8664](https://github.com/tobymao/sqlglot/pull/8664) by [@rob2244](https://github.com/rob2244))*
|
|
49
|
+
- :arrow_lower_right: *fixes issue [#8242](https://github.com/tobymao/sqlglot/issues/8242) opened by [@rob2244](https://github.com/rob2244)*
|
|
50
|
+
- [`f8c314c`](https://github.com/tobymao/sqlglot/commit/f8c314c449080860604b9ddd716d6bc75c89155f) - **teradata**: transpile SAMPLE row counts and fractions [CLAUDE] *(PR [#8670](https://github.com/tobymao/sqlglot/pull/8670) by [@bhuvan-uda](https://github.com/bhuvan-uda))*
|
|
51
|
+
- :arrow_lower_right: *fixes issue [#8669](https://github.com/tobymao/sqlglot/issues/8669) opened by [@bhuvan-uda](https://github.com/bhuvan-uda)*
|
|
52
|
+
- [`1e5c649`](https://github.com/tobymao/sqlglot/commit/1e5c649cc4157bf4451bba1361a3898d9504745b) - **postgres**: map ISO week format patterns IYYY and IW [CLAUDE] *(PR [#8672](https://github.com/tobymao/sqlglot/pull/8672) by [@vidigoat](https://github.com/vidigoat))*
|
|
53
|
+
- [`b06ed8e`](https://github.com/tobymao/sqlglot/commit/b06ed8ea3fc5dbf3771f86ee2a44a2134df0ed00) - **starrocks**: don't default column names for multi-array UNNEST [CLAUDE] *(PR [#8671](https://github.com/tobymao/sqlglot/pull/8671) by [@nytai](https://github.com/nytai))*
|
|
54
|
+
- [`9e57e44`](https://github.com/tobymao/sqlglot/commit/9e57e448de90bc273a926e63f77f4fdf788d0fac) - **oracle**: map ISO week-numbering year IYYY to %G [CLAUDE] *(PR [#8675](https://github.com/tobymao/sqlglot/pull/8675) by [@vidigoat](https://github.com/vidigoat))*
|
|
55
|
+
- [`f536a82`](https://github.com/tobymao/sqlglot/commit/f536a8233b4f9aa1efac982dd9d6b098ed3982a4) - **bigquery**: correct percentile and distinct-array transpilation *(PR [#8674](https://github.com/tobymao/sqlglot/pull/8674) by [@georgesittas](https://github.com/georgesittas))*
|
|
56
|
+
- [`e3d0dfb`](https://github.com/tobymao/sqlglot/commit/e3d0dfb2279d390dfed6e86cc353ed65cb2b97bb) - **optimizer**: give order aliases independent expression nodes *(PR [#8678](https://github.com/tobymao/sqlglot/pull/8678) by [@georgesittas](https://github.com/georgesittas))*
|
|
57
|
+
- [`40dcaab`](https://github.com/tobymao/sqlglot/commit/40dcaabdd29a6c3cda7f4ce29dedcdcffa3e49a0) - **starrocks**: generate PIVOT instead of dropping it [CLAUDE] *(PR [#8679](https://github.com/tobymao/sqlglot/pull/8679) by [@nytai](https://github.com/nytai))*
|
|
58
|
+
- [`fdd0e9a`](https://github.com/tobymao/sqlglot/commit/fdd0e9a464f0f9ec425c56ae83fc87a5e2052087) - **mysql**: relative xor/or/and precedence closes [#8684](https://github.com/tobymao/sqlglot/pull/8684) *(PR [#8686](https://github.com/tobymao/sqlglot/pull/8686) by [@georgesittas](https://github.com/georgesittas))*
|
|
59
|
+
- :arrow_lower_right: *fixes issue [#8684](https://github.com/tobymao/sqlglot/issues/8684) opened by [@pbottine](https://github.com/pbottine)*
|
|
60
|
+
- [`8955d75`](https://github.com/tobymao/sqlglot/commit/8955d752acc88ee23955dd6e07d567542a8cfaf8) - **mysql**: preserve exclamation mark operator precedence *(PR [#8687](https://github.com/tobymao/sqlglot/pull/8687) by [@georgesittas](https://github.com/georgesittas))*
|
|
61
|
+
- :arrow_lower_right: *fixes issue [#8683](https://github.com/tobymao/sqlglot/issues/8683) opened by [@pbottine](https://github.com/pbottine)*
|
|
62
|
+
- [`b1fd4e9`](https://github.com/tobymao/sqlglot/commit/b1fd4e9edf05ee6211656c235a62040e0f055bf0) - **mysql**: respect bitwise operator precedence *(PR [#8688](https://github.com/tobymao/sqlglot/pull/8688) by [@georgesittas](https://github.com/georgesittas))*
|
|
63
|
+
- :arrow_lower_right: *fixes issue [#8685](https://github.com/tobymao/sqlglot/issues/8685) opened by [@pbottine](https://github.com/pbottine)*
|
|
64
|
+
- [`fc1472a`](https://github.com/tobymao/sqlglot/commit/fc1472a0d54c4e8d0d6700b0a4dbe66f0f32707b) - **starrocks**: parse map{...} literals as maps [CLAUDE] *(PR [#8682](https://github.com/tobymao/sqlglot/pull/8682) by [@nytai](https://github.com/nytai))*
|
|
65
|
+
- [`115ce02`](https://github.com/tobymao/sqlglot/commit/115ce02b002ed63ff23a4c99a24ad025ec1efbb4) - **starrocks**: infer static pivot output columns [CODEX] *(PR [#8689](https://github.com/tobymao/sqlglot/pull/8689) by [@georgesittas](https://github.com/georgesittas))*
|
|
66
|
+
- [`479c4ca`](https://github.com/tobymao/sqlglot/commit/479c4cae0e38d60d10f4aac833c4091d5c2304e2) - **parser**: respect dialect precedence of IS predicates *(PR [#8676](https://github.com/tobymao/sqlglot/pull/8676) by [@georgesittas](https://github.com/georgesittas))*
|
|
67
|
+
- :arrow_lower_right: *fixes issue [#8661](https://github.com/tobymao/sqlglot/issues/8661) opened by [@laravioli](https://github.com/laravioli)*
|
|
68
|
+
- [`7e4d995`](https://github.com/tobymao/sqlglot/commit/7e4d995f75dac9fb6ed110109b80bf12f24cdea5) - **clickhouse**: stop re-wrapping parenthesized CTAS queries with COMMENT [CLAUDE] *(PR [#8698](https://github.com/tobymao/sqlglot/pull/8698) by [@vidigoat](https://github.com/vidigoat))*
|
|
69
|
+
- [`d44db25`](https://github.com/tobymao/sqlglot/commit/d44db25a534d86ba593958dd0cc533f8310daef0) - **parser**: support PARTITION BY EXCLUDING *(PR [#8690](https://github.com/tobymao/sqlglot/pull/8690) by [@geooo109](https://github.com/geooo109))*
|
|
70
|
+
- [`2d3d3ff`](https://github.com/tobymao/sqlglot/commit/2d3d3ff7b8b8b475a68d70ffe3529ac110c96f4b) - **fabric**: don't re-wrap AT TIME ZONE that is already cast to DATETIME2 [CLAUDE] *(PR [#8699](https://github.com/tobymao/sqlglot/pull/8699) by [@vidigoat](https://github.com/vidigoat))*
|
|
71
|
+
- [`68cd4a2`](https://github.com/tobymao/sqlglot/commit/68cd4a2d8f766132e338721df8676e0b42d6b7ca) - **duckdb**: quote identifiers that are DuckDB reserved keywords [CLAUDE] *(PR [#8700](https://github.com/tobymao/sqlglot/pull/8700) by [@vidigoat](https://github.com/vidigoat))*
|
|
72
|
+
- [`55bff61`](https://github.com/tobymao/sqlglot/commit/55bff6129f36820c78efccf920c877443dc7fb70) - **optimizer**: retain nodes in type annotation caches *(PR [#8691](https://github.com/tobymao/sqlglot/pull/8691) by [@georgesittas](https://github.com/georgesittas))*
|
|
73
|
+
- [`5d588c0`](https://github.com/tobymao/sqlglot/commit/5d588c0f32d17a08191898638f67ff27bb0a13ff) - **optimizer**: preserve unsupported struct star operands *(PR [#8692](https://github.com/tobymao/sqlglot/pull/8692) by [@georgesittas](https://github.com/georgesittas))*
|
|
74
|
+
|
|
75
|
+
### :recycle: Refactors
|
|
76
|
+
- [`094509a`](https://github.com/tobymao/sqlglot/commit/094509aad83fff575f1b4d198e4d03c21c432e58) - merge SortArray into ArraySort with explicit NULL ordering *(PR [#8643](https://github.com/tobymao/sqlglot/pull/8643) by [@tobymao](https://github.com/tobymao))*
|
|
77
|
+
|
|
78
|
+
### :wrench: Chores
|
|
79
|
+
- [`cd41eee`](https://github.com/tobymao/sqlglot/commit/cd41eeef32e13db1a2517d0a0dc5432ec2b89eb5) - refactor starrocks tests for LIKE *(commit by [@geooo109](https://github.com/geooo109))*
|
|
80
|
+
- [`af2b577`](https://github.com/tobymao/sqlglot/commit/af2b57734d67082ecc4db97cb5da1e8743918af0) - simplify starrocks tests *(commit by [@geooo109](https://github.com/geooo109))*
|
|
81
|
+
- [`df5b53f`](https://github.com/tobymao/sqlglot/commit/df5b53f92e31247e82bc37a512fab0abd4b54031) - refactor starrocks TO_DAYS test *(commit by [@geooo109](https://github.com/geooo109))*
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
## [v30.23.0] - 2026-10-14
|
|
85
|
+
### :boom: BREAKING CHANGES
|
|
86
|
+
- 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))*:
|
|
87
|
+
|
|
88
|
+
hash flag for case-sensitive nodes [CLAUDE] (#8599)
|
|
89
|
+
|
|
90
|
+
- 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))*:
|
|
91
|
+
|
|
92
|
+
generate JSONExtractRaw for JSON-valued extraction (#8601)
|
|
93
|
+
|
|
94
|
+
- 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))*:
|
|
95
|
+
|
|
96
|
+
infer correct types for temporal interval arithmetic (#8622)
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
### :sparkles: New Features
|
|
100
|
+
- [`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))*
|
|
101
|
+
- [`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))*
|
|
102
|
+
- :arrow_lower_right: *addresses issue [#8584](https://github.com/tobymao/sqlglot/issues/8584) opened by [@kaya-abdullah](https://github.com/kaya-abdullah)*
|
|
103
|
+
- [`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))*
|
|
104
|
+
- [`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))*
|
|
105
|
+
- [`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))*
|
|
106
|
+
- [`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))*
|
|
107
|
+
- [`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))*
|
|
108
|
+
- [`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))*
|
|
109
|
+
- [`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))*
|
|
110
|
+
|
|
111
|
+
### :bug: Bug Fixes
|
|
112
|
+
- [`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))*
|
|
113
|
+
- [`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))*
|
|
114
|
+
- [`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))*
|
|
115
|
+
- [`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))*
|
|
116
|
+
- :arrow_lower_right: *fixes issue [#8587](https://github.com/tobymao/sqlglot/issues/8587) opened by [@cofin](https://github.com/cofin)*
|
|
117
|
+
- [`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))*
|
|
118
|
+
- :arrow_lower_right: *fixes issue [#8590](https://github.com/tobymao/sqlglot/issues/8590) opened by [@jackr-xceleration](https://github.com/jackr-xceleration)*
|
|
119
|
+
- [`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))*
|
|
120
|
+
- [`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))*
|
|
121
|
+
- [`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))*
|
|
122
|
+
- :arrow_lower_right: *fixes issue [#8595](https://github.com/tobymao/sqlglot/issues/8595) opened by [@bhuvan-uda](https://github.com/bhuvan-uda)*
|
|
123
|
+
- [`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))*
|
|
124
|
+
- :arrow_lower_right: *fixes issue [#8598](https://github.com/tobymao/sqlglot/issues/8598) opened by [@laravioli](https://github.com/laravioli)*
|
|
125
|
+
- [`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))*
|
|
126
|
+
- [`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))*
|
|
127
|
+
- [`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))*
|
|
128
|
+
- [`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))*
|
|
129
|
+
- [`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))*
|
|
130
|
+
- [`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))*
|
|
131
|
+
- :arrow_lower_right: *fixes issue [#8580](https://github.com/tobymao/sqlglot/issues/8580) opened by [@cmodiano](https://github.com/cmodiano)*
|
|
132
|
+
- [`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))*
|
|
133
|
+
- [`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))*
|
|
134
|
+
- [`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))*
|
|
135
|
+
- [`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))*
|
|
136
|
+
- [`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))*
|
|
137
|
+
- [`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))*
|
|
138
|
+
- [`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))*
|
|
139
|
+
- [`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))*
|
|
140
|
+
- :arrow_lower_right: *fixes issue [#8628](https://github.com/tobymao/sqlglot/issues/8628) opened by [@masiljangajji](https://github.com/masiljangajji)*
|
|
141
|
+
- [`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))*
|
|
142
|
+
|
|
143
|
+
### :wrench: Chores
|
|
144
|
+
- [`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))*
|
|
145
|
+
- [`c0a9457`](https://github.com/tobymao/sqlglot/commit/c0a945740e55facdc7120c17cda2771dc55c7903) - **mysql**: tests for named FOREIGN KEY indexes *(commit by [@geooo109](https://github.com/geooo109))*
|
|
146
|
+
|
|
147
|
+
|
|
4
148
|
## [v30.22.0] - 2026-10-09
|
|
5
149
|
### :boom: BREAKING CHANGES
|
|
6
150
|
- 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))*:
|
|
@@ -16239,3 +16383,5 @@ pip install "sqlglot[c]" # compiled — faster, but no subclassing
|
|
|
16239
16383
|
[v30.20.0]: https://github.com/tobymao/sqlglot/compare/v30.19.0...v30.20.0
|
|
16240
16384
|
[v30.21.0]: https://github.com/tobymao/sqlglot/compare/v30.20.0...v30.21.0
|
|
16241
16385
|
[v30.22.0]: https://github.com/tobymao/sqlglot/compare/v30.21.0...v30.22.0
|
|
16386
|
+
[v30.23.0]: https://github.com/tobymao/sqlglot/compare/v30.22.0...v30.23.0
|
|
16387
|
+
[v30.24.0]: https://github.com/tobymao/sqlglot/compare/v30.23.0...v30.24.0
|
|
@@ -48,14 +48,24 @@ PY_GE_310 := $(shell python -c "import sys; print(int(sys.version_info >= (3, 10
|
|
|
48
48
|
|
|
49
49
|
install-devc:
|
|
50
50
|
@if [ "$(PY_GE_310)" = "1" ]; then \
|
|
51
|
-
|
|
51
|
+
echo "Building sqlglotc (log: .sqlglotc-build.log)"; \
|
|
52
|
+
(cd sqlglotc && MYPYC_OPT=0 python setup.py build_ext --inplace -j $(NPROC)) > .sqlglotc-build.log 2>&1 || { \
|
|
53
|
+
status=$$?; \
|
|
54
|
+
echo "sqlglotc build failed. See .sqlglotc-build.log for details." >&2; \
|
|
55
|
+
exit $$status; \
|
|
56
|
+
}; \
|
|
52
57
|
else \
|
|
53
58
|
echo "Skipping sqlglotc build: requires Python 3.10+"; \
|
|
54
59
|
fi
|
|
55
60
|
|
|
56
61
|
install-devc-release: clean
|
|
57
62
|
@if [ "$(PY_GE_310)" = "1" ]; then \
|
|
58
|
-
|
|
63
|
+
echo "Building sqlglotc (log: .sqlglotc-build.log)"; \
|
|
64
|
+
(cd sqlglotc && python setup.py build_ext --inplace -j $(NPROC)) > .sqlglotc-build.log 2>&1 || { \
|
|
65
|
+
status=$$?; \
|
|
66
|
+
echo "sqlglotc build failed. See .sqlglotc-build.log for details." >&2; \
|
|
67
|
+
exit $$status; \
|
|
68
|
+
}; \
|
|
59
69
|
else \
|
|
60
70
|
echo "Skipping sqlglotc build: requires Python 3.10+"; \
|
|
61
71
|
fi
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sqlglot
|
|
3
|
-
Version: 30.
|
|
3
|
+
Version: 30.25.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.25.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.25.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.25.0'
|
|
22
|
+
__version_tuple__ = version_tuple = (30, 25, 0)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g9d2966ed3'
|
|
@@ -75,33 +75,56 @@ class Athena(Trino):
|
|
|
75
75
|
self._trino_tokenizer = _TrinoTokenizer(Trino())
|
|
76
76
|
|
|
77
77
|
def tokenize(self, sql: str) -> list[Token]:
|
|
78
|
+
# DML only needs Trino's tokenizer; possible Hive statements need disambiguation.
|
|
79
|
+
try:
|
|
80
|
+
trino_tokens: list[Token] | None = self._trino_tokenizer.tokenize(sql)
|
|
81
|
+
except TokenError:
|
|
82
|
+
trino_tokens = None
|
|
83
|
+
|
|
84
|
+
if trino_tokens is not None and not _may_be_hive(trino_tokens):
|
|
85
|
+
return trino_tokens
|
|
86
|
+
|
|
78
87
|
try:
|
|
79
88
|
tokens = super().tokenize(sql)
|
|
80
89
|
except TokenError:
|
|
81
90
|
# Combined rules can reject literals valid in only one engine.
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
return [Token(TokenType.HIVE_TOKEN_STREAM, "")] + tokens if hive else tokens
|
|
91
|
+
if trino_tokens is not None and not _tokenize_as_hive(trino_tokens):
|
|
92
|
+
return trino_tokens
|
|
93
|
+
|
|
94
|
+
try:
|
|
95
|
+
tokens = self._hive_tokenizer.tokenize(sql)
|
|
96
|
+
except TokenError:
|
|
97
|
+
pass
|
|
98
|
+
else:
|
|
99
|
+
if _tokenize_as_hive(tokens):
|
|
100
|
+
return [Token(TokenType.HIVE_TOKEN_STREAM, "")] + tokens
|
|
93
101
|
raise
|
|
94
102
|
|
|
95
103
|
if _tokenize_as_hive(tokens):
|
|
96
104
|
return [Token(TokenType.HIVE_TOKEN_STREAM, "")] + self._hive_tokenizer.tokenize(sql)
|
|
97
105
|
|
|
98
|
-
return self._trino_tokenizer.tokenize(sql)
|
|
106
|
+
return trino_tokens if trino_tokens is not None else self._trino_tokenizer.tokenize(sql)
|
|
99
107
|
|
|
100
108
|
Parser = AthenaParser
|
|
101
109
|
|
|
102
110
|
Generator = AthenaGenerator
|
|
103
111
|
|
|
104
112
|
|
|
113
|
+
_MAYBE_HIVE_TOKENS = {
|
|
114
|
+
TokenType.ALTER,
|
|
115
|
+
TokenType.CREATE,
|
|
116
|
+
TokenType.DESCRIBE,
|
|
117
|
+
TokenType.DROP,
|
|
118
|
+
TokenType.SHOW,
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def _may_be_hive(tokens: list[Token]) -> bool:
|
|
123
|
+
return bool(tokens) and (
|
|
124
|
+
tokens[0].token_type in _MAYBE_HIVE_TOKENS or tokens[0].text.upper() == "MSCK"
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
|
|
105
128
|
def _tokenize_as_hive(tokens: list[Token]) -> bool:
|
|
106
129
|
if len(tokens) < 2:
|
|
107
130
|
return False
|
|
@@ -36,6 +36,7 @@ class BigQuery(Dialect):
|
|
|
36
36
|
ANNOTATE_ALL_SCOPES = True
|
|
37
37
|
PROJECTION_ALIASES_SHADOW_SOURCE_NAMES = True
|
|
38
38
|
TABLES_REFERENCEABLE_AS_COLUMNS = True
|
|
39
|
+
TABLE_ALIASES_SHADOW_COLUMN_NAMES = True
|
|
39
40
|
SUPPORTS_STRUCT_STAR_EXPANSION = True
|
|
40
41
|
EXCLUDES_PSEUDOCOLUMNS_FROM_STAR = True
|
|
41
42
|
QUERY_RESULTS_ARE_STRUCTS = True
|
|
@@ -59,6 +59,10 @@ DATETIME_DELTA = t.Union[
|
|
|
59
59
|
]
|
|
60
60
|
DATETIME_ADD = (exp.DateAdd, exp.TimeAdd, exp.DatetimeAdd, exp.TsOrDsAdd, exp.TimestampAdd)
|
|
61
61
|
|
|
62
|
+
# JSON paths that need parentheses when used as the right operand of -> / ->>.
|
|
63
|
+
# CONCAT may be generated as a chain of || operators, which would bind looser than the arrow
|
|
64
|
+
WRAPPED_JSON_PATH_EXPRESSIONS = (exp.Binary, exp.Predicate, exp.Not, exp.Concat)
|
|
65
|
+
|
|
62
66
|
if t.TYPE_CHECKING:
|
|
63
67
|
from sqlglot._typing import B, E, F, GeneratorArgs, ParserArgs, BuilderArgs
|
|
64
68
|
from typing_extensions import Unpack
|
|
@@ -635,6 +639,11 @@ class Dialect(metaclass=_Dialect):
|
|
|
635
639
|
with "custom_fields" in GROUP BY/HAVING.
|
|
636
640
|
"""
|
|
637
641
|
|
|
642
|
+
TABLE_ALIASES_SHADOW_COLUMN_NAMES = False
|
|
643
|
+
"""
|
|
644
|
+
Whether a whole-row reference to a table alias takes precedence over a same-named column.
|
|
645
|
+
"""
|
|
646
|
+
|
|
638
647
|
TABLES_REFERENCEABLE_AS_COLUMNS = False
|
|
639
648
|
"""
|
|
640
649
|
Whether table names can be referenced as columns (treated as structs).
|
|
@@ -1357,7 +1366,7 @@ def arrow_json_extract_sql(
|
|
|
1357
1366
|
if self.JSON_TYPE_REQUIRED_FOR_EXTRACTION and isinstance(this, exp.Literal) and this.is_string:
|
|
1358
1367
|
this.replace(exp.cast(this, exp.DType.JSON))
|
|
1359
1368
|
|
|
1360
|
-
if isinstance(expression.expression,
|
|
1369
|
+
if isinstance(expression.expression, WRAPPED_JSON_PATH_EXPRESSIONS):
|
|
1361
1370
|
expression.set("expression", exp.paren(expression.expression, copy=False))
|
|
1362
1371
|
|
|
1363
1372
|
op = op or ("->" if isinstance(expression, exp.JSONExtract) else "->>")
|
|
@@ -1608,7 +1617,11 @@ def generate_series_sql(
|
|
|
1608
1617
|
if expression.args.get("is_end_exclusive"):
|
|
1609
1618
|
if exclusive_func_name:
|
|
1610
1619
|
return self.func(exclusive_func_name, start, end, step)
|
|
1611
|
-
|
|
1620
|
+
# The last value is one before the end in the direction of the step
|
|
1621
|
+
if step and step.is_int and t.cast(int, step.to_py()) < 0:
|
|
1622
|
+
adjusted_end: exp.Expr = exp.Add(this=end, expression=exp.Literal.number(1))
|
|
1623
|
+
else:
|
|
1624
|
+
adjusted_end = exp.Sub(this=end, expression=exp.Literal.number(1))
|
|
1612
1625
|
return self.func(func_name, start, adjusted_end, step)
|
|
1613
1626
|
|
|
1614
1627
|
return self.func(func_name, start, end, step)
|
|
@@ -2140,7 +2153,10 @@ def is_parse_json(expression: exp.Expr) -> bool:
|
|
|
2140
2153
|
|
|
2141
2154
|
|
|
2142
2155
|
def isnull_to_is_null(args: BuilderArgs) -> exp.Expr:
|
|
2143
|
-
|
|
2156
|
+
this = seq_get(args, 0)
|
|
2157
|
+
if isinstance(this, (exp.Predicate, exp.Connector, exp.Not)):
|
|
2158
|
+
this = exp.Paren(this=this)
|
|
2159
|
+
return exp.Paren(this=exp.Is(this=this, expression=exp.null()))
|
|
2144
2160
|
|
|
2145
2161
|
|
|
2146
2162
|
def generatedasidentitycolumnconstraint_sql(
|
|
@@ -2701,9 +2717,13 @@ def no_make_interval_sql(self: Generator, expression: exp.MakeInterval, sep: str
|
|
|
2701
2717
|
if isinstance(value, exp.Kwarg):
|
|
2702
2718
|
value = value.expression
|
|
2703
2719
|
|
|
2704
|
-
|
|
2720
|
+
if value is None:
|
|
2721
|
+
continue
|
|
2722
|
+
|
|
2723
|
+
value_sql = value.name if value.is_string else self.sql(value)
|
|
2724
|
+
args.append(f"{value_sql} {unit}")
|
|
2705
2725
|
|
|
2706
|
-
return f"INTERVAL
|
|
2726
|
+
return f"INTERVAL {self.sql(exp.Literal.string(self.format_args(*args, sep=sep)))}"
|
|
2707
2727
|
|
|
2708
2728
|
|
|
2709
2729
|
def length_or_char_length_sql(self: Generator, expression: exp.Length) -> str:
|
|
@@ -2774,6 +2794,17 @@ def build_timetostr_or_tochar(
|
|
|
2774
2794
|
return exp.ToChar.from_arg_list(args)
|
|
2775
2795
|
|
|
2776
2796
|
|
|
2797
|
+
def array_sort_order(expression: exp.ArraySort) -> tuple[bool, bool | None] | None:
|
|
2798
|
+
"""Whether an ArraySort is ascending and puts NULLs first, or None if either isn't a literal."""
|
|
2799
|
+
asc = expression.args.get("asc") or exp.true()
|
|
2800
|
+
nulls_first = expression.args.get("nulls_first")
|
|
2801
|
+
if not isinstance(asc, exp.Boolean):
|
|
2802
|
+
return None
|
|
2803
|
+
if nulls_first is None:
|
|
2804
|
+
return asc.this, None
|
|
2805
|
+
return (asc.this, nulls_first.this) if isinstance(nulls_first, exp.Boolean) else None
|
|
2806
|
+
|
|
2807
|
+
|
|
2777
2808
|
def build_replace_with_optional_replacement(args: BuilderArgs) -> exp.Replace:
|
|
2778
2809
|
return exp.Replace(
|
|
2779
2810
|
this=seq_get(args, 0),
|
|
@@ -24,6 +24,7 @@ class DuckDB(Dialect):
|
|
|
24
24
|
SUPPORTS_LIMIT_ALL = True
|
|
25
25
|
SUPPORTS_FIXED_SIZE_ARRAYS = True
|
|
26
26
|
TABLES_REFERENCEABLE_AS_COLUMNS = True
|
|
27
|
+
QUERY_RESULTS_ARE_STRUCTS = True
|
|
27
28
|
STRICT_JSON_PATH_SYNTAX = False
|
|
28
29
|
NUMBERS_CAN_BE_UNDERSCORE_SEPARATED = True
|
|
29
30
|
UUID_IS_STRING_TYPE = False
|
|
@@ -94,8 +95,10 @@ class DuckDB(Dialect):
|
|
|
94
95
|
"BITSTRING": TokenType.BIT,
|
|
95
96
|
"BPCHAR": TokenType.TEXT,
|
|
96
97
|
"CHAR": TokenType.TEXT,
|
|
98
|
+
"CONNECT": TokenType.CONNECT,
|
|
97
99
|
"DATETIME": TokenType.TIMESTAMPNTZ,
|
|
98
100
|
"DETACH": TokenType.DETACH,
|
|
101
|
+
"DISCONNECT": TokenType.DISCONNECT,
|
|
99
102
|
"FORCE": TokenType.FORCE,
|
|
100
103
|
"INSTALL": TokenType.INSTALL,
|
|
101
104
|
"INT8": TokenType.BIGINT,
|
|
@@ -37,6 +37,7 @@ class Oracle(Dialect):
|
|
|
37
37
|
"HH12": "%I", # alias for HH
|
|
38
38
|
"HH24": "%H", # Hour of day (0-23)
|
|
39
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
|
|
40
41
|
"MI": "%M", # Minute (0-59)
|
|
41
42
|
"MM": "%m", # Month (01-12; January = 01)
|
|
42
43
|
"MON": "%b", # Abbreviated name of month
|
|
@@ -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
|
|
@@ -38,6 +38,7 @@ class Snowflake(Dialect):
|
|
|
38
38
|
# https://docs.snowflake.com/en/sql-reference/functions/split_to_table
|
|
39
39
|
DEFAULT_FUNCTIONS_COLUMN_NAMES = {
|
|
40
40
|
exp.SplitToTable: ("seq", "index", "value"),
|
|
41
|
+
exp.StrtokSplitToTable: ("seq", "index", "value"),
|
|
41
42
|
}
|
|
42
43
|
|
|
43
44
|
EXPRESSION_METADATA = EXPRESSION_METADATA.copy()
|
|
@@ -33,8 +33,12 @@ class SQLite(Dialect):
|
|
|
33
33
|
**tokens.Tokenizer.KEYWORDS,
|
|
34
34
|
"ATTACH": TokenType.ATTACH,
|
|
35
35
|
"DETACH": TokenType.DETACH,
|
|
36
|
+
# REAL, FLOAT and DOUBLE are all 8-byte IEEE floats in SQLite (REAL affinity),
|
|
37
|
+
# so they must not become a 4-byte float in dialects where REAL/FLOAT means FLOAT4
|
|
38
|
+
"FLOAT": TokenType.DOUBLE,
|
|
36
39
|
"INDEXED BY": TokenType.INDEXED_BY,
|
|
37
40
|
"MATCH": TokenType.MATCH,
|
|
41
|
+
"REAL": TokenType.DOUBLE,
|
|
38
42
|
}
|
|
39
43
|
|
|
40
44
|
KEYWORDS.pop("/*+")
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from sqlglot import exp
|
|
4
|
+
from sqlglot.dialects.dialect import UsingColumnOrder
|
|
5
|
+
from sqlglot.dialects.mysql import MySQL
|
|
6
|
+
from sqlglot.generators.starrocks import StarRocksGenerator
|
|
7
|
+
from sqlglot.parsers.starrocks import StarRocksParser
|
|
8
|
+
from sqlglot.tokens import TokenType
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class StarRocks(MySQL):
|
|
12
|
+
STRICT_JSON_PATH_SYNTAX = False
|
|
13
|
+
INDEX_OFFSET = 1
|
|
14
|
+
USING_COLUMN_ORDER = UsingColumnOrder.USING_LIST
|
|
15
|
+
|
|
16
|
+
DEFAULT_FUNCTIONS_COLUMN_NAMES = {
|
|
17
|
+
exp.GenerateSeries: "generate_series",
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
class Tokenizer(MySQL.Tokenizer):
|
|
21
|
+
# Unlike MySQL, "#" doesn't start a comment
|
|
22
|
+
COMMENTS = ["--", ("/*", "*/")]
|
|
23
|
+
DASH_COMMENT_REQUIRES_BOUNDARY = False
|
|
24
|
+
COMMENTS_TERMINATE_AT_NEWLINE_ONLY = False
|
|
25
|
+
|
|
26
|
+
KEYWORDS = {
|
|
27
|
+
**MySQL.Tokenizer.KEYWORDS,
|
|
28
|
+
"ADD BACKEND BLACKLIST": TokenType.COMMAND,
|
|
29
|
+
"ADD COMPUTE NODE BLACKLIST": TokenType.COMMAND,
|
|
30
|
+
"ADD SQL DIGEST BLACKLIST": TokenType.COMMAND,
|
|
31
|
+
"ADD SQLBLACKLIST": TokenType.COMMAND,
|
|
32
|
+
"ADMIN": TokenType.COMMAND,
|
|
33
|
+
"BACKUP": TokenType.COMMAND,
|
|
34
|
+
"CANCEL": TokenType.COMMAND,
|
|
35
|
+
"DEALLOCATE": TokenType.COMMAND,
|
|
36
|
+
"DELETE BACKEND BLACKLIST": TokenType.COMMAND,
|
|
37
|
+
"DELETE COMPUTE NODE BLACKLIST": TokenType.COMMAND,
|
|
38
|
+
"DELETE SQL DIGEST BLACKLIST": TokenType.COMMAND,
|
|
39
|
+
"DELETE SQLBLACKLIST": TokenType.COMMAND,
|
|
40
|
+
"EXPORT": TokenType.COMMAND,
|
|
41
|
+
"HLL": TokenType.HLLSKETCH,
|
|
42
|
+
"INSTALL": TokenType.COMMAND,
|
|
43
|
+
"LARGEINT": TokenType.INT128,
|
|
44
|
+
"PAUSE": TokenType.COMMAND,
|
|
45
|
+
"RECOVER": TokenType.COMMAND,
|
|
46
|
+
"REFRESH": TokenType.REFRESH,
|
|
47
|
+
"RESTORE": TokenType.COMMAND,
|
|
48
|
+
"RESUME": TokenType.COMMAND,
|
|
49
|
+
"STOP": TokenType.COMMAND,
|
|
50
|
+
"SUBMIT": TokenType.COMMAND,
|
|
51
|
+
"TRANSLATE TRINO": TokenType.COMMAND,
|
|
52
|
+
"UNINSTALL": TokenType.COMMAND,
|
|
53
|
+
}
|
|
54
|
+
KEYWORDS.pop("IGNORE")
|
|
55
|
+
KEYWORDS.pop("#>")
|
|
56
|
+
KEYWORDS.pop("#>>")
|
|
57
|
+
|
|
58
|
+
Parser = StarRocksParser
|
|
59
|
+
|
|
60
|
+
Generator = StarRocksGenerator
|
|
@@ -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
|
|
|
@@ -258,6 +254,10 @@ class SplitToTable(Expression, Func, UDTF):
|
|
|
258
254
|
arg_types = {"this": True, "expression": True}
|
|
259
255
|
|
|
260
256
|
|
|
257
|
+
class StrtokSplitToTable(Expression, Func, UDTF):
|
|
258
|
+
arg_types = {"this": True, "expression": False}
|
|
259
|
+
|
|
260
|
+
|
|
261
261
|
class Stack(Expression, Func, UDTF):
|
|
262
262
|
arg_types = {"this": True, "expressions": True}
|
|
263
263
|
is_var_len_args = True
|
|
@@ -921,7 +921,7 @@ def replace_placeholders(expression: Expr, *args: object, **kwargs: t.Any) -> Ex
|
|
|
921
921
|
def _replace_placeholders(node: Expr, args: Iterator[object], **kwargs: object) -> Expr:
|
|
922
922
|
if isinstance(node, Placeholder):
|
|
923
923
|
if node.this:
|
|
924
|
-
new_name = kwargs.get(node.
|
|
924
|
+
new_name = kwargs.get(node.name)
|
|
925
925
|
if new_name is not None:
|
|
926
926
|
return _replace_placeholder(node, convert(new_name))
|
|
927
927
|
else:
|
|
@@ -161,7 +161,7 @@ class OnUpdateColumnConstraint(Expression, ColumnConstraintKind):
|
|
|
161
161
|
|
|
162
162
|
|
|
163
163
|
class PrimaryKeyColumnConstraint(Expression, ColumnConstraintKind):
|
|
164
|
-
arg_types = {"desc": False, "options": False}
|
|
164
|
+
arg_types = {"desc": False, "options": False, "include": False}
|
|
165
165
|
|
|
166
166
|
|
|
167
167
|
class TitleColumnConstraint(Expression, ColumnConstraintKind):
|
|
@@ -175,6 +175,7 @@ class UniqueColumnConstraint(Expression, ColumnConstraintKind):
|
|
|
175
175
|
"on_conflict": False,
|
|
176
176
|
"nulls": False,
|
|
177
177
|
"options": False,
|
|
178
|
+
"include": False,
|
|
178
179
|
}
|
|
179
180
|
|
|
180
181
|
|