sqlglot 30.7.0__tar.gz → 30.9.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.7.0 → sqlglot-30.9.0}/CHANGELOG.md +223 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/Makefile +24 -2
- {sqlglot-30.7.0/sqlglot.egg-info → sqlglot-30.9.0}/PKG-INFO +4 -4
- {sqlglot-30.7.0 → sqlglot-30.9.0}/setup.py +1 -1
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/_typing.py +11 -2
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/_version.py +3 -3
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/bigquery.py +10 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/dialect.py +23 -13
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/duckdb.py +1 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/oracle.py +2 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/postgres.py +4 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/presto.py +1 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/redshift.py +9 -2
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/spark.py +1 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/expressions/aggregate.py +1 -1
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/expressions/array.py +1 -1
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/expressions/core.py +35 -14
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/expressions/datatypes.py +18 -5
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/expressions/ddl.py +9 -1
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/expressions/dml.py +1 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/expressions/functions.py +13 -1
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/expressions/query.py +29 -6
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/expressions/string.py +2 -5
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generator.py +239 -17
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/bigquery.py +1 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/clickhouse.py +1 -1
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/duckdb.py +46 -7
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/exasol.py +27 -18
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/hive.py +5 -4
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/mysql.py +38 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/oracle.py +10 -2
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/postgres.py +3 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/redshift.py +30 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/singlestore.py +6 -1
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/snowflake.py +1 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/spark.py +8 -2
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/sqlite.py +39 -10
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/tsql.py +19 -7
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/jsonpath.py +2 -1
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/annotate_types.py +121 -39
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/canonicalize.py +1 -1
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/eliminate_joins.py +8 -8
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/eliminate_subqueries.py +7 -5
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/normalize.py +20 -10
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/optimize_joins.py +4 -3
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/pushdown_predicates.py +39 -19
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/pushdown_projections.py +13 -1
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/qualify.py +3 -2
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/qualify_columns.py +3 -3
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/scope.py +13 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/simplify.py +31 -3
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/unnest_subqueries.py +12 -2
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parser.py +207 -24
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/bigquery.py +37 -16
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/clickhouse.py +20 -8
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/databricks.py +1 -3
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/dremio.py +2 -2
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/drill.py +1 -1
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/duckdb.py +9 -3
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/exasol.py +1 -1
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/hive.py +26 -17
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/mysql.py +13 -3
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/oracle.py +26 -4
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/postgres.py +7 -4
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/presto.py +8 -4
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/redshift.py +26 -1
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/singlestore.py +3 -3
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/snowflake.py +21 -5
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/spark2.py +3 -2
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/tsql.py +72 -10
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/planner.py +36 -43
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/schema.py +19 -13
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/serde.py +11 -7
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/time.py +6 -5
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/tokenizer_core.py +3 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/tokens.py +1 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/transforms.py +68 -57
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/typing/__init__.py +17 -2
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/typing/bigquery.py +0 -9
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/typing/clickhouse.py +5 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/typing/duckdb.py +1 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/typing/hive.py +8 -0
- sqlglot-30.9.0/sqlglot/typing/postgres.py +11 -0
- sqlglot-30.9.0/sqlglot/typing/redshift.py +17 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/typing/snowflake.py +5 -1
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/typing/spark.py +4 -0
- sqlglot-30.9.0/sqlglot/typing/spark2.py +81 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0/sqlglot.egg-info}/PKG-INFO +4 -4
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot.egg-info/SOURCES.txt +1 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot.egg-info/requires.txt +3 -3
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglotc/pyproject.toml +2 -2
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_bigquery.py +80 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_clickhouse.py +8 -6
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_databricks.py +11 -3
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_dialect.py +30 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_duckdb.py +46 -2
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_exasol.py +20 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_mysql.py +69 -1
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_oracle.py +13 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_pipe_syntax.py +24 -8
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_postgres.py +81 -4
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_spark.py +17 -3
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_sqlite.py +21 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_tsql.py +120 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/annotate_functions.sql +218 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/normalize.sql +3 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/optimizer.sql +2 -2
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/pushdown_projections.sql +43 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-h/tpc-h.sql +9 -14
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/unnest_subqueries.sql +12 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/leakcheck.py +5 -1
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_expressions.py +6 -1
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_jsonpath.py +8 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_optimizer.py +25 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_parser.py +29 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_transpile.py +44 -1
- sqlglot-30.7.0/sqlglot/typing/redshift.py +0 -11
- sqlglot-30.7.0/sqlglot/typing/spark2.py +0 -86
- {sqlglot-30.7.0 → sqlglot-30.9.0}/.gitignore +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/.gitmodules +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/.gitpod.yml +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/.pre-commit-config.yaml +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/AGENTS.md +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/CLAUDE.md +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/CONTRIBUTING.md +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/LICENSE +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/MANIFEST.in +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/README.md +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/pyproject.toml +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/setup.cfg +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/__init__.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/__main__.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/__init__.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/athena.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/clickhouse.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/databricks.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/doris.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/dremio.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/drill.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/druid.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/dune.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/exasol.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/fabric.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/hive.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/materialize.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/mysql.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/prql.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/risingwave.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/singlestore.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/snowflake.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/solr.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/spark2.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/sqlite.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/starrocks.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/tableau.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/teradata.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/trino.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/tsql.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/diff.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/errors.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/executor/__init__.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/executor/context.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/executor/env.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/executor/python.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/executor/table.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/expressions/__init__.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/expressions/builders.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/expressions/constraints.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/expressions/json.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/expressions/math.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/expressions/properties.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/expressions/temporal.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/__init__.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/athena.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/databricks.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/doris.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/dremio.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/drill.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/druid.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/dune.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/fabric.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/materialize.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/presto.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/prql.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/python.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/risingwave.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/solr.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/spark2.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/starrocks.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/tableau.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/teradata.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/trino.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/helper.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/lineage.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/__init__.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/canonicalize_internal_names.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/eliminate_ctes.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/isolate_table_selects.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/merge_subqueries.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/normalize_identifiers.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/optimizer.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/qualify_tables.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/resolver.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/__init__.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/athena.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/base.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/doris.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/druid.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/dune.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/fabric.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/materialize.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/prql.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/risingwave.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/solr.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/spark.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/sqlite.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/starrocks.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/tableau.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/teradata.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/trino.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/py.typed +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/trie.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/typing/mysql.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/typing/presto.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/typing/tsql.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot.egg-info/dependency_links.txt +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot.egg-info/top_level.txt +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot.png +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglotc/MANIFEST.in +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglotc/setup.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/__init__.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/__init__.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_athena.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_doris.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_dremio.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_drill.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_druid.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_dune.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_fabric.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_hive.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_materialize.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_presto.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_prql.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_redshift.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_risingwave.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_singlestore.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_snowflake.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_solr.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_starrocks.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_tableau.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_teradata.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_trino.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/identity.sql +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/jsonpath/LICENSE +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/jsonpath/cts.json +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/annotate_types.sql +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/canonicalize.sql +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/canonicalize_internal_names.sql +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/eliminate_ctes.sql +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/eliminate_joins.sql +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/eliminate_subqueries.sql +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/isolate_table_selects.sql +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/merge_subqueries.sql +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/normalize_identifiers.sql +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/optimize_joins.sql +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/pushdown_cte_alias_columns.sql +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/pushdown_predicates.sql +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/qualify_columns.sql +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/qualify_columns__invalid.sql +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/qualify_columns__with_invisible.sql +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/qualify_columns_ddl.sql +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/qualify_tables.sql +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/quote_identifiers.sql +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/simplify.sql +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/call_center.csv.gz +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/catalog_page.csv.gz +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/catalog_returns.csv.gz +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/catalog_sales.csv.gz +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/customer.csv.gz +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/customer_address.csv.gz +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/customer_demographics.csv.gz +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/date_dim.csv.gz +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/household_demographics.csv.gz +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/income_band.csv.gz +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/inventory.csv.gz +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/item.csv.gz +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/promotion.csv.gz +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/reason.csv.gz +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/ship_mode.csv.gz +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/store.csv.gz +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/store_returns.csv.gz +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/store_sales.csv.gz +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/time_dim.csv.gz +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/tpc-ds.sql +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/warehouse.csv.gz +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/web_page.csv.gz +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/web_returns.csv.gz +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/web_sales.csv.gz +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/web_site.csv.gz +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-h/customer.csv.gz +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-h/lineitem.csv.gz +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-h/nation.csv.gz +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-h/orders.csv.gz +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-h/part.csv.gz +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-h/partsupp.csv.gz +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-h/region.csv.gz +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-h/supplier.csv.gz +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/partial.sql +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/pretty.sql +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/gen_fixtures.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/helpers.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/sqlglot/__init__.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_build.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_dialect_entry_points.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_dialect_imports.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_diff.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_docs.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_errors.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_executor.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_generator.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_helper.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_integration_loader.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_lineage.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_schema.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_serde.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_time.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_tokens.py +0 -0
- {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_transforms.py +0 -0
|
@@ -1,6 +1,227 @@
|
|
|
1
1
|
Changelog
|
|
2
2
|
=========
|
|
3
3
|
|
|
4
|
+
## [v30.8.0] - 2026-05-13
|
|
5
|
+
### :boom: BREAKING CHANGES
|
|
6
|
+
- due to [`6944a6c`](https://github.com/tobymao/sqlglot/commit/6944a6c3ff5a9d18f31ddab53239cbce2e702055) - Improve typing annotations for planner, schema, serde, and transforms modules *(PR [#7579](https://github.com/tobymao/sqlglot/pull/7579) by [@OutSquareCapital](https://github.com/OutSquareCapital))*:
|
|
7
|
+
|
|
8
|
+
Improve typing annotations for planner, schema, serde, and transforms modules (#7579)
|
|
9
|
+
|
|
10
|
+
- due to [`9d84348`](https://github.com/tobymao/sqlglot/commit/9d843482f1765f449dd21a4dcccff14aa0837ffe) - annotate MD5 for clickhouse *(PR [#7602](https://github.com/tobymao/sqlglot/pull/7602) by [@AbhishekASLK](https://github.com/AbhishekASLK))*:
|
|
11
|
+
|
|
12
|
+
annotate MD5 for clickhouse (#7602)
|
|
13
|
+
|
|
14
|
+
- due to [`d1147b6`](https://github.com/tobymao/sqlglot/commit/d1147b6ec3e97c55ee27fa8dc8079175328b16e3) - roundtrip for ST_MAKEPOINT / 4 parameters *(PR [#7605](https://github.com/tobymao/sqlglot/pull/7605) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*:
|
|
15
|
+
|
|
16
|
+
roundtrip for ST_MAKEPOINT / 4 parameters (#7605)
|
|
17
|
+
|
|
18
|
+
- due to [`4bd7d1d`](https://github.com/tobymao/sqlglot/commit/4bd7d1d02d35cc83a94d8a7ed5edbbff1d409483) - preserve NOT LIKE quantifiers during generation *(PR [#7611](https://github.com/tobymao/sqlglot/pull/7611) by [@bialkou](https://github.com/bialkou))*:
|
|
19
|
+
|
|
20
|
+
preserve NOT LIKE quantifiers during generation (#7611)
|
|
21
|
+
|
|
22
|
+
- due to [`fc6b87a`](https://github.com/tobymao/sqlglot/commit/fc6b87a3a533ab105f38f9f43abea4949de4e24e) - parse `CONVERT` into `Cast` instead of `TryCast` *(PR [#7609](https://github.com/tobymao/sqlglot/pull/7609) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*:
|
|
23
|
+
|
|
24
|
+
parse `CONVERT` into `Cast` instead of `TryCast` (#7609)
|
|
25
|
+
|
|
26
|
+
- due to [`b6d2c76`](https://github.com/tobymao/sqlglot/commit/b6d2c760b7cf3d965fef6d5809d87d07a1cc230a) - avoid pushdown projections for column dependent funcs *(PR [#7614](https://github.com/tobymao/sqlglot/pull/7614) by [@geooo109](https://github.com/geooo109))*:
|
|
27
|
+
|
|
28
|
+
avoid pushdown projections for column dependent funcs (#7614)
|
|
29
|
+
|
|
30
|
+
- due to [`a16f7d0`](https://github.com/tobymao/sqlglot/commit/a16f7d0aa2b5b6a505b65788d0a84bcfef4d3c8c) - disambiguate 2-arg date_add from 3-arg dateadd [CLAUDE] *(PR [#7588](https://github.com/tobymao/sqlglot/pull/7588) by [@RichardHughes-amp](https://github.com/RichardHughes-amp))*:
|
|
31
|
+
|
|
32
|
+
disambiguate 2-arg date_add from 3-arg dateadd [CLAUDE] (#7588)
|
|
33
|
+
|
|
34
|
+
- due to [`ae58fd1`](https://github.com/tobymao/sqlglot/commit/ae58fd10c33b05f4f5ae631d6b1ee0b88ba64e0a) - parse CREATE TYPE statements *(PR [#7616](https://github.com/tobymao/sqlglot/pull/7616) by [@devfros](https://github.com/devfros))*:
|
|
35
|
+
|
|
36
|
+
parse CREATE TYPE statements (#7616)
|
|
37
|
+
|
|
38
|
+
- due to [`8dcb2d3`](https://github.com/tobymao/sqlglot/commit/8dcb2d3599c5637dfa6a8438df8148d6706a5217) - register First and Last in Hive typing *(PR [#7623](https://github.com/tobymao/sqlglot/pull/7623) by [@RichardHughes-amp](https://github.com/RichardHughes-amp))*:
|
|
39
|
+
|
|
40
|
+
register First and Last in Hive typing (#7623)
|
|
41
|
+
|
|
42
|
+
- due to [`8ce7d78`](https://github.com/tobymao/sqlglot/commit/8ce7d78901994870b6569361dffaa4b9fd6dec54) - PIVOT qualify with alias + type annotation *(PR [#7586](https://github.com/tobymao/sqlglot/pull/7586) by [@geooo109](https://github.com/geooo109))*:
|
|
43
|
+
|
|
44
|
+
PIVOT qualify with alias + type annotation (#7586)
|
|
45
|
+
|
|
46
|
+
- due to [`c876570`](https://github.com/tobymao/sqlglot/commit/c8765701e0d4c87293409e5e0fe5d605f2286b3c) - roundtrip for HH12 time mapping *(PR [#7626](https://github.com/tobymao/sqlglot/pull/7626) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*:
|
|
47
|
+
|
|
48
|
+
roundtrip for HH12 time mapping (#7626)
|
|
49
|
+
|
|
50
|
+
- due to [`87cc106`](https://github.com/tobymao/sqlglot/commit/87cc1069e7703b77a5adde652154fcade16b8c26) - roundtrip support for CURRENT_USER_ID and USER *(PR [#7633](https://github.com/tobymao/sqlglot/pull/7633) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*:
|
|
51
|
+
|
|
52
|
+
roundtrip support for CURRENT_USER_ID and USER (#7633)
|
|
53
|
+
|
|
54
|
+
- due to [`c6615a9`](https://github.com/tobymao/sqlglot/commit/c6615a910953f8e07a9d4ec2269bb537c83f40ea) - propagate type through IgnoreNulls/RespectNulls wrappers [CLAUDE] *(PR [#7636](https://github.com/tobymao/sqlglot/pull/7636) by [@RichardHughes-amp](https://github.com/RichardHughes-amp))*:
|
|
55
|
+
|
|
56
|
+
propagate type through IgnoreNulls/RespectNulls wrappers [CLAUDE] (#7636)
|
|
57
|
+
|
|
58
|
+
- due to [`9e37283`](https://github.com/tobymao/sqlglot/commit/9e37283ab01b089c9b50b5cd59b3a1eaf24e98a1) - case-insensitive alias matching for LOCAL. prefix *(PR [#7631](https://github.com/tobymao/sqlglot/pull/7631) by [@antonireus](https://github.com/antonireus))*:
|
|
59
|
+
|
|
60
|
+
case-insensitive alias matching for LOCAL. prefix (#7631)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
### :sparkles: New Features
|
|
64
|
+
- [`af5dc38`](https://github.com/tobymao/sqlglot/commit/af5dc38762552e7627e6f85e86345a5242855ed3) - **duckdb**: Add transpilation support for HEX_DECODE_STRING *(PR [#7590](https://github.com/tobymao/sqlglot/pull/7590) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
|
|
65
|
+
- [`9507aad`](https://github.com/tobymao/sqlglot/commit/9507aad7ba8ddef02adbe7fdf3098ead9c7ba1d6) - **duckdb**: Consolidate HEX_ENCODE_ into HEX function *(PR [#7603](https://github.com/tobymao/sqlglot/pull/7603) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
|
|
66
|
+
- [`9d84348`](https://github.com/tobymao/sqlglot/commit/9d843482f1765f449dd21a4dcccff14aa0837ffe) - **optimizer**: annotate MD5 for clickhouse *(PR [#7602](https://github.com/tobymao/sqlglot/pull/7602) by [@AbhishekASLK](https://github.com/AbhishekASLK))*
|
|
67
|
+
- [`ae58fd1`](https://github.com/tobymao/sqlglot/commit/ae58fd10c33b05f4f5ae631d6b1ee0b88ba64e0a) - **postgres**: parse CREATE TYPE statements *(PR [#7616](https://github.com/tobymao/sqlglot/pull/7616) by [@devfros](https://github.com/devfros))*
|
|
68
|
+
- :arrow_lower_right: *addresses issue [#7612](https://github.com/tobymao/sqlglot/issues/7612) opened by [@devfros](https://github.com/devfros)*
|
|
69
|
+
- [`80e0929`](https://github.com/tobymao/sqlglot/commit/80e0929cc1f105fbd060493ed094d4308e946063) - **parser**: handle `COLLATE` in nested types and `CAST` closes [#7624](https://github.com/tobymao/sqlglot/pull/7624) *(PR [#7630](https://github.com/tobymao/sqlglot/pull/7630) by [@georgesittas](https://github.com/georgesittas))*
|
|
70
|
+
- [`8ce7d78`](https://github.com/tobymao/sqlglot/commit/8ce7d78901994870b6569361dffaa4b9fd6dec54) - **optimizer**: PIVOT qualify with alias + type annotation *(PR [#7586](https://github.com/tobymao/sqlglot/pull/7586) by [@geooo109](https://github.com/geooo109))*
|
|
71
|
+
- [`cbd3576`](https://github.com/tobymao/sqlglot/commit/cbd3576a4b93e37148da4b93bcabe84fdd9f31c0) - **mysql**: Support `CHANGE COLUMN`. *(PR [#7638](https://github.com/tobymao/sqlglot/pull/7638) by [@burnison](https://github.com/burnison))*
|
|
72
|
+
|
|
73
|
+
### :bug: Bug Fixes
|
|
74
|
+
- [`593d5a3`](https://github.com/tobymao/sqlglot/commit/593d5a3691990182d69f2c790c8d1b3d23635502) - **redshift**: support ALL in aggregate funcs *(PR [#7592](https://github.com/tobymao/sqlglot/pull/7592) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
|
|
75
|
+
- [`b8bf13e`](https://github.com/tobymao/sqlglot/commit/b8bf13ef775551ebd1c5e4a46ca4f21bb3689679) - **redshift**: support OBJECT_TRANSFORM function *(PR [#7601](https://github.com/tobymao/sqlglot/pull/7601) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
|
|
76
|
+
- [`1206bea`](https://github.com/tobymao/sqlglot/commit/1206bea7715f3af8c6e65dbe8641002720217782) - **redshift**: parser issue for TOP N DISTINCT *(PR [#7594](https://github.com/tobymao/sqlglot/pull/7594) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
|
|
77
|
+
- [`d1147b6`](https://github.com/tobymao/sqlglot/commit/d1147b6ec3e97c55ee27fa8dc8079175328b16e3) - **redshift**: roundtrip for ST_MAKEPOINT / 4 parameters *(PR [#7605](https://github.com/tobymao/sqlglot/pull/7605) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
|
|
78
|
+
- [`b9f18ee`](https://github.com/tobymao/sqlglot/commit/b9f18eea6762f8ce03ff5a426db8195db375f455) - **sqlite**: support named CTE columns closes [#7617](https://github.com/tobymao/sqlglot/pull/7617) *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
79
|
+
- [`c8b19aa`](https://github.com/tobymao/sqlglot/commit/c8b19aafe3e8b90ae7c67d816c1bedca86300192) - Parametrized bigdecimal mapping was being concatenated with params *(PR [#7584](https://github.com/tobymao/sqlglot/pull/7584) by [@themisvaltinos](https://github.com/themisvaltinos))*
|
|
80
|
+
- [`4bd7d1d`](https://github.com/tobymao/sqlglot/commit/4bd7d1d02d35cc83a94d8a7ed5edbbff1d409483) - **postgres**: preserve NOT LIKE quantifiers during generation *(PR [#7611](https://github.com/tobymao/sqlglot/pull/7611) by [@bialkou](https://github.com/bialkou))*
|
|
81
|
+
- [`fc6b87a`](https://github.com/tobymao/sqlglot/commit/fc6b87a3a533ab105f38f9f43abea4949de4e24e) - **redshift**: parse `CONVERT` into `Cast` instead of `TryCast` *(PR [#7609](https://github.com/tobymao/sqlglot/pull/7609) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
|
|
82
|
+
- [`b6d2c76`](https://github.com/tobymao/sqlglot/commit/b6d2c760b7cf3d965fef6d5809d87d07a1cc230a) - **optimizer**: avoid pushdown projections for column dependent funcs *(PR [#7614](https://github.com/tobymao/sqlglot/pull/7614) by [@geooo109](https://github.com/geooo109))*
|
|
83
|
+
- :arrow_lower_right: *fixes issue [#7607](https://github.com/tobymao/sqlglot/issues/7607) opened by [@ligfx](https://github.com/ligfx)*
|
|
84
|
+
- [`a16f7d0`](https://github.com/tobymao/sqlglot/commit/a16f7d0aa2b5b6a505b65788d0a84bcfef4d3c8c) - **databricks**: disambiguate 2-arg date_add from 3-arg dateadd [CLAUDE] *(PR [#7588](https://github.com/tobymao/sqlglot/pull/7588) by [@RichardHughes-amp](https://github.com/RichardHughes-amp))*
|
|
85
|
+
- [`6931eec`](https://github.com/tobymao/sqlglot/commit/6931eece4ec56f8b31d2026be41ebb071804adc9) - **redshift**: roundtrip fix ARRAY_CONTAINS *(PR [#7606](https://github.com/tobymao/sqlglot/pull/7606) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
|
|
86
|
+
- [`8dcb2d3`](https://github.com/tobymao/sqlglot/commit/8dcb2d3599c5637dfa6a8438df8148d6706a5217) - **annotate**: register First and Last in Hive typing *(PR [#7623](https://github.com/tobymao/sqlglot/pull/7623) by [@RichardHughes-amp](https://github.com/RichardHughes-amp))*
|
|
87
|
+
- [`a1fa154`](https://github.com/tobymao/sqlglot/commit/a1fa1546c926b2858cfc5adcfbd186731de40eba) - **parser**: from-first duckdb syntax improvement for pivot fixes [#7628](https://github.com/tobymao/sqlglot/pull/7628) *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
88
|
+
- [`e7e1fb0`](https://github.com/tobymao/sqlglot/commit/e7e1fb0d3d16054c1076e9f0570b336643b371d8) - **parser**: issue with no parenthesis functions *(PR [#7621](https://github.com/tobymao/sqlglot/pull/7621) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
|
|
89
|
+
- [`b1aa0c5`](https://github.com/tobymao/sqlglot/commit/b1aa0c5fe951a6a2efb7f90c4ef2ed7a4c5ac200) - **redshift**: try_cast roundtrip *(PR [#7622](https://github.com/tobymao/sqlglot/pull/7622) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
|
|
90
|
+
- [`5525f3f`](https://github.com/tobymao/sqlglot/commit/5525f3fdec3c68ad374f39e8c30cdd38ee9b573b) - **sqlite**: prevent ALTER TABLE RENAME TO from falling back to Command *(PR [#7629](https://github.com/tobymao/sqlglot/pull/7629) by [@dedyoc](https://github.com/dedyoc))*
|
|
91
|
+
- :arrow_lower_right: *fixes issue [#7427](https://github.com/tobymao/sqlglot/issues/7427) opened by [@ppacac](https://github.com/ppacac)*
|
|
92
|
+
- [`c876570`](https://github.com/tobymao/sqlglot/commit/c8765701e0d4c87293409e5e0fe5d605f2286b3c) - **redshift**: roundtrip for HH12 time mapping *(PR [#7626](https://github.com/tobymao/sqlglot/pull/7626) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
|
|
93
|
+
- [`87cc106`](https://github.com/tobymao/sqlglot/commit/87cc1069e7703b77a5adde652154fcade16b8c26) - **redshift**: roundtrip support for CURRENT_USER_ID and USER *(PR [#7633](https://github.com/tobymao/sqlglot/pull/7633) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
|
|
94
|
+
- [`6329684`](https://github.com/tobymao/sqlglot/commit/63296846f6a7a683af21683acb24aad7a63bb3f5) - **parser**: allow WINDOW clause without FROM *(PR [#7640](https://github.com/tobymao/sqlglot/pull/7640) by [@1fanwang](https://github.com/1fanwang))*
|
|
95
|
+
- :arrow_lower_right: *fixes issue [#7438](https://github.com/tobymao/sqlglot/issues/7438) opened by [@ppacac](https://github.com/ppacac)*
|
|
96
|
+
- [`c6615a9`](https://github.com/tobymao/sqlglot/commit/c6615a910953f8e07a9d4ec2269bb537c83f40ea) - **annotate_types**: propagate type through IgnoreNulls/RespectNulls wrappers [CLAUDE] *(PR [#7636](https://github.com/tobymao/sqlglot/pull/7636) by [@RichardHughes-amp](https://github.com/RichardHughes-amp))*
|
|
97
|
+
- [`9e37283`](https://github.com/tobymao/sqlglot/commit/9e37283ab01b089c9b50b5cd59b3a1eaf24e98a1) - **exasol**: case-insensitive alias matching for LOCAL. prefix *(PR [#7631](https://github.com/tobymao/sqlglot/pull/7631) by [@antonireus](https://github.com/antonireus))*
|
|
98
|
+
|
|
99
|
+
### :recycle: Refactors
|
|
100
|
+
- [`6944a6c`](https://github.com/tobymao/sqlglot/commit/6944a6c3ff5a9d18f31ddab53239cbce2e702055) - Improve typing annotations for planner, schema, serde, and transforms modules *(PR [#7579](https://github.com/tobymao/sqlglot/pull/7579) by [@OutSquareCapital](https://github.com/OutSquareCapital))*
|
|
101
|
+
- [`a2a9ba5`](https://github.com/tobymao/sqlglot/commit/a2a9ba59c15f63b6831674481af1ceb8420dc4de) - **schema**: cache `find` lookups in schema *(PR [#7615](https://github.com/tobymao/sqlglot/pull/7615) by [@georgesittas](https://github.com/georgesittas))*
|
|
102
|
+
- [`958b27d`](https://github.com/tobymao/sqlglot/commit/958b27d0f8f983326a5a480be3962d066f7639f3) - improve `optimizer::pushdown_predicates` typing *(PR [#7613](https://github.com/tobymao/sqlglot/pull/7613) by [@OutSquareCapital](https://github.com/OutSquareCapital))*
|
|
103
|
+
- [`96716a6`](https://github.com/tobymao/sqlglot/commit/96716a6a2a2db13deed0749266ce449de5f9153d) - improve `optimizer::{eliminate_joins, eliminate_subqueries}` typing *(PR [#7618](https://github.com/tobymao/sqlglot/pull/7618) by [@OutSquareCapital](https://github.com/OutSquareCapital))*
|
|
104
|
+
- [`7e7cf8b`](https://github.com/tobymao/sqlglot/commit/7e7cf8b06397ed440921d079a39112e073bcfa80) - make dialect in build_formatted_time optional, fetch it from parser *(PR [#7639](https://github.com/tobymao/sqlglot/pull/7639) by [@georgesittas](https://github.com/georgesittas))*
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
## [v30.7.0] - 2026-05-04
|
|
108
|
+
### :boom: BREAKING CHANGES
|
|
109
|
+
- due to [`68861d9`](https://github.com/tobymao/sqlglot/commit/68861d9f3aaa6c9ae405dacfa22117fb64a1d803) - support `DROP PRIMARY KEY`. *(PR [#7530](https://github.com/tobymao/sqlglot/pull/7530) by [@burnison](https://github.com/burnison))*:
|
|
110
|
+
|
|
111
|
+
support `DROP PRIMARY KEY`. (#7530)
|
|
112
|
+
|
|
113
|
+
- due to [`8669e55`](https://github.com/tobymao/sqlglot/commit/8669e55f385eb759bbf5ea1ec095e63ec48cfa91) - mark DECOMPRESS_STRING as unsupported [CLAUDE] *(PR [#7545](https://github.com/tobymao/sqlglot/pull/7545) by [@fivetran-ashashankar](https://github.com/fivetran-ashashankar))*:
|
|
114
|
+
|
|
115
|
+
mark DECOMPRESS_STRING as unsupported [CLAUDE] (#7545)
|
|
116
|
+
|
|
117
|
+
- due to [`b334dcc`](https://github.com/tobymao/sqlglot/commit/b334dccb7f94993e71fa4f0e59d984a3f0d351d0) - mark DECOMPRESS_BINARY as unsupported *(PR [#7546](https://github.com/tobymao/sqlglot/pull/7546) by [@fivetran-ashashankar](https://github.com/fivetran-ashashankar))*:
|
|
118
|
+
|
|
119
|
+
mark DECOMPRESS_BINARY as unsupported (#7546)
|
|
120
|
+
|
|
121
|
+
- due to [`8f572f8`](https://github.com/tobymao/sqlglot/commit/8f572f8656c9a5a5e45ac25607af6204bca58773) - qualify UNPIVOT on CTE sources *(PR [#7550](https://github.com/tobymao/sqlglot/pull/7550) by [@georgesittas](https://github.com/georgesittas))*:
|
|
122
|
+
|
|
123
|
+
qualify UNPIVOT on CTE sources (#7550)
|
|
124
|
+
|
|
125
|
+
- due to [`b4dea8c`](https://github.com/tobymao/sqlglot/commit/b4dea8c7e4c9e598e33efc56f007a0ab6dab9b5d) - Transpilation support for UUID_STRING *(commit by [@fivetran-ashashankar](https://github.com/fivetran-ashashankar))*:
|
|
126
|
+
|
|
127
|
+
Transpilation support for UUID_STRING
|
|
128
|
+
|
|
129
|
+
- due to [`e883b0b`](https://github.com/tobymao/sqlglot/commit/e883b0b39ebdeeab408743786f66d62dd92b3267) - map duckdb `LIST` to `ArrayAgg` *(PR [#7552](https://github.com/tobymao/sqlglot/pull/7552) by [@georgesittas](https://github.com/georgesittas))*:
|
|
130
|
+
|
|
131
|
+
map duckdb `LIST` to `ArrayAgg` (#7552)
|
|
132
|
+
|
|
133
|
+
- due to [`ded89c2`](https://github.com/tobymao/sqlglot/commit/ded89c2e8edc6eee14f9fabb3d6fd036cced284a) - Add transpilation support for STRTOK_TO_ARRAY function *(PR [#7536](https://github.com/tobymao/sqlglot/pull/7536) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*:
|
|
134
|
+
|
|
135
|
+
Add transpilation support for STRTOK_TO_ARRAY function (#7536)
|
|
136
|
+
|
|
137
|
+
- due to [`f743755`](https://github.com/tobymao/sqlglot/commit/f743755e7b9ad45839c9c6f651d199bd5441b661) - register NAMED_STRUCT in parser so struct fields annotate CLAUDE *(PR [#7561](https://github.com/tobymao/sqlglot/pull/7561) by [@RichardHughes-amp](https://github.com/RichardHughes-amp))*:
|
|
138
|
+
|
|
139
|
+
register NAMED_STRUCT in parser so struct fields annotate CLAUDE (#7561)
|
|
140
|
+
|
|
141
|
+
- due to [`4cca3a0`](https://github.com/tobymao/sqlglot/commit/4cca3a017955f310b83988e36be31337859ba9fa) - support arbitrarily many args in JSONArray [CLAUDE] *(PR [#7559](https://github.com/tobymao/sqlglot/pull/7559) by [@maxa-jonathan-hallee](https://github.com/maxa-jonathan-hallee))*:
|
|
142
|
+
|
|
143
|
+
support arbitrarily many args in JSONArray [CLAUDE] (#7559)
|
|
144
|
+
|
|
145
|
+
- due to [`206e2f8`](https://github.com/tobymao/sqlglot/commit/206e2f8926458162ceb124bba651b07e14d43bc0) - full `MODIFY COLUMN` support. *(PR [#7562](https://github.com/tobymao/sqlglot/pull/7562) by [@burnison](https://github.com/burnison))*:
|
|
146
|
+
|
|
147
|
+
full `MODIFY COLUMN` support. (#7562)
|
|
148
|
+
|
|
149
|
+
- due to [`fd48100`](https://github.com/tobymao/sqlglot/commit/fd4810018e2ea602e1c59994ebe517b1c06d7f49) - generate "SUBSTR" instead of "SUBSTRING" for Substr expr *(PR [#7583](https://github.com/tobymao/sqlglot/pull/7583) by [@georgesittas](https://github.com/georgesittas))*:
|
|
150
|
+
|
|
151
|
+
generate "SUBSTR" instead of "SUBSTRING" for Substr expr (#7583)
|
|
152
|
+
|
|
153
|
+
- due to [`17432c6`](https://github.com/tobymao/sqlglot/commit/17432c61175194ee0f56f0703393e8c5fdc9e81f) - do not indent newlines within identifiers in pretty mode fixes [#7953](https://github.com/tobymao/sqlglot/pull/7953) *(commit by [@georgesittas](https://github.com/georgesittas))*:
|
|
154
|
+
|
|
155
|
+
do not indent newlines within identifiers in pretty mode fixes #7953
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
### :sparkles: New Features
|
|
159
|
+
- [`cf1c9b7`](https://github.com/tobymao/sqlglot/commit/cf1c9b7c9d6fe5f4b6919e7599182869426f527a) - **tests**: add leakcheck harness for sqlglot[c] *(PR [#7533](https://github.com/tobymao/sqlglot/pull/7533) by [@VaggelisD](https://github.com/VaggelisD))*
|
|
160
|
+
- [`68861d9`](https://github.com/tobymao/sqlglot/commit/68861d9f3aaa6c9ae405dacfa22117fb64a1d803) - **mysql**: support `DROP PRIMARY KEY`. *(PR [#7530](https://github.com/tobymao/sqlglot/pull/7530) by [@burnison](https://github.com/burnison))*
|
|
161
|
+
- [`8669e55`](https://github.com/tobymao/sqlglot/commit/8669e55f385eb759bbf5ea1ec095e63ec48cfa91) - **duckdb**: mark DECOMPRESS_STRING as unsupported [CLAUDE] *(PR [#7545](https://github.com/tobymao/sqlglot/pull/7545) by [@fivetran-ashashankar](https://github.com/fivetran-ashashankar))*
|
|
162
|
+
- [`b334dcc`](https://github.com/tobymao/sqlglot/commit/b334dccb7f94993e71fa4f0e59d984a3f0d351d0) - **duckdb**: mark DECOMPRESS_BINARY as unsupported *(PR [#7546](https://github.com/tobymao/sqlglot/pull/7546) by [@fivetran-ashashankar](https://github.com/fivetran-ashashankar))*
|
|
163
|
+
- [`234198a`](https://github.com/tobymao/sqlglot/commit/234198a311c56085b58f72f2871ec42103ff9a19) - **exasol**: transpile USE/OPEN SCHEMA and SHOW TABLES to system-table query *(PR [#7538](https://github.com/tobymao/sqlglot/pull/7538) by [@mkcorneli](https://github.com/mkcorneli))*
|
|
164
|
+
- [`e3fee4d`](https://github.com/tobymao/sqlglot/commit/e3fee4d2dc33b770622831490d2980a837718475) - **snowflake**: transpile DuckDB list() and list_distinct() [CLAUDE] *(PR [#7551](https://github.com/tobymao/sqlglot/pull/7551) by [@maxa-jonathan-hallee](https://github.com/maxa-jonathan-hallee))*
|
|
165
|
+
- [`92aea6b`](https://github.com/tobymao/sqlglot/commit/92aea6bb80902cd1381f5a01dc75fd71c6071296) - **duckdb**: Add UUID v5 unsupported error for Snowflake UUID_STRING transpilation *(commit by [@fivetran-ashashankar](https://github.com/fivetran-ashashankar))*
|
|
166
|
+
- [`b4dea8c`](https://github.com/tobymao/sqlglot/commit/b4dea8c7e4c9e598e33efc56f007a0ab6dab9b5d) - **snowflake**: Transpilation support for UUID_STRING *(commit by [@fivetran-ashashankar](https://github.com/fivetran-ashashankar))*
|
|
167
|
+
- [`b828e30`](https://github.com/tobymao/sqlglot/commit/b828e304485fcf9d8696dc7fcf503ccbc78ade99) - **snowflake**: add UUID_IS_STRING_TYPE flag and UUID_STRING parser *(commit by [@fivetran-ashashankar](https://github.com/fivetran-ashashankar))*
|
|
168
|
+
- [`ded89c2`](https://github.com/tobymao/sqlglot/commit/ded89c2e8edc6eee14f9fabb3d6fd036cced284a) - **duckdb**: Add transpilation support for STRTOK_TO_ARRAY function *(PR [#7536](https://github.com/tobymao/sqlglot/pull/7536) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
|
|
169
|
+
- [`f743755`](https://github.com/tobymao/sqlglot/commit/f743755e7b9ad45839c9c6f651d199bd5441b661) - **hive**: register NAMED_STRUCT in parser so struct fields annotate CLAUDE *(PR [#7561](https://github.com/tobymao/sqlglot/pull/7561) by [@RichardHughes-amp](https://github.com/RichardHughes-amp))*
|
|
170
|
+
- [`4cca3a0`](https://github.com/tobymao/sqlglot/commit/4cca3a017955f310b83988e36be31337859ba9fa) - **duckdb**: support arbitrarily many args in JSONArray [CLAUDE] *(PR [#7559](https://github.com/tobymao/sqlglot/pull/7559) by [@maxa-jonathan-hallee](https://github.com/maxa-jonathan-hallee))*
|
|
171
|
+
- [`3bc8f38`](https://github.com/tobymao/sqlglot/commit/3bc8f3846871d630338fb75761117151cbd9162b) - **oracle**: support `LISTAGG(... ON OVERFLOW ...)` *(PR [#7565](https://github.com/tobymao/sqlglot/pull/7565) by [@galunto](https://github.com/galunto))*
|
|
172
|
+
- [`1a10806`](https://github.com/tobymao/sqlglot/commit/1a10806505db181737065898458fdc669e4a7ce5) - **mypyc**: Enable incremental compilation, deprecate Python 3.9 *(PR [#7574](https://github.com/tobymao/sqlglot/pull/7574) by [@VaggelisD](https://github.com/VaggelisD))*
|
|
173
|
+
- [`d146dcd`](https://github.com/tobymao/sqlglot/commit/d146dcd6efab5f77c2eb1801b1eb882052c2f273) - **lineage**: support all-columns mode and on_node callback *(PR [#7575](https://github.com/tobymao/sqlglot/pull/7575) by [@georgesittas](https://github.com/georgesittas))*
|
|
174
|
+
- [`25552ee`](https://github.com/tobymao/sqlglot/commit/25552eea658e3931a420fca35e186573ac66927b) - **optimizer**: canonicalize internal query names *(PR [#7580](https://github.com/tobymao/sqlglot/pull/7580) by [@georgesittas](https://github.com/georgesittas))*
|
|
175
|
+
- [`fab6ccf`](https://github.com/tobymao/sqlglot/commit/fab6ccf6ec525bc4d78c185068493e26d5e941df) - **duckdb**: Add transpilation support for HEX_ENCODE function *(PR [#7591](https://github.com/tobymao/sqlglot/pull/7591) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
|
|
176
|
+
|
|
177
|
+
### :bug: Bug Fixes
|
|
178
|
+
- [`8583c2d`](https://github.com/tobymao/sqlglot/commit/8583c2dc2b0b29089faf4376f0782e9db2ea5f27) - correctly handle follow-tokens for unit-less intervals *(PR [#7529](https://github.com/tobymao/sqlglot/pull/7529) by [@jvstein](https://github.com/jvstein))*
|
|
179
|
+
- [`daca12a`](https://github.com/tobymao/sqlglot/commit/daca12a51564199b71a3947dd77e5c5be0c3d60d) - **mysql**: accept quoted charset in `USING`. *(PR [#7522](https://github.com/tobymao/sqlglot/pull/7522) by [@burnison](https://github.com/burnison))*
|
|
180
|
+
- [`6053db6`](https://github.com/tobymao/sqlglot/commit/6053db6a98ceecce937f731ad2cdb560ddd8bcda) - **optimizer**: robust scope for UDTF *(PR [#7535](https://github.com/tobymao/sqlglot/pull/7535) by [@geooo109](https://github.com/geooo109))*
|
|
181
|
+
- [`a88dfce`](https://github.com/tobymao/sqlglot/commit/a88dfce091a0fc61c1a8efbd1b35616f22b387ff) - **mysql**: support SHOW TABLES IN <schema> parsing *(PR [#7537](https://github.com/tobymao/sqlglot/pull/7537) by [@mkcorneli](https://github.com/mkcorneli))*
|
|
182
|
+
- [`0bd0c46`](https://github.com/tobymao/sqlglot/commit/0bd0c46505636355926a84158d4d2f60145f0faf) - **optimizer**: handle ColumnDef in typed table alias columns *(PR [#7542](https://github.com/tobymao/sqlglot/pull/7542) by [@tobymao](https://github.com/tobymao))*
|
|
183
|
+
- [`f387112`](https://github.com/tobymao/sqlglot/commit/f3871121d5f61e3c12dd47cfa700c4452f4fd807) - **parser**: robust CONCAT_WS *(PR [#7544](https://github.com/tobymao/sqlglot/pull/7544) by [@geooo109](https://github.com/geooo109))*
|
|
184
|
+
- :arrow_lower_right: *fixes issue [#7540](https://github.com/tobymao/sqlglot/issues/7540) opened by [@nickhand](https://github.com/nickhand)*
|
|
185
|
+
- [`5351ca1`](https://github.com/tobymao/sqlglot/commit/5351ca128bc48caeb557996ab577d2e89775200f) - **optimizer**: EXPLODE qualify and annotate *(PR [#7549](https://github.com/tobymao/sqlglot/pull/7549) by [@geooo109](https://github.com/geooo109))*
|
|
186
|
+
- :arrow_lower_right: *fixes issue [#7541](https://github.com/tobymao/sqlglot/issues/7541) opened by [@catlynkong](https://github.com/catlynkong)*
|
|
187
|
+
- [`8f572f8`](https://github.com/tobymao/sqlglot/commit/8f572f8656c9a5a5e45ac25607af6204bca58773) - **optimizer**: qualify UNPIVOT on CTE sources *(PR [#7550](https://github.com/tobymao/sqlglot/pull/7550) by [@georgesittas](https://github.com/georgesittas))*
|
|
188
|
+
- [`cf0ffd9`](https://github.com/tobymao/sqlglot/commit/cf0ffd99ef27a4a4764104feb9b1dd2af1c544ce) - **optimizer**: qualify (UN)PIVOT on CTE sources *(PR [#7560](https://github.com/tobymao/sqlglot/pull/7560) by [@georgesittas](https://github.com/georgesittas))*
|
|
189
|
+
- [`2c1a90c`](https://github.com/tobymao/sqlglot/commit/2c1a90ccf82cb8d3c43703bc9698e3872a4166e9) - **clickhouse**: apply version-aware unit lowercase to DateTrunc [CLAUDE] *(PR [#7564](https://github.com/tobymao/sqlglot/pull/7564) by [@markcheney1](https://github.com/markcheney1))*
|
|
190
|
+
- [`206e2f8`](https://github.com/tobymao/sqlglot/commit/206e2f8926458162ceb124bba651b07e14d43bc0) - **mysql**: full `MODIFY COLUMN` support. *(PR [#7562](https://github.com/tobymao/sqlglot/pull/7562) by [@burnison](https://github.com/burnison))*
|
|
191
|
+
- [`6110de6`](https://github.com/tobymao/sqlglot/commit/6110de6b24a2ab37b031d46e319a22c0db6ed27d) - **lineage**: avoid self-loops from cached non-owned upstream nodes *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
192
|
+
- [`e078e5d`](https://github.com/tobymao/sqlglot/commit/e078e5db72a7ee5fd6011e1e21285e4692befdbd) - **postgres**: TRIM with UNNEST and ORDINALITY *(PR [#7573](https://github.com/tobymao/sqlglot/pull/7573) by [@geooo109](https://github.com/geooo109))*
|
|
193
|
+
- :arrow_lower_right: *fixes issue [#7566](https://github.com/tobymao/sqlglot/issues/7566) opened by [@CPAPI-104](https://github.com/CPAPI-104)*
|
|
194
|
+
- [`a20ec0e`](https://github.com/tobymao/sqlglot/commit/a20ec0ee493bc0836ab44439ef7d0ed68f91f674) - **optimizer**: unpivot annotate types *(PR [#7543](https://github.com/tobymao/sqlglot/pull/7543) by [@geooo109](https://github.com/geooo109))*
|
|
195
|
+
- [`fd48100`](https://github.com/tobymao/sqlglot/commit/fd4810018e2ea602e1c59994ebe517b1c06d7f49) - **presto**: generate "SUBSTR" instead of "SUBSTRING" for Substr expr *(PR [#7583](https://github.com/tobymao/sqlglot/pull/7583) by [@georgesittas](https://github.com/georgesittas))*
|
|
196
|
+
- :arrow_lower_right: *fixes issue [#7581](https://github.com/tobymao/sqlglot/issues/7581) opened by [@cyber-jessie](https://github.com/cyber-jessie)*
|
|
197
|
+
- [`1cf31d6`](https://github.com/tobymao/sqlglot/commit/1cf31d6bd00a1c5ce3fe6722e7ed87c900074ad0) - **annotate**: register typing for FirstValue and RegexpExtract *(commit by [@RichardHughes-amp](https://github.com/RichardHughes-amp))*
|
|
198
|
+
- [`9f169ab`](https://github.com/tobymao/sqlglot/commit/9f169ab17a8ada0a53e2d88c035196db673e37c4) - **redshift**: support `APPROXIMATE PERCENTILE_DISC` round-trip *(PR [#7585](https://github.com/tobymao/sqlglot/pull/7585) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
|
|
199
|
+
- [`17432c6`](https://github.com/tobymao/sqlglot/commit/17432c61175194ee0f56f0703393e8c5fdc9e81f) - **generator**: do not indent newlines within identifiers in pretty mode fixes [#7953](https://github.com/tobymao/sqlglot/pull/7953) *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
200
|
+
- [`e550d00`](https://github.com/tobymao/sqlglot/commit/e550d008cc6ffa72b046d6406911b256c4a75f8b) - **parser**: FROM with JOIN subqueries *(PR [#7597](https://github.com/tobymao/sqlglot/pull/7597) by [@geooo109](https://github.com/geooo109))*
|
|
201
|
+
- :arrow_lower_right: *fixes issue [#7596](https://github.com/tobymao/sqlglot/issues/7596) opened by [@vietspaceanh](https://github.com/vietspaceanh)*
|
|
202
|
+
|
|
203
|
+
### :zap: Performance Improvements
|
|
204
|
+
- [`63f8dc6`](https://github.com/tobymao/sqlglot/commit/63f8dc6dfc19d4ae14984d393bc63532c1085e07) - **tokens**: cache TokenizerCore per thread *(PR [#7547](https://github.com/tobymao/sqlglot/pull/7547) by [@tobymao](https://github.com/tobymao))*
|
|
205
|
+
- [`9b65c91`](https://github.com/tobymao/sqlglot/commit/9b65c91f8d510682af203015b561d92ce8a2e477) - **build**: parallelize mypyc compile with -j $(NPROC) *(PR [#7554](https://github.com/tobymao/sqlglot/pull/7554) by [@tobymao](https://github.com/tobymao))*
|
|
206
|
+
- [`fc6e7cb`](https://github.com/tobymao/sqlglot/commit/fc6e7cb093583d44ac4863d770b583e75d45f365) - **parser**: short-circuit _parse_pivots when next token isn't PIVOT/UNPIVOT *(PR [#7557](https://github.com/tobymao/sqlglot/pull/7557) by [@tobymao](https://github.com/tobymao))*
|
|
207
|
+
|
|
208
|
+
### :recycle: Refactors
|
|
209
|
+
- [`38b8986`](https://github.com/tobymao/sqlglot/commit/38b89860020d4bb7fc7be8408b67852f8cf380ae) - simplify uuid_sql using @unsupported_args decorator *(commit by [@fivetran-ashashankar](https://github.com/fivetran-ashashankar))*
|
|
210
|
+
- [`49787a5`](https://github.com/tobymao/sqlglot/commit/49787a59dcbcaca97a49cd504c4e35f8db1408a3) - remove redundant CAST from UUID_V5_TEMPLATE *(commit by [@fivetran-ashashankar](https://github.com/fivetran-ashashankar))*
|
|
211
|
+
- [`e883b0b`](https://github.com/tobymao/sqlglot/commit/e883b0b39ebdeeab408743786f66d62dd92b3267) - map duckdb `LIST` to `ArrayAgg` *(PR [#7552](https://github.com/tobymao/sqlglot/pull/7552) by [@georgesittas](https://github.com/georgesittas))*
|
|
212
|
+
- [`1d976e6`](https://github.com/tobymao/sqlglot/commit/1d976e665a8687e7ca2411a9a2a5139eb5698849) - raise if a projection is unnamed in lineage *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
213
|
+
- [`b3fa159`](https://github.com/tobymao/sqlglot/commit/b3fa15979866947adbb600ae9b1d24e048997dad) - **optimizer**: continuation on typing coverage improvements *(PR [#7572](https://github.com/tobymao/sqlglot/pull/7572) by [@OutSquareCapital](https://github.com/OutSquareCapital))*
|
|
214
|
+
|
|
215
|
+
### :white_check_mark: Tests
|
|
216
|
+
- [`9bc9ef2`](https://github.com/tobymao/sqlglot/commit/9bc9ef2e7dfd98a5340167012fa0ea782cca1264) - update UUID_STRING test for removed CAST *(commit by [@fivetran-ashashankar](https://github.com/fivetran-ashashankar))*
|
|
217
|
+
|
|
218
|
+
### :wrench: Chores
|
|
219
|
+
- [`fc99ddc`](https://github.com/tobymao/sqlglot/commit/fc99ddc936c095fb813e56cfe10006701ece9893) - update integration tests submodule *(commit by [@fivetran-ashashankar](https://github.com/fivetran-ashashankar))*
|
|
220
|
+
- [`e4a2fdc`](https://github.com/tobymao/sqlglot/commit/e4a2fdcdaf3e8ac423884e482191e002ab677235) - **exasol**: test GROUP BY alias rewrite via _add_local_prefix_for_aliases *(PR [#7569](https://github.com/tobymao/sqlglot/pull/7569) by [@mkcorneli](https://github.com/mkcorneli))*
|
|
221
|
+
- [`43be379`](https://github.com/tobymao/sqlglot/commit/43be379b75f6e3d8ea66ac3849f4fb5c55736145) - bump sqlglot-mypy to 1.20.0.post6 *(PR [#7598](https://github.com/tobymao/sqlglot/pull/7598) by [@VaggelisD](https://github.com/VaggelisD))*
|
|
222
|
+
- [`9bd7e7c`](https://github.com/tobymao/sqlglot/commit/9bd7e7c83ff1e3c73f6d071a7bd47ec208e25ca4) - **publish**: Do not build sqlglotc wheels for 3.9 *(PR [#7600](https://github.com/tobymao/sqlglot/pull/7600) by [@VaggelisD](https://github.com/VaggelisD))*
|
|
223
|
+
|
|
224
|
+
|
|
4
225
|
## [v30.6.0] - 2026-04-20
|
|
5
226
|
### :boom: BREAKING CHANGES
|
|
6
227
|
- due to [`dcf9ed5`](https://github.com/tobymao/sqlglot/commit/dcf9ed58303bf320f3e3498618bd95639037efde) - compile python generator *(PR [#7528](https://github.com/tobymao/sqlglot/pull/7528) by [@georgesittas](https://github.com/georgesittas))*:
|
|
@@ -14244,3 +14465,5 @@ pip install "sqlglot[c]" # compiled — faster, but no subclassing
|
|
|
14244
14465
|
[v30.4.3]: https://github.com/tobymao/sqlglot/compare/v30.4.2...v30.4.3
|
|
14245
14466
|
[v30.5.0]: https://github.com/tobymao/sqlglot/compare/v30.4.3...v30.5.0
|
|
14246
14467
|
[v30.6.0]: https://github.com/tobymao/sqlglot/compare/v30.5.0...v30.6.0
|
|
14468
|
+
[v30.7.0]: https://github.com/tobymao/sqlglot/compare/v30.6.0...v30.7.0
|
|
14469
|
+
[v30.8.0]: https://github.com/tobymao/sqlglot/compare/v30.7.0...v30.8.0
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.PHONY: install install-dev install-devc install-devc-release install-pre-commit bench bench-parse bench-transpile bench-optimize test test-fast unit testc unitc leakcheck style check docs docs-serve hidec showc clean resolve-integration-conflicts update-fixtures
|
|
1
|
+
.PHONY: install install-dev install-devc install-devc-release install-pre-commit bench bench-parse bench-transpile bench-optimize test test-fast test-branch unit testc unitc leakcheck style check docs docs-serve hidec showc clean resolve-integration-conflicts update-fixtures
|
|
2
2
|
|
|
3
3
|
ifdef UV
|
|
4
4
|
PIP := uv pip
|
|
@@ -81,6 +81,25 @@ test: hidec
|
|
|
81
81
|
test-fast:
|
|
82
82
|
python -m unittest --failfast
|
|
83
83
|
|
|
84
|
+
BRANCH_BASE ?= main
|
|
85
|
+
|
|
86
|
+
test-branch:
|
|
87
|
+
@changed_main=$$({ git diff origin/$(BRANCH_BASE)...HEAD --name-only 2>/dev/null; git diff HEAD --name-only; git diff --cached --name-only; } \
|
|
88
|
+
| sort -u | grep '^tests/.*\.py$$' | grep -v '__init__' | sed 's/\.py$$//' | tr '/' '.'); \
|
|
89
|
+
changed_int=$$({ git -C sqlglot-integration-tests log --name-only --format='' origin/HEAD..HEAD 2>/dev/null; git -C sqlglot-integration-tests diff HEAD --name-only 2>/dev/null; } \
|
|
90
|
+
| sort -u | grep '^tests/sqlglot/.*\.py$$' | grep -v '__init__'); \
|
|
91
|
+
if [ -z "$$changed_main" ] && [ -z "$$changed_int" ]; then \
|
|
92
|
+
echo "No test files changed vs $(BRANCH_BASE)"; exit 0; \
|
|
93
|
+
fi; \
|
|
94
|
+
if [ -n "$$changed_main" ]; then \
|
|
95
|
+
echo "Main tests:"; echo "$$changed_main" | tr ' ' '\n' | sed 's/^/ /'; \
|
|
96
|
+
python -m unittest $$changed_main || exit 1; \
|
|
97
|
+
fi; \
|
|
98
|
+
if [ -n "$$changed_int" ]; then \
|
|
99
|
+
echo "Integration tests:"; echo "$$changed_int" | tr ' ' '\n' | sed 's/^/ /'; \
|
|
100
|
+
cd sqlglot-integration-tests && PYTHONPATH=. pytest $$changed_int; \
|
|
101
|
+
fi
|
|
102
|
+
|
|
84
103
|
unit: hidec
|
|
85
104
|
trap '$(MAKE) showc' EXIT; SKIP_INTEGRATION=1 python -m unittest
|
|
86
105
|
|
|
@@ -95,7 +114,10 @@ leakcheck: install-devc
|
|
|
95
114
|
|
|
96
115
|
style:
|
|
97
116
|
pre-commit run --all-files
|
|
98
|
-
@if [ -f sqlglot-integration-tests/Makefile ]; then
|
|
117
|
+
@if [ -f sqlglot-integration-tests/Makefile ]; then \
|
|
118
|
+
MYPYPATH=$(abspath .) $(MAKE) -C sqlglot-integration-tests style && \
|
|
119
|
+
$(MAKE) -C sqlglot-integration-tests check-submodule; \
|
|
120
|
+
fi
|
|
99
121
|
|
|
100
122
|
check: style test testc
|
|
101
123
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sqlglot
|
|
3
|
-
Version: 30.
|
|
3
|
+
Version: 30.9.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
|
|
@@ -19,7 +19,7 @@ Description-Content-Type: text/markdown
|
|
|
19
19
|
License-File: LICENSE
|
|
20
20
|
Provides-Extra: dev
|
|
21
21
|
Requires-Dist: duckdb>=0.6; extra == "dev"
|
|
22
|
-
Requires-Dist: sqlglot-mypy>=1.
|
|
22
|
+
Requires-Dist: sqlglot-mypy>=2.1.0.post2; python_version >= "3.10" and extra == "dev"
|
|
23
23
|
Requires-Dist: mypy; python_version < "3.10" and extra == "dev"
|
|
24
24
|
Requires-Dist: setuptools_scm; extra == "dev"
|
|
25
25
|
Requires-Dist: pandas; extra == "dev"
|
|
@@ -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.9.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.9.0; python_version >= "3.10" and extra == "rs"
|
|
41
41
|
Dynamic: license-file
|
|
42
42
|
Dynamic: provides-extra
|
|
43
43
|
|
|
@@ -9,7 +9,7 @@ setup(
|
|
|
9
9
|
"duckdb>=0.6",
|
|
10
10
|
# sqlglot-mypy 1.20+ is the build dep for sqlglotc and only ships
|
|
11
11
|
# for py3.10+; on py3.9 just use upstream mypy for type checking.
|
|
12
|
-
"sqlglot-mypy >= 1.
|
|
12
|
+
"sqlglot-mypy >= 2.1.0.post2; python_version >= '3.10'",
|
|
13
13
|
"mypy; python_version < '3.10'",
|
|
14
14
|
"setuptools_scm",
|
|
15
15
|
"pandas",
|
|
@@ -4,9 +4,9 @@ import typing as t
|
|
|
4
4
|
from collections.abc import Mapping, Sequence
|
|
5
5
|
|
|
6
6
|
if t.TYPE_CHECKING:
|
|
7
|
-
from typing_extensions import ParamSpec
|
|
8
|
-
|
|
9
7
|
import sqlglot
|
|
8
|
+
from sqlglot import exp
|
|
9
|
+
from typing_extensions import ParamSpec
|
|
10
10
|
from sqlglot.dialects.dialect import DialectType
|
|
11
11
|
from sqlglot.errors import ErrorLevel
|
|
12
12
|
|
|
@@ -32,6 +32,15 @@ class ParserNoDialectArgs(t.TypedDict, total=False):
|
|
|
32
32
|
max_nodes: int
|
|
33
33
|
|
|
34
34
|
|
|
35
|
+
class DataTypeArgs(ParserNoDialectArgs, total=False):
|
|
36
|
+
expressions: list[exp.Expr] | None
|
|
37
|
+
nested: bool
|
|
38
|
+
values: list[exp.Expr] | None
|
|
39
|
+
kind: exp.Expr | str
|
|
40
|
+
nullable: bool
|
|
41
|
+
collate: exp.Identifier | exp.Column
|
|
42
|
+
|
|
43
|
+
|
|
35
44
|
class ParserArgs(ParserNoDialectArgs, _DialectArg, total=False):
|
|
36
45
|
pass
|
|
37
46
|
|
|
@@ -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.9.0'
|
|
22
|
+
__version_tuple__ = version_tuple = (30, 9, 0)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g2f6434e2b'
|
|
@@ -72,18 +72,28 @@ class BigQuery(Dialect):
|
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
FORMAT_MAPPING = {
|
|
75
|
+
"dd": "%d",
|
|
75
76
|
"DD": "%d",
|
|
77
|
+
"mm": "%m",
|
|
76
78
|
"MM": "%m",
|
|
79
|
+
"mon": "%b",
|
|
77
80
|
"MON": "%b",
|
|
81
|
+
"month": "%B",
|
|
78
82
|
"MONTH": "%B",
|
|
83
|
+
"yyyy": "%Y",
|
|
79
84
|
"YYYY": "%Y",
|
|
85
|
+
"yy": "%y",
|
|
80
86
|
"YY": "%y",
|
|
81
87
|
"HH": "%I",
|
|
82
88
|
"HH12": "%I",
|
|
89
|
+
"hh24": "%H",
|
|
83
90
|
"HH24": "%H",
|
|
91
|
+
"mi": "%M",
|
|
84
92
|
"MI": "%M",
|
|
93
|
+
"ss": "%S",
|
|
85
94
|
"SS": "%S",
|
|
86
95
|
"SSSSS": "%f",
|
|
96
|
+
"tzh": "%z",
|
|
87
97
|
"TZH": "%z",
|
|
88
98
|
}
|
|
89
99
|
|
|
@@ -525,6 +525,11 @@ class Dialect(metaclass=_Dialect):
|
|
|
525
525
|
Whether ORDER BY ALL is supported (expands to all the selected columns) as in DuckDB, Spark3/Databricks
|
|
526
526
|
"""
|
|
527
527
|
|
|
528
|
+
SUPPORTS_LIMIT_ALL = False
|
|
529
|
+
"""
|
|
530
|
+
Whether LIMIT ALL is supported (equivalent to no limit) as in Postgres.
|
|
531
|
+
"""
|
|
532
|
+
|
|
528
533
|
PROJECTION_ALIASES_SHADOW_SOURCE_NAMES = False
|
|
529
534
|
"""
|
|
530
535
|
Whether projection alias names can shadow table/source names in GROUP BY and HAVING clauses.
|
|
@@ -1219,7 +1224,9 @@ def inline_array_unless_query(self: Generator, expression: exp.Expr) -> str:
|
|
|
1219
1224
|
def no_ilike_sql(self: Generator, expression: exp.ILike) -> str:
|
|
1220
1225
|
return self.like_sql(
|
|
1221
1226
|
exp.Like(
|
|
1222
|
-
this=exp.Lower(this=expression.this),
|
|
1227
|
+
this=exp.Lower(this=expression.this),
|
|
1228
|
+
expression=exp.Lower(this=expression.expression),
|
|
1229
|
+
negate=expression.args.get("negate"),
|
|
1223
1230
|
)
|
|
1224
1231
|
)
|
|
1225
1232
|
|
|
@@ -1538,28 +1545,32 @@ def months_between_sql(self: Generator, expression: exp.MonthsBetween) -> str:
|
|
|
1538
1545
|
|
|
1539
1546
|
|
|
1540
1547
|
def build_formatted_time(
|
|
1541
|
-
exp_class: Type[E],
|
|
1542
|
-
) -> t.Callable[[BuilderArgs], E]:
|
|
1548
|
+
exp_class: Type[E], dialect_override: str | None = None, default: bool | str | None = None
|
|
1549
|
+
) -> t.Callable[[BuilderArgs, Dialect], E]:
|
|
1543
1550
|
"""Helper used for time expressions.
|
|
1544
1551
|
|
|
1545
1552
|
Args:
|
|
1546
1553
|
exp_class: the expression class to instantiate.
|
|
1547
|
-
|
|
1554
|
+
dialect_override: optional sql dialect to override the parser's one.
|
|
1548
1555
|
default: the default format, True being time.
|
|
1549
1556
|
|
|
1550
1557
|
Returns:
|
|
1551
1558
|
A callable that can be used to return the appropriately formatted time expression.
|
|
1552
1559
|
"""
|
|
1553
1560
|
|
|
1554
|
-
def _builder(args: BuilderArgs) -> E:
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
or (Dialect[dialect].TIME_FORMAT if default is True else default or None)
|
|
1560
|
-
),
|
|
1561
|
+
def _builder(args: BuilderArgs, dialect: Dialect) -> E:
|
|
1562
|
+
target_dialect = (
|
|
1563
|
+
t.cast(Dialect, Dialect[dialect_override])
|
|
1564
|
+
if isinstance(dialect_override, str)
|
|
1565
|
+
else dialect
|
|
1561
1566
|
)
|
|
1562
1567
|
|
|
1568
|
+
fmt = seq_get(args, 1)
|
|
1569
|
+
if not fmt:
|
|
1570
|
+
fmt = target_dialect.TIME_FORMAT if default is True else default or None
|
|
1571
|
+
|
|
1572
|
+
return exp_class(this=seq_get(args, 0), format=target_dialect.format_time(fmt))
|
|
1573
|
+
|
|
1563
1574
|
return _builder
|
|
1564
1575
|
|
|
1565
1576
|
|
|
@@ -2463,8 +2474,7 @@ def build_timetostr_or_tochar(
|
|
|
2463
2474
|
annotate_types(this, dialect=dialect)
|
|
2464
2475
|
|
|
2465
2476
|
if this.is_type(*exp.DataType.TEMPORAL_TYPES):
|
|
2466
|
-
|
|
2467
|
-
return build_formatted_time(exp.TimeToStr, dialect_name, default=True)(args)
|
|
2477
|
+
return build_formatted_time(exp.TimeToStr, default=True)(args, t.cast(Dialect, dialect))
|
|
2468
2478
|
|
|
2469
2479
|
return exp.ToChar.from_arg_list(args)
|
|
2470
2480
|
|
|
@@ -70,6 +70,8 @@ class Oracle(Dialect):
|
|
|
70
70
|
KEYWORDS = {
|
|
71
71
|
**tokens.Tokenizer.KEYWORDS,
|
|
72
72
|
"(+)": TokenType.JOIN_MARKER,
|
|
73
|
+
# https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/Comparison-Conditions.html
|
|
74
|
+
"^=": TokenType.NEQ,
|
|
73
75
|
"BINARY_DOUBLE": TokenType.DOUBLE,
|
|
74
76
|
"BINARY_FLOAT": TokenType.FLOAT,
|
|
75
77
|
"BULK COLLECT INTO": TokenType.BULK_COLLECT_INTO,
|
|
@@ -5,14 +5,17 @@ from sqlglot.dialects.dialect import Dialect
|
|
|
5
5
|
from sqlglot.generators.postgres import PostgresGenerator
|
|
6
6
|
from sqlglot.parsers.postgres import PostgresParser
|
|
7
7
|
from sqlglot.tokens import TokenType
|
|
8
|
+
from sqlglot.typing.postgres import EXPRESSION_METADATA
|
|
8
9
|
|
|
9
10
|
|
|
10
11
|
class Postgres(Dialect):
|
|
12
|
+
EXPRESSION_METADATA = EXPRESSION_METADATA.copy()
|
|
11
13
|
INDEX_OFFSET = 1
|
|
12
14
|
TYPED_DIVISION = True
|
|
13
15
|
CONCAT_COALESCE = True
|
|
14
16
|
CONCAT_WS_COALESCE = True
|
|
15
17
|
NULL_ORDERING = "nulls_are_large"
|
|
18
|
+
SUPPORTS_LIMIT_ALL = True
|
|
16
19
|
TIME_FORMAT = "'YYYY-MM-DD HH24:MI:SS'"
|
|
17
20
|
TABLESAMPLE_SIZE_IS_PERCENT = True
|
|
18
21
|
TABLES_REFERENCEABLE_AS_COLUMNS = True
|
|
@@ -98,6 +101,7 @@ class Postgres(Dialect):
|
|
|
98
101
|
"SERIAL": TokenType.SERIAL,
|
|
99
102
|
"SMALLSERIAL": TokenType.SMALLSERIAL,
|
|
100
103
|
"TEMP": TokenType.TEMPORARY,
|
|
104
|
+
"TYPE": TokenType.TYPE,
|
|
101
105
|
"REGCLASS": TokenType.OBJECT_IDENTIFIER,
|
|
102
106
|
"REGCOLLATION": TokenType.OBJECT_IDENTIFIER,
|
|
103
107
|
"REGCONFIG": TokenType.OBJECT_IDENTIFIER,
|
|
@@ -24,7 +24,12 @@ class Redshift(Postgres):
|
|
|
24
24
|
|
|
25
25
|
# ref: https://docs.aws.amazon.com/redshift/latest/dg/r_FORMAT_strings.html
|
|
26
26
|
TIME_FORMAT = "'YYYY-MM-DD HH24:MI:SS'"
|
|
27
|
-
|
|
27
|
+
|
|
28
|
+
TIME_MAPPING = {
|
|
29
|
+
**Postgres.TIME_MAPPING,
|
|
30
|
+
"MON": "%b",
|
|
31
|
+
"MONTH": "%B",
|
|
32
|
+
}
|
|
28
33
|
|
|
29
34
|
Parser = RedshiftParser
|
|
30
35
|
|
|
@@ -36,13 +41,15 @@ class Redshift(Postgres):
|
|
|
36
41
|
KEYWORDS = {
|
|
37
42
|
**Postgres.Tokenizer.KEYWORDS,
|
|
38
43
|
"(+)": TokenType.JOIN_MARKER,
|
|
44
|
+
"BINARY VARYING": TokenType.VARBINARY,
|
|
45
|
+
"CURRENT_USER_ID": TokenType.CURRENT_USER_ID,
|
|
39
46
|
"HLLSKETCH": TokenType.HLLSKETCH,
|
|
40
47
|
"MINUS": TokenType.EXCEPT,
|
|
41
48
|
"SUPER": TokenType.SUPER,
|
|
42
49
|
"TOP": TokenType.TOP,
|
|
43
50
|
"UNLOAD": TokenType.COMMAND,
|
|
51
|
+
"USER": TokenType.CURRENT_USER,
|
|
44
52
|
"VARBYTE": TokenType.VARBINARY,
|
|
45
|
-
"BINARY VARYING": TokenType.VARBINARY,
|
|
46
53
|
}
|
|
47
54
|
KEYWORDS.pop("VALUES")
|
|
48
55
|
|
|
@@ -365,5 +365,5 @@ class StDistance(Expression, Func):
|
|
|
365
365
|
|
|
366
366
|
|
|
367
367
|
class StPoint(Expression, Func):
|
|
368
|
-
arg_types = {"this": True, "expression": True, "
|
|
368
|
+
arg_types = {"this": True, "expression": True, "z": False, "m": False}
|
|
369
369
|
_sql_names = ["ST_POINT", "ST_MAKEPOINT"]
|