sqlglot 30.13.0__tar.gz → 30.14.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.13.0 → sqlglot-30.14.0}/CHANGELOG.md +322 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/CONTRIBUTING.md +8 -0
- {sqlglot-30.13.0/sqlglot.egg-info → sqlglot-30.14.0}/PKG-INFO +36 -28
- {sqlglot-30.13.0 → sqlglot-30.14.0}/README.md +33 -25
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/_version.py +3 -3
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/dialect.py +21 -3
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/hive.py +6 -5
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/materialize.py +2 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/postgres.py +3 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/redshift.py +2 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/risingwave.py +2 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/snowflake.py +1 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/spark.py +10 -2
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/spark2.py +10 -2
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/expressions/array.py +4 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/expressions/core.py +1 -1
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/expressions/math.py +4 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generator.py +9 -5
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/duckdb.py +60 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/hive.py +20 -11
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/python.py +3 -1
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/tsql.py +3 -2
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/jsonpath.py +4 -4
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/optimizer/canonicalize_internal_names.py +2 -1
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/optimizer/merge_subqueries.py +86 -62
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/optimizer/qualify.py +1 -1
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/optimizer/qualify_columns.py +56 -9
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/optimizer/simplify.py +11 -3
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parser.py +55 -6
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/duckdb.py +1 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/typing/duckdb.py +1 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/typing/hive.py +1 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/typing/mysql.py +17 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/typing/spark2.py +7 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0/sqlglot.egg-info}/PKG-INFO +36 -28
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot.egg-info/requires.txt +2 -2
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot.egg-info/scm_file_list.json +320 -320
- sqlglot-30.14.0/sqlglot.egg-info/scm_version.json +8 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_bigquery.py +55 -11
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_dialect.py +15 -5
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_duckdb.py +3 -2
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_hive.py +4 -4
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_mysql.py +8 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_postgres.py +12 -1
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_presto.py +7 -1
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_singlestore.py +1 -1
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_snowflake.py +6 -2
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_spark.py +45 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_tsql.py +3 -3
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/identity.sql +1 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/annotate_functions.sql +67 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/canonicalize_internal_names.sql +8 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/merge_subqueries.sql +12 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/pushdown_projections.sql +2 -2
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/qualify_columns.sql +24 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/simplify.sql +24 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/test_jsonpath.py +11 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/test_optimizer.py +44 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/test_time.py +9 -8
- sqlglot-30.13.0/sqlglot.egg-info/scm_version.json +0 -8
- {sqlglot-30.13.0 → sqlglot-30.14.0}/.gitignore +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/.gitmodules +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/.gitpod.yml +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/.pre-commit-config.yaml +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/AGENTS.md +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/CLAUDE.md +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/LICENSE +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/MANIFEST.in +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/Makefile +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/pyproject.toml +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/setup.cfg +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/setup.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/__init__.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/__main__.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/_typing.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/__init__.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/athena.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/bigquery.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/clickhouse.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/databricks.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/dax.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/doris.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/dremio.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/drill.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/druid.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/duckdb.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/dune.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/exasol.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/fabric.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/mysql.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/oracle.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/presto.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/prql.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/singlestore.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/solr.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/sqlite.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/starrocks.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/tableau.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/teradata.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/trino.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/dialects/tsql.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/diff.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/errors.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/executor/__init__.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/executor/context.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/executor/env.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/executor/python.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/executor/table.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/expressions/__init__.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/expressions/aggregate.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/expressions/builders.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/expressions/constraints.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/expressions/datatypes.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/expressions/ddl.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/expressions/dml.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/expressions/functions.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/expressions/json.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/expressions/properties.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/expressions/query.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/expressions/string.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/expressions/temporal.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/__init__.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/athena.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/bigquery.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/clickhouse.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/databricks.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/dax.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/doris.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/dremio.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/drill.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/druid.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/dune.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/exasol.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/fabric.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/materialize.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/mysql.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/oracle.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/postgres.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/presto.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/prql.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/redshift.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/risingwave.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/singlestore.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/snowflake.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/solr.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/spark.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/spark2.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/sqlite.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/starrocks.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/tableau.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/teradata.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/generators/trino.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/helper.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/lineage.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/optimizer/__init__.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/optimizer/annotate_types.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/optimizer/canonicalize.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/optimizer/eliminate_ctes.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/optimizer/eliminate_joins.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/optimizer/eliminate_subqueries.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/optimizer/isolate_table_selects.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/optimizer/normalize.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/optimizer/normalize_identifiers.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/optimizer/optimize_joins.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/optimizer/optimizer.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/optimizer/pushdown_predicates.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/optimizer/pushdown_projections.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/optimizer/qualify_tables.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/optimizer/resolver.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/optimizer/scope.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/optimizer/unnest_subqueries.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/__init__.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/athena.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/base.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/bigquery.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/clickhouse.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/databricks.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/dax.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/doris.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/dremio.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/drill.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/druid.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/dune.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/exasol.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/fabric.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/hive.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/materialize.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/mysql.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/oracle.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/postgres.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/presto.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/prql.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/redshift.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/risingwave.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/singlestore.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/snowflake.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/solr.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/spark.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/spark2.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/sqlite.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/starrocks.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/tableau.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/teradata.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/trino.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/parsers/tsql.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/planner.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/py.typed +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/schema.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/serde.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/time.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/tokenizer_core.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/tokens.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/transforms.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/trie.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/typing/__init__.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/typing/bigquery.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/typing/clickhouse.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/typing/databricks.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/typing/postgres.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/typing/presto.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/typing/redshift.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/typing/snowflake.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/typing/spark.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot/typing/tsql.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot.egg-info/SOURCES.txt +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot.egg-info/dependency_links.txt +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot.egg-info/top_level.txt +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglot.png +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglotc/MANIFEST.in +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglotc/pyproject.toml +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/sqlglotc/setup.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/__init__.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/__init__.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_athena.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_clickhouse.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_databricks.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_dax.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_doris.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_dremio.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_drill.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_druid.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_dune.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_exasol.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_fabric.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_materialize.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_oracle.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_pipe_syntax.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_prql.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_redshift.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_risingwave.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_solr.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_sqlite.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_starrocks.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_tableau.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_teradata.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/dialects/test_trino.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/jsonpath/LICENSE +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/jsonpath/cts.json +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/annotate_types.sql +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/canonicalize.sql +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/eliminate_ctes.sql +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/eliminate_joins.sql +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/eliminate_subqueries.sql +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/isolate_table_selects.sql +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/normalize.sql +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/normalize_identifiers.sql +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/optimize_joins.sql +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/optimizer.sql +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/pushdown_cte_alias_columns.sql +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/pushdown_predicates.sql +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/qualify_columns__invalid.sql +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/qualify_columns__with_invisible.sql +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/qualify_columns_ddl.sql +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/qualify_tables.sql +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/quote_identifiers.sql +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/call_center.csv.gz +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/catalog_page.csv.gz +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/catalog_returns.csv.gz +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/catalog_sales.csv.gz +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/customer.csv.gz +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/customer_address.csv.gz +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/customer_demographics.csv.gz +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/date_dim.csv.gz +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/household_demographics.csv.gz +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/income_band.csv.gz +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/inventory.csv.gz +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/item.csv.gz +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/promotion.csv.gz +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/reason.csv.gz +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/ship_mode.csv.gz +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/store.csv.gz +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/store_returns.csv.gz +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/store_sales.csv.gz +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/time_dim.csv.gz +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/tpc-ds.sql +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/warehouse.csv.gz +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/web_page.csv.gz +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/web_returns.csv.gz +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/web_sales.csv.gz +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/web_site.csv.gz +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-h/customer.csv.gz +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-h/lineitem.csv.gz +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-h/nation.csv.gz +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-h/orders.csv.gz +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-h/part.csv.gz +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-h/partsupp.csv.gz +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-h/region.csv.gz +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-h/supplier.csv.gz +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-h/tpc-h.sql +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/unnest_subqueries.sql +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/partial.sql +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/fixtures/pretty.sql +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/gen_fixtures.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/helpers.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/leakcheck.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/sqlglot/__init__.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/test_build.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/test_dialect_entry_points.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/test_dialect_imports.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/test_diff.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/test_docs.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/test_errors.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/test_executor.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/test_expressions.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/test_generator.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/test_helper.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/test_integration_loader.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/test_lineage.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/test_parser.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/test_schema.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/test_serde.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/test_tokens.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/test_transforms.py +0 -0
- {sqlglot-30.13.0 → sqlglot-30.14.0}/tests/test_transpile.py +0 -0
|
@@ -1,6 +1,327 @@
|
|
|
1
1
|
Changelog
|
|
2
2
|
=========
|
|
3
3
|
|
|
4
|
+
## [v30.13.0] - 2026-07-20
|
|
5
|
+
### :boom: BREAKING CHANGES
|
|
6
|
+
- due to [`58f5bf9`](https://github.com/tobymao/sqlglot/commit/58f5bf9b40dda34784bcb2d3bf0a04f02490de12) - databricks type annotation for REGEXP_COUNT, REGEXP_EXTRACT_ALL *(PR [#7797](https://github.com/tobymao/sqlglot/pull/7797) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*:
|
|
7
|
+
|
|
8
|
+
databricks type annotation for REGEXP_COUNT, REGEXP_EXTRACT_ALL (#7797)
|
|
9
|
+
|
|
10
|
+
- due to [`fd6d4d6`](https://github.com/tobymao/sqlglot/commit/fd6d4d61c25e7918118fc22c5579098a86a58e10) - annotate repeat function *(PR [#7803](https://github.com/tobymao/sqlglot/pull/7803) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
11
|
+
|
|
12
|
+
annotate repeat function (#7803)
|
|
13
|
+
|
|
14
|
+
- due to [`93802ce`](https://github.com/tobymao/sqlglot/commit/93802ce4d0c8c0b960be6b7b84785fa3556c0310) - annotate type for REGEXP_REPLACE hive chain *(PR [#7804](https://github.com/tobymao/sqlglot/pull/7804) by [@vishvambhar-ranoshe](https://github.com/vishvambhar-ranoshe))*:
|
|
15
|
+
|
|
16
|
+
annotate type for REGEXP_REPLACE hive chain (#7804)
|
|
17
|
+
|
|
18
|
+
- due to [`cbc9206`](https://github.com/tobymao/sqlglot/commit/cbc9206e0603ffa7d0e2e72c0bf84ebc77cdb8e5) - annotate `to_json` for hive-like dialects *(PR [#7814](https://github.com/tobymao/sqlglot/pull/7814) by [@vishvambhar-ranoshe](https://github.com/vishvambhar-ranoshe))*:
|
|
19
|
+
|
|
20
|
+
annotate `to_json` for hive-like dialects (#7814)
|
|
21
|
+
|
|
22
|
+
- due to [`85fea2c`](https://github.com/tobymao/sqlglot/commit/85fea2cf4375de4fd99c5d036d8ccfac2965a753) - more robust date formats *(PR [#7813](https://github.com/tobymao/sqlglot/pull/7813) by [@geooo109](https://github.com/geooo109))*:
|
|
23
|
+
|
|
24
|
+
more robust date formats (#7813)
|
|
25
|
+
|
|
26
|
+
- due to [`abdac97`](https://github.com/tobymao/sqlglot/commit/abdac971b68f0914801bda4784860c04258a22e8) - annotate str_to_map for hive-like dialects *(PR [#7822](https://github.com/tobymao/sqlglot/pull/7822) by [@vishvambhar-ranoshe](https://github.com/vishvambhar-ranoshe))*:
|
|
27
|
+
|
|
28
|
+
annotate str_to_map for hive-like dialects (#7822)
|
|
29
|
+
|
|
30
|
+
- due to [`79d1061`](https://github.com/tobymao/sqlglot/commit/79d1061ca838101ec6baaf399a8e7fd3410df926) - add databricks type inference for REGEXP_INSTR, REGEXP_LIKE, REGEXP_SUBSTR, REGR_AVGX *(PR [#7815](https://github.com/tobymao/sqlglot/pull/7815) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*:
|
|
31
|
+
|
|
32
|
+
add databricks type inference for REGEXP_INSTR, REGEXP_LIKE, REGEXP_SUBSTR, REGR_AVGX (#7815)
|
|
33
|
+
|
|
34
|
+
- due to [`aeb2711`](https://github.com/tobymao/sqlglot/commit/aeb2711f3be05bdcfa39a5e7479a0bedb0ca03f7) - parse regexp extract (and variants) correctly *(commit by [@georgesittas](https://github.com/georgesittas))*:
|
|
35
|
+
|
|
36
|
+
parse regexp extract (and variants) correctly
|
|
37
|
+
|
|
38
|
+
- due to [`b29ef61`](https://github.com/tobymao/sqlglot/commit/b29ef618b5db539f7bd4685e49b72ea08730daa5) - true/null in t.true/null should be identifiers *(PR [#7831](https://github.com/tobymao/sqlglot/pull/7831) by [@georgesittas](https://github.com/georgesittas))*:
|
|
39
|
+
|
|
40
|
+
true/null in t.true/null should be identifiers (#7831)
|
|
41
|
+
|
|
42
|
+
- due to [`a5ab08b`](https://github.com/tobymao/sqlglot/commit/a5ab08bbbbed61567913eda8a95ccc6094036027) - preserve SHA256/SHA512 digest semantics, render SHA2 as hex string *(PR [#7824](https://github.com/tobymao/sqlglot/pull/7824) by [@Pawansingh3889](https://github.com/Pawansingh3889))*:
|
|
43
|
+
|
|
44
|
+
preserve SHA256/SHA512 digest semantics, render SHA2 as hex string (#7824)
|
|
45
|
+
|
|
46
|
+
- due to [`e9b0140`](https://github.com/tobymao/sqlglot/commit/e9b014074b47ddb85aca93fac43d431e28add9f1) - normalization of synthesized output aliases *(PR [#7816](https://github.com/tobymao/sqlglot/pull/7816) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*:
|
|
47
|
+
|
|
48
|
+
normalization of synthesized output aliases (#7816)
|
|
49
|
+
|
|
50
|
+
- due to [`94e82ff`](https://github.com/tobymao/sqlglot/commit/94e82ffa116660838f11073395ecf9b3ecc6662a) - map native SHA512 to SHA2Digest, mirroring SHA256 *(PR [#7832](https://github.com/tobymao/sqlglot/pull/7832) by [@Pawansingh3889](https://github.com/Pawansingh3889))*:
|
|
51
|
+
|
|
52
|
+
map native SHA512 to SHA2Digest, mirroring SHA256 (#7832)
|
|
53
|
+
|
|
54
|
+
- due to [`c2fac5d`](https://github.com/tobymao/sqlglot/commit/c2fac5dd987118a04633f36e8bd0de5447ff694a) - annotate insert for mysql *(PR [#7836](https://github.com/tobymao/sqlglot/pull/7836) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
55
|
+
|
|
56
|
+
annotate insert for mysql (#7836)
|
|
57
|
+
|
|
58
|
+
- due to [`f37c71e`](https://github.com/tobymao/sqlglot/commit/f37c71e762321625350f16c1c358e12e28fa6380) - use a dedicated token for PROJECTION closes [#7837](https://github.com/tobymao/sqlglot/pull/7837) *(commit by [@georgesittas](https://github.com/georgesittas))*:
|
|
59
|
+
|
|
60
|
+
use a dedicated token for PROJECTION closes #7837
|
|
61
|
+
|
|
62
|
+
- due to [`0ce4063`](https://github.com/tobymao/sqlglot/commit/0ce4063ae9c2de1e05e4597d08b5e546c5d2a43c) - annotate hex for mysql *(PR [#7841](https://github.com/tobymao/sqlglot/pull/7841) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
63
|
+
|
|
64
|
+
annotate hex for mysql (#7841)
|
|
65
|
+
|
|
66
|
+
- due to [`da55602`](https://github.com/tobymao/sqlglot/commit/da55602dea6e70de54c500d072a0bff5ecfb3d6d) - delimited text incorrectly consumed by _match_texts, _match_text_seq *(PR [#7843](https://github.com/tobymao/sqlglot/pull/7843) by [@georgesittas](https://github.com/georgesittas))*:
|
|
67
|
+
|
|
68
|
+
delimited text incorrectly consumed by _match_texts, _match_text_seq (#7843)
|
|
69
|
+
|
|
70
|
+
- due to [`77c7814`](https://github.com/tobymao/sqlglot/commit/77c78147fc6a83bd4126c247c149df7205424010) - annotate type for databricks REGR_AVGY, REGR_COUNT, REGR_INTERCEPT, REGR_R2, REGR_SLOPE *(PR [#7820](https://github.com/tobymao/sqlglot/pull/7820) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*:
|
|
71
|
+
|
|
72
|
+
annotate type for databricks REGR_AVGY, REGR_COUNT, REGR_INTERCEPT, REGR_R2, REGR_SLOPE (#7820)
|
|
73
|
+
|
|
74
|
+
- due to [`ab77e9f`](https://github.com/tobymao/sqlglot/commit/ab77e9f0d78e945324bcbb857780a728378cc2d7) - annotate lpad for mysql *(PR [#7846](https://github.com/tobymao/sqlglot/pull/7846) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
75
|
+
|
|
76
|
+
annotate lpad for mysql (#7846)
|
|
77
|
+
|
|
78
|
+
- due to [`93d1659`](https://github.com/tobymao/sqlglot/commit/93d16591dbde9f548b3693f8a48ef2c73e8ff983) - annotate left for mysql *(PR [#7848](https://github.com/tobymao/sqlglot/pull/7848) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
79
|
+
|
|
80
|
+
annotate left for mysql (#7848)
|
|
81
|
+
|
|
82
|
+
- due to [`122b44f`](https://github.com/tobymao/sqlglot/commit/122b44f5836bd21a1bae5df3a388d397df180ca5) - merge window issue *(PR [#7845](https://github.com/tobymao/sqlglot/pull/7845) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*:
|
|
83
|
+
|
|
84
|
+
merge window issue (#7845)
|
|
85
|
+
|
|
86
|
+
- due to [`3ec3506`](https://github.com/tobymao/sqlglot/commit/3ec35068e1b54f338ebf6585cb1f8eab8c7a12eb) - annotate localtimestamp for mysql *(PR [#7850](https://github.com/tobymao/sqlglot/pull/7850) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
87
|
+
|
|
88
|
+
annotate localtimestamp for mysql (#7850)
|
|
89
|
+
|
|
90
|
+
- due to [`fdb1b86`](https://github.com/tobymao/sqlglot/commit/fdb1b86bcd86a79175d5a459a80e4d15785e8472) - annotate format for mysql *(PR [#7858](https://github.com/tobymao/sqlglot/pull/7858) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
91
|
+
|
|
92
|
+
annotate format for mysql (#7858)
|
|
93
|
+
|
|
94
|
+
- due to [`88a0143`](https://github.com/tobymao/sqlglot/commit/88a0143e486e78d273e5b760b022909f25f3bbbb) - annotate corr for clickhouse *(PR [#7860](https://github.com/tobymao/sqlglot/pull/7860) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*:
|
|
95
|
+
|
|
96
|
+
annotate corr for clickhouse (#7860)
|
|
97
|
+
|
|
98
|
+
- due to [`c2e935f`](https://github.com/tobymao/sqlglot/commit/c2e935f2fbe75f94a671187f3aa68710c210ce70) - preserve leading zeros in subsecond_precision *(PR [#7854](https://github.com/tobymao/sqlglot/pull/7854) by [@c-tonneslan](https://github.com/c-tonneslan))*:
|
|
99
|
+
|
|
100
|
+
preserve leading zeros in subsecond_precision (#7854)
|
|
101
|
+
|
|
102
|
+
- due to [`70c0a18`](https://github.com/tobymao/sqlglot/commit/70c0a18927a49df5a3df68c41ed45431922526f5) - `merge_subqueries` issue with numeric literal `ORDER BY` *(PR [#7856](https://github.com/tobymao/sqlglot/pull/7856) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*:
|
|
103
|
+
|
|
104
|
+
`merge_subqueries` issue with numeric literal `ORDER BY` (#7856)
|
|
105
|
+
|
|
106
|
+
- due to [`adb29c7`](https://github.com/tobymao/sqlglot/commit/adb29c73c5631992dfe903a379d5698aded073aa) - annotate minute for mysql *(PR [#7863](https://github.com/tobymao/sqlglot/pull/7863) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
107
|
+
|
|
108
|
+
annotate minute for mysql (#7863)
|
|
109
|
+
|
|
110
|
+
- due to [`79fb3af`](https://github.com/tobymao/sqlglot/commit/79fb3afaf644a540cd6dae567b2e4d4580db9131) - annotate right for mysql *(PR [#7862](https://github.com/tobymao/sqlglot/pull/7862) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
111
|
+
|
|
112
|
+
annotate right for mysql (#7862)
|
|
113
|
+
|
|
114
|
+
- due to [`21ebde8`](https://github.com/tobymao/sqlglot/commit/21ebde8eb11b324b2d8459a6bcc77e6db4ad6ea1) - type annotation for databricks REGR_SXX, REGR_SXY, REGR_SYY *(PR [#7851](https://github.com/tobymao/sqlglot/pull/7851) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*:
|
|
115
|
+
|
|
116
|
+
type annotation for databricks REGR_SXX, REGR_SXY, REGR_SYY (#7851)
|
|
117
|
+
|
|
118
|
+
- due to [`26123c1`](https://github.com/tobymao/sqlglot/commit/26123c1a1b05b5d1e469313b41a591bae833b326) - incorrect handling of negated (i)like operator closes [#7866](https://github.com/tobymao/sqlglot/pull/7866) *(PR [#7867](https://github.com/tobymao/sqlglot/pull/7867) by [@georgesittas](https://github.com/georgesittas))*:
|
|
119
|
+
|
|
120
|
+
incorrect handling of negated (i)like operator closes #7866 (#7867)
|
|
121
|
+
|
|
122
|
+
- due to [`e17ab30`](https://github.com/tobymao/sqlglot/commit/e17ab302340feee60b097b1732f91f5d3d348875) - evict mutated projections from the annotator cache *(PR [#7868](https://github.com/tobymao/sqlglot/pull/7868) by [@georgesittas](https://github.com/georgesittas))*:
|
|
123
|
+
|
|
124
|
+
evict mutated projections from the annotator cache (#7868)
|
|
125
|
+
|
|
126
|
+
- due to [`8c7941f`](https://github.com/tobymao/sqlglot/commit/8c7941fb1e87f2b6fb4ea50477c73f86311d591d) - handle escaped quote before closing multi-char delimiter, preserve escapes in raw strings *(PR [#7870](https://github.com/tobymao/sqlglot/pull/7870) by [@georgesittas](https://github.com/georgesittas))*:
|
|
127
|
+
|
|
128
|
+
handle escaped quote before closing multi-char delimiter, preserve escapes in raw strings (#7870)
|
|
129
|
+
|
|
130
|
+
- due to [`f617f30`](https://github.com/tobymao/sqlglot/commit/f617f30cc4dea9c35f867ca6462279f1e04b642b) - type annotation for databricks RINT *(PR [#7869](https://github.com/tobymao/sqlglot/pull/7869) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*:
|
|
131
|
+
|
|
132
|
+
type annotation for databricks RINT (#7869)
|
|
133
|
+
|
|
134
|
+
- due to [`a62c4d9`](https://github.com/tobymao/sqlglot/commit/a62c4d9aa562ff02776199c070296bd1d952c025) - annotate reverse for mysql *(PR [#7861](https://github.com/tobymao/sqlglot/pull/7861) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
135
|
+
|
|
136
|
+
annotate reverse for mysql (#7861)
|
|
137
|
+
|
|
138
|
+
- due to [`6581f8c`](https://github.com/tobymao/sqlglot/commit/6581f8c38b8d4812b6a4287b51aa971f81458470) - parse month/day without leading 0 *(PR [#7773](https://github.com/tobymao/sqlglot/pull/7773) by [@deepyaman](https://github.com/deepyaman))*:
|
|
139
|
+
|
|
140
|
+
parse month/day without leading 0 (#7773)
|
|
141
|
+
|
|
142
|
+
- due to [`0a374bf`](https://github.com/tobymao/sqlglot/commit/0a374bf421f874d4c0618a2c710aaca14086c74f) - simplify lax/strict %m, %d transpilation to hive hierarchy *(PR [#7873](https://github.com/tobymao/sqlglot/pull/7873) by [@georgesittas](https://github.com/georgesittas))*:
|
|
143
|
+
|
|
144
|
+
simplify lax/strict %m, %d transpilation to hive hierarchy (#7873)
|
|
145
|
+
|
|
146
|
+
- due to [`559b2c1`](https://github.com/tobymao/sqlglot/commit/559b2c1e0dfb3be5c816d9d7976615023753f4ad) - transpile `DATEDIFF` with day from MySQL correctly *(commit by [@georgesittas](https://github.com/georgesittas))*:
|
|
147
|
+
|
|
148
|
+
transpile `DATEDIFF` with day from MySQL correctly
|
|
149
|
+
|
|
150
|
+
- due to [`91a284b`](https://github.com/tobymao/sqlglot/commit/91a284b7c55f11cf7454b405a6458ea39379e7ff) - parse camelCase dateTrunc, not just date_trunc [CLAUDE] *(PR [#7876](https://github.com/tobymao/sqlglot/pull/7876) by [@chuenchen309](https://github.com/chuenchen309))*:
|
|
151
|
+
|
|
152
|
+
parse camelCase dateTrunc, not just date_trunc [CLAUDE] (#7876)
|
|
153
|
+
|
|
154
|
+
- due to [`5e08bb9`](https://github.com/tobymao/sqlglot/commit/5e08bb934c3441a97e908594a045cae6b8c65904) - preserve UNPIVOT IN-list literal labels [CLAUDE] *(PR [#7877](https://github.com/tobymao/sqlglot/pull/7877) by [@chuenchen309](https://github.com/chuenchen309))*:
|
|
155
|
+
|
|
156
|
+
preserve UNPIVOT IN-list literal labels [CLAUDE] (#7877)
|
|
157
|
+
|
|
158
|
+
- due to [`618804c`](https://github.com/tobymao/sqlglot/commit/618804ce12b09b563147a31c37734725928f34c6) - resolve NATURAL JOIN common columns in qualify [CLAUDE] *(PR [#7880](https://github.com/tobymao/sqlglot/pull/7880) by [@chuenchen309](https://github.com/chuenchen309))*:
|
|
159
|
+
|
|
160
|
+
resolve NATURAL JOIN common columns in qualify [CLAUDE] (#7880)
|
|
161
|
+
|
|
162
|
+
- due to [`72a125e`](https://github.com/tobymao/sqlglot/commit/72a125e101a199e72d24498c8211cafba552ef05) - type annotation for databricks RTRIM, SEARCH *(PR [#7886](https://github.com/tobymao/sqlglot/pull/7886) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*:
|
|
163
|
+
|
|
164
|
+
type annotation for databricks RTRIM, SEARCH (#7886)
|
|
165
|
+
|
|
166
|
+
- due to [`2f9c628`](https://github.com/tobymao/sqlglot/commit/2f9c6280b7942f130aca5c70b45e732a5e904f13) - improve generator of FILTER() *(PR [#7889](https://github.com/tobymao/sqlglot/pull/7889) by [@georgesittas](https://github.com/georgesittas))*:
|
|
167
|
+
|
|
168
|
+
improve generator of FILTER() (#7889)
|
|
169
|
+
|
|
170
|
+
- due to [`a85eeff`](https://github.com/tobymao/sqlglot/commit/a85eeff2124af1279e6979c970a6d1ae175adb07) - properly support VALUES as a set operation operand *(PR [#7897](https://github.com/tobymao/sqlglot/pull/7897) by [@georgesittas](https://github.com/georgesittas))*:
|
|
171
|
+
|
|
172
|
+
properly support VALUES as a set operation operand (#7897)
|
|
173
|
+
|
|
174
|
+
- due to [`812294b`](https://github.com/tobymao/sqlglot/commit/812294bfce534f3a70c9db4b275178c05e36a786) - annotate decode for duckdb *(PR [#7910](https://github.com/tobymao/sqlglot/pull/7910) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*:
|
|
175
|
+
|
|
176
|
+
annotate decode for duckdb (#7910)
|
|
177
|
+
|
|
178
|
+
- due to [`ae702b1`](https://github.com/tobymao/sqlglot/commit/ae702b184d6b67beaa3cc7adfcf8a82da7a306b2) - don't push predicates into a subquery with LIMIT/OFFSET [CLAUDE] *(PR [#7901](https://github.com/tobymao/sqlglot/pull/7901) by [@chuenchen309](https://github.com/chuenchen309))*:
|
|
179
|
+
|
|
180
|
+
don't push predicates into a subquery with LIMIT/OFFSET [CLAUDE] (#7901)
|
|
181
|
+
|
|
182
|
+
- due to [`199547a`](https://github.com/tobymao/sqlglot/commit/199547a5304449f2f4b061e15caf63dc52964704) - keep columns a recursive CTE reads from itself [CLAUDE] *(PR [#7899](https://github.com/tobymao/sqlglot/pull/7899) by [@isaka1022](https://github.com/isaka1022))*:
|
|
183
|
+
|
|
184
|
+
keep columns a recursive CTE reads from itself [CLAUDE] (#7899)
|
|
185
|
+
|
|
186
|
+
- due to [`24d6d73`](https://github.com/tobymao/sqlglot/commit/24d6d735c1ae3607ee3a0f29fe87f41e1ea64d74) - respect date part boundary semantics in DATE_DIFF transpilation *(PR [#7911](https://github.com/tobymao/sqlglot/pull/7911) by [@georgesittas](https://github.com/georgesittas))*:
|
|
187
|
+
|
|
188
|
+
respect date part boundary semantics in DATE_DIFF transpilation (#7911)
|
|
189
|
+
|
|
190
|
+
- due to [`da43c5c`](https://github.com/tobymao/sqlglot/commit/da43c5c14d196faa03e2e4d0fcc110d08ee58ef1) - annotate truncate for mysql *(PR [#7914](https://github.com/tobymao/sqlglot/pull/7914) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
191
|
+
|
|
192
|
+
annotate truncate for mysql (#7914)
|
|
193
|
+
|
|
194
|
+
- due to [`b110593`](https://github.com/tobymao/sqlglot/commit/b1105933ba90fb9cb6dfc2c60bbf090f4c742b89) - annotate encode for duckdb *(PR [#7915](https://github.com/tobymao/sqlglot/pull/7915) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*:
|
|
195
|
+
|
|
196
|
+
annotate encode for duckdb (#7915)
|
|
197
|
+
|
|
198
|
+
- due to [`755e95e`](https://github.com/tobymao/sqlglot/commit/755e95e48f82f4abfacd3812f9c2371cc2ad1d3d) - preserve `ILIKE` roundtrip *(commit by [@georgesittas](https://github.com/georgesittas))*:
|
|
199
|
+
|
|
200
|
+
preserve `ILIKE` roundtrip
|
|
201
|
+
|
|
202
|
+
- due to [`c933fe3`](https://github.com/tobymao/sqlglot/commit/c933fe330472ae216786eff3837bcc5233ab6d08) - canonicalize numeric-literal GROUP BY to positional ordinal on merge *(PR [#7883](https://github.com/tobymao/sqlglot/pull/7883) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*:
|
|
203
|
+
|
|
204
|
+
canonicalize numeric-literal GROUP BY to positional ordinal on merge (#7883)
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
### :sparkles: New Features
|
|
208
|
+
- [`58f5bf9`](https://github.com/tobymao/sqlglot/commit/58f5bf9b40dda34784bcb2d3bf0a04f02490de12) - **optimizer**: databricks type annotation for REGEXP_COUNT, REGEXP_EXTRACT_ALL *(PR [#7797](https://github.com/tobymao/sqlglot/pull/7797) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
|
|
209
|
+
- [`fd6d4d6`](https://github.com/tobymao/sqlglot/commit/fd6d4d61c25e7918118fc22c5579098a86a58e10) - **optimizer**: annotate repeat function *(PR [#7803](https://github.com/tobymao/sqlglot/pull/7803) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
210
|
+
- [`cbc9206`](https://github.com/tobymao/sqlglot/commit/cbc9206e0603ffa7d0e2e72c0bf84ebc77cdb8e5) - **optimizer**: annotate `to_json` for hive-like dialects *(PR [#7814](https://github.com/tobymao/sqlglot/pull/7814) by [@vishvambhar-ranoshe](https://github.com/vishvambhar-ranoshe))*
|
|
211
|
+
- [`abdac97`](https://github.com/tobymao/sqlglot/commit/abdac971b68f0914801bda4784860c04258a22e8) - **typing**: annotate str_to_map for hive-like dialects *(PR [#7822](https://github.com/tobymao/sqlglot/pull/7822) by [@vishvambhar-ranoshe](https://github.com/vishvambhar-ranoshe))*
|
|
212
|
+
- [`79d1061`](https://github.com/tobymao/sqlglot/commit/79d1061ca838101ec6baaf399a8e7fd3410df926) - **typing**: add databricks type inference for REGEXP_INSTR, REGEXP_LIKE, REGEXP_SUBSTR, REGR_AVGX *(PR [#7815](https://github.com/tobymao/sqlglot/pull/7815) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
|
|
213
|
+
- [`c2fac5d`](https://github.com/tobymao/sqlglot/commit/c2fac5dd987118a04633f36e8bd0de5447ff694a) - **optimizer**: annotate insert for mysql *(PR [#7836](https://github.com/tobymao/sqlglot/pull/7836) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
214
|
+
- [`ce1aab9`](https://github.com/tobymao/sqlglot/commit/ce1aab9f5fbee6207017ff5f429e2663154f0446) - **duckdb**: transpile snowflake count_if all-null semantics closes [#7833](https://github.com/tobymao/sqlglot/pull/7833) *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
215
|
+
- [`0ce4063`](https://github.com/tobymao/sqlglot/commit/0ce4063ae9c2de1e05e4597d08b5e546c5d2a43c) - **optimizer**: annotate hex for mysql *(PR [#7841](https://github.com/tobymao/sqlglot/pull/7841) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
216
|
+
- [`ab77e9f`](https://github.com/tobymao/sqlglot/commit/ab77e9f0d78e945324bcbb857780a728378cc2d7) - **optimizer**: annotate lpad for mysql *(PR [#7846](https://github.com/tobymao/sqlglot/pull/7846) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
217
|
+
- [`93d1659`](https://github.com/tobymao/sqlglot/commit/93d16591dbde9f548b3693f8a48ef2c73e8ff983) - **optimizer**: annotate left for mysql *(PR [#7848](https://github.com/tobymao/sqlglot/pull/7848) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
218
|
+
- [`3ec3506`](https://github.com/tobymao/sqlglot/commit/3ec35068e1b54f338ebf6585cb1f8eab8c7a12eb) - **optimizer**: annotate localtimestamp for mysql *(PR [#7850](https://github.com/tobymao/sqlglot/pull/7850) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
219
|
+
- [`fdb1b86`](https://github.com/tobymao/sqlglot/commit/fdb1b86bcd86a79175d5a459a80e4d15785e8472) - **optimizer**: annotate format for mysql *(PR [#7858](https://github.com/tobymao/sqlglot/pull/7858) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
220
|
+
- [`88a0143`](https://github.com/tobymao/sqlglot/commit/88a0143e486e78d273e5b760b022909f25f3bbbb) - **optimizer**: annotate corr for clickhouse *(PR [#7860](https://github.com/tobymao/sqlglot/pull/7860) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*
|
|
221
|
+
- [`adb29c7`](https://github.com/tobymao/sqlglot/commit/adb29c73c5631992dfe903a379d5698aded073aa) - **optimizer**: annotate minute for mysql *(PR [#7863](https://github.com/tobymao/sqlglot/pull/7863) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
222
|
+
- [`79fb3af`](https://github.com/tobymao/sqlglot/commit/79fb3afaf644a540cd6dae567b2e4d4580db9131) - **optimizer**: annotate right for mysql *(PR [#7862](https://github.com/tobymao/sqlglot/pull/7862) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
223
|
+
- [`21ebde8`](https://github.com/tobymao/sqlglot/commit/21ebde8eb11b324b2d8459a6bcc77e6db4ad6ea1) - **optimizer**: type annotation for databricks REGR_SXX, REGR_SXY, REGR_SYY *(PR [#7851](https://github.com/tobymao/sqlglot/pull/7851) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
|
|
224
|
+
- [`f617f30`](https://github.com/tobymao/sqlglot/commit/f617f30cc4dea9c35f867ca6462279f1e04b642b) - **optimizer**: type annotation for databricks RINT *(PR [#7869](https://github.com/tobymao/sqlglot/pull/7869) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
|
|
225
|
+
- [`a62c4d9`](https://github.com/tobymao/sqlglot/commit/a62c4d9aa562ff02776199c070296bd1d952c025) - **optimizer**: annotate reverse for mysql *(PR [#7861](https://github.com/tobymao/sqlglot/pull/7861) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
226
|
+
- [`31bc57e`](https://github.com/tobymao/sqlglot/commit/31bc57e7f14bc5ff97527e8027463d47d98a17fb) - **dremio**: support AT SNAPSHOT and AT TIMESTAMP time travel [CLAUDE] *(PR [#7888](https://github.com/tobymao/sqlglot/pull/7888) by [@nruia-penn](https://github.com/nruia-penn))*
|
|
227
|
+
- [`72a125e`](https://github.com/tobymao/sqlglot/commit/72a125e101a199e72d24498c8211cafba552ef05) - **optimizer**: type annotation for databricks RTRIM, SEARCH *(PR [#7886](https://github.com/tobymao/sqlglot/pull/7886) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
|
|
228
|
+
- [`19983a7`](https://github.com/tobymao/sqlglot/commit/19983a7b364aa0cb67943c1228215c5919f834d0) - **databricks**: support timeseries pk constraints closes [#7887](https://github.com/tobymao/sqlglot/pull/7887) *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
229
|
+
- [`a60ec81`](https://github.com/tobymao/sqlglot/commit/a60ec8136fc3ffc7ef5c15c0348dc189a0fd1048) - dax scaffolding *(PR [#7890](https://github.com/tobymao/sqlglot/pull/7890) by [@tobymao](https://github.com/tobymao))*
|
|
230
|
+
- [`812294b`](https://github.com/tobymao/sqlglot/commit/812294bfce534f3a70c9db4b275178c05e36a786) - **optimizer**: annotate decode for duckdb *(PR [#7910](https://github.com/tobymao/sqlglot/pull/7910) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*
|
|
231
|
+
- [`da43c5c`](https://github.com/tobymao/sqlglot/commit/da43c5c14d196faa03e2e4d0fcc110d08ee58ef1) - **optimizer**: annotate truncate for mysql *(PR [#7914](https://github.com/tobymao/sqlglot/pull/7914) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
232
|
+
- [`b110593`](https://github.com/tobymao/sqlglot/commit/b1105933ba90fb9cb6dfc2c60bbf090f4c742b89) - **optimizer**: annotate encode for duckdb *(PR [#7915](https://github.com/tobymao/sqlglot/pull/7915) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*
|
|
233
|
+
|
|
234
|
+
### :bug: Bug Fixes
|
|
235
|
+
- [`93802ce`](https://github.com/tobymao/sqlglot/commit/93802ce4d0c8c0b960be6b7b84785fa3556c0310) - **optimizer**: annotate type for REGEXP_REPLACE hive chain *(PR [#7804](https://github.com/tobymao/sqlglot/pull/7804) by [@vishvambhar-ranoshe](https://github.com/vishvambhar-ranoshe))*
|
|
236
|
+
- [`287cc39`](https://github.com/tobymao/sqlglot/commit/287cc3916ff8f3d851ad91ac58eae5e765fd360b) - **parser**: prioritize parsing parenthesized expressions as Tuple when multi-expression CSV exists *(PR [#7807](https://github.com/tobymao/sqlglot/pull/7807) by [@Hasnaathussain](https://github.com/Hasnaathussain))*
|
|
237
|
+
- :arrow_lower_right: *fixes issue [#7805](https://github.com/tobymao/sqlglot/issues/7805) opened by [@VLDB2026](https://github.com/VLDB2026)*
|
|
238
|
+
- [`4e271fb`](https://github.com/tobymao/sqlglot/commit/4e271fbe3e24223bb7761b46a89b3405a3b4df09) - **duckdb**: default missing year to 1970 for BigQuery PARSE_DATE/PARSE_TIMESTAMP *(PR [#7800](https://github.com/tobymao/sqlglot/pull/7800) by [@greymoth-jp](https://github.com/greymoth-jp))*
|
|
239
|
+
- [`cf7e4bf`](https://github.com/tobymao/sqlglot/commit/cf7e4bf4a57d331e4a6e5f4933cb7daf0e503c3b) - **parser**: parse chained range operators (IN/LIKE) instead of raising [CLAUDE] *(PR [#7809](https://github.com/tobymao/sqlglot/pull/7809) by [@jichaowang02-lang](https://github.com/jichaowang02-lang))*
|
|
240
|
+
- :arrow_lower_right: *fixes issue [#7806](https://github.com/tobymao/sqlglot/issues/7806) opened by [@VLDB2026](https://github.com/VLDB2026)*
|
|
241
|
+
- [`e17d918`](https://github.com/tobymao/sqlglot/commit/e17d91898457a2e3fcdb3f4c4b00dad79772dd7e) - **trino**: transpile FROM_ISO8601_TIMESTAMP_NANOS to cast *(PR [#7808](https://github.com/tobymao/sqlglot/pull/7808) by [@greymoth-jp](https://github.com/greymoth-jp))*
|
|
242
|
+
- [`85fea2c`](https://github.com/tobymao/sqlglot/commit/85fea2cf4375de4fd99c5d036d8ccfac2965a753) - **postgres**: more robust date formats *(PR [#7813](https://github.com/tobymao/sqlglot/pull/7813) by [@geooo109](https://github.com/geooo109))*
|
|
243
|
+
- [`52b8f4a`](https://github.com/tobymao/sqlglot/commit/52b8f4a93fcb7a8baffeba1727dc3e0ebcb88525) - **hive**: PARSE_JSON and TO_JSON roundtrip *(PR [#7818](https://github.com/tobymao/sqlglot/pull/7818) by [@geooo109](https://github.com/geooo109))*
|
|
244
|
+
- [`ed70375`](https://github.com/tobymao/sqlglot/commit/ed70375d5317c8075c7deab26a3197ae2df8d607) - **optimizer**: incorrect canonical names for certain qualified star queries *(PR [#7819](https://github.com/tobymao/sqlglot/pull/7819) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
|
|
245
|
+
- [`aeb2711`](https://github.com/tobymao/sqlglot/commit/aeb2711f3be05bdcfa39a5e7479a0bedb0ca03f7) - **clickhouse**: parse regexp extract (and variants) correctly *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
246
|
+
- [`faf15e6`](https://github.com/tobymao/sqlglot/commit/faf15e65e9059248c82564ab29de2bd4c492392e) - **generator**: emit LIMIT 1 for countless FETCH FIRST ROWS ONLY CLAUDE *(PR [#7825](https://github.com/tobymao/sqlglot/pull/7825) by [@gaoflow](https://github.com/gaoflow))*
|
|
247
|
+
- [`a66104f`](https://github.com/tobymao/sqlglot/commit/a66104f52aca450087524f84b76e29173971e656) - **bigquery**: mypyc generation bug due to wrong type hints closes [#7826](https://github.com/tobymao/sqlglot/pull/7826) *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
248
|
+
- [`b29ef61`](https://github.com/tobymao/sqlglot/commit/b29ef618b5db539f7bd4685e49b72ea08730daa5) - true/null in t.true/null should be identifiers *(PR [#7831](https://github.com/tobymao/sqlglot/pull/7831) by [@georgesittas](https://github.com/georgesittas))*
|
|
249
|
+
- [`a5ab08b`](https://github.com/tobymao/sqlglot/commit/a5ab08bbbbed61567913eda8a95ccc6094036027) - **presto**: preserve SHA256/SHA512 digest semantics, render SHA2 as hex string *(PR [#7824](https://github.com/tobymao/sqlglot/pull/7824) by [@Pawansingh3889](https://github.com/Pawansingh3889))*
|
|
250
|
+
- [`e9b0140`](https://github.com/tobymao/sqlglot/commit/e9b014074b47ddb85aca93fac43d431e28add9f1) - **optimizer**: normalization of synthesized output aliases *(PR [#7816](https://github.com/tobymao/sqlglot/pull/7816) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
|
|
251
|
+
- [`94e82ff`](https://github.com/tobymao/sqlglot/commit/94e82ffa116660838f11073395ecf9b3ecc6662a) - **bigquery**: map native SHA512 to SHA2Digest, mirroring SHA256 *(PR [#7832](https://github.com/tobymao/sqlglot/pull/7832) by [@Pawansingh3889](https://github.com/Pawansingh3889))*
|
|
252
|
+
- [`bcc8b1c`](https://github.com/tobymao/sqlglot/commit/bcc8b1cd48593a7b8dfbabf43a5d9710eae19117) - **tsql**: parse EXEC return status parameter (CLAUDE) *(PR [#7835](https://github.com/tobymao/sqlglot/pull/7835) by [@AnayGarodia](https://github.com/AnayGarodia))*
|
|
253
|
+
- :arrow_lower_right: *fixes issue [#7834](https://github.com/tobymao/sqlglot/issues/7834) opened by [@guilherme-wisdom](https://github.com/guilherme-wisdom)*
|
|
254
|
+
- [`f37c71e`](https://github.com/tobymao/sqlglot/commit/f37c71e762321625350f16c1c358e12e28fa6380) - **clickhouse**: use a dedicated token for PROJECTION closes [#7837](https://github.com/tobymao/sqlglot/pull/7837) *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
255
|
+
- [`da55602`](https://github.com/tobymao/sqlglot/commit/da55602dea6e70de54c500d072a0bff5ecfb3d6d) - **parser**: delimited text incorrectly consumed by _match_texts, _match_text_seq *(PR [#7843](https://github.com/tobymao/sqlglot/pull/7843) by [@georgesittas](https://github.com/georgesittas))*
|
|
256
|
+
- [`77c7814`](https://github.com/tobymao/sqlglot/commit/77c78147fc6a83bd4126c247c149df7205424010) - **optimizer**: annotate type for databricks REGR_AVGY, REGR_COUNT, REGR_INTERCEPT, REGR_R2, REGR_SLOPE *(PR [#7820](https://github.com/tobymao/sqlglot/pull/7820) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
|
|
257
|
+
- [`122b44f`](https://github.com/tobymao/sqlglot/commit/122b44f5836bd21a1bae5df3a388d397df180ca5) - **optimizer**: merge window issue *(PR [#7845](https://github.com/tobymao/sqlglot/pull/7845) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
|
|
258
|
+
- [`c2e935f`](https://github.com/tobymao/sqlglot/commit/c2e935f2fbe75f94a671187f3aa68710c210ce70) - preserve leading zeros in subsecond_precision *(PR [#7854](https://github.com/tobymao/sqlglot/pull/7854) by [@c-tonneslan](https://github.com/c-tonneslan))*
|
|
259
|
+
- [`70c0a18`](https://github.com/tobymao/sqlglot/commit/70c0a18927a49df5a3df68c41ed45431922526f5) - **optimizer**: `merge_subqueries` issue with numeric literal `ORDER BY` *(PR [#7856](https://github.com/tobymao/sqlglot/pull/7856) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
|
|
260
|
+
- [`2d86a76`](https://github.com/tobymao/sqlglot/commit/2d86a76bc8db1bdf51c27b30f033d4623452b3df) - **bigquery**: transpile single projection GENERATE_SERIES from postgres *(PR [#7855](https://github.com/tobymao/sqlglot/pull/7855) by [@geooo109](https://github.com/geooo109))*
|
|
261
|
+
- :arrow_lower_right: *fixes issue [#7852](https://github.com/tobymao/sqlglot/issues/7852) opened by [@sb335c](https://github.com/sb335c)*
|
|
262
|
+
- [`26123c1`](https://github.com/tobymao/sqlglot/commit/26123c1a1b05b5d1e469313b41a591bae833b326) - **optimizer**: incorrect handling of negated (i)like operator closes [#7866](https://github.com/tobymao/sqlglot/pull/7866) *(PR [#7867](https://github.com/tobymao/sqlglot/pull/7867) by [@georgesittas](https://github.com/georgesittas))*
|
|
263
|
+
- [`e17ab30`](https://github.com/tobymao/sqlglot/commit/e17ab302340feee60b097b1732f91f5d3d348875) - **optimizer**: evict mutated projections from the annotator cache *(PR [#7868](https://github.com/tobymao/sqlglot/pull/7868) by [@georgesittas](https://github.com/georgesittas))*
|
|
264
|
+
- [`8c7941f`](https://github.com/tobymao/sqlglot/commit/8c7941fb1e87f2b6fb4ea50477c73f86311d591d) - **tokenizer**: handle escaped quote before closing multi-char delimiter, preserve escapes in raw strings *(PR [#7870](https://github.com/tobymao/sqlglot/pull/7870) by [@georgesittas](https://github.com/georgesittas))*
|
|
265
|
+
- [`6581f8c`](https://github.com/tobymao/sqlglot/commit/6581f8c38b8d4812b6a4287b51aa971f81458470) - **hive**: parse month/day without leading 0 *(PR [#7773](https://github.com/tobymao/sqlglot/pull/7773) by [@deepyaman](https://github.com/deepyaman))*
|
|
266
|
+
- [`7099d89`](https://github.com/tobymao/sqlglot/commit/7099d896d11f5d146afa97bb4844d7703082ade6) - **optimizer**: incorrect merge with literal alias collision *(PR [#7847](https://github.com/tobymao/sqlglot/pull/7847) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
|
|
267
|
+
- [`559b2c1`](https://github.com/tobymao/sqlglot/commit/559b2c1e0dfb3be5c816d9d7976615023753f4ad) - **postgres**: transpile `DATEDIFF` with day from MySQL correctly *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
268
|
+
- [`91a284b`](https://github.com/tobymao/sqlglot/commit/91a284b7c55f11cf7454b405a6458ea39379e7ff) - **clickhouse**: parse camelCase dateTrunc, not just date_trunc [CLAUDE] *(PR [#7876](https://github.com/tobymao/sqlglot/pull/7876) by [@chuenchen309](https://github.com/chuenchen309))*
|
|
269
|
+
- [`5e08bb9`](https://github.com/tobymao/sqlglot/commit/5e08bb934c3441a97e908594a045cae6b8c65904) - **oracle**: preserve UNPIVOT IN-list literal labels [CLAUDE] *(PR [#7877](https://github.com/tobymao/sqlglot/pull/7877) by [@chuenchen309](https://github.com/chuenchen309))*
|
|
270
|
+
- [`a7058d6`](https://github.com/tobymao/sqlglot/commit/a7058d6976e3a2439f55b9cfa208d03a4b888522) - **oracle**: unrecognized WITH hangs the parser [CLAUDE] *(PR [#7881](https://github.com/tobymao/sqlglot/pull/7881) by [@chuenchen309](https://github.com/chuenchen309))*
|
|
271
|
+
- [`618804c`](https://github.com/tobymao/sqlglot/commit/618804ce12b09b563147a31c37734725928f34c6) - **optimizer**: resolve NATURAL JOIN common columns in qualify [CLAUDE] *(PR [#7880](https://github.com/tobymao/sqlglot/pull/7880) by [@chuenchen309](https://github.com/chuenchen309))*
|
|
272
|
+
- :arrow_lower_right: *fixes issue [#7879](https://github.com/tobymao/sqlglot/issues/7879) opened by [@chuenchen309](https://github.com/chuenchen309)*
|
|
273
|
+
- [`b2c07a1`](https://github.com/tobymao/sqlglot/commit/b2c07a1ee4ea48fae2b0f1a08407d253cc798b9e) - **snowflake**: wrap FILTER condition inside DISTINCT/ORDER BY args [CLAUDE] *(PR [#7884](https://github.com/tobymao/sqlglot/pull/7884) by [@chuenchen309](https://github.com/chuenchen309))*
|
|
274
|
+
- [`2814421`](https://github.com/tobymao/sqlglot/commit/281442123ca0f617b1d877e8ebeacc4a7ad3cd2c) - **snowflake**: parse AUTOINCREMENT parts independently [CLAUDE] *(PR [#7885](https://github.com/tobymao/sqlglot/pull/7885) by [@chuenchen309](https://github.com/chuenchen309))*
|
|
275
|
+
- [`a85eeff`](https://github.com/tobymao/sqlglot/commit/a85eeff2124af1279e6979c970a6d1ae175adb07) - properly support VALUES as a set operation operand *(PR [#7897](https://github.com/tobymao/sqlglot/pull/7897) by [@georgesittas](https://github.com/georgesittas))*
|
|
276
|
+
- [`a247168`](https://github.com/tobymao/sqlglot/commit/a247168f955fda0a09915efc53e90af7eb4337b8) - use `.this` and `.expression` instead of `.left` and `.right` in more places *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
277
|
+
- [`a034db7`](https://github.com/tobymao/sqlglot/commit/a034db7f6d91626f044152245bc284776a154c6f) - **sqlite**: unwrap `INTERVAL` amount in `DATE_ADD` [CLAUDE] *(PR [#7908](https://github.com/tobymao/sqlglot/pull/7908) by [@chuenchen309](https://github.com/chuenchen309))*
|
|
278
|
+
- [`ae702b1`](https://github.com/tobymao/sqlglot/commit/ae702b184d6b67beaa3cc7adfcf8a82da7a306b2) - **optimizer**: don't push predicates into a subquery with LIMIT/OFFSET [CLAUDE] *(PR [#7901](https://github.com/tobymao/sqlglot/pull/7901) by [@chuenchen309](https://github.com/chuenchen309))*
|
|
279
|
+
- [`655876f`](https://github.com/tobymao/sqlglot/commit/655876fce7d7d26ef30f9df6d1fca60f03c36d80) - **optimizer**: don't push predicates into a subquery with QUALIFY *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
280
|
+
- [`199547a`](https://github.com/tobymao/sqlglot/commit/199547a5304449f2f4b061e15caf63dc52964704) - **optimizer**: keep columns a recursive CTE reads from itself [CLAUDE] *(PR [#7899](https://github.com/tobymao/sqlglot/pull/7899) by [@isaka1022](https://github.com/isaka1022))*
|
|
281
|
+
- [`47e255d`](https://github.com/tobymao/sqlglot/commit/47e255dda3a328277b7dbb28503f200aea26a429) - **snowflake**: rewrite COUNT(*) FILTER to COUNT_IF [CLAUDE] *(PR [#7900](https://github.com/tobymao/sqlglot/pull/7900) by [@chuenchen309](https://github.com/chuenchen309))*
|
|
282
|
+
- [`e4d2ea5`](https://github.com/tobymao/sqlglot/commit/e4d2ea50bdbbe8c38a2d69b43810bc21d48638b3) - **presto**: TIMESTAMP_DIFF/DATETIME_DIFF transpilation to Presto/Trino [CLAUDE] *(PR [#7895](https://github.com/tobymao/sqlglot/pull/7895) by [@winklemad](https://github.com/winklemad))*
|
|
283
|
+
- [`1bc99a9`](https://github.com/tobymao/sqlglot/commit/1bc99a9013e1cd942ad01203db4f6b47f0420777) - **snowflake**: more robust transpilation for duckdb COUNT(*) FILTER (WHERE) *(commit by [@geooo109](https://github.com/geooo109))*
|
|
284
|
+
- [`24d6d73`](https://github.com/tobymao/sqlglot/commit/24d6d735c1ae3607ee3a0f29fe87f41e1ea64d74) - **presto**: respect date part boundary semantics in DATE_DIFF transpilation *(PR [#7911](https://github.com/tobymao/sqlglot/pull/7911) by [@georgesittas](https://github.com/georgesittas))*
|
|
285
|
+
- [`6d29878`](https://github.com/tobymao/sqlglot/commit/6d2987879753e01683b4dc232df7c488d10a9aa2) - **drill**: generate native `ILIKE` function instead of invalid infix operator *(PR [#7913](https://github.com/tobymao/sqlglot/pull/7913) by [@vidigoat](https://github.com/vidigoat))*
|
|
286
|
+
- [`a1e3338`](https://github.com/tobymao/sqlglot/commit/a1e3338e31354496a3ef3bed5f3c5e0c4df4e0f6) - **postgres**: support unicode escape string literals U&'...' closes [#7898](https://github.com/tobymao/sqlglot/pull/7898) *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
287
|
+
- [`169b836`](https://github.com/tobymao/sqlglot/commit/169b8364b643c4285dcf073aa2f357c5b40831a6) - **duckdb**: position table alias correctly when combined with time-travel syntax closes [#7916](https://github.com/tobymao/sqlglot/pull/7916) *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
288
|
+
- [`c933fe3`](https://github.com/tobymao/sqlglot/commit/c933fe330472ae216786eff3837bcc5233ab6d08) - **optimizer**: canonicalize numeric-literal GROUP BY to positional ordinal on merge *(PR [#7883](https://github.com/tobymao/sqlglot/pull/7883) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
|
|
289
|
+
|
|
290
|
+
### :zap: Performance Improvements
|
|
291
|
+
- [`693b3e3`](https://github.com/tobymao/sqlglot/commit/693b3e3efa5f6e5ec547e29a79cbbe2b84971f21) - **optimizer**: memoize UNNEST/EXPLODE column-type resolution [CLAUDE] *(PR [#7823](https://github.com/tobymao/sqlglot/pull/7823) by [@dvryaboy](https://github.com/dvryaboy))*
|
|
292
|
+
- :arrow_lower_right: *addresses issue [#7821](https://github.com/tobymao/sqlglot/issues/7821) opened by [@dvryaboy](https://github.com/dvryaboy)*
|
|
293
|
+
- [`e58f3cf`](https://github.com/tobymao/sqlglot/commit/e58f3cfb42d6da02a3c0b77f3bb5d01c0ceafd8f) - **tokens**: remove per-thread tokenizer core cache *(commit by [@tobymao](https://github.com/tobymao))*
|
|
294
|
+
|
|
295
|
+
### :recycle: Refactors
|
|
296
|
+
- [`0a374bf`](https://github.com/tobymao/sqlglot/commit/0a374bf421f874d4c0618a2c710aaca14086c74f) - simplify lax/strict %m, %d transpilation to hive hierarchy *(PR [#7873](https://github.com/tobymao/sqlglot/pull/7873) by [@georgesittas](https://github.com/georgesittas))*
|
|
297
|
+
- [`2f9c628`](https://github.com/tobymao/sqlglot/commit/2f9c6280b7942f130aca5c70b45e732a5e904f13) - **snowflake**: improve generator of FILTER() *(PR [#7889](https://github.com/tobymao/sqlglot/pull/7889) by [@georgesittas](https://github.com/georgesittas))*
|
|
298
|
+
- [`bbb376d`](https://github.com/tobymao/sqlglot/commit/bbb376d26d68a27d047774516d00d2ab65eb0397) - tighten the self-referencing cte check in projection pushdown *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
299
|
+
- [`755e95e`](https://github.com/tobymao/sqlglot/commit/755e95e48f82f4abfacd3812f9c2371cc2ad1d3d) - **druid**: preserve `ILIKE` roundtrip *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
300
|
+
|
|
301
|
+
### :white_check_mark: Tests
|
|
302
|
+
- [`b9051e7`](https://github.com/tobymao/sqlglot/commit/b9051e75e05491b1a8440d568efdce5d0e1a4de0) - **mysql**: add string input test for MAKETIME *(PR [#7859](https://github.com/tobymao/sqlglot/pull/7859) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
303
|
+
|
|
304
|
+
### :wrench: Chores
|
|
305
|
+
- [`af73b1c`](https://github.com/tobymao/sqlglot/commit/af73b1c9a8f39a3e4e32bb7393c21e398d4679b1) - tests for REGEXP_REPLACE hive chain *(commit by [@geooo109](https://github.com/geooo109))*
|
|
306
|
+
- [`d5a01c4`](https://github.com/tobymao/sqlglot/commit/d5a01c4fa41892db8d237dd89a63a8d6dbc46dc1) - minor refactor for REGEXP_REPLACE tests *(commit by [@geooo109](https://github.com/geooo109))*
|
|
307
|
+
- [`6c1f081`](https://github.com/tobymao/sqlglot/commit/6c1f08191f2aa32540de960ffb8c1d72b05ec7c4) - improve sqlglotc detection in the tokenizer *(PR [#7812](https://github.com/tobymao/sqlglot/pull/7812) by [@georgesittas](https://github.com/georgesittas))*
|
|
308
|
+
- :arrow_lower_right: *addresses issue [#7810](https://github.com/tobymao/sqlglot/issues/7810) opened by [@wernerdaehn](https://github.com/wernerdaehn)*
|
|
309
|
+
- [`5d9c56e`](https://github.com/tobymao/sqlglot/commit/5d9c56e8799fad51ebf941984fd12f8087a64673) - add policy regarding LLM-assisted PRs *(PR [#7817](https://github.com/tobymao/sqlglot/pull/7817) by [@georgesittas](https://github.com/georgesittas))*
|
|
310
|
+
- [`aedf83a`](https://github.com/tobymao/sqlglot/commit/aedf83a2d4d375019f086813693c240e1564535d) - remove invalid CONCAT_WS redshift test *(commit by [@geooo109](https://github.com/geooo109))*
|
|
311
|
+
- [`daf9aeb`](https://github.com/tobymao/sqlglot/commit/daf9aeb2f0e3c9613ec9d0544ce7b1a006f655c7) - **ci**: cache sqlglotc versions *(PR [#7849](https://github.com/tobymao/sqlglot/pull/7849) by [@geooo109](https://github.com/geooo109))*
|
|
312
|
+
- [`b58dd66`](https://github.com/tobymao/sqlglot/commit/b58dd66286600ce0761a9ddc244cfb5412818edb) - extend LOCALTIMESTAMP annotation tests for mysql *(commit by [@geooo109](https://github.com/geooo109))*
|
|
313
|
+
- [`65491dc`](https://github.com/tobymao/sqlglot/commit/65491dc5b0bf5e139efd1177168320633ee96345) - mysql format 3 arg annotate test *(commit by [@geooo109](https://github.com/geooo109))*
|
|
314
|
+
- [`b83659b`](https://github.com/tobymao/sqlglot/commit/b83659ba03955ff8ddf8219540480745cb3d228f) - compile sqlglotc in parallel by default *(PR [#7865](https://github.com/tobymao/sqlglot/pull/7865) by [@georgesittas](https://github.com/georgesittas))*
|
|
315
|
+
- [`ceda825`](https://github.com/tobymao/sqlglot/commit/ceda825eaa50919123d30867a7d2d3451253397b) - clickhouse CORR type annotation clean up *(commit by [@geooo109](https://github.com/geooo109))*
|
|
316
|
+
- [`baf9534`](https://github.com/tobymao/sqlglot/commit/baf9534c0aab49f0c738139d9a1d1ae08cce2426) - minor annotate_functions.sql change *(commit by [@geooo109](https://github.com/geooo109))*
|
|
317
|
+
- [`a39ad08`](https://github.com/tobymao/sqlglot/commit/a39ad08e482c368c3ffeb8166252244aaab32fd0) - mysql type annotator clean up *(commit by [@geooo109](https://github.com/geooo109))*
|
|
318
|
+
- [`a6b71a5`](https://github.com/tobymao/sqlglot/commit/a6b71a5db632638edb0debf6ac1ecf7b64612b9a) - refactor REVERSE mysql annotation *(commit by [@geooo109](https://github.com/geooo109))*
|
|
319
|
+
- [`39333fc`](https://github.com/tobymao/sqlglot/commit/39333fcbe7857ed7b762c4a12b530bcd121a99ca) - **mypyc**: Bump sqlglot-mypy to post8 *(PR [#7878](https://github.com/tobymao/sqlglot/pull/7878) by [@VaggelisD](https://github.com/VaggelisD))*
|
|
320
|
+
- [`154df7c`](https://github.com/tobymao/sqlglot/commit/154df7cba590941247612c9822fb65c6a2a8d490) - remove stray raise in simplify *(PR [#7882](https://github.com/tobymao/sqlglot/pull/7882) by [@georgesittas](https://github.com/georgesittas))*
|
|
321
|
+
- [`c8e56e4`](https://github.com/tobymao/sqlglot/commit/c8e56e4ee0336d02991bc6d39bf942c322067f5d) - **mypyc**: Bump sqlglot-mypy to post9 *(PR [#7894](https://github.com/tobymao/sqlglot/pull/7894) by [@geooo109](https://github.com/geooo109))*
|
|
322
|
+
- [`2965ee5`](https://github.com/tobymao/sqlglot/commit/2965ee57ef8d4ad2270e6f160cd4575d48ed4697) - refactor DISTINCT agg func parsing + duckdb support *(PR [#7875](https://github.com/tobymao/sqlglot/pull/7875) by [@geooo109](https://github.com/geooo109))*
|
|
323
|
+
|
|
324
|
+
|
|
4
325
|
## [v30.12.0] - 2026-06-26
|
|
5
326
|
### :boom: BREAKING CHANGES
|
|
6
327
|
- due to [`d0ebc83`](https://github.com/tobymao/sqlglot/commit/d0ebc8353a3be4eb3258a9e078cc5e124c0e8c78) - Annotate MINUTE function *(PR [#7747](https://github.com/tobymao/sqlglot/pull/7747) by [@vishvambhar-ranoshe](https://github.com/vishvambhar-ranoshe))*:
|
|
@@ -14756,3 +15077,4 @@ pip install "sqlglot[c]" # compiled — faster, but no subclassing
|
|
|
14756
15077
|
[v30.10.0]: https://github.com/tobymao/sqlglot/compare/v30.9.0...v30.10.0
|
|
14757
15078
|
[v30.11.0]: https://github.com/tobymao/sqlglot/compare/v30.10.0...v30.11.0
|
|
14758
15079
|
[v30.12.0]: https://github.com/tobymao/sqlglot/compare/v30.11.0...v30.12.0
|
|
15080
|
+
[v30.13.0]: https://github.com/tobymao/sqlglot/compare/v30.12.0...v30.13.0
|
|
@@ -92,6 +92,14 @@ We use GitHub issues to track public bugs. Report a bug by opening a new issue.
|
|
|
92
92
|
of the code. If you want to propose a new feature, this is the right place to do it. Just start a discussion, and
|
|
93
93
|
let us know why you think this feature would be a good addition to SQLGlot (by possibly including some usage examples).
|
|
94
94
|
|
|
95
|
+
## Deployment (maintainers only)
|
|
96
|
+
|
|
97
|
+
To deploy a new SQLGlot version, follow these steps:
|
|
98
|
+
|
|
99
|
+
1. Run `git pull` to make sure the local git repo is at the head of the main branch
|
|
100
|
+
2. Do a `git tag` operation to bump the SQLGlot version, e.g. `git tag v28.5.0`
|
|
101
|
+
3. Run `git push && git push --tags` to deploy the new version
|
|
102
|
+
|
|
95
103
|
## [License](https://github.com/tobymao/sqlglot/blob/main/LICENSE)
|
|
96
104
|
|
|
97
105
|
By contributing, you agree that your contributions will be licensed under its MIT License.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sqlglot
|
|
3
|
-
Version: 30.
|
|
3
|
+
Version: 30.14.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,16 +34,16 @@ 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.14.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.14.0; python_version >= "3.10" and extra == "rs"
|
|
41
41
|
Dynamic: license-file
|
|
42
42
|
Dynamic: provides-extra
|
|
43
43
|
|
|
44
44
|

|
|
45
45
|
|
|
46
|
-
SQLGlot is a no-dependency SQL parser, transpiler, optimizer, and engine. It can be used to format SQL or translate between [
|
|
46
|
+
SQLGlot is a no-dependency SQL parser, transpiler, optimizer, and engine. It can be used to format SQL or translate between [over 30 dialects](https://github.com/tobymao/sqlglot/blob/main/sqlglot/dialects/__init__.py) like [DuckDB](https://duckdb.org/), [Presto](https://prestodb.io/) / [Trino](https://trino.io/), [Spark](https://spark.apache.org/) / [Databricks](https://www.databricks.com/), [Snowflake](https://www.snowflake.com/en/), and [BigQuery](https://cloud.google.com/bigquery/). It aims to read a wide variety of SQL inputs and output syntactically and semantically correct SQL in the targeted dialects.
|
|
47
47
|
|
|
48
48
|
It is a very comprehensive generic SQL parser with a robust [test suite](https://github.com/tobymao/sqlglot/blob/main/tests/). It is also quite [performant](#benchmarks), while being written purely in Python.
|
|
49
49
|
|
|
@@ -75,7 +75,6 @@ Contributions are very welcome in SQLGlot; read the [contribution guide](https:/
|
|
|
75
75
|
* [Used By](#used-by)
|
|
76
76
|
* [Documentation](#documentation)
|
|
77
77
|
* [Run Tests and Lint](#run-tests-and-lint)
|
|
78
|
-
* [Deployment](#deployment)
|
|
79
78
|
* [Benchmarks](#benchmarks)
|
|
80
79
|
* [Optional Dependencies](#optional-dependencies)
|
|
81
80
|
* [Supported Dialects](#supported-dialects)
|
|
@@ -109,11 +108,11 @@ make install-dev
|
|
|
109
108
|
|
|
110
109
|
## Versioning
|
|
111
110
|
|
|
112
|
-
Given a version number `MAJOR`.`MINOR`.`PATCH
|
|
111
|
+
Given a version number `MAJOR`.`MINOR`.`PATCH`:
|
|
113
112
|
|
|
114
|
-
-
|
|
115
|
-
-
|
|
116
|
-
-
|
|
113
|
+
- `PATCH` is incremented for backwards-compatible changes.
|
|
114
|
+
- `MINOR` is incremented for backwards-incompatible changes.
|
|
115
|
+
- `MAJOR` is incremented for significant backwards-incompatible changes.
|
|
117
116
|
|
|
118
117
|
## Get in Touch
|
|
119
118
|
|
|
@@ -121,17 +120,29 @@ We'd love to hear from you. Join our community [Slack channel](https://tobikodat
|
|
|
121
120
|
|
|
122
121
|
## FAQ
|
|
123
122
|
|
|
124
|
-
I tried to parse SQL that should be valid but it failed
|
|
123
|
+
**I tried to parse SQL that should be valid, but it failed. Why?**
|
|
125
124
|
|
|
126
|
-
|
|
125
|
+
You probably didn't specify the source dialect. Without it, `parse_one` assumes the "SQLGlot dialect", which is designed to be a superset of all supported dialects. Always pass the dialect when you know it, e.g. `parse_one(sql, dialect="spark")`. If parsing still fails, please file an issue.
|
|
127
126
|
|
|
128
|
-
|
|
127
|
+
**The generated SQL is not in the correct dialect!**
|
|
129
128
|
|
|
130
|
-
|
|
129
|
+
The target dialect must also be specified explicitly. For example, to transpile a query from Spark SQL to DuckDB, do `parse_one(sql, dialect="spark").sql(dialect="duckdb")`, or `transpile(sql, read="spark", write="duckdb")`.
|
|
131
130
|
|
|
132
|
-
|
|
131
|
+
**Why does SQLGlot parse my invalid SQL without complaining?**
|
|
133
132
|
|
|
134
|
-
|
|
133
|
+
The parser is intentionally lenient, so it can accept queries that a real engine would reject. SQLGlot is a transpiler, not a validator. A query that parses successfully may still fail at execution time.
|
|
134
|
+
|
|
135
|
+
**Why doesn't the output preserve my formatting, casing or quoting?**
|
|
136
|
+
|
|
137
|
+
SQLGlot parses queries into an AST and generates SQL back from it, so it preserves the meaning of a query rather than its exact text. Cosmetic details can change in the process. Use `pretty=True` for formatted output and `identify=True` to quote all identifiers. Comments are preserved on a best-effort basis.
|
|
138
|
+
|
|
139
|
+
**How can I make parsing faster?**
|
|
140
|
+
|
|
141
|
+
Install the version compiled with mypyc: `pip3 install "sqlglot[c]"`. It is roughly 3-5x faster than the pure Python version (see [Benchmarks](#benchmarks)).
|
|
142
|
+
|
|
143
|
+
**My dialect isn't supported. What are my options?**
|
|
144
|
+
|
|
145
|
+
You can subclass an existing dialect ([Custom Dialects](#custom-dialects)), or ship one as a separate package ([Creating a Dialect Plugin](#creating-a-dialect-plugin)). Keep in mind that subclassing may not work properly with `sqlglot[c]` installed, so custom dialects may require the pure Python version.
|
|
135
146
|
|
|
136
147
|
## Examples
|
|
137
148
|
|
|
@@ -220,7 +231,7 @@ print(sqlglot.transpile(sql, read='mysql', pretty=True)[0])
|
|
|
220
231
|
*/
|
|
221
232
|
SELECT
|
|
222
233
|
tbl.cola /* comment 1 */ + tbl.colb /* comment 2 */,
|
|
223
|
-
CAST(x AS
|
|
234
|
+
CAST(x AS SIGNED), /* comment 3 */
|
|
224
235
|
y /* comment 4 */
|
|
225
236
|
FROM bar /* comment 5 */, tbl /* comment 6 */
|
|
226
237
|
```
|
|
@@ -296,7 +307,7 @@ sqlglot.transpile("SELECT APPROX_DISTINCT(a, 0.1) FROM foo", read="presto", writ
|
|
|
296
307
|
```
|
|
297
308
|
|
|
298
309
|
```sql
|
|
299
|
-
|
|
310
|
+
Argument 'accuracy' is not supported for expression 'ApproxDistinct' when targeting Hive.
|
|
300
311
|
'SELECT APPROX_COUNT_DISTINCT(a) FROM foo'
|
|
301
312
|
```
|
|
302
313
|
|
|
@@ -308,12 +319,12 @@ sqlglot.transpile("SELECT APPROX_DISTINCT(a, 0.1) FROM foo", read="presto", writ
|
|
|
308
319
|
```
|
|
309
320
|
|
|
310
321
|
```
|
|
311
|
-
sqlglot.errors.UnsupportedError:
|
|
322
|
+
sqlglot.errors.UnsupportedError: Argument 'accuracy' is not supported for expression 'ApproxDistinct' when targeting Hive.
|
|
312
323
|
```
|
|
313
324
|
|
|
314
|
-
|
|
325
|
+
Some queries need additional information to be transpiled accurately, such as the schemas of the referenced tables. This is because certain transformations are type-sensitive and depend on type inference. The `qualify` and `annotate_types` optimizer [rules](https://github.com/tobymao/sqlglot/tree/main/sqlglot/optimizer) can provide this information, but they are not used by default because they add overhead and complexity.
|
|
315
326
|
|
|
316
|
-
Transpilation is
|
|
327
|
+
Transpilation is a hard problem, so SQLGlot solves it incrementally. Some dialect pairs may lack support for certain inputs, but coverage improves over time. We highly appreciate well-documented and tested issues or PRs, so feel free to [reach out](#get-in-touch) if you need guidance!
|
|
317
328
|
|
|
318
329
|
### Build and Modify SQL
|
|
319
330
|
|
|
@@ -442,6 +453,8 @@ diff(parse_one("SELECT a + b, c, d"), parse_one("SELECT c, a - b, d"))
|
|
|
442
453
|
]
|
|
443
454
|
```
|
|
444
455
|
|
|
456
|
+
The sequence consists of `Insert`, `Remove`, `Move`, `Update` and `Keep` actions. The order of the matched (`Keep` / `Move`) actions may vary between runs.
|
|
457
|
+
|
|
445
458
|
See also: [Semantic Diff for SQL](https://github.com/tobymao/sqlglot/blob/main/posts/sql_diff.md).
|
|
446
459
|
|
|
447
460
|
### Custom Dialects
|
|
@@ -488,6 +501,8 @@ print(Dialect["custom"])
|
|
|
488
501
|
<class '__main__.Custom'>
|
|
489
502
|
```
|
|
490
503
|
|
|
504
|
+
Note: when `sqlglot[c]` is installed, subclassing may not work properly, because runtime subclassing of the mypyc-compiled classes has been disabled for performance reasons. Use the pure Python version if you need custom dialects.
|
|
505
|
+
|
|
491
506
|
### SQL Execution
|
|
492
507
|
|
|
493
508
|
SQLGlot is able to interpret SQL queries, where the tables are represented as Python dictionaries. The engine is not supposed to be fast, but it can be useful for unit testing and running SQL natively across Python objects. Additionally, the foundation can be easily integrated with fast compute kernels, such as [Arrow](https://arrow.apache.org/docs/index.html) and [Pandas](https://pandas.pydata.org/).
|
|
@@ -575,14 +590,6 @@ make check # Full test suite & linter checks
|
|
|
575
590
|
make clean # Remove compiled C artifacts (.so files, build dirs)
|
|
576
591
|
```
|
|
577
592
|
|
|
578
|
-
## Deployment
|
|
579
|
-
|
|
580
|
-
To deploy a new SQLGlot version, follow these steps:
|
|
581
|
-
|
|
582
|
-
1. Run `git pull` to make sure the local git repo is at the head of the main branch
|
|
583
|
-
2. Do a `git tag` operation to bump the SQLGlot version, e.g. `git tag v28.5.0`
|
|
584
|
-
3. Run `git push && git push --tags` to deploy the new version
|
|
585
|
-
|
|
586
593
|
## Benchmarks
|
|
587
594
|
|
|
588
595
|
[Benchmarks](https://github.com/tobymao/sqlglot/blob/main/benchmarks/parse.py) run on Python 3.14.3 in seconds.
|
|
@@ -635,6 +642,7 @@ x + interval '1' month
|
|
|
635
642
|
| Drill | Community |
|
|
636
643
|
| Druid | Community |
|
|
637
644
|
| DuckDB | Official |
|
|
645
|
+
| Dune | Community |
|
|
638
646
|
| Exasol | Community |
|
|
639
647
|
| Fabric | Community |
|
|
640
648
|
| Hive | Official |
|