sqlglot 30.18.0__tar.gz → 30.19.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.18.0 → sqlglot-30.19.0}/.gitignore +1 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/CHANGELOG.md +232 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/Makefile +1 -1
- {sqlglot-30.18.0/sqlglot.egg-info → sqlglot-30.19.0}/PKG-INFO +3 -3
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/_version.py +3 -3
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/dialect.py +1 -4
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/mysql.py +1 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/sqlite.py +2 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/executor/env.py +6 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/expressions/__init__.py +3 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/expressions/aggregate.py +6 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/expressions/array.py +6 -1
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/expressions/core.py +4 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/expressions/json.py +4 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/expressions/query.py +20 -5
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/expressions/string.py +1 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generator.py +23 -14
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/clickhouse.py +10 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/databricks.py +1 -1
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/doris.py +15 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/duckdb.py +12 -12
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/fabric.py +5 -5
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/mysql.py +12 -2
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/python.py +10 -1
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/singlestore.py +11 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/spark.py +3 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/sqlite.py +52 -25
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/teradata.py +1 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/trino.py +41 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/tsql.py +61 -3
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/lineage.py +1 -1
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/optimizer/annotate_types.py +5 -4
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/optimizer/canonicalize_internal_names.py +4 -4
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/optimizer/eliminate_subqueries.py +3 -1
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/optimizer/journal.py +4 -4
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/optimizer/merge_subqueries.py +2 -2
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/optimizer/pushdown_predicates.py +9 -1
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/optimizer/pushdown_projections.py +141 -47
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/optimizer/qualify_columns.py +57 -13
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/optimizer/resolver.py +23 -7
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/optimizer/scope.py +27 -21
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/optimizer/simplify.py +73 -43
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/optimizer/unnest_subqueries.py +138 -38
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parser.py +49 -36
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/bigquery.py +0 -6
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/hive.py +6 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/mysql.py +53 -7
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/redshift.py +2 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/snowflake.py +7 -2
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/sqlite.py +5 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/trino.py +0 -6
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/tsql.py +2 -2
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/planner.py +58 -18
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/transforms.py +8 -4
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/typing/duckdb.py +22 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/typing/postgres.py +1 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0/sqlglot.egg-info}/PKG-INFO +3 -3
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot.egg-info/requires.txt +2 -2
- sqlglot-30.19.0/sqlglot.egg-info/scm_version.json +8 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_clickhouse.py +35 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_databricks.py +6 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_dialect.py +34 -1
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_doris.py +29 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_duckdb.py +16 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_fabric.py +15 -5
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_mysql.py +103 -5
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_presto.py +0 -7
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_redshift.py +3 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_singlestore.py +28 -1
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_snowflake.py +70 -5
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_spark.py +21 -6
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_sqlite.py +135 -10
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_trino.py +104 -1
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_tsql.py +235 -3
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/annotate_functions.sql +3 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/optimizer.sql +2 -1
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/pushdown_predicates.sql +8 -2
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/pushdown_projections.sql +12 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/simplify.sql +190 -24
- sqlglot-30.19.0/tests/fixtures/optimizer/unnest_subqueries.sql +297 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/helpers.py +4 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/leakcheck.py +5 -3
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/test_executor.py +223 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/test_expressions.py +12 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/test_generator.py +2 -1
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/test_jsonpath.py +2 -1
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/test_optimizer.py +64 -1
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/test_parser.py +12 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/test_serde.py +2 -2
- sqlglot-30.18.0/sqlglot.egg-info/scm_version.json +0 -8
- sqlglot-30.18.0/tests/fixtures/optimizer/unnest_subqueries.sql +0 -146
- {sqlglot-30.18.0 → sqlglot-30.19.0}/.gitmodules +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/.gitpod.yml +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/.pre-commit-config.yaml +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/AGENTS.md +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/CLAUDE.md +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/CONTRIBUTING.md +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/LICENSE +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/MANIFEST.in +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/README.md +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/pyproject.toml +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/setup.cfg +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/setup.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/__init__.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/__main__.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/_typing.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/anonymize.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/__init__.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/athena.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/bigquery.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/clickhouse.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/databricks.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/dax.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/doris.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/dremio.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/drill.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/druid.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/duckdb.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/dune.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/exasol.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/fabric.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/hive.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/materialize.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/oracle.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/postgres.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/presto.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/prql.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/redshift.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/risingwave.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/singlestore.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/snowflake.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/solr.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/spark.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/spark2.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/starrocks.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/tableau.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/teradata.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/trino.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/dialects/tsql.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/diff.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/errors.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/executor/__init__.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/executor/context.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/executor/python.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/executor/table.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/expressions/builders.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/expressions/constraints.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/expressions/datatypes.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/expressions/ddl.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/expressions/dml.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/expressions/functions.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/expressions/math.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/expressions/properties.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/expressions/temporal.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/__init__.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/athena.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/bigquery.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/dax.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/dremio.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/drill.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/druid.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/dune.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/exasol.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/hive.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/materialize.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/oracle.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/postgres.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/presto.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/prql.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/redshift.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/risingwave.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/snowflake.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/solr.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/spark2.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/starrocks.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/generators/tableau.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/helper.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/jsonpath.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/optimizer/__init__.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/optimizer/canonicalize.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/optimizer/eliminate_ctes.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/optimizer/eliminate_joins.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/optimizer/isolate_table_selects.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/optimizer/normalize.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/optimizer/normalize_identifiers.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/optimizer/optimize_joins.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/optimizer/optimizer.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/optimizer/qualify.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/optimizer/qualify_tables.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/__init__.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/athena.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/base.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/clickhouse.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/databricks.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/dax.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/doris.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/dremio.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/drill.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/druid.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/duckdb.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/dune.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/exasol.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/fabric.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/materialize.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/oracle.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/postgres.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/presto.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/prql.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/risingwave.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/singlestore.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/solr.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/spark.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/spark2.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/starrocks.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/tableau.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/parsers/teradata.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/py.typed +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/schema.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/serde.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/time.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/tokenizer_core.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/tokens.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/trie.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/typing/__init__.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/typing/bigquery.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/typing/clickhouse.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/typing/databricks.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/typing/hive.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/typing/mysql.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/typing/presto.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/typing/redshift.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/typing/snowflake.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/typing/spark.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/typing/spark2.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot/typing/tsql.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot.egg-info/SOURCES.txt +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot.egg-info/dependency_links.txt +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot.egg-info/scm_file_list.json +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot.egg-info/top_level.txt +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglot.png +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglotc/MANIFEST.in +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglotc/pyproject.toml +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/sqlglotc/setup.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/__init__.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/__init__.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_athena.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_bigquery.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_dax.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_dremio.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_drill.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_druid.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_dune.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_exasol.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_hive.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_materialize.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_oracle.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_pipe_syntax.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_postgres.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_prql.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_risingwave.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_solr.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_starrocks.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_tableau.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/dialects/test_teradata.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/identity.sql +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/jsonpath/LICENSE +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/jsonpath/cts.json +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/annotate_types.sql +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/canonicalize.sql +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/canonicalize_internal_names.sql +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/eliminate_ctes.sql +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/eliminate_joins.sql +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/eliminate_subqueries.sql +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/isolate_table_selects.sql +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/merge_subqueries.sql +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/normalize.sql +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/normalize_identifiers.sql +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/optimize_joins.sql +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/pushdown_cte_alias_columns.sql +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/qualify_columns.sql +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/qualify_columns__invalid.sql +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/qualify_columns__with_invisible.sql +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/qualify_columns_ddl.sql +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/qualify_tables.sql +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/quote_identifiers.sql +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-ds/call_center.csv.gz +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-ds/catalog_page.csv.gz +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-ds/catalog_returns.csv.gz +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-ds/catalog_sales.csv.gz +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-ds/customer.csv.gz +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-ds/customer_address.csv.gz +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-ds/customer_demographics.csv.gz +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-ds/date_dim.csv.gz +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-ds/household_demographics.csv.gz +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-ds/income_band.csv.gz +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-ds/inventory.csv.gz +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-ds/item.csv.gz +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-ds/promotion.csv.gz +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-ds/reason.csv.gz +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-ds/ship_mode.csv.gz +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-ds/store.csv.gz +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-ds/store_returns.csv.gz +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-ds/store_sales.csv.gz +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-ds/time_dim.csv.gz +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-ds/tpc-ds.sql +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-ds/warehouse.csv.gz +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-ds/web_page.csv.gz +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-ds/web_returns.csv.gz +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-ds/web_sales.csv.gz +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-ds/web_site.csv.gz +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-h/customer.csv.gz +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-h/lineitem.csv.gz +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-h/nation.csv.gz +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-h/orders.csv.gz +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-h/part.csv.gz +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-h/partsupp.csv.gz +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-h/region.csv.gz +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-h/supplier.csv.gz +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/optimizer/tpc-h/tpc-h.sql +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/partial.sql +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/fixtures/pretty.sql +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/gen_fixtures.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/sqlglot/__init__.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/test_anonymize.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/test_build.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/test_dialect_entry_points.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/test_dialect_imports.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/test_diff.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/test_docs.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/test_errors.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/test_helper.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/test_integration_loader.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/test_lineage.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/test_schema.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/test_time.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/test_tokens.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/test_transforms.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/test_transpile.py +0 -0
- {sqlglot-30.18.0 → sqlglot-30.19.0}/tests/test_typing.py +0 -0
|
@@ -1,6 +1,237 @@
|
|
|
1
1
|
Changelog
|
|
2
2
|
=========
|
|
3
3
|
|
|
4
|
+
## [v30.18.0] - 2026-09-03
|
|
5
|
+
### :boom: BREAKING CHANGES
|
|
6
|
+
- due to [`8f60665`](https://github.com/tobymao/sqlglot/commit/8f606659077c0380cfbfe2ae53bd43583f41c4cf) - annotate decode for postgres *(PR [#8157](https://github.com/tobymao/sqlglot/pull/8157) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
7
|
+
|
|
8
|
+
annotate decode for postgres (#8157)
|
|
9
|
+
|
|
10
|
+
- due to [`cefce19`](https://github.com/tobymao/sqlglot/commit/cefce19186791442c9995239e1e2bd4931db863a) - map JSONB_CONTAINS to @>, add JSONBContainsTopKey *(PR [#8156](https://github.com/tobymao/sqlglot/pull/8156) by [@georgesittas](https://github.com/georgesittas))*:
|
|
11
|
+
|
|
12
|
+
map JSONB_CONTAINS to @>, add JSONBContainsTopKey (#8156)
|
|
13
|
+
|
|
14
|
+
- due to [`21092b3`](https://github.com/tobymao/sqlglot/commit/21092b3086f0bfba400de98c6deade6f4f6d3de3) - do not normalize identifiers that name data rather than references *(PR [#8161](https://github.com/tobymao/sqlglot/pull/8161) by [@georgesittas](https://github.com/georgesittas))*:
|
|
15
|
+
|
|
16
|
+
do not normalize identifiers that name data rather than references (#8161)
|
|
17
|
+
|
|
18
|
+
- due to [`b4c9ad5`](https://github.com/tobymao/sqlglot/commit/b4c9ad5abcdc8cb76be72876b30881a46077a6c4) - parse BTRIM as TRIM *(PR [#8181](https://github.com/tobymao/sqlglot/pull/8181) by [@jbylund](https://github.com/jbylund))*:
|
|
19
|
+
|
|
20
|
+
parse BTRIM as TRIM (#8181)
|
|
21
|
+
|
|
22
|
+
- due to [`d7ada74`](https://github.com/tobymao/sqlglot/commit/d7ada74e21f33ebeaad0e382b2096460860c5984) - annotate Left function for posrgres *(PR [#8189](https://github.com/tobymao/sqlglot/pull/8189) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*:
|
|
23
|
+
|
|
24
|
+
annotate Left function for posrgres (#8189)
|
|
25
|
+
|
|
26
|
+
- due to [`36785ce`](https://github.com/tobymao/sqlglot/commit/36785ce904ada62355b19e774b1ccd33f145d900) - Annotate Reverse function for Postgres *(PR [#8201](https://github.com/tobymao/sqlglot/pull/8201) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*:
|
|
27
|
+
|
|
28
|
+
Annotate Reverse function for Postgres (#8201)
|
|
29
|
+
|
|
30
|
+
- due to [`cddb7d0`](https://github.com/tobymao/sqlglot/commit/cddb7d03f1f4aa29d2f615dad2c086906e7e5ec1) - annotate Overlay function for Postgres *(PR [#8200](https://github.com/tobymao/sqlglot/pull/8200) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*:
|
|
31
|
+
|
|
32
|
+
annotate Overlay function for Postgres (#8200)
|
|
33
|
+
|
|
34
|
+
- due to [`bb77a11`](https://github.com/tobymao/sqlglot/commit/bb77a117d96265d2732f458fc4e4be23e272d8c1) - Annotate Right function for Postgres *(PR [#8203](https://github.com/tobymao/sqlglot/pull/8203) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*:
|
|
35
|
+
|
|
36
|
+
Annotate Right function for Postgres (#8203)
|
|
37
|
+
|
|
38
|
+
- due to [`0575d38`](https://github.com/tobymao/sqlglot/commit/0575d387603ce7e41068489eec022ffe128ac7c6) - Annotate Rpad function for Postgres *(PR [#8204](https://github.com/tobymao/sqlglot/pull/8204) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*:
|
|
39
|
+
|
|
40
|
+
Annotate Rpad function for Postgres (#8204)
|
|
41
|
+
|
|
42
|
+
- due to [`e674a0e`](https://github.com/tobymao/sqlglot/commit/e674a0e8bae4f06b94eed72e2a781b2df978d983) - Annotate SplitPart function for Postgres *(PR [#8205](https://github.com/tobymao/sqlglot/pull/8205) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*:
|
|
43
|
+
|
|
44
|
+
Annotate SplitPart function for Postgres (#8205)
|
|
45
|
+
|
|
46
|
+
- due to [`585908b`](https://github.com/tobymao/sqlglot/commit/585908b18440149275a0da16e2a7b483b6c34a9b) - Annotate To_Hex function for Postgres *(PR [#8206](https://github.com/tobymao/sqlglot/pull/8206) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*:
|
|
47
|
+
|
|
48
|
+
Annotate To_Hex function for Postgres (#8206)
|
|
49
|
+
|
|
50
|
+
- due to [`542f7b4`](https://github.com/tobymao/sqlglot/commit/542f7b4ae884d6ff7e41a0ddb4f9590de008bc2f) - Annotate Format function for Postgres *(PR [#8207](https://github.com/tobymao/sqlglot/pull/8207) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*:
|
|
51
|
+
|
|
52
|
+
Annotate Format function for Postgres (#8207)
|
|
53
|
+
|
|
54
|
+
- due to [`a580417`](https://github.com/tobymao/sqlglot/commit/a5804178a558acc3a04eacb0057c280c52963ecd) - Annotate Normalize function for Postgres *(PR [#8208](https://github.com/tobymao/sqlglot/pull/8208) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*:
|
|
55
|
+
|
|
56
|
+
Annotate Normalize function for Postgres (#8208)
|
|
57
|
+
|
|
58
|
+
- due to [`2c77cb7`](https://github.com/tobymao/sqlglot/commit/2c77cb7482107082679a10aa0c67a264b1da1fad) - Annotate ToNumber function for Postgres *(PR [#8210](https://github.com/tobymao/sqlglot/pull/8210) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*:
|
|
59
|
+
|
|
60
|
+
Annotate ToNumber function for Postgres (#8210)
|
|
61
|
+
|
|
62
|
+
- due to [`8efda2c`](https://github.com/tobymao/sqlglot/commit/8efda2c6cee394d195ef8ec1856c196228383dc2) - ANALYZE and DROP with multiple tables *(PR [#8229](https://github.com/tobymao/sqlglot/pull/8229) by [@geooo109](https://github.com/geooo109))*:
|
|
63
|
+
|
|
64
|
+
ANALYZE and DROP with multiple tables (#8229)
|
|
65
|
+
|
|
66
|
+
- due to [`e105403`](https://github.com/tobymao/sqlglot/commit/e105403618effd3accb9bb43e93138d2b653b7a1) - annotate maketime for postgres *(PR [#8253](https://github.com/tobymao/sqlglot/pull/8253) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
67
|
+
|
|
68
|
+
annotate maketime for postgres (#8253)
|
|
69
|
+
|
|
70
|
+
- due to [`a3a2a21`](https://github.com/tobymao/sqlglot/commit/a3a2a2178d5f47fa548b5575da6b680bcd95d1c2) - annotate regexpreplace for postgres *(PR [#8256](https://github.com/tobymao/sqlglot/pull/8256) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
71
|
+
|
|
72
|
+
annotate regexpreplace for postgres (#8256)
|
|
73
|
+
|
|
74
|
+
- due to [`79276b6`](https://github.com/tobymao/sqlglot/commit/79276b67d3ae01f97a443df0c20b00da51e87251) - annotate make_timestamp for postgres *(PR [#8258](https://github.com/tobymao/sqlglot/pull/8258) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
75
|
+
|
|
76
|
+
annotate make_timestamp for postgres (#8258)
|
|
77
|
+
|
|
78
|
+
- due to [`f481c22`](https://github.com/tobymao/sqlglot/commit/f481c22bcbd8a453486d1b2a4543e93685b94ce6) - annotate bit_or for postgres *(PR [#8264](https://github.com/tobymao/sqlglot/pull/8264) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
79
|
+
|
|
80
|
+
annotate bit_or for postgres (#8264)
|
|
81
|
+
|
|
82
|
+
- due to [`3762ef4`](https://github.com/tobymao/sqlglot/commit/3762ef4361895ad764a8c3e117132d6a0d1c47df) - Parse MOD at multiplicative precedence *(PR [#8259](https://github.com/tobymao/sqlglot/pull/8259) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*:
|
|
83
|
+
|
|
84
|
+
Parse MOD at multiplicative precedence (#8259)
|
|
85
|
+
|
|
86
|
+
- due to [`5294204`](https://github.com/tobymao/sqlglot/commit/52942044486ad91d16c93b714e686799591c59d4) - annotate function bit_xor for postgres *(PR [#8274](https://github.com/tobymao/sqlglot/pull/8274) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
87
|
+
|
|
88
|
+
annotate function bit_xor for postgres (#8274)
|
|
89
|
+
|
|
90
|
+
- due to [`9fac05c`](https://github.com/tobymao/sqlglot/commit/9fac05c062f0c9258cee2c72108a14f498f47737) - keep the `COALESCE` wrapping when `CONCAT` is generated as `||` *(PR [#8283](https://github.com/tobymao/sqlglot/pull/8283) by [@ebarkhordar](https://github.com/ebarkhordar))*:
|
|
91
|
+
|
|
92
|
+
keep the `COALESCE` wrapping when `CONCAT` is generated as `||` (#8283)
|
|
93
|
+
|
|
94
|
+
- due to [`2be2afc`](https://github.com/tobymao/sqlglot/commit/2be2afc69fcaeee5bc83ecab555fbdc0a0891b81) - don't push WHERE predicates into sources a later RIGHT or FULL join null-extends [CLAUDE] *(PR [#8282](https://github.com/tobymao/sqlglot/pull/8282) by [@jaideeppyne](https://github.com/jaideeppyne))*:
|
|
95
|
+
|
|
96
|
+
don't push WHERE predicates into sources a later RIGHT or FULL join null-extends [CLAUDE] (#8282)
|
|
97
|
+
|
|
98
|
+
- due to [`b2a1bf5`](https://github.com/tobymao/sqlglot/commit/b2a1bf560ce5c0aafc84995f113f4499b5277e94) - annotate localtimestamp for postgres *(PR [#8295](https://github.com/tobymao/sqlglot/pull/8295) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
99
|
+
|
|
100
|
+
annotate localtimestamp for postgres (#8295)
|
|
101
|
+
|
|
102
|
+
- due to [`f064484`](https://github.com/tobymao/sqlglot/commit/f064484b68547d9c80a9bcecd5e07dd8a056a36b) - normalize DATE_PART unit casing to match EXTRACT [CLAUDE] *(PR [#8293](https://github.com/tobymao/sqlglot/pull/8293) by [@PhuocOng](https://github.com/PhuocOng))*:
|
|
103
|
+
|
|
104
|
+
normalize DATE_PART unit casing to match EXTRACT [CLAUDE] (#8293)
|
|
105
|
+
|
|
106
|
+
- due to [`bb6220b`](https://github.com/tobymao/sqlglot/commit/bb6220b76a852e87b95f0b6d00979732b29fcc1f) - stop dropping structured types on CREATE TABLE [GROK] *(PR [#8299](https://github.com/tobymao/sqlglot/pull/8299) by [@ishaan-upadhyay](https://github.com/ishaan-upadhyay))*:
|
|
107
|
+
|
|
108
|
+
stop dropping structured types on CREATE TABLE [GROK] (#8299)
|
|
109
|
+
|
|
110
|
+
- due to [`b3f23fe`](https://github.com/tobymao/sqlglot/commit/b3f23fe3cfc8107d349e058649728045c707fe5d) - mod generation precedence *(PR [#8290](https://github.com/tobymao/sqlglot/pull/8290) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*:
|
|
111
|
+
|
|
112
|
+
mod generation precedence (#8290)
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
### :sparkles: New Features
|
|
116
|
+
- [`6e109b3`](https://github.com/tobymao/sqlglot/commit/6e109b3a796c41acba935442a23bf79bebef4a13) - **executor**: implement DPIPE [CLAUDE] *(PR [#8146](https://github.com/tobymao/sqlglot/pull/8146) by [@jbylund](https://github.com/jbylund))*
|
|
117
|
+
- [`8f60665`](https://github.com/tobymao/sqlglot/commit/8f606659077c0380cfbfe2ae53bd43583f41c4cf) - **optimizer**: annotate decode for postgres *(PR [#8157](https://github.com/tobymao/sqlglot/pull/8157) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
118
|
+
- [`3bc3350`](https://github.com/tobymao/sqlglot/commit/3bc3350e23cf62e3136783b3d05fa0e17bff4c34) - **optimizer**: Provide support for databricks div(a,b) function *(PR [#8143](https://github.com/tobymao/sqlglot/pull/8143) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
|
|
119
|
+
- [`eb5d4da`](https://github.com/tobymao/sqlglot/commit/eb5d4daf499b498f4ee84af3444c53ab0f8726ea) - **executor**: add REVERSE to ENV [CLAUDE] *(PR [#8180](https://github.com/tobymao/sqlglot/pull/8180) by [@jbylund](https://github.com/jbylund))*
|
|
120
|
+
- [`f3b7c6c`](https://github.com/tobymao/sqlglot/commit/f3b7c6cb737c3d6c798f0c6b408ec8c9ffea6f4b) - **dremio**: support 4-argument REGEXP_SPLIT *(PR [#8148](https://github.com/tobymao/sqlglot/pull/8148) by [@rusackas](https://github.com/rusackas))*
|
|
121
|
+
- [`b4c9ad5`](https://github.com/tobymao/sqlglot/commit/b4c9ad5abcdc8cb76be72876b30881a46077a6c4) - **postgres**: parse BTRIM as TRIM *(PR [#8181](https://github.com/tobymao/sqlglot/pull/8181) by [@jbylund](https://github.com/jbylund))*
|
|
122
|
+
- [`4ff8ab3`](https://github.com/tobymao/sqlglot/commit/4ff8ab3614dca6d6cf6c8c73562886694675e443) - **executor**: evaluate subqueries the optimizer declines to rewrite [CLAUDE] *(PR [#8190](https://github.com/tobymao/sqlglot/pull/8190) by [@jbylund](https://github.com/jbylund))*
|
|
123
|
+
- [`20f2f70`](https://github.com/tobymao/sqlglot/commit/20f2f7035df0bda3b8a8e2c25e211a6fa0eb6b77) - **bigquery**: support digit-prefixed field names closes [#8175](https://github.com/tobymao/sqlglot/pull/8175) *(PR [#8196](https://github.com/tobymao/sqlglot/pull/8196) by [@georgesittas](https://github.com/georgesittas))*
|
|
124
|
+
- :arrow_lower_right: *addresses issue [#8175](https://github.com/tobymao/sqlglot/issues/8175) opened by [@sayantan-wisdom](https://github.com/sayantan-wisdom)*
|
|
125
|
+
- [`d7ada74`](https://github.com/tobymao/sqlglot/commit/d7ada74e21f33ebeaad0e382b2096460860c5984) - **optimizer**: annotate Left function for posrgres *(PR [#8189](https://github.com/tobymao/sqlglot/pull/8189) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*
|
|
126
|
+
- [`36785ce`](https://github.com/tobymao/sqlglot/commit/36785ce904ada62355b19e774b1ccd33f145d900) - **optimizer**: Annotate Reverse function for Postgres *(PR [#8201](https://github.com/tobymao/sqlglot/pull/8201) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*
|
|
127
|
+
- [`cddb7d0`](https://github.com/tobymao/sqlglot/commit/cddb7d03f1f4aa29d2f615dad2c086906e7e5ec1) - **optimizer**: annotate Overlay function for Postgres *(PR [#8200](https://github.com/tobymao/sqlglot/pull/8200) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*
|
|
128
|
+
- [`bb77a11`](https://github.com/tobymao/sqlglot/commit/bb77a117d96265d2732f458fc4e4be23e272d8c1) - **optimizer**: Annotate Right function for Postgres *(PR [#8203](https://github.com/tobymao/sqlglot/pull/8203) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*
|
|
129
|
+
- [`0575d38`](https://github.com/tobymao/sqlglot/commit/0575d387603ce7e41068489eec022ffe128ac7c6) - **optimizer**: Annotate Rpad function for Postgres *(PR [#8204](https://github.com/tobymao/sqlglot/pull/8204) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*
|
|
130
|
+
- [`e674a0e`](https://github.com/tobymao/sqlglot/commit/e674a0e8bae4f06b94eed72e2a781b2df978d983) - **optimizer**: Annotate SplitPart function for Postgres *(PR [#8205](https://github.com/tobymao/sqlglot/pull/8205) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*
|
|
131
|
+
- [`585908b`](https://github.com/tobymao/sqlglot/commit/585908b18440149275a0da16e2a7b483b6c34a9b) - **optimizer**: Annotate To_Hex function for Postgres *(PR [#8206](https://github.com/tobymao/sqlglot/pull/8206) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*
|
|
132
|
+
- [`542f7b4`](https://github.com/tobymao/sqlglot/commit/542f7b4ae884d6ff7e41a0ddb4f9590de008bc2f) - **optimizer**: Annotate Format function for Postgres *(PR [#8207](https://github.com/tobymao/sqlglot/pull/8207) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*
|
|
133
|
+
- [`a580417`](https://github.com/tobymao/sqlglot/commit/a5804178a558acc3a04eacb0057c280c52963ecd) - **optimizer**: Annotate Normalize function for Postgres *(PR [#8208](https://github.com/tobymao/sqlglot/pull/8208) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*
|
|
134
|
+
- [`2c77cb7`](https://github.com/tobymao/sqlglot/commit/2c77cb7482107082679a10aa0c67a264b1da1fad) - **optimizer**: Annotate ToNumber function for Postgres *(PR [#8210](https://github.com/tobymao/sqlglot/pull/8210) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*
|
|
135
|
+
- [`8579d7c`](https://github.com/tobymao/sqlglot/commit/8579d7ca57a9056e393161dd1524b76f2d92cc64) - **executor**: support OFFSET [CLAUDE] *(PR [#8219](https://github.com/tobymao/sqlglot/pull/8219) by [@jbylund](https://github.com/jbylund))*
|
|
136
|
+
- [`69b059e`](https://github.com/tobymao/sqlglot/commit/69b059e045150f0d12883eecbc2a0026e67a188e) - **clickhouse**: parse trimLeft/trimRight/trimBoth into Trim *(PR [#8240](https://github.com/tobymao/sqlglot/pull/8240) by [@raghav-reglobe](https://github.com/raghav-reglobe))*
|
|
137
|
+
- [`e105403`](https://github.com/tobymao/sqlglot/commit/e105403618effd3accb9bb43e93138d2b653b7a1) - **optimizer**: annotate maketime for postgres *(PR [#8253](https://github.com/tobymao/sqlglot/pull/8253) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
138
|
+
- [`a3a2a21`](https://github.com/tobymao/sqlglot/commit/a3a2a2178d5f47fa548b5575da6b680bcd95d1c2) - **optimizer**: annotate regexpreplace for postgres *(PR [#8256](https://github.com/tobymao/sqlglot/pull/8256) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
139
|
+
- [`79276b6`](https://github.com/tobymao/sqlglot/commit/79276b67d3ae01f97a443df0c20b00da51e87251) - **optimizer**: annotate make_timestamp for postgres *(PR [#8258](https://github.com/tobymao/sqlglot/pull/8258) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
140
|
+
- [`f481c22`](https://github.com/tobymao/sqlglot/commit/f481c22bcbd8a453486d1b2a4543e93685b94ce6) - **optimizer**: annotate bit_or for postgres *(PR [#8264](https://github.com/tobymao/sqlglot/pull/8264) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
141
|
+
- [`5294204`](https://github.com/tobymao/sqlglot/commit/52942044486ad91d16c93b714e686799591c59d4) - **optimizer**: annotate function bit_xor for postgres *(PR [#8274](https://github.com/tobymao/sqlglot/pull/8274) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
142
|
+
- [`222eb11`](https://github.com/tobymao/sqlglot/commit/222eb11fc491b3593c52a1f6cf7c7adaeaaf4953) - **clickhouse**: support the view() table function [CLAUDE] *(PR [#8275](https://github.com/tobymao/sqlglot/pull/8275) by [@ei-grad](https://github.com/ei-grad))*
|
|
143
|
+
- [`45158c3`](https://github.com/tobymao/sqlglot/commit/45158c35c7d4ed3aea55564c2bfca352e2075e13) - explode(map) *(PR [#8235](https://github.com/tobymao/sqlglot/pull/8235) by [@betodealmeida](https://github.com/betodealmeida))*
|
|
144
|
+
- [`5a91be3`](https://github.com/tobymao/sqlglot/commit/5a91be3fbc014d54d78f2b38bcde89192245b9e4) - **postgres**: support LOCK as command *(PR [#8281](https://github.com/tobymao/sqlglot/pull/8281) by [@treysp](https://github.com/treysp))*
|
|
145
|
+
- :arrow_lower_right: *addresses issue [#8277](https://github.com/tobymao/sqlglot/issues/8277) opened by [@jerryhu1234](https://github.com/jerryhu1234)*
|
|
146
|
+
- [`b2a1bf5`](https://github.com/tobymao/sqlglot/commit/b2a1bf560ce5c0aafc84995f113f4499b5277e94) - **optimizer**: annotate localtimestamp for postgres *(PR [#8295](https://github.com/tobymao/sqlglot/pull/8295) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
147
|
+
- [`2e86ded`](https://github.com/tobymao/sqlglot/commit/2e86ded7d0f6474e9041882058358616fb911464) - **teradata**: `mod()` func syntax *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
148
|
+
|
|
149
|
+
### :bug: Bug Fixes
|
|
150
|
+
- [`29acdfd`](https://github.com/tobymao/sqlglot/commit/29acdfde9f2d2c1bfc2215c10279552ca4d63c7c) - **trino**: TIME literal with a timezone *(PR [#8154](https://github.com/tobymao/sqlglot/pull/8154) by [@fcfangcc](https://github.com/fcfangcc))*
|
|
151
|
+
- [`8ced6d5`](https://github.com/tobymao/sqlglot/commit/8ced6d5495455cd783fc5e81228d6d7ffd55781d) - **duckdb**: parenthesize JSON_VALUE arrow extract when parent requires it *(PR [#8153](https://github.com/tobymao/sqlglot/pull/8153) by [@Jacques-Peeters](https://github.com/Jacques-Peeters))*
|
|
152
|
+
- [`cefce19`](https://github.com/tobymao/sqlglot/commit/cefce19186791442c9995239e1e2bd4931db863a) - **postgres**: map JSONB_CONTAINS to @>, add JSONBContainsTopKey *(PR [#8156](https://github.com/tobymao/sqlglot/pull/8156) by [@georgesittas](https://github.com/georgesittas))*
|
|
153
|
+
- :arrow_lower_right: *fixes issue [#8152](https://github.com/tobymao/sqlglot/issues/8152) opened by [@RogerHYang](https://github.com/RogerHYang)*
|
|
154
|
+
- [`ecf5b97`](https://github.com/tobymao/sqlglot/commit/ecf5b97819c91257a21dcb1acd7780e8e4563932) - **executor**: return NULL from POW instead of raising [CLAUDE] *(PR [#8159](https://github.com/tobymao/sqlglot/pull/8159) by [@jbylund](https://github.com/jbylund))*
|
|
155
|
+
- [`d89f392`](https://github.com/tobymao/sqlglot/commit/d89f392e089d13b8e217ca4501558d6da263eb4d) - **mysql**: map %x and %r date format specifiers [CLAUDE] *(PR [#8142](https://github.com/tobymao/sqlglot/pull/8142) by [@codeAnqiang-ma](https://github.com/codeAnqiang-ma))*
|
|
156
|
+
- [`05f5484`](https://github.com/tobymao/sqlglot/commit/05f548429469133b502b303dd367f96f4e3126ba) - **executor**: honor nulls_first when ordering [CLAUDE] *(PR [#8158](https://github.com/tobymao/sqlglot/pull/8158) by [@jbylund](https://github.com/jbylund))*
|
|
157
|
+
- [`83129c7`](https://github.com/tobymao/sqlglot/commit/83129c711baf600f6ae902f79cf1cd6e50bdba58) - **snowflake**: robust filter_sql anonymous func handling, closes [#8170](https://github.com/tobymao/sqlglot/pull/8170) *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
158
|
+
- [`d138cae`](https://github.com/tobymao/sqlglot/commit/d138cae03d21656d66e512ab489a0cf9441d4b0a) - don't crash in exp.cast() when the input is already a cast to INTERVAL (CLAUDE) *(PR [#8173](https://github.com/tobymao/sqlglot/pull/8173) by [@eeshsaxena](https://github.com/eeshsaxena))*
|
|
159
|
+
- :arrow_lower_right: *fixes issue [#8172](https://github.com/tobymao/sqlglot/issues/8172) opened by [@eeshsaxena](https://github.com/eeshsaxena)*
|
|
160
|
+
- [`bf34105`](https://github.com/tobymao/sqlglot/commit/bf3410543fd15e983138311577b58455e41f9551) - **sqlite**: render RegexpLike as the REGEXP operator [CLAUDE] *(PR [#8163](https://github.com/tobymao/sqlglot/pull/8163) by [@nikolauspschuetz](https://github.com/nikolauspschuetz))*
|
|
161
|
+
- :arrow_lower_right: *fixes issue [#8080](https://github.com/tobymao/sqlglot/issues/8080) opened by [@RogerHYang](https://github.com/RogerHYang)*
|
|
162
|
+
- [`21092b3`](https://github.com/tobymao/sqlglot/commit/21092b3086f0bfba400de98c6deade6f4f6d3de3) - **optimizer**: do not normalize identifiers that name data rather than references *(PR [#8161](https://github.com/tobymao/sqlglot/pull/8161) by [@georgesittas](https://github.com/georgesittas))*
|
|
163
|
+
- [`ebd15d9`](https://github.com/tobymao/sqlglot/commit/ebd15d99958662562359b7469bb958f4b4790767) - **executor**: return NULL from typed division of NULL [CLAUDE] *(PR [#8178](https://github.com/tobymao/sqlglot/pull/8178) by [@jbylund](https://github.com/jbylund))*
|
|
164
|
+
- [`39e289a`](https://github.com/tobymao/sqlglot/commit/39e289a75efb250d45c2dfcfffc719f19e9925a2) - **executor**: parenthesize CASE in generated Python [CLAUDE] *(PR [#8176](https://github.com/tobymao/sqlglot/pull/8176) by [@jbylund](https://github.com/jbylund))*
|
|
165
|
+
- [`f64adb4`](https://github.com/tobymao/sqlglot/commit/f64adb4c9a3f96ff4ad692d571b80848ad1b649d) - **bigquery**: array_agg(<subquery> ignore nulls) AttributeError closes [#8193](https://github.com/tobymao/sqlglot/pull/8193) *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
166
|
+
- [`a570cf8`](https://github.com/tobymao/sqlglot/commit/a570cf8a908d02e78b66cec1478ab066f1ff1f0d) - **bigquery**: parse FULL/LEFT before set ops as modifiers, not aliases closes [#8195](https://github.com/tobymao/sqlglot/pull/8195) *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
167
|
+
- [`6e30ee7`](https://github.com/tobymao/sqlglot/commit/6e30ee791c1a993d7722d641d12967afc8fd9548) - **parser**: inline digit-prefixed field parsing to avoid deepening recursion *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
168
|
+
- [`6874e1c`](https://github.com/tobymao/sqlglot/commit/6874e1c4bfa398d8dc2b4310fcadd304a0715d16) - **clickhouse**: make VALUES tuple wrapping idempotent [CLAUDE] *(PR [#8185](https://github.com/tobymao/sqlglot/pull/8185) by [@sanket801036](https://github.com/sanket801036))*
|
|
169
|
+
- [`7cca122`](https://github.com/tobymao/sqlglot/commit/7cca122d28c4cedbd7a9baed4bee39f241710b8c) - **clickhouse**: preserve quoted parameterized relations *(PR [#8198](https://github.com/tobymao/sqlglot/pull/8198) by [@alessio-gastaldo](https://github.com/alessio-gastaldo))*
|
|
170
|
+
- [`1ba7b27`](https://github.com/tobymao/sqlglot/commit/1ba7b2715dd9aba896edc7dc69fcc41bbb601b90) - **executor**: return the rows of an ORDER BY over a set operation [CLAUDE] *(PR [#8214](https://github.com/tobymao/sqlglot/pull/8214) by [@jbylund](https://github.com/jbylund))*
|
|
171
|
+
- [`f62c344`](https://github.com/tobymao/sqlglot/commit/f62c3446d0590daea30fed77264194b53b725d24) - **qualify**: resolve snowflake positional column refs *(PR [#8202](https://github.com/tobymao/sqlglot/pull/8202) by [@treysp](https://github.com/treysp))*
|
|
172
|
+
- [`038f015`](https://github.com/tobymao/sqlglot/commit/038f015992d31163bd16075b8508a0c1df0f28e2) - **parser**: parse a list of tables in DROP TABLE [CLAUDE] *(PR [#8223](https://github.com/tobymao/sqlglot/pull/8223) by [@sanket801036](https://github.com/sanket801036))*
|
|
173
|
+
- :arrow_lower_right: *fixes issue [#8222](https://github.com/tobymao/sqlglot/issues/8222) opened by [@guijinxin](https://github.com/guijinxin)*
|
|
174
|
+
- [`8efda2c`](https://github.com/tobymao/sqlglot/commit/8efda2c6cee394d195ef8ec1856c196228383dc2) - **parser**: ANALYZE and DROP with multiple tables *(PR [#8229](https://github.com/tobymao/sqlglot/pull/8229) by [@geooo109](https://github.com/geooo109))*
|
|
175
|
+
- :arrow_lower_right: *fixes issue [#8227](https://github.com/tobymao/sqlglot/issues/8227) opened by [@guijinxin](https://github.com/guijinxin)*
|
|
176
|
+
- [`05eed63`](https://github.com/tobymao/sqlglot/commit/05eed63b281f7ac020045e2b792beef8fad8d3ee) - **executor**: execute an IN/ANY subquery that has no FROM [CLAUDE] *(PR [#8221](https://github.com/tobymao/sqlglot/pull/8221) by [@jbylund](https://github.com/jbylund))*
|
|
177
|
+
- [`91119bc`](https://github.com/tobymao/sqlglot/commit/91119bcaac977ede6f4a641bdda593b0015ef998) - **mysql**: support KEY in CREATE TABLE column definition *(PR [#8230](https://github.com/tobymao/sqlglot/pull/8230) by [@treysp](https://github.com/treysp))*
|
|
178
|
+
- :arrow_lower_right: *fixes issue [#8225](https://github.com/tobymao/sqlglot/issues/8225) opened by [@guijinxin](https://github.com/guijinxin)*
|
|
179
|
+
- [`1e9c804`](https://github.com/tobymao/sqlglot/commit/1e9c804ec54ff74b81d965fe487dcbd5af72b0a5) - **optimizer**: decline decorrelation of a negated correlated IN [CLAUDE] *(PR [#8236](https://github.com/tobymao/sqlglot/pull/8236) by [@jbylund](https://github.com/jbylund))*
|
|
180
|
+
- [`b79cbf8`](https://github.com/tobymao/sqlglot/commit/b79cbf86d154f3ccfca1dada7073435fdaa06b09) - **optimizer**: preserve UNPIVOT passthrough columns *(PR [#8238](https://github.com/tobymao/sqlglot/pull/8238) by [@treysp](https://github.com/treysp))*
|
|
181
|
+
- [`ce427c9`](https://github.com/tobymao/sqlglot/commit/ce427c96246a8a0bc4f05a47a39adbba0bc7a7b1) - **postgres**: don't emit JSON_EXTRACT_PATH with no keys for a root-only JSON path [CLAUDE] *(PR [#8233](https://github.com/tobymao/sqlglot/pull/8233) by [@jaideeppyne](https://github.com/jaideeppyne))*
|
|
182
|
+
- :arrow_lower_right: *fixes issue [#8232](https://github.com/tobymao/sqlglot/issues/8232) opened by [@RogerHYang](https://github.com/RogerHYang)*
|
|
183
|
+
- [`2a46a03`](https://github.com/tobymao/sqlglot/commit/2a46a03311aa014e645f26bf4d8ad87ee590bf3a) - **clickhouse**: generate native lag/lead instead of lagInFrame/leadInFrame *(commit by [@tobymao](https://github.com/tobymao))*
|
|
184
|
+
- [`40f285c`](https://github.com/tobymao/sqlglot/commit/40f285cb61edff4a40950fc708e79ae4e8ed583d) - **clickhouse**: preserve multi-array arrayMap and arrayFilter *(commit by [@tobymao](https://github.com/tobymao))*
|
|
185
|
+
- [`d5e3f14`](https://github.com/tobymao/sqlglot/commit/d5e3f14b109ebe5decd66bc77bde38fd5b001bb1) - **parser, optimizer**: support starrocks GENERATE_SERIES parse and qualify *(PR [#8246](https://github.com/tobymao/sqlglot/pull/8246) by [@geooo109](https://github.com/geooo109))*
|
|
186
|
+
- :arrow_lower_right: *fixes issue [#8244](https://github.com/tobymao/sqlglot/issues/8244) opened by [@xiayaoshun](https://github.com/xiayaoshun)*
|
|
187
|
+
- [`a60171e`](https://github.com/tobymao/sqlglot/commit/a60171e8f73257a3917f2a95b308183460fb159d) - **optimizer**: apply qualified star exclusions only to the referenced source *(PR [#8247](https://github.com/tobymao/sqlglot/pull/8247) by [@geooo109](https://github.com/geooo109))*
|
|
188
|
+
- :arrow_lower_right: *fixes issue [#8245](https://github.com/tobymao/sqlglot/issues/8245) opened by [@paddy-devan](https://github.com/paddy-devan)*
|
|
189
|
+
- [`88419b1`](https://github.com/tobymao/sqlglot/commit/88419b1aa19453be7fca80c0178362b1fbf2d6e1) - **dialect**: fall back on TokenError when an operand isn't a JSON path *(PR [#8260](https://github.com/tobymao/sqlglot/pull/8260) by [@jaideeppyne](https://github.com/jaideeppyne))*
|
|
190
|
+
- :arrow_lower_right: *fixes issue [#8249](https://github.com/tobymao/sqlglot/issues/8249) opened by [@RogerHYang](https://github.com/RogerHYang)*
|
|
191
|
+
- [`f131ec9`](https://github.com/tobymao/sqlglot/commit/f131ec9f9ea40ce55f0e254baa41b01f87bad25c) - **snowflake**: parse a qualified wildcard in OBJECT_CONSTRUCT_KEEP_NULL *(PR [#8270](https://github.com/tobymao/sqlglot/pull/8270) by [@ishaan-upadhyay](https://github.com/ishaan-upadhyay))*
|
|
192
|
+
- :arrow_lower_right: *fixes issue [#8262](https://github.com/tobymao/sqlglot/issues/8262) opened by [@ishaan-upadhyay](https://github.com/ishaan-upadhyay)*
|
|
193
|
+
- [`4303c3f`](https://github.com/tobymao/sqlglot/commit/4303c3f30f8fa23f40853858260d8ec83ccfd882) - **parser**: don't raise ValueError on a GRANT or REVOKE with no privileges [CLAUDE] *(PR [#8271](https://github.com/tobymao/sqlglot/pull/8271) by [@tsamaras](https://github.com/tsamaras))*
|
|
194
|
+
- [`3762ef4`](https://github.com/tobymao/sqlglot/commit/3762ef4361895ad764a8c3e117132d6a0d1c47df) - **parser**: Parse MOD at multiplicative precedence *(PR [#8259](https://github.com/tobymao/sqlglot/pull/8259) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
|
|
195
|
+
- [`3110e15`](https://github.com/tobymao/sqlglot/commit/3110e151bfe6e229ec6b85708a56a9340a56c6a6) - **sqlite**: preserve explicit end bound in RANGE CURRENT ROW window frames [CLAUDE] *(PR [#8267](https://github.com/tobymao/sqlglot/pull/8267) by [@AmirF194](https://github.com/AmirF194))*
|
|
196
|
+
- :arrow_lower_right: *fixes issue [#8209](https://github.com/tobymao/sqlglot/issues/8209) opened by [@glaziermag](https://github.com/glaziermag)*
|
|
197
|
+
- [`d0aa2b4`](https://github.com/tobymao/sqlglot/commit/d0aa2b432498ec00f88a8721a904afe2e1b5c24d) - **optimizer**: raise OptimizeError instead of corrupting the scope graph in _traverse_union [CLAUDE] *(PR [#8269](https://github.com/tobymao/sqlglot/pull/8269) by [@chaitanyaatlan](https://github.com/chaitanyaatlan))*
|
|
198
|
+
- :arrow_lower_right: *fixes issue [#8268](https://github.com/tobymao/sqlglot/issues/8268) opened by [@chaitanyaatlan](https://github.com/chaitanyaatlan)*
|
|
199
|
+
- [`9fac05c`](https://github.com/tobymao/sqlglot/commit/9fac05c062f0c9258cee2c72108a14f498f47737) - **sqlite**: keep the `COALESCE` wrapping when `CONCAT` is generated as `||` *(PR [#8283](https://github.com/tobymao/sqlglot/pull/8283) by [@ebarkhordar](https://github.com/ebarkhordar))*
|
|
200
|
+
- [`2be2afc`](https://github.com/tobymao/sqlglot/commit/2be2afc69fcaeee5bc83ecab555fbdc0a0891b81) - **optimizer**: don't push WHERE predicates into sources a later RIGHT or FULL join null-extends [CLAUDE] *(PR [#8282](https://github.com/tobymao/sqlglot/pull/8282) by [@jaideeppyne](https://github.com/jaideeppyne))*
|
|
201
|
+
- [`9b25ca5`](https://github.com/tobymao/sqlglot/commit/9b25ca5dbef52c348cb9a45706bac4f41fb56f4d) - **mysql**: parse BINARY column attribute as a column constraint [CLAUDE] *(PR [#8286](https://github.com/tobymao/sqlglot/pull/8286) by [@PhuocOng](https://github.com/PhuocOng))*
|
|
202
|
+
- [`67cf1ec`](https://github.com/tobymao/sqlglot/commit/67cf1ec91dfe2658f41c049130ab242a40bf4789) - **parser**: stop GROUP BY from consuming query modifiers [CLAUDE] *(PR [#8285](https://github.com/tobymao/sqlglot/pull/8285) by [@Kunal8954](https://github.com/Kunal8954))*
|
|
203
|
+
- :arrow_lower_right: *fixes issue [#8279](https://github.com/tobymao/sqlglot/issues/8279) opened by [@RogerHYang](https://github.com/RogerHYang)*
|
|
204
|
+
- [`6b9cb87`](https://github.com/tobymao/sqlglot/commit/6b9cb87bd01ed4606d1902a0266ff79aad78b54f) - **postgres**: preserve quoting of the one-byte "char" type [CLAUDE] *(PR [#8284](https://github.com/tobymao/sqlglot/pull/8284) by [@Kunal8954](https://github.com/Kunal8954))*
|
|
205
|
+
- :arrow_lower_right: *fixes issue [#8280](https://github.com/tobymao/sqlglot/issues/8280) opened by [@RogerHYang](https://github.com/RogerHYang)*
|
|
206
|
+
- [`e2f4ad7`](https://github.com/tobymao/sqlglot/commit/e2f4ad7d50cb764c78da69b5ca7933c69156ebaa) - **redshift**: preserve quoting of the one-byte "char" type *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
207
|
+
- [`f064484`](https://github.com/tobymao/sqlglot/commit/f064484b68547d9c80a9bcecd5e07dd8a056a36b) - **postgres**: normalize DATE_PART unit casing to match EXTRACT [CLAUDE] *(PR [#8293](https://github.com/tobymao/sqlglot/pull/8293) by [@PhuocOng](https://github.com/PhuocOng))*
|
|
208
|
+
- :arrow_lower_right: *fixes issue [#8292](https://github.com/tobymao/sqlglot/issues/8292) opened by [@PhuocOng](https://github.com/PhuocOng)*
|
|
209
|
+
- [`d546830`](https://github.com/tobymao/sqlglot/commit/d5468304f6a1b8e9ec20aa3ea8564031be2f6e0e) - **spark**: distinguish GROUPING SETS suffix syntax *(PR [#8288](https://github.com/tobymao/sqlglot/pull/8288) by [@treysp](https://github.com/treysp))*
|
|
210
|
+
- :arrow_lower_right: *fixes issue [#8266](https://github.com/tobymao/sqlglot/issues/8266) opened by [@wwzhe007](https://github.com/wwzhe007)*
|
|
211
|
+
- [`c6c1fa4`](https://github.com/tobymao/sqlglot/commit/c6c1fa4d3775eadd8673ddb9a8d4211dfe1cdd4f) - **transforms**: keep the table when dropping an unnamed UNIQUE constraint [CLAUDE] *(PR [#8300](https://github.com/tobymao/sqlglot/pull/8300) by [@PhuocOng](https://github.com/PhuocOng))*
|
|
212
|
+
- :arrow_lower_right: *fixes issue [#8297](https://github.com/tobymao/sqlglot/issues/8297) opened by [@krishnakaanchan-png](https://github.com/krishnakaanchan-png)*
|
|
213
|
+
- [`bb6220b`](https://github.com/tobymao/sqlglot/commit/bb6220b76a852e87b95f0b6d00979732b29fcc1f) - **snowflake**: stop dropping structured types on CREATE TABLE [GROK] *(PR [#8299](https://github.com/tobymao/sqlglot/pull/8299) by [@ishaan-upadhyay](https://github.com/ishaan-upadhyay))*
|
|
214
|
+
- :arrow_lower_right: *fixes issue [#8298](https://github.com/tobymao/sqlglot/issues/8298) opened by [@ishaan-upadhyay](https://github.com/ishaan-upadhyay)*
|
|
215
|
+
- [`b3f23fe`](https://github.com/tobymao/sqlglot/commit/b3f23fe3cfc8107d349e058649728045c707fe5d) - **generator**: mod generation precedence *(PR [#8290](https://github.com/tobymao/sqlglot/pull/8290) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
|
|
216
|
+
- [`2391144`](https://github.com/tobymao/sqlglot/commit/23911445cb38e14978ab9a4e0b29d0a58b80fa88) - **postgres**: keep the time zone argument of DATE_TRUNC [CLAUDE] *(PR [#8305](https://github.com/tobymao/sqlglot/pull/8305) by [@dylanpulver](https://github.com/dylanpulver))*
|
|
217
|
+
|
|
218
|
+
### :zap: Performance Improvements
|
|
219
|
+
- [`1fa9653`](https://github.com/tobymao/sqlglot/commit/1fa965376ccf6e972c6aa4a3c6a587f4bce9b494) - **dialects**: cache dialect classes resolved through the package __getattr__ *(PR [#8303](https://github.com/tobymao/sqlglot/pull/8303) by [@tobymao](https://github.com/tobymao))*
|
|
220
|
+
|
|
221
|
+
### :recycle: Refactors
|
|
222
|
+
- [`829c2b1`](https://github.com/tobymao/sqlglot/commit/829c2b1c7061cbdc6c65ae7ea13dea73aa12522a) - clean up nth_value from [first|last] support *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
223
|
+
- [`b11c3d9`](https://github.com/tobymao/sqlglot/commit/b11c3d915ca617ea6f343b0c7cc4b392766fdaa0) - **optimizer**: clean up `pushdown_projections` *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
224
|
+
|
|
225
|
+
### :white_check_mark: Tests
|
|
226
|
+
- [`ceb5111`](https://github.com/tobymao/sqlglot/commit/ceb5111421e9aa6135f7c650c1995ee19f9528a2) - **clickhouse**: pin the trim renderings for non-ClickHouse targets *(commit by [@tobymao](https://github.com/tobymao))*
|
|
227
|
+
- [`99947fb`](https://github.com/tobymao/sqlglot/commit/99947fbcc5fa34f4db6354c97f6cef79c105d41b) - **executor**: pin the clock in test_scalar_functions to fix a rollover flake [CLAUDE] *(PR [#8276](https://github.com/tobymao/sqlglot/pull/8276) by [@nikolauspschuetz](https://github.com/nikolauspschuetz))*
|
|
228
|
+
|
|
229
|
+
### :wrench: Chores
|
|
230
|
+
- [`a04d327`](https://github.com/tobymao/sqlglot/commit/a04d327b10902537a414f0fa64f91afa1e622e32) - **parser**: clean up multi-table DROP TABLE *(commit by [@geooo109](https://github.com/geooo109))*
|
|
231
|
+
- [`d002d4d`](https://github.com/tobymao/sqlglot/commit/d002d4dac34967ff10df31557b278a427e63428d) - **clickhouse**: tidy up the trim builders and tests *(commit by [@tobymao](https://github.com/tobymao))*
|
|
232
|
+
- [`37362f4`](https://github.com/tobymao/sqlglot/commit/37362f4fc1d63c4687149cec3a8aab109c1eb989) - simplify TRIMBOTH parsing for ck *(commit by [@geooo109](https://github.com/geooo109))*
|
|
233
|
+
|
|
234
|
+
|
|
4
235
|
## [v30.17.0] - 2026-08-12
|
|
5
236
|
### :boom: BREAKING CHANGES
|
|
6
237
|
- due to [`5c12472`](https://github.com/tobymao/sqlglot/commit/5c12472a8016dff6eb8d9aab9c9a029adab2d514) - stop optimizing OR-conditioned joins and anti joins *(PR [#8118](https://github.com/tobymao/sqlglot/pull/8118) by [@georgesittas](https://github.com/georgesittas))*:
|
|
@@ -15484,3 +15715,4 @@ pip install "sqlglot[c]" # compiled — faster, but no subclassing
|
|
|
15484
15715
|
[v30.14.0]: https://github.com/tobymao/sqlglot/compare/v30.13.0...v30.14.0
|
|
15485
15716
|
[v30.16.0]: https://github.com/tobymao/sqlglot/compare/v30.15.0...v30.16.0
|
|
15486
15717
|
[v30.17.0]: https://github.com/tobymao/sqlglot/compare/v30.16.0...v30.17.0
|
|
15718
|
+
[v30.18.0]: https://github.com/tobymao/sqlglot/compare/v30.17.0...v30.18.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sqlglot
|
|
3
|
-
Version: 30.
|
|
3
|
+
Version: 30.19.0
|
|
4
4
|
Summary: An easily customizable SQL parser and transpiler
|
|
5
5
|
Author-email: Toby Mao <toby.mao@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -34,10 +34,10 @@ Requires-Dist: types-pytz; extra == "dev"
|
|
|
34
34
|
Requires-Dist: typing_extensions; extra == "dev"
|
|
35
35
|
Requires-Dist: pyperf; extra == "dev"
|
|
36
36
|
Provides-Extra: c
|
|
37
|
-
Requires-Dist: sqlglotc==30.
|
|
37
|
+
Requires-Dist: sqlglotc==30.19.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.19.0; python_version >= "3.10" and extra == "rs"
|
|
41
41
|
Dynamic: license-file
|
|
42
42
|
Dynamic: provides-extra
|
|
43
43
|
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '30.
|
|
22
|
-
__version_tuple__ = version_tuple = (30,
|
|
21
|
+
__version__ = version = '30.19.0'
|
|
22
|
+
__version_tuple__ = version_tuple = (30, 19, 0)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g025622283'
|
|
@@ -2285,15 +2285,12 @@ def json_extract_segments(
|
|
|
2285
2285
|
|
|
2286
2286
|
segments = []
|
|
2287
2287
|
for segment in path.expressions:
|
|
2288
|
-
escape = segment.args.get("quoted")
|
|
2289
2288
|
path = self.sql(segment)
|
|
2290
2289
|
if path:
|
|
2291
2290
|
if isinstance(segment, exp.JSONPathPart) and (
|
|
2292
2291
|
quoted_index or not isinstance(segment, exp.JSONPathSubscript)
|
|
2293
2292
|
):
|
|
2294
|
-
|
|
2295
|
-
path = self.escape_str(path)
|
|
2296
|
-
|
|
2293
|
+
path = self.escape_str(path)
|
|
2297
2294
|
path = f"{self.dialect.QUOTE_START}{path}{self.dialect.QUOTE_END}"
|
|
2298
2295
|
|
|
2299
2296
|
segments.append(path)
|
|
@@ -204,6 +204,10 @@ def interval(this, unit):
|
|
|
204
204
|
return datetime.timedelta(**{unit.lower(): float(this)})
|
|
205
205
|
|
|
206
206
|
|
|
207
|
+
def zip_not_null(*args):
|
|
208
|
+
return (row for row in zip(*args) if all(v is not None for v in row))
|
|
209
|
+
|
|
210
|
+
|
|
207
211
|
@null_if_any
|
|
208
212
|
def arrayconcat(*args):
|
|
209
213
|
result = []
|
|
@@ -241,6 +245,7 @@ ENV = {
|
|
|
241
245
|
"ARRAYUNIQUEAGG": filter_nulls(lambda acc: list(set(acc))),
|
|
242
246
|
"AVG": filter_nulls(statistics.fmean if PYTHON_VERSION >= (3, 8) else statistics.mean), # type: ignore
|
|
243
247
|
"COUNT": filter_nulls(lambda acc: sum(1 for _ in acc), False),
|
|
248
|
+
"FIRST": lambda acc: next(iter(acc), None),
|
|
244
249
|
"MAX": filter_nulls(max),
|
|
245
250
|
"MIN": filter_nulls(min),
|
|
246
251
|
"SUM": filter_nulls(sum),
|
|
@@ -299,6 +304,7 @@ ENV = {
|
|
|
299
304
|
"SUBSTRING": substring,
|
|
300
305
|
"TIMESTRTOTIME": null_if_any(lambda arg: datetime.datetime.fromisoformat(arg)),
|
|
301
306
|
"UPPER": null_if_any(lambda arg: arg.upper()),
|
|
307
|
+
"ZIPNOTNULL": zip_not_null,
|
|
302
308
|
"YEAR": null_if_any(lambda arg: arg.year),
|
|
303
309
|
"MONTH": null_if_any(lambda arg: arg.month),
|
|
304
310
|
"DAY": null_if_any(lambda arg: arg.day),
|
|
@@ -49,3 +49,6 @@ from sqlglot.helper import subclasses
|
|
|
49
49
|
ALL_FUNCTIONS = subclasses(__name__, Func, {AggFunc, Anonymous, Func})
|
|
50
50
|
FUNCTION_BY_NAME = {name: func for func in ALL_FUNCTIONS for name in func.sql_names()}
|
|
51
51
|
EXPR_CLASSES: dict[str, type[Expr]] = {cls.key: cls for cls in subclasses(__name__, Expr)}
|
|
52
|
+
|
|
53
|
+
# Functions that can return multiple rows. We include anonymous functions conservatively.
|
|
54
|
+
SET_RETURNING_FUNCTIONS = (Anonymous, UDTF, ExplodingGenerateSeries)
|
|
@@ -5,6 +5,12 @@ from __future__ import annotations
|
|
|
5
5
|
from sqlglot.expressions.core import Expression, Func, AggFunc, Binary
|
|
6
6
|
|
|
7
7
|
|
|
8
|
+
class Agg(Expression, AggFunc):
|
|
9
|
+
@property
|
|
10
|
+
def output_name(self) -> str:
|
|
11
|
+
return self.this.name
|
|
12
|
+
|
|
13
|
+
|
|
8
14
|
class AIAgg(Expression, AggFunc):
|
|
9
15
|
arg_types = {"this": True, "expression": True}
|
|
10
16
|
_sql_names = ["AI_AGG"]
|
|
@@ -240,10 +240,15 @@ class Explode(Expression, Func, UDTF):
|
|
|
240
240
|
is_var_len_args = True
|
|
241
241
|
|
|
242
242
|
|
|
243
|
-
class Inline(Expression, Func):
|
|
243
|
+
class Inline(Expression, Func, UDTF):
|
|
244
244
|
pass
|
|
245
245
|
|
|
246
246
|
|
|
247
|
+
class Stack(Expression, Func, UDTF):
|
|
248
|
+
arg_types = {"this": True, "expressions": True}
|
|
249
|
+
is_var_len_args = True
|
|
250
|
+
|
|
251
|
+
|
|
247
252
|
@trait
|
|
248
253
|
class ExplodeOuter(Expr):
|
|
249
254
|
pass
|
|
@@ -1828,6 +1828,10 @@ class Identifier(Expression):
|
|
|
1828
1828
|
class DynamicIdentifier(Expression, Func):
|
|
1829
1829
|
arg_types = {"this": True, "expressions": False}
|
|
1830
1830
|
|
|
1831
|
+
@property
|
|
1832
|
+
def name(self) -> str:
|
|
1833
|
+
return self.this.name if self.this else ""
|
|
1834
|
+
|
|
1831
1835
|
|
|
1832
1836
|
class Opclass(Expression):
|
|
1833
1837
|
arg_types = {"this": True, "expression": True}
|
|
@@ -240,6 +240,10 @@ class OpenJSON(Expression, Func):
|
|
|
240
240
|
arg_types = {"this": True, "path": False, "expressions": False}
|
|
241
241
|
|
|
242
242
|
|
|
243
|
+
class FromJson(Expression, Func):
|
|
244
|
+
arg_types = {"this": True, "expression": True, "options": False}
|
|
245
|
+
|
|
246
|
+
|
|
243
247
|
class ParseJSON(Expression, Func):
|
|
244
248
|
# BigQuery, Snowflake have PARSE_JSON, Presto has JSON_PARSE
|
|
245
249
|
# Snowflake also has TRY_PARSE_JSON, which is represented using `safe`
|
|
@@ -12,6 +12,7 @@ from sqlglot.expressions.core import (
|
|
|
12
12
|
Condition,
|
|
13
13
|
Distinct,
|
|
14
14
|
Dot,
|
|
15
|
+
DynamicIdentifier,
|
|
15
16
|
Expr,
|
|
16
17
|
Expression,
|
|
17
18
|
Func,
|
|
@@ -624,7 +625,6 @@ class Group(Expression):
|
|
|
624
625
|
arg_types = {
|
|
625
626
|
"expressions": False,
|
|
626
627
|
"grouping_sets": False,
|
|
627
|
-
"grouping_sets_as_group_by_element": False,
|
|
628
628
|
"cube": False,
|
|
629
629
|
"rollup": False,
|
|
630
630
|
"totals": False,
|
|
@@ -967,9 +967,10 @@ class Table(Expression, Selectable):
|
|
|
967
967
|
|
|
968
968
|
@property
|
|
969
969
|
def name(self) -> str:
|
|
970
|
-
|
|
970
|
+
this = self.this
|
|
971
|
+
if not this or (isinstance(this, Func) and not isinstance(this, DynamicIdentifier)):
|
|
971
972
|
return ""
|
|
972
|
-
return
|
|
973
|
+
return this.name
|
|
973
974
|
|
|
974
975
|
@property
|
|
975
976
|
def db(self) -> str:
|
|
@@ -1019,6 +1020,20 @@ class Table(Expression, Selectable):
|
|
|
1019
1020
|
return col
|
|
1020
1021
|
|
|
1021
1022
|
|
|
1023
|
+
def _is_star(expression: Expr) -> bool:
|
|
1024
|
+
stack = [expression]
|
|
1025
|
+
while stack:
|
|
1026
|
+
node = stack.pop()
|
|
1027
|
+
if isinstance(node, SetOperation):
|
|
1028
|
+
stack.append(node.this)
|
|
1029
|
+
stack.append(node.expression)
|
|
1030
|
+
elif isinstance(node, Subquery):
|
|
1031
|
+
stack.append(node.this)
|
|
1032
|
+
elif node.is_star:
|
|
1033
|
+
return True
|
|
1034
|
+
return False
|
|
1035
|
+
|
|
1036
|
+
|
|
1022
1037
|
class SetOperation(Expression, Query):
|
|
1023
1038
|
arg_types = {
|
|
1024
1039
|
"with_": False,
|
|
@@ -1061,7 +1076,7 @@ class SetOperation(Expression, Query):
|
|
|
1061
1076
|
|
|
1062
1077
|
@property
|
|
1063
1078
|
def is_star(self) -> bool:
|
|
1064
|
-
return self
|
|
1079
|
+
return _is_star(self)
|
|
1065
1080
|
|
|
1066
1081
|
@property
|
|
1067
1082
|
def selects(self) -> list[Expr]:
|
|
@@ -1719,7 +1734,7 @@ class Subquery(Expression, DerivedTable, Query):
|
|
|
1719
1734
|
|
|
1720
1735
|
@property
|
|
1721
1736
|
def is_star(self) -> bool:
|
|
1722
|
-
return self
|
|
1737
|
+
return _is_star(self)
|
|
1723
1738
|
|
|
1724
1739
|
@property
|
|
1725
1740
|
def output_name(self) -> str:
|