sqlglot 30.22.0__tar.gz → 30.23.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.23.0}/CHANGELOG.md +194 -0
- {sqlglot-30.22.0/sqlglot.egg-info → sqlglot-30.23.0}/PKG-INFO +3 -3
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/_version.py +3 -3
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/anonymize.py +1 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/athena.py +17 -1
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/databricks.py +1 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/dialect.py +25 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/oracle.py +27 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/snowflake.py +5 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/starrocks.py +1 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/expressions/builders.py +54 -5
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/expressions/constraints.py +1 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/expressions/core.py +13 -3
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/expressions/ddl.py +2 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/expressions/json.py +1 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/expressions/properties.py +17 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/expressions/query.py +9 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generator.py +13 -1
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/athena.py +5 -1
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/clickhouse.py +33 -1
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/doris.py +6 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/duckdb.py +9 -2
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/oracle.py +22 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/presto.py +2 -1
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/spark2.py +2 -1
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/starrocks.py +21 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/teradata.py +19 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/optimizer/merge_subqueries.py +3 -3
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/optimizer/qualify_columns.py +3 -3
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/optimizer/qualify_tables.py +4 -1
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parser.py +32 -12
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/athena.py +8 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/clickhouse.py +5 -1
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/doris.py +40 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/duckdb.py +7 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/mysql.py +13 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/oracle.py +77 -2
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/postgres.py +1 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/spark2.py +7 -4
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/starrocks.py +72 -1
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/teradata.py +44 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/tokenizer_core.py +3 -1
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/tokens.py +3 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/typing/duckdb.py +18 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0/sqlglot.egg-info}/PKG-INFO +3 -3
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot.egg-info/requires.txt +2 -2
- sqlglot-30.23.0/sqlglot.egg-info/scm_version.json +8 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_athena.py +36 -1
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_bigquery.py +1 -1
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_clickhouse.py +104 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_databricks.py +23 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_dialect.py +6 -4
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_doris.py +63 -1
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_duckdb.py +44 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_mysql.py +22 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_oracle.py +265 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_postgres.py +34 -2
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_snowflake.py +2 -2
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_spark.py +24 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_starrocks.py +104 -1
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_teradata.py +38 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/eliminate_subqueries.sql +4 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/merge_subqueries.sql +4 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/optimizer.sql +18 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/qualify_columns.sql +10 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/qualify_tables.sql +25 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/test_anonymize.py +1 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/test_expressions.py +111 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/test_parser.py +1 -0
- sqlglot-30.22.0/sqlglot.egg-info/scm_version.json +0 -8
- {sqlglot-30.22.0 → sqlglot-30.23.0}/.gitignore +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/.gitmodules +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/.gitpod.yml +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/.pre-commit-config.yaml +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/AGENTS.md +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/CLAUDE.md +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/CONTRIBUTING.md +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/LICENSE +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/MANIFEST.in +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/Makefile +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/README.md +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/pyproject.toml +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/setup.cfg +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/setup.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/__init__.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/__main__.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/_typing.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/__init__.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/bigquery.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/clickhouse.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/dax.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/doris.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/dremio.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/drill.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/druid.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/duckdb.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/dune.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/exasol.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/fabric.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/hive.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/materialize.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/mysql.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/postgres.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/presto.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/prql.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/redshift.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/risingwave.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/singlestore.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/solr.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/spark.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/spark2.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/sqlite.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/tableau.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/teradata.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/trino.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/dialects/tsql.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/diff.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/errors.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/executor/__init__.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/executor/context.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/executor/env.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/executor/python.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/executor/table.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/expressions/__init__.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/expressions/aggregate.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/expressions/array.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/expressions/datatypes.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/expressions/dml.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/expressions/functions.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/expressions/math.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/expressions/string.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/expressions/temporal.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/__init__.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/bigquery.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/databricks.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/dax.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/dremio.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/drill.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/druid.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/dune.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/exasol.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/fabric.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/hive.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/materialize.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/mysql.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/postgres.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/prql.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/python.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/redshift.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/risingwave.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/singlestore.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/snowflake.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/solr.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/spark.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/sqlite.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/tableau.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/trino.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/generators/tsql.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/helper.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/jsonpath.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/lineage.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/optimizer/__init__.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/optimizer/annotate_types.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/optimizer/canonicalize.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/optimizer/canonicalize_internal_names.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/optimizer/eliminate_ctes.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/optimizer/eliminate_joins.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/optimizer/eliminate_subqueries.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/optimizer/helpers.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/optimizer/isolate_table_selects.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/optimizer/journal.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/optimizer/normalize.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/optimizer/normalize_identifiers.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/optimizer/optimize_joins.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/optimizer/optimizer.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/optimizer/pushdown_predicates.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/optimizer/pushdown_projections.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/optimizer/qualify.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/optimizer/resolver.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/optimizer/scope.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/optimizer/simplify.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/optimizer/unnest_subqueries.py +3 -3
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/__init__.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/base.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/bigquery.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/databricks.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/dax.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/dremio.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/drill.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/druid.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/dune.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/exasol.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/fabric.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/hive.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/materialize.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/presto.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/prql.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/redshift.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/risingwave.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/singlestore.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/snowflake.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/solr.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/spark.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/sqlite.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/tableau.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/trino.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/parsers/tsql.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/planner.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/py.typed +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/schema.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/serde.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/time.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/transforms.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/trie.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/typing/__init__.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/typing/bigquery.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/typing/clickhouse.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/typing/databricks.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/typing/hive.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/typing/mysql.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/typing/postgres.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/typing/presto.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/typing/redshift.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/typing/snowflake.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/typing/spark.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/typing/spark2.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot/typing/tsql.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot.egg-info/SOURCES.txt +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot.egg-info/dependency_links.txt +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot.egg-info/scm_file_list.json +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot.egg-info/top_level.txt +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglot.png +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglotc/MANIFEST.in +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglotc/pyproject.toml +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/sqlglotc/setup.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/__init__.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/__init__.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_dax.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_dremio.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_drill.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_druid.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_dune.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_exasol.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_fabric.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_hive.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_materialize.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_pipe_syntax.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_presto.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_prql.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_redshift.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_risingwave.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_singlestore.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_solr.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_sqlite.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_tableau.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_trino.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/dialects/test_tsql.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/identity.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/jsonpath/LICENSE +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/jsonpath/cts.json +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/annotate_functions.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/annotate_types.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/canonicalize.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/canonicalize_internal_names.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/eliminate_ctes.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/eliminate_joins.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/isolate_table_selects.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/normalize.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/normalize_identifiers.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/optimize_joins.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/pushdown_cte_alias_columns.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/pushdown_predicates.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/pushdown_projections.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/qualify_columns__invalid.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/qualify_columns__with_invisible.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/qualify_columns_ddl.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/quote_identifiers.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/simplify.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-ds/call_center.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-ds/catalog_page.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-ds/catalog_returns.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-ds/catalog_sales.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-ds/customer.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-ds/customer_address.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-ds/customer_demographics.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-ds/date_dim.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-ds/household_demographics.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-ds/income_band.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-ds/inventory.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-ds/item.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-ds/promotion.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-ds/reason.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-ds/ship_mode.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-ds/store.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-ds/store_returns.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-ds/store_sales.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-ds/time_dim.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-ds/tpc-ds.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-ds/warehouse.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-ds/web_page.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-ds/web_returns.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-ds/web_sales.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-ds/web_site.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-h/customer.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-h/lineitem.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-h/nation.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-h/orders.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-h/part.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-h/partsupp.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-h/region.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-h/supplier.csv.gz +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/tpc-h/tpc-h.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/optimizer/unnest_subqueries.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/partial.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/fixtures/pretty.sql +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/gen_fixtures.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/helpers.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/leakcheck.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/sqlglot/__init__.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/test_build.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/test_dialect_entry_points.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/test_dialect_imports.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/test_diff.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/test_docs.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/test_errors.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/test_executor.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/test_generator.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/test_helper.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/test_integration_loader.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/test_jsonpath.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/test_lineage.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/test_optimizer.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/test_schema.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/test_serde.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/test_time.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/test_tokens.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/test_transforms.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/test_transpile.py +0 -0
- {sqlglot-30.22.0 → sqlglot-30.23.0}/tests/test_typing.py +0 -0
|
@@ -1,6 +1,199 @@
|
|
|
1
1
|
Changelog
|
|
2
2
|
=========
|
|
3
3
|
|
|
4
|
+
## [v30.22.0] - 2026-10-09
|
|
5
|
+
### :boom: BREAKING CHANGES
|
|
6
|
+
- 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))*:
|
|
7
|
+
|
|
8
|
+
Parse bare `ALTER TABLE ... DROP c`. (#8432)
|
|
9
|
+
|
|
10
|
+
- 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))*:
|
|
11
|
+
|
|
12
|
+
decode string escapes and preserve byte literals (#8479)
|
|
13
|
+
|
|
14
|
+
- 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))*:
|
|
15
|
+
|
|
16
|
+
preserve backslashes in string literals (#8481)
|
|
17
|
+
|
|
18
|
+
- 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))*:
|
|
19
|
+
|
|
20
|
+
correct PostgreSQL, DuckDB, Redshift, and ClickHouse string escapes (#8484)
|
|
21
|
+
|
|
22
|
+
- 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))*:
|
|
23
|
+
|
|
24
|
+
support mixed-operation `ALTER`s. (#8419)
|
|
25
|
+
|
|
26
|
+
- 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))*:
|
|
27
|
+
|
|
28
|
+
MySQL accepts non-CSV table options. (#8503)
|
|
29
|
+
|
|
30
|
+
- 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))*:
|
|
31
|
+
|
|
32
|
+
scope preserved function names to their dialect (#8512)
|
|
33
|
+
|
|
34
|
+
- 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))*:
|
|
35
|
+
|
|
36
|
+
expand stars in the order sources appear in FROM (#8529)
|
|
37
|
+
|
|
38
|
+
- 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))*:
|
|
39
|
+
|
|
40
|
+
support FROM-first multi-table INSERT [CLAUDE] (#8527)
|
|
41
|
+
|
|
42
|
+
- 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))*:
|
|
43
|
+
|
|
44
|
+
expand nested join constructs in qualify_tables (#8530)
|
|
45
|
+
|
|
46
|
+
- 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))*:
|
|
47
|
+
|
|
48
|
+
FROM-first multi-table INSERT cleanup (#8535)
|
|
49
|
+
|
|
50
|
+
- 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))*:
|
|
51
|
+
|
|
52
|
+
preserve precision for timestamp and time literals (#8534) (#8538)
|
|
53
|
+
|
|
54
|
+
- 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))*:
|
|
55
|
+
|
|
56
|
+
truncate integer division towards zero instead of rounding (#8532)
|
|
57
|
+
|
|
58
|
+
- due to [`b7e5153`](https://github.com/tobymao/sqlglot/commit/b7e515399a589e720b2bd081e5bb395f408feff8) - preserve bracket flags in gen serialization *(commit by [@georgesittas](https://github.com/georgesittas))*:
|
|
59
|
+
|
|
60
|
+
preserve bracket flags in gen serialization
|
|
61
|
+
|
|
62
|
+
- 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))*:
|
|
63
|
+
|
|
64
|
+
expand USING columns first in star expansion (#8536)
|
|
65
|
+
|
|
66
|
+
- 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))*:
|
|
67
|
+
|
|
68
|
+
annotate FLOOR, CEIL and SIGN by their arg type (#8547)
|
|
69
|
+
|
|
70
|
+
- 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))*:
|
|
71
|
+
|
|
72
|
+
Make `ALTER` actions optional. (#8539)
|
|
73
|
+
|
|
74
|
+
- 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))*:
|
|
75
|
+
|
|
76
|
+
preserve CASE branches before always-true conditions (#8572)
|
|
77
|
+
|
|
78
|
+
- 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))*:
|
|
79
|
+
|
|
80
|
+
resolve correlated UNNEST fields from projection types (#8571)
|
|
81
|
+
|
|
82
|
+
- 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))*:
|
|
83
|
+
|
|
84
|
+
resolve correlated UNNEST fields from projection types (#8571)
|
|
85
|
+
|
|
86
|
+
- due to [`51864e7`](https://github.com/tobymao/sqlglot/commit/51864e76b42b26f1fdeb829e349bd43db4d81598) - edge case in array generation *(commit by [@georgesittas](https://github.com/georgesittas))*:
|
|
87
|
+
|
|
88
|
+
edge case in array generation
|
|
89
|
+
|
|
90
|
+
- 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))*:
|
|
91
|
+
|
|
92
|
+
annotate sha2 for redshift properly (#8577)
|
|
93
|
+
|
|
94
|
+
- 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))*:
|
|
95
|
+
|
|
96
|
+
remove infer_schema from optimizer (#8552)
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
### :sparkles: New Features
|
|
100
|
+
- [`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))*
|
|
101
|
+
- [`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))*
|
|
102
|
+
- [`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))*
|
|
103
|
+
- [`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))*
|
|
104
|
+
- [`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))*
|
|
105
|
+
- [`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))*
|
|
106
|
+
- [`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))*
|
|
107
|
+
- :arrow_lower_right: *addresses issue [#8513](https://github.com/tobymao/sqlglot/issues/8513) opened by [@paddy-devan](https://github.com/paddy-devan)*
|
|
108
|
+
- [`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))*
|
|
109
|
+
- [`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))*
|
|
110
|
+
- [`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))*
|
|
111
|
+
- [`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))*
|
|
112
|
+
|
|
113
|
+
### :bug: Bug Fixes
|
|
114
|
+
- [`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))*
|
|
115
|
+
- [`4afe079`](https://github.com/tobymao/sqlglot/commit/4afe079f91f06440b2f4c4a2cad754e0ee8d23fa) - **ci**: wait for sqlglotc before publishing sqlglot [CODEX] *(commit by [@tobymao](https://github.com/tobymao))*
|
|
116
|
+
- [`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))*
|
|
117
|
+
- [`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))*
|
|
118
|
+
- :arrow_lower_right: *fixes issue [#8475](https://github.com/tobymao/sqlglot/issues/8475) opened by [@asikeero](https://github.com/asikeero)*
|
|
119
|
+
- [`c7778cf`](https://github.com/tobymao/sqlglot/commit/c7778cf56d90e409c75e59b82842544b118fa850) - **parser**: bare ALTER DROP refactor and indexes named concurrently *(commit by [@geooo109](https://github.com/geooo109))*
|
|
120
|
+
- [`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))*
|
|
121
|
+
- [`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))*
|
|
122
|
+
- [`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))*
|
|
123
|
+
- [`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))*
|
|
124
|
+
- [`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))*
|
|
125
|
+
- [`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))*
|
|
126
|
+
- [`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))*
|
|
127
|
+
- :arrow_lower_right: *fixes issue [#8485](https://github.com/tobymao/sqlglot/issues/8485) opened by [@ultrabear](https://github.com/ultrabear)*
|
|
128
|
+
- [`1d2a99b`](https://github.com/tobymao/sqlglot/commit/1d2a99b9cc0acf671fd2688ef02097a69404057d) - **parser**: ALTER DROP/ALTER COLUMN cleanups *(commit by [@geooo109](https://github.com/geooo109))*
|
|
129
|
+
- [`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))*
|
|
130
|
+
- [`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))*
|
|
131
|
+
- [`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))*
|
|
132
|
+
- [`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))*
|
|
133
|
+
- [`a6698b7`](https://github.com/tobymao/sqlglot/commit/a6698b765b006b4b3b181fcdc75319f7f990164f) - drop wrong Dialect cast in build_formatted_time [CLAUDE] *(commit by [@tobymao](https://github.com/tobymao))*
|
|
134
|
+
- [`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))*
|
|
135
|
+
- [`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))*
|
|
136
|
+
- :arrow_lower_right: *fixes issue [#8500](https://github.com/tobymao/sqlglot/issues/8500) opened by [@tekumara](https://github.com/tekumara)*
|
|
137
|
+
- [`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))*
|
|
138
|
+
- [`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))*
|
|
139
|
+
- :arrow_lower_right: *fixes issue [#8497](https://github.com/tobymao/sqlglot/issues/8497) opened by [@ekut](https://github.com/ekut)*
|
|
140
|
+
- [`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))*
|
|
141
|
+
- :arrow_lower_right: *fixes issue [#8489](https://github.com/tobymao/sqlglot/issues/8489) opened by [@goldmedal](https://github.com/goldmedal)*
|
|
142
|
+
- [`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))*
|
|
143
|
+
- [`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))*
|
|
144
|
+
- :arrow_lower_right: *fixes issue [#8518](https://github.com/tobymao/sqlglot/issues/8518) opened by [@Ayoubhm07](https://github.com/Ayoubhm07)*
|
|
145
|
+
- [`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))*
|
|
146
|
+
- [`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))*
|
|
147
|
+
- [`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))*
|
|
148
|
+
- [`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))*
|
|
149
|
+
- :arrow_lower_right: *fixes issue [#8505](https://github.com/tobymao/sqlglot/issues/8505) opened by [@laravioli](https://github.com/laravioli)*
|
|
150
|
+
- :arrow_lower_right: *fixes issue [#8508](https://github.com/tobymao/sqlglot/issues/8508) opened by [@yousefissa](https://github.com/yousefissa)*
|
|
151
|
+
- [`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))*
|
|
152
|
+
- [`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))*
|
|
153
|
+
- [`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))*
|
|
154
|
+
- :arrow_lower_right: *fixes issue [#8520](https://github.com/tobymao/sqlglot/issues/8520) opened by [@Sharpiro](https://github.com/Sharpiro)*
|
|
155
|
+
- [`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))*
|
|
156
|
+
- :arrow_lower_right: *fixes issue [#8534](https://github.com/tobymao/sqlglot/issues/8534) opened by [@ramcasa](https://github.com/ramcasa)*
|
|
157
|
+
- [`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))*
|
|
158
|
+
- :arrow_lower_right: *fixes issue [#8531](https://github.com/tobymao/sqlglot/issues/8531) opened by [@ramcasa](https://github.com/ramcasa)*
|
|
159
|
+
- [`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))*
|
|
160
|
+
- [`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))*
|
|
161
|
+
- :arrow_lower_right: *fixes issue [#8521](https://github.com/tobymao/sqlglot/issues/8521) opened by [@Sharpiro](https://github.com/Sharpiro)*
|
|
162
|
+
- [`b7e5153`](https://github.com/tobymao/sqlglot/commit/b7e515399a589e720b2bd081e5bb395f408feff8) - **optimizer**: preserve bracket flags in gen serialization *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
163
|
+
- [`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))*
|
|
164
|
+
- :arrow_lower_right: *fixes issue [#8516](https://github.com/tobymao/sqlglot/issues/8516) opened by [@laravioli](https://github.com/laravioli)*
|
|
165
|
+
- [`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))*
|
|
166
|
+
- :arrow_lower_right: *fixes issue [#8546](https://github.com/tobymao/sqlglot/issues/8546) opened by [@Fcabla](https://github.com/Fcabla)*
|
|
167
|
+
- [`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))*
|
|
168
|
+
- [`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))*
|
|
169
|
+
- [`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))*
|
|
170
|
+
- [`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))*
|
|
171
|
+
- [`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))*
|
|
172
|
+
- [`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))*
|
|
173
|
+
- :arrow_lower_right: *fixes issue [#8562](https://github.com/tobymao/sqlglot/issues/8562) opened by [@ansh-rohilla](https://github.com/ansh-rohilla)*
|
|
174
|
+
- [`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))*
|
|
175
|
+
- [`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))*
|
|
176
|
+
- :arrow_lower_right: *fixes issue [#8568](https://github.com/tobymao/sqlglot/issues/8568) opened by [@laravioli](https://github.com/laravioli)*
|
|
177
|
+
- [`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))*
|
|
178
|
+
- :arrow_lower_right: *fixes issue [#8567](https://github.com/tobymao/sqlglot/issues/8567) opened by [@laravioli](https://github.com/laravioli)*
|
|
179
|
+
- [`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))*
|
|
180
|
+
- [`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))*
|
|
181
|
+
- [`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))*
|
|
182
|
+
- :arrow_lower_right: *fixes issue [#8569](https://github.com/tobymao/sqlglot/issues/8569) opened by [@hustontrevor](https://github.com/hustontrevor)*
|
|
183
|
+
- [`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))*
|
|
184
|
+
- [`51864e7`](https://github.com/tobymao/sqlglot/commit/51864e76b42b26f1fdeb829e349bd43db4d81598) - **bigquery**: edge case in array generation *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
185
|
+
- [`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))*
|
|
186
|
+
- [`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))*
|
|
187
|
+
|
|
188
|
+
### :wrench: Chores
|
|
189
|
+
- [`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))*
|
|
190
|
+
- [`b12b50f`](https://github.com/tobymao/sqlglot/commit/b12b50fc068730fd04f864a3757cd8d356afccfa) - remove qualify for SPLIT_TO_TABLE *(commit by [@geooo109](https://github.com/geooo109))*
|
|
191
|
+
- [`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))*
|
|
192
|
+
- [`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))*
|
|
193
|
+
- [`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))*
|
|
194
|
+
- [`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))*
|
|
195
|
+
|
|
196
|
+
|
|
4
197
|
## [v30.21.0] - 2026-09-30
|
|
5
198
|
### :boom: BREAKING CHANGES
|
|
6
199
|
- 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 +16238,4 @@ pip install "sqlglot[c]" # compiled — faster, but no subclassing
|
|
|
16045
16238
|
[v30.19.0]: https://github.com/tobymao/sqlglot/compare/v30.18.0...v30.19.0
|
|
16046
16239
|
[v30.20.0]: https://github.com/tobymao/sqlglot/compare/v30.19.0...v30.20.0
|
|
16047
16240
|
[v30.21.0]: https://github.com/tobymao/sqlglot/compare/v30.20.0...v30.21.0
|
|
16241
|
+
[v30.22.0]: https://github.com/tobymao/sqlglot/compare/v30.21.0...v30.22.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sqlglot
|
|
3
|
-
Version: 30.
|
|
3
|
+
Version: 30.23.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.23.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.23.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.23.0'
|
|
22
|
+
__version_tuple__ = version_tuple = (30, 23, 0)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'gad8764a04'
|
|
@@ -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)
|
|
@@ -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
|
|
@@ -65,6 +66,31 @@ class Oracle(Dialect):
|
|
|
65
66
|
for prefix in ("U", "u")
|
|
66
67
|
]
|
|
67
68
|
|
|
69
|
+
# https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/Literals.html
|
|
70
|
+
# Alternative quoting, e.g. q'[it's]': the delimiters are part of the quote, so the
|
|
71
|
+
# text in between is taken as is, without escapes
|
|
72
|
+
RAW_STRINGS = [
|
|
73
|
+
(f"{prefix}'{start}", f"{end}'")
|
|
74
|
+
for prefix in ("q", "Q")
|
|
75
|
+
for start, end in (
|
|
76
|
+
("[", "]"),
|
|
77
|
+
("{", "}"),
|
|
78
|
+
("(", ")"),
|
|
79
|
+
("<", ">"),
|
|
80
|
+
*(
|
|
81
|
+
(c, c)
|
|
82
|
+
for c in string.ascii_letters + string.digits + string.punctuation
|
|
83
|
+
if c not in "[{(<"
|
|
84
|
+
),
|
|
85
|
+
)
|
|
86
|
+
]
|
|
87
|
+
NATIONAL_RAW_STRINGS = [
|
|
88
|
+
(prefix + start, end)
|
|
89
|
+
for start, end in t.cast(list[tuple[str, str]], RAW_STRINGS)
|
|
90
|
+
for prefix in ("n", "N")
|
|
91
|
+
]
|
|
92
|
+
STRING_ESCAPES_ALLOWED_IN_RAW_STRINGS = False
|
|
93
|
+
|
|
68
94
|
NESTED_COMMENTS = False
|
|
69
95
|
|
|
70
96
|
KEYWORDS = {
|
|
@@ -82,6 +108,7 @@ class Oracle(Dialect):
|
|
|
82
108
|
"ORDER SIBLINGS BY": TokenType.ORDER_SIBLINGS_BY,
|
|
83
109
|
"SAMPLE": TokenType.TABLE_SAMPLE,
|
|
84
110
|
"START": TokenType.BEGIN,
|
|
111
|
+
"SUBPARTITION": TokenType.PARTITION,
|
|
85
112
|
"TOP": TokenType.TOP,
|
|
86
113
|
"VARCHAR2": TokenType.VARCHAR,
|
|
87
114
|
"SYSTIMESTAMP": TokenType.SYSTIMESTAMP,
|
|
@@ -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
|
|
@@ -10,14 +10,25 @@ from sqlglot.errors import ParseError, TokenError
|
|
|
10
10
|
from sqlglot.expressions.core import (
|
|
11
11
|
Alias,
|
|
12
12
|
Anonymous,
|
|
13
|
+
AtTimeZone,
|
|
14
|
+
Between,
|
|
15
|
+
Binary,
|
|
16
|
+
BitwiseNot,
|
|
13
17
|
Boolean,
|
|
18
|
+
Bracket,
|
|
14
19
|
Column,
|
|
15
20
|
Condition,
|
|
21
|
+
Dot,
|
|
16
22
|
EQ,
|
|
17
23
|
Expr,
|
|
24
|
+
Func,
|
|
18
25
|
Identifier,
|
|
26
|
+
In,
|
|
19
27
|
Literal,
|
|
28
|
+
Neg,
|
|
29
|
+
Not,
|
|
20
30
|
Null,
|
|
31
|
+
Paren,
|
|
21
32
|
Placeholder,
|
|
22
33
|
TABLE_PARTS,
|
|
23
34
|
Var,
|
|
@@ -36,6 +47,8 @@ from sqlglot.expressions.query import (
|
|
|
36
47
|
From,
|
|
37
48
|
Schema,
|
|
38
49
|
Select,
|
|
50
|
+
SetOperation,
|
|
51
|
+
Subquery,
|
|
39
52
|
Table,
|
|
40
53
|
TableAlias,
|
|
41
54
|
Tuple,
|
|
@@ -44,7 +57,7 @@ from sqlglot.expressions.query import (
|
|
|
44
57
|
With,
|
|
45
58
|
Query,
|
|
46
59
|
)
|
|
47
|
-
from sqlglot.expressions.ddl import Alter, AlterRename, RenameColumn
|
|
60
|
+
from sqlglot.expressions.ddl import Alter, AlterRename, Create, RenameColumn
|
|
48
61
|
from sqlglot.expressions.dml import Delete, Insert, Merge, Update, When, Whens
|
|
49
62
|
from sqlglot.expressions.functions import Case, Cast
|
|
50
63
|
from sqlglot.expressions.array import Array
|
|
@@ -53,11 +66,10 @@ from sqlglot.expressions.array import Array
|
|
|
53
66
|
if t.TYPE_CHECKING:
|
|
54
67
|
from collections.abc import Sequence, Iterable, Iterator
|
|
55
68
|
from sqlglot.dialects.dialect import DialectType
|
|
56
|
-
from sqlglot.expressions.core import ExpOrStr
|
|
69
|
+
from sqlglot.expressions.core import ExpOrStr
|
|
57
70
|
from sqlglot.expressions.datatypes import DATA_TYPE
|
|
58
71
|
from sqlglot._typing import ParserArgs, ParserNoDialectArgs, E, P
|
|
59
72
|
from typing_extensions import Unpack, Concatenate
|
|
60
|
-
from sqlglot.expressions.core import Dot
|
|
61
73
|
|
|
62
74
|
|
|
63
75
|
def select(
|
|
@@ -849,6 +861,43 @@ def replace_tables(
|
|
|
849
861
|
return expression.transform(_replace_tables, copy=copy) # type: ignore
|
|
850
862
|
|
|
851
863
|
|
|
864
|
+
OPERATORS = (AtTimeZone, Between, Binary, BitwiseNot, In, Neg, Not)
|
|
865
|
+
|
|
866
|
+
|
|
867
|
+
def _is_operand(placeholder: Placeholder) -> bool:
|
|
868
|
+
parent = placeholder.parent
|
|
869
|
+
if isinstance(parent, (Bracket, In)):
|
|
870
|
+
return placeholder.arg_key == "this"
|
|
871
|
+
return isinstance(parent, OPERATORS)
|
|
872
|
+
|
|
873
|
+
|
|
874
|
+
def _takes_query(placeholder: Placeholder) -> bool:
|
|
875
|
+
parent = placeholder.parent
|
|
876
|
+
if isinstance(parent, In):
|
|
877
|
+
return placeholder.arg_key == "expressions" and len(parent.expressions) == 1
|
|
878
|
+
if isinstance(parent, Func):
|
|
879
|
+
return len(list(parent.iter_expressions())) == 1
|
|
880
|
+
if isinstance(parent, Table):
|
|
881
|
+
return isinstance(parent.parent, (Create, Subquery))
|
|
882
|
+
return not parent or isinstance(parent, (CTE, Paren, SetOperation))
|
|
883
|
+
|
|
884
|
+
|
|
885
|
+
def _replace_placeholder(placeholder: Placeholder, expression: Expr) -> Expr:
|
|
886
|
+
if (
|
|
887
|
+
isinstance(expression, Query)
|
|
888
|
+
and not isinstance(expression, Subquery)
|
|
889
|
+
and not _takes_query(placeholder)
|
|
890
|
+
):
|
|
891
|
+
return expression.subquery(copy=False)
|
|
892
|
+
if (
|
|
893
|
+
_is_operand(placeholder)
|
|
894
|
+
and isinstance(expression, OPERATORS)
|
|
895
|
+
and not isinstance(expression, Dot)
|
|
896
|
+
):
|
|
897
|
+
return Paren(this=expression)
|
|
898
|
+
return expression
|
|
899
|
+
|
|
900
|
+
|
|
852
901
|
def replace_placeholders(expression: Expr, *args: object, **kwargs: t.Any) -> Expr:
|
|
853
902
|
"""Replace placeholders in an expression.
|
|
854
903
|
|
|
@@ -874,10 +923,10 @@ def replace_placeholders(expression: Expr, *args: object, **kwargs: t.Any) -> Ex
|
|
|
874
923
|
if node.this:
|
|
875
924
|
new_name = kwargs.get(node.this)
|
|
876
925
|
if new_name is not None:
|
|
877
|
-
return convert(new_name)
|
|
926
|
+
return _replace_placeholder(node, convert(new_name))
|
|
878
927
|
else:
|
|
879
928
|
try:
|
|
880
|
-
return convert(next(args))
|
|
929
|
+
return _replace_placeholder(node, convert(next(args)))
|
|
881
930
|
except StopIteration:
|
|
882
931
|
pass
|
|
883
932
|
return node
|
|
@@ -867,7 +867,7 @@ class Expression(Expr):
|
|
|
867
867
|
for k in sorted(node.args):
|
|
868
868
|
v = node.args[k]
|
|
869
869
|
if v:
|
|
870
|
-
hash_ = hash((hash_, k, v))
|
|
870
|
+
hash_ = hash((hash_, k, tuple(v) if type(v) is list else v))
|
|
871
871
|
else:
|
|
872
872
|
for k in sorted(node.args):
|
|
873
873
|
v = node.args[k]
|
|
@@ -1595,7 +1595,14 @@ class Uncache(Expression):
|
|
|
1595
1595
|
|
|
1596
1596
|
|
|
1597
1597
|
class Refresh(Expression):
|
|
1598
|
-
arg_types = {
|
|
1598
|
+
arg_types = {
|
|
1599
|
+
"this": True,
|
|
1600
|
+
"kind": True,
|
|
1601
|
+
"partition_start": False,
|
|
1602
|
+
"partition_end": False,
|
|
1603
|
+
"force": False,
|
|
1604
|
+
"mode": False,
|
|
1605
|
+
}
|
|
1599
1606
|
|
|
1600
1607
|
|
|
1601
1608
|
class LockingStatement(Expression):
|
|
@@ -1859,6 +1866,7 @@ class SessionParameter(Expression, Condition):
|
|
|
1859
1866
|
|
|
1860
1867
|
class Placeholder(Expression, Condition):
|
|
1861
1868
|
arg_types = {"this": False, "kind": False, "widget": False, "jdbc": False}
|
|
1869
|
+
_hash_raw_args = True
|
|
1862
1870
|
|
|
1863
1871
|
@property
|
|
1864
1872
|
def name(self) -> str:
|
|
@@ -1994,6 +2002,7 @@ class Typeof(Expression, Func):
|
|
|
1994
2002
|
|
|
1995
2003
|
class ParameterizedAgg(Expression, AggFunc):
|
|
1996
2004
|
arg_types = {"this": True, "expressions": True, "params": True}
|
|
2005
|
+
_hash_raw_args = True
|
|
1997
2006
|
|
|
1998
2007
|
|
|
1999
2008
|
class Anonymous(Expression, Func):
|
|
@@ -2008,6 +2017,7 @@ class Anonymous(Expression, Func):
|
|
|
2008
2017
|
class AnonymousAggFunc(Expression, AggFunc):
|
|
2009
2018
|
arg_types = {"this": True, "expressions": False}
|
|
2010
2019
|
is_var_len_args = True
|
|
2020
|
+
_hash_raw_args = True
|
|
2011
2021
|
|
|
2012
2022
|
|
|
2013
2023
|
class CombinedAggFunc(AnonymousAggFunc):
|
|
@@ -2211,7 +2221,7 @@ class Like(Expression, Binary, Predicate):
|
|
|
2211
2221
|
|
|
2212
2222
|
|
|
2213
2223
|
class Match(Expression, Binary, Predicate):
|
|
2214
|
-
|
|
2224
|
+
arg_types = {"this": True, "expression": True, "kind": False, "analyzer": False}
|
|
2215
2225
|
|
|
2216
2226
|
|
|
2217
2227
|
class LT(Expression, Binary, Predicate):
|
|
@@ -176,6 +176,7 @@ class Set(Expression):
|
|
|
176
176
|
|
|
177
177
|
class Heredoc(Expression):
|
|
178
178
|
arg_types = {"this": True, "tag": False}
|
|
179
|
+
_hash_raw_args = True
|
|
179
180
|
|
|
180
181
|
|
|
181
182
|
class SetItem(Expression):
|
|
@@ -382,6 +383,7 @@ class Undrop(Expression):
|
|
|
382
383
|
|
|
383
384
|
class Command(Expression):
|
|
384
385
|
arg_types = {"this": True, "expression": False}
|
|
386
|
+
_hash_raw_args = True
|
|
385
387
|
|
|
386
388
|
|
|
387
389
|
class Transaction(Expression):
|