sqlglot 30.15.0__tar.gz → 30.17.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.15.0 → sqlglot-30.17.0}/CHANGELOG.md +211 -0
- {sqlglot-30.15.0/sqlglot.egg-info → sqlglot-30.17.0}/PKG-INFO +4 -4
- {sqlglot-30.15.0 → sqlglot-30.17.0}/setup.py +1 -1
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/_version.py +3 -3
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/dialect.py +5 -1
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/errors.py +15 -1
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/executor/env.py +9 -3
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/expressions/array.py +6 -4
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/expressions/core.py +30 -15
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/expressions/ddl.py +1 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/expressions/json.py +4 -3
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/expressions/query.py +26 -1
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/expressions/string.py +3 -3
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generator.py +77 -14
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/bigquery.py +1 -1
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/clickhouse.py +3 -2
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/doris.py +5 -2
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/duckdb.py +24 -22
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/hive.py +7 -3
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/mysql.py +11 -6
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/postgres.py +8 -1
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/python.py +14 -1
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/singlestore.py +2 -1
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/snowflake.py +1 -1
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/spark2.py +5 -1
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/sqlite.py +23 -2
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/starrocks.py +3 -2
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/trino.py +60 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/tsql.py +1 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/lineage.py +78 -33
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/optimizer/annotate_types.py +21 -6
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/optimizer/canonicalize_internal_names.py +6 -4
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/optimizer/eliminate_subqueries.py +8 -1
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/optimizer/optimize_joins.py +8 -3
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/optimizer/pushdown_projections.py +73 -5
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/optimizer/qualify_columns.py +41 -15
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/optimizer/qualify_tables.py +23 -2
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/optimizer/scope.py +64 -5
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/optimizer/simplify.py +19 -5
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/optimizer/unnest_subqueries.py +7 -6
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parser.py +121 -25
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/clickhouse.py +26 -17
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/duckdb.py +11 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/mysql.py +1 -1
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/postgres.py +16 -1
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/prql.py +2 -2
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/snowflake.py +11 -4
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/spark2.py +5 -0
- sqlglot-30.17.0/sqlglot/parsers/sqlite.py +204 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/teradata.py +1 -1
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/trino.py +118 -9
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/tsql.py +8 -2
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/tokenizer_core.py +1 -1
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/typing/__init__.py +2 -2
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/typing/bigquery.py +0 -2
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/typing/databricks.py +0 -1
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/typing/hive.py +5 -5
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/typing/mysql.py +44 -0
- sqlglot-30.17.0/sqlglot/typing/postgres.py +21 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/typing/snowflake.py +0 -3
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/typing/spark.py +2 -6
- {sqlglot-30.15.0 → sqlglot-30.17.0/sqlglot.egg-info}/PKG-INFO +4 -4
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot.egg-info/SOURCES.txt +1 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot.egg-info/requires.txt +3 -3
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot.egg-info/scm_file_list.json +322 -321
- sqlglot-30.17.0/sqlglot.egg-info/scm_version.json +8 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglotc/pyproject.toml +2 -2
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_bigquery.py +9 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_clickhouse.py +30 -6
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_mysql.py +0 -3
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_postgres.py +48 -2
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_sqlite.py +99 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_trino.py +278 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_tsql.py +21 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/identity.sql +1 -1
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/annotate_functions.sql +290 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/canonicalize_internal_names.sql +4 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/eliminate_subqueries.sql +12 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/optimize_joins.sql +9 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/pushdown_projections.sql +70 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/qualify_columns.sql +23 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/qualify_tables.sql +14 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/simplify.sql +79 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-ds/tpc-ds.sql +5 -5
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/test_executor.py +91 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/test_expressions.py +39 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/test_lineage.py +126 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/test_optimizer.py +200 -2
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/test_tokens.py +6 -2
- sqlglot-30.17.0/tests/test_typing.py +83 -0
- sqlglot-30.15.0/sqlglot/parsers/sqlite.py +0 -101
- sqlglot-30.15.0/sqlglot/typing/postgres.py +0 -11
- sqlglot-30.15.0/sqlglot.egg-info/scm_version.json +0 -8
- {sqlglot-30.15.0 → sqlglot-30.17.0}/.gitignore +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/.gitmodules +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/.gitpod.yml +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/.pre-commit-config.yaml +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/AGENTS.md +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/CLAUDE.md +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/CONTRIBUTING.md +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/LICENSE +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/MANIFEST.in +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/Makefile +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/README.md +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/pyproject.toml +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/setup.cfg +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/__init__.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/__main__.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/_typing.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/anonymize.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/__init__.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/athena.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/bigquery.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/clickhouse.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/databricks.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/dax.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/doris.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/dremio.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/drill.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/druid.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/duckdb.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/dune.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/exasol.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/fabric.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/hive.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/materialize.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/mysql.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/oracle.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/postgres.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/presto.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/prql.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/redshift.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/risingwave.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/singlestore.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/snowflake.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/solr.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/spark.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/spark2.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/sqlite.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/starrocks.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/tableau.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/teradata.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/trino.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/dialects/tsql.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/diff.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/executor/__init__.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/executor/context.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/executor/python.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/executor/table.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/expressions/__init__.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/expressions/aggregate.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/expressions/builders.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/expressions/constraints.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/expressions/datatypes.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/expressions/dml.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/expressions/functions.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/expressions/math.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/expressions/properties.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/expressions/temporal.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/__init__.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/athena.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/databricks.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/dax.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/dremio.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/drill.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/druid.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/dune.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/exasol.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/fabric.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/materialize.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/oracle.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/presto.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/prql.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/redshift.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/risingwave.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/solr.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/spark.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/tableau.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/generators/teradata.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/helper.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/jsonpath.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/optimizer/__init__.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/optimizer/canonicalize.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/optimizer/eliminate_ctes.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/optimizer/eliminate_joins.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/optimizer/isolate_table_selects.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/optimizer/journal.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/optimizer/merge_subqueries.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/optimizer/normalize.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/optimizer/normalize_identifiers.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/optimizer/optimizer.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/optimizer/pushdown_predicates.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/optimizer/qualify.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/optimizer/resolver.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/__init__.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/athena.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/base.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/bigquery.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/databricks.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/dax.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/doris.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/dremio.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/drill.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/druid.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/dune.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/exasol.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/fabric.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/hive.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/materialize.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/oracle.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/presto.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/redshift.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/risingwave.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/singlestore.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/solr.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/spark.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/starrocks.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/parsers/tableau.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/planner.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/py.typed +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/schema.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/serde.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/time.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/tokens.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/transforms.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/trie.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/typing/clickhouse.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/typing/duckdb.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/typing/presto.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/typing/redshift.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/typing/spark2.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot/typing/tsql.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot.egg-info/dependency_links.txt +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot.egg-info/top_level.txt +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglot.png +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglotc/MANIFEST.in +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/sqlglotc/setup.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/__init__.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/__init__.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_athena.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_databricks.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_dax.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_dialect.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_doris.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_dremio.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_drill.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_druid.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_duckdb.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_dune.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_exasol.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_fabric.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_hive.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_materialize.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_oracle.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_pipe_syntax.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_presto.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_prql.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_redshift.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_risingwave.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_singlestore.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_snowflake.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_solr.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_spark.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_starrocks.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_tableau.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/dialects/test_teradata.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/jsonpath/LICENSE +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/jsonpath/cts.json +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/annotate_types.sql +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/canonicalize.sql +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/eliminate_ctes.sql +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/eliminate_joins.sql +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/isolate_table_selects.sql +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/merge_subqueries.sql +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/normalize.sql +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/normalize_identifiers.sql +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/optimizer.sql +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/pushdown_cte_alias_columns.sql +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/pushdown_predicates.sql +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/qualify_columns__invalid.sql +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/qualify_columns__with_invisible.sql +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/qualify_columns_ddl.sql +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/quote_identifiers.sql +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-ds/call_center.csv.gz +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-ds/catalog_page.csv.gz +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-ds/catalog_returns.csv.gz +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-ds/catalog_sales.csv.gz +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-ds/customer.csv.gz +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-ds/customer_address.csv.gz +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-ds/customer_demographics.csv.gz +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-ds/date_dim.csv.gz +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-ds/household_demographics.csv.gz +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-ds/income_band.csv.gz +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-ds/inventory.csv.gz +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-ds/item.csv.gz +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-ds/promotion.csv.gz +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-ds/reason.csv.gz +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-ds/ship_mode.csv.gz +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-ds/store.csv.gz +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-ds/store_returns.csv.gz +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-ds/store_sales.csv.gz +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-ds/time_dim.csv.gz +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-ds/warehouse.csv.gz +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-ds/web_page.csv.gz +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-ds/web_returns.csv.gz +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-ds/web_sales.csv.gz +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-ds/web_site.csv.gz +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-h/customer.csv.gz +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-h/lineitem.csv.gz +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-h/nation.csv.gz +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-h/orders.csv.gz +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-h/part.csv.gz +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-h/partsupp.csv.gz +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-h/region.csv.gz +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-h/supplier.csv.gz +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/tpc-h/tpc-h.sql +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/optimizer/unnest_subqueries.sql +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/partial.sql +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/fixtures/pretty.sql +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/gen_fixtures.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/helpers.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/leakcheck.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/sqlglot/__init__.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/test_anonymize.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/test_build.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/test_dialect_entry_points.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/test_dialect_imports.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/test_diff.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/test_docs.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/test_errors.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/test_generator.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/test_helper.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/test_integration_loader.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/test_jsonpath.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/test_parser.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/test_schema.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/test_serde.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/test_time.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/test_transforms.py +0 -0
- {sqlglot-30.15.0 → sqlglot-30.17.0}/tests/test_transpile.py +0 -0
|
@@ -1,6 +1,216 @@
|
|
|
1
1
|
Changelog
|
|
2
2
|
=========
|
|
3
3
|
|
|
4
|
+
## [v30.16.0] - 2026-08-10
|
|
5
|
+
### :boom: BREAKING CHANGES
|
|
6
|
+
- due to [`32d44c5`](https://github.com/tobymao/sqlglot/commit/32d44c50d0138762c812a9326bb394eebd862464) - annotate bit_and for mysql *(PR [#8038](https://github.com/tobymao/sqlglot/pull/8038) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
7
|
+
|
|
8
|
+
annotate bit_and for mysql (#8038)
|
|
9
|
+
|
|
10
|
+
- due to [`3329bb6`](https://github.com/tobymao/sqlglot/commit/3329bb6776761a355dbc8cddcdd2a4bb1807286c) - annotate ArraySize as INT for Hive et al *(PR [#8046](https://github.com/tobymao/sqlglot/pull/8046) by [@georgesittas](https://github.com/georgesittas))*:
|
|
11
|
+
|
|
12
|
+
annotate ArraySize as INT for Hive et al (#8046)
|
|
13
|
+
|
|
14
|
+
- due to [`109eb55`](https://github.com/tobymao/sqlglot/commit/109eb55a6d57ac5f4e9e95d985107705740310e9) - annotate bit_xor, update bit_and for mysql *(PR [#8045](https://github.com/tobymao/sqlglot/pull/8045) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
15
|
+
|
|
16
|
+
annotate bit_xor, update bit_and for mysql (#8045)
|
|
17
|
+
|
|
18
|
+
- due to [`445d04f`](https://github.com/tobymao/sqlglot/commit/445d04fe7efb7c191a6bcf2c4592090c562e08ca) - annotate bit_or for mysql *(PR [#8047](https://github.com/tobymao/sqlglot/pull/8047) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
19
|
+
|
|
20
|
+
annotate bit_or for mysql (#8047)
|
|
21
|
+
|
|
22
|
+
- due to [`d4742de`](https://github.com/tobymao/sqlglot/commit/d4742deec595b8fa0a85da5339ed56e018234636) - prevent fabrication of struct-field refs for schema-less correlated columns *(PR [#8043](https://github.com/tobymao/sqlglot/pull/8043) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*:
|
|
23
|
+
|
|
24
|
+
prevent fabrication of struct-field refs for schema-less correlated columns (#8043)
|
|
25
|
+
|
|
26
|
+
- due to [`c0ee97f`](https://github.com/tobymao/sqlglot/commit/c0ee97f6e74f34945641a1e3e67f6ad581831e9f) - annotate jsonobjecttag for mysql *(PR [#8048](https://github.com/tobymao/sqlglot/pull/8048) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
27
|
+
|
|
28
|
+
annotate jsonobjecttag for mysql (#8048)
|
|
29
|
+
|
|
30
|
+
- due to [`00ca3ed`](https://github.com/tobymao/sqlglot/commit/00ca3ed452a5a315447ede73c75e70520dd11e68) - only qualify lateral sources in their defining scope *(PR [#8049](https://github.com/tobymao/sqlglot/pull/8049) by [@georgesittas](https://github.com/georgesittas))*:
|
|
31
|
+
|
|
32
|
+
only qualify lateral sources in their defining scope (#8049)
|
|
33
|
+
|
|
34
|
+
- due to [`cb4a821`](https://github.com/tobymao/sqlglot/commit/cb4a8214605bf038c185a6b09d2541ff39475650) - trace columns through chained (UN)PIVOT operators *(PR [#8042](https://github.com/tobymao/sqlglot/pull/8042) by [@georgesittas](https://github.com/georgesittas))*:
|
|
35
|
+
|
|
36
|
+
trace columns through chained (UN)PIVOT operators (#8042)
|
|
37
|
+
|
|
38
|
+
- due to [`9976fe1`](https://github.com/tobymao/sqlglot/commit/9976fe11ad1ac3c10029c5ef77b6717811e963cb) - annotate jsonobject for mysql *(PR [#8052](https://github.com/tobymao/sqlglot/pull/8052) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
39
|
+
|
|
40
|
+
annotate jsonobject for mysql (#8052)
|
|
41
|
+
|
|
42
|
+
- due to [`adff713`](https://github.com/tobymao/sqlglot/commit/adff713cc3512ac06baec8fd1ae7339e022a2de5) - annotate jsonextract for mysql *(PR [#8054](https://github.com/tobymao/sqlglot/pull/8054) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
43
|
+
|
|
44
|
+
annotate jsonextract for mysql (#8054)
|
|
45
|
+
|
|
46
|
+
- due to [`5724156`](https://github.com/tobymao/sqlglot/commit/57241562e74eb0034142337fbe5a47484d3f26d1) - annotate jsonkeys for mysql *(PR [#8055](https://github.com/tobymao/sqlglot/pull/8055) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
47
|
+
|
|
48
|
+
annotate jsonkeys for mysql (#8055)
|
|
49
|
+
|
|
50
|
+
- due to [`ebb9700`](https://github.com/tobymao/sqlglot/commit/ebb97000f0e7ef72b39d6c07aa61e3bb30b52464) - annotate jsontype for mysql *(PR [#8056](https://github.com/tobymao/sqlglot/pull/8056) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
51
|
+
|
|
52
|
+
annotate jsontype for mysql (#8056)
|
|
53
|
+
|
|
54
|
+
- due to [`7daf3e4`](https://github.com/tobymao/sqlglot/commit/7daf3e4213bbc7db18c491aeea06d0048be77eb1) - annotate jsonarrayappend for mysql *(PR [#8057](https://github.com/tobymao/sqlglot/pull/8057) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
55
|
+
|
|
56
|
+
annotate jsonarrayappend for mysql (#8057)
|
|
57
|
+
|
|
58
|
+
- due to [`cc6ef38`](https://github.com/tobymao/sqlglot/commit/cc6ef3815d0927ed62d1737946291dd4bc7b2e2f) - annotate jsonarrayinsert for mysql *(PR [#8058](https://github.com/tobymao/sqlglot/pull/8058) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
59
|
+
|
|
60
|
+
annotate jsonarrayinsert for mysql (#8058)
|
|
61
|
+
|
|
62
|
+
- due to [`02bc4ed`](https://github.com/tobymao/sqlglot/commit/02bc4ed0d0cf8d434b3ffed12c7b99de521e7798) - annotate jsonremove for mysql *(PR [#8059](https://github.com/tobymao/sqlglot/pull/8059) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
63
|
+
|
|
64
|
+
annotate jsonremove for mysql (#8059)
|
|
65
|
+
|
|
66
|
+
- due to [`4eedeeb`](https://github.com/tobymao/sqlglot/commit/4eedeebe2257d2322c27865dc2c2335a0e764fd8) - annotate jsonset for mysql *(PR [#8060](https://github.com/tobymao/sqlglot/pull/8060) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
67
|
+
|
|
68
|
+
annotate jsonset for mysql (#8060)
|
|
69
|
+
|
|
70
|
+
- due to [`a537f84`](https://github.com/tobymao/sqlglot/commit/a537f8424743d1e70ab1b6b90363c140c67c981e) - annotate grouping for mysql *(PR [#8062](https://github.com/tobymao/sqlglot/pull/8062) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
71
|
+
|
|
72
|
+
annotate grouping for mysql (#8062)
|
|
73
|
+
|
|
74
|
+
- due to [`4e31179`](https://github.com/tobymao/sqlglot/commit/4e31179419c860be44e3c19dea22803da4367057) - annotate uuid for mysql *(PR [#8066](https://github.com/tobymao/sqlglot/pull/8066) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
75
|
+
|
|
76
|
+
annotate uuid for mysql (#8066)
|
|
77
|
+
|
|
78
|
+
- due to [`7fa1fbd`](https://github.com/tobymao/sqlglot/commit/7fa1fbd0506b874982755a9c0d0dec22bb46f82f) - annotate ToChar return type *(PR [#8064](https://github.com/tobymao/sqlglot/pull/8064) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*:
|
|
79
|
+
|
|
80
|
+
annotate ToChar return type (#8064)
|
|
81
|
+
|
|
82
|
+
- due to [`30c278e`](https://github.com/tobymao/sqlglot/commit/30c278e0f0f17a185902c787bb58c6b312f73fe5) - annotate boolean binary predicates as BOOLEAN [CLAUDE] *(PR [#8069](https://github.com/tobymao/sqlglot/pull/8069) by [@DivyaNarahari97](https://github.com/DivyaNarahari97))*:
|
|
83
|
+
|
|
84
|
+
annotate boolean binary predicates as BOOLEAN [CLAUDE] (#8069)
|
|
85
|
+
|
|
86
|
+
- due to [`a9c0bea`](https://github.com/tobymao/sqlglot/commit/a9c0bea7e1cda3819458bbf21c84896df4019a3e) - annotate types for adjacent, extends left/right, overlaps *(commit by [@georgesittas](https://github.com/georgesittas))*:
|
|
87
|
+
|
|
88
|
+
annotate types for adjacent, extends left/right, overlaps
|
|
89
|
+
|
|
90
|
+
- due to [`9e98d2c`](https://github.com/tobymao/sqlglot/commit/9e98d2cad7316263a54a928b3640f762f1fb6220) - annotate currentrole for mysql *(PR [#8072](https://github.com/tobymao/sqlglot/pull/8072) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
91
|
+
|
|
92
|
+
annotate currentrole for mysql (#8072)
|
|
93
|
+
|
|
94
|
+
- due to [`d94b9d5`](https://github.com/tobymao/sqlglot/commit/d94b9d50ff3280a32b5f0c14bc53b766003c2fc5) - annotate `TO_CHAR` for Spark *(commit by [@georgesittas](https://github.com/georgesittas))*:
|
|
95
|
+
|
|
96
|
+
annotate `TO_CHAR` for Spark
|
|
97
|
+
|
|
98
|
+
- due to [`d6d174e`](https://github.com/tobymao/sqlglot/commit/d6d174e85e37d7644d16c0bce3e4fb49384a6bc8) - map json_extract func to ->> closes [#8076](https://github.com/tobymao/sqlglot/pull/8076) *(commit by [@georgesittas](https://github.com/georgesittas))*:
|
|
99
|
+
|
|
100
|
+
map json_extract func to ->> closes #8076
|
|
101
|
+
|
|
102
|
+
- due to [`fa10c2c`](https://github.com/tobymao/sqlglot/commit/fa10c2c6460d18c17acbc10faecca9748be7a6c3) - preserve json_extract semantics instead of rewriting to -> *(PR [#8082](https://github.com/tobymao/sqlglot/pull/8082) by [@RogerHYang](https://github.com/RogerHYang))*:
|
|
103
|
+
|
|
104
|
+
preserve json_extract semantics instead of rewriting to -> (#8082)
|
|
105
|
+
|
|
106
|
+
- due to [`db7e0fc`](https://github.com/tobymao/sqlglot/commit/db7e0fc14cf9d3449b60e7dbfb9041272ab05cb1) - annotate current_role function *(PR [#8094](https://github.com/tobymao/sqlglot/pull/8094) by [@deepika-kakde](https://github.com/deepika-kakde))*:
|
|
107
|
+
|
|
108
|
+
annotate current_role function (#8094)
|
|
109
|
+
|
|
110
|
+
- due to [`c00ca98`](https://github.com/tobymao/sqlglot/commit/c00ca98d6fb0ae6968c70d6438d25a31b9f3eb4f) - annotate CurrentRole as VARCHAR *(commit by [@georgesittas](https://github.com/georgesittas))*:
|
|
111
|
+
|
|
112
|
+
annotate CurrentRole as VARCHAR
|
|
113
|
+
|
|
114
|
+
- due to [`ee1658a`](https://github.com/tobymao/sqlglot/commit/ee1658ae83be59de34d278cb5c2315fec796227b) - annotate Grouping function for databricks *(PR [#8098](https://github.com/tobymao/sqlglot/pull/8098) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*:
|
|
115
|
+
|
|
116
|
+
annotate Grouping function for databricks (#8098)
|
|
117
|
+
|
|
118
|
+
- due to [`13e6c07`](https://github.com/tobymao/sqlglot/commit/13e6c07984e3ba8c34021ae72366a014a8f54a4e) - annotate grouping properly in the hive hierarchy *(commit by [@georgesittas](https://github.com/georgesittas))*:
|
|
119
|
+
|
|
120
|
+
annotate grouping properly in the hive hierarchy
|
|
121
|
+
|
|
122
|
+
- due to [`afedce6`](https://github.com/tobymao/sqlglot/commit/afedce6180fc7bafb1de7bf2517070e53280ce1e) - annotate lead for mysql *(PR [#8090](https://github.com/tobymao/sqlglot/pull/8090) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
|
|
123
|
+
|
|
124
|
+
annotate lead for mysql (#8090)
|
|
125
|
+
|
|
126
|
+
- due to [`66ecca3`](https://github.com/tobymao/sqlglot/commit/66ecca33975e06fc862d3b159f8c4c1418fc04e9) - parse MODIFY COLUMN as AlterColumn *(PR [#8091](https://github.com/tobymao/sqlglot/pull/8091) by [@dgvj-work](https://github.com/dgvj-work))*:
|
|
127
|
+
|
|
128
|
+
parse MODIFY COLUMN as AlterColumn (#8091)
|
|
129
|
+
|
|
130
|
+
- due to [`f7dfbac`](https://github.com/tobymao/sqlglot/commit/f7dfbacd3b245aca169abb52f0b515230e9b6715) - classify boolean binary operators as Predicate *(PR [#8073](https://github.com/tobymao/sqlglot/pull/8073) by [@georgesittas](https://github.com/georgesittas))*:
|
|
131
|
+
|
|
132
|
+
classify boolean binary operators as Predicate (#8073)
|
|
133
|
+
|
|
134
|
+
- due to [`7810755`](https://github.com/tobymao/sqlglot/commit/7810755168e8d57d8e5f632248779ecfed782689) - move JSON extraction operators to Postgres's binary-operator precedence tier *(PR [#8063](https://github.com/tobymao/sqlglot/pull/8063) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*:
|
|
135
|
+
|
|
136
|
+
move JSON extraction operators to Postgres's binary-operator precedence tier (#8063)
|
|
137
|
+
|
|
138
|
+
- due to [`2f914c5`](https://github.com/tobymao/sqlglot/commit/2f914c54aa4817a0a5e65a0d7d5e7cba9037ac30) - parse ||, -> and ->> as a single tier that binds tighter than arithmetic closes [#8115](https://github.com/tobymao/sqlglot/pull/8115) *(commit by [@georgesittas](https://github.com/georgesittas))*:
|
|
139
|
+
|
|
140
|
+
parse ||, -> and ->> as a single tier that binds tighter than arithmetic closes #8115
|
|
141
|
+
|
|
142
|
+
- due to [`9fc3578`](https://github.com/tobymao/sqlglot/commit/9fc35781e4eba77dd5e771608bfb027be8f8c831) - specify variable length `Func` spill arg explicitly *(PR [#8120](https://github.com/tobymao/sqlglot/pull/8120) by [@georgesittas](https://github.com/georgesittas))*:
|
|
143
|
+
|
|
144
|
+
specify variable length `Func` spill arg explicitly (#8120)
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
### :sparkles: New Features
|
|
148
|
+
- [`32d44c5`](https://github.com/tobymao/sqlglot/commit/32d44c50d0138762c812a9326bb394eebd862464) - **optimizer**: annotate bit_and for mysql *(PR [#8038](https://github.com/tobymao/sqlglot/pull/8038) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
149
|
+
- [`109eb55`](https://github.com/tobymao/sqlglot/commit/109eb55a6d57ac5f4e9e95d985107705740310e9) - **optimizer**: annotate bit_xor, update bit_and for mysql *(PR [#8045](https://github.com/tobymao/sqlglot/pull/8045) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
150
|
+
- [`445d04f`](https://github.com/tobymao/sqlglot/commit/445d04fe7efb7c191a6bcf2c4592090c562e08ca) - **optimizer**: annotate bit_or for mysql *(PR [#8047](https://github.com/tobymao/sqlglot/pull/8047) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
151
|
+
- [`c0ee97f`](https://github.com/tobymao/sqlglot/commit/c0ee97f6e74f34945641a1e3e67f6ad581831e9f) - **optimizer**: annotate jsonobjecttag for mysql *(PR [#8048](https://github.com/tobymao/sqlglot/pull/8048) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
152
|
+
- [`9976fe1`](https://github.com/tobymao/sqlglot/commit/9976fe11ad1ac3c10029c5ef77b6717811e963cb) - **optimizer**: annotate jsonobject for mysql *(PR [#8052](https://github.com/tobymao/sqlglot/pull/8052) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
153
|
+
- [`adff713`](https://github.com/tobymao/sqlglot/commit/adff713cc3512ac06baec8fd1ae7339e022a2de5) - **optimizer**: annotate jsonextract for mysql *(PR [#8054](https://github.com/tobymao/sqlglot/pull/8054) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
154
|
+
- [`5724156`](https://github.com/tobymao/sqlglot/commit/57241562e74eb0034142337fbe5a47484d3f26d1) - **optimizer**: annotate jsonkeys for mysql *(PR [#8055](https://github.com/tobymao/sqlglot/pull/8055) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
155
|
+
- [`ebb9700`](https://github.com/tobymao/sqlglot/commit/ebb97000f0e7ef72b39d6c07aa61e3bb30b52464) - **optimizer**: annotate jsontype for mysql *(PR [#8056](https://github.com/tobymao/sqlglot/pull/8056) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
156
|
+
- [`7daf3e4`](https://github.com/tobymao/sqlglot/commit/7daf3e4213bbc7db18c491aeea06d0048be77eb1) - **optimizer**: annotate jsonarrayappend for mysql *(PR [#8057](https://github.com/tobymao/sqlglot/pull/8057) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
157
|
+
- [`cc6ef38`](https://github.com/tobymao/sqlglot/commit/cc6ef3815d0927ed62d1737946291dd4bc7b2e2f) - **optimizer**: annotate jsonarrayinsert for mysql *(PR [#8058](https://github.com/tobymao/sqlglot/pull/8058) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
158
|
+
- [`ffa349a`](https://github.com/tobymao/sqlglot/commit/ffa349abf91a4fa0eebb25db5055a4b4b09500c8) - **trino**: parse IF/ELSEIF/ELSE routine statements [CLAUDE] *(PR [#8044](https://github.com/tobymao/sqlglot/pull/8044) by [@rusackas](https://github.com/rusackas))*
|
|
159
|
+
- [`02bc4ed`](https://github.com/tobymao/sqlglot/commit/02bc4ed0d0cf8d434b3ffed12c7b99de521e7798) - **optimizer**: annotate jsonremove for mysql *(PR [#8059](https://github.com/tobymao/sqlglot/pull/8059) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
160
|
+
- [`4eedeeb`](https://github.com/tobymao/sqlglot/commit/4eedeebe2257d2322c27865dc2c2335a0e764fd8) - **optimizer**: annotate jsonset for mysql *(PR [#8060](https://github.com/tobymao/sqlglot/pull/8060) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
161
|
+
- [`a537f84`](https://github.com/tobymao/sqlglot/commit/a537f8424743d1e70ab1b6b90363c140c67c981e) - **optimizer**: annotate grouping for mysql *(PR [#8062](https://github.com/tobymao/sqlglot/pull/8062) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
162
|
+
- [`4e31179`](https://github.com/tobymao/sqlglot/commit/4e31179419c860be44e3c19dea22803da4367057) - **optimizer**: annotate uuid for mysql *(PR [#8066](https://github.com/tobymao/sqlglot/pull/8066) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
163
|
+
- [`7fa1fbd`](https://github.com/tobymao/sqlglot/commit/7fa1fbd0506b874982755a9c0d0dec22bb46f82f) - **optimizer**: annotate ToChar return type *(PR [#8064](https://github.com/tobymao/sqlglot/pull/8064) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*
|
|
164
|
+
- [`a9c0bea`](https://github.com/tobymao/sqlglot/commit/a9c0bea7e1cda3819458bbf21c84896df4019a3e) - **optimizer**: annotate types for adjacent, extends left/right, overlaps *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
165
|
+
- [`9e98d2c`](https://github.com/tobymao/sqlglot/commit/9e98d2cad7316263a54a928b3640f762f1fb6220) - **optimizer**: annotate currentrole for mysql *(PR [#8072](https://github.com/tobymao/sqlglot/pull/8072) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
166
|
+
- [`d94b9d5`](https://github.com/tobymao/sqlglot/commit/d94b9d50ff3280a32b5f0c14bc53b766003c2fc5) - **optimizer**: annotate `TO_CHAR` for Spark *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
167
|
+
- [`db7e0fc`](https://github.com/tobymao/sqlglot/commit/db7e0fc14cf9d3449b60e7dbfb9041272ab05cb1) - **optimizer**: annotate current_role function *(PR [#8094](https://github.com/tobymao/sqlglot/pull/8094) by [@deepika-kakde](https://github.com/deepika-kakde))*
|
|
168
|
+
- [`c00ca98`](https://github.com/tobymao/sqlglot/commit/c00ca98d6fb0ae6968c70d6438d25a31b9f3eb4f) - **optimizer**: annotate CurrentRole as VARCHAR *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
169
|
+
- [`ee1658a`](https://github.com/tobymao/sqlglot/commit/ee1658ae83be59de34d278cb5c2315fec796227b) - **optimizer**: annotate Grouping function for databricks *(PR [#8098](https://github.com/tobymao/sqlglot/pull/8098) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*
|
|
170
|
+
- [`011c461`](https://github.com/tobymao/sqlglot/commit/011c461da0d432c23c84f4fbb1159ff4992ad0a1) - **trino**: parse CASE routine statements [CLAUDE] *(PR [#8068](https://github.com/tobymao/sqlglot/pull/8068) by [@rusackas](https://github.com/rusackas))*
|
|
171
|
+
- [`afedce6`](https://github.com/tobymao/sqlglot/commit/afedce6180fc7bafb1de7bf2517070e53280ce1e) - **optimizer**: annotate lead for mysql *(PR [#8090](https://github.com/tobymao/sqlglot/pull/8090) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
|
|
172
|
+
- [`bbfb497`](https://github.com/tobymao/sqlglot/commit/bbfb497f16002da3cda10c927683a404a2fb694e) - **tokenizer**: add optional start/end indexes in `TokenError` *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
173
|
+
|
|
174
|
+
### :bug: Bug Fixes
|
|
175
|
+
- [`db410ab`](https://github.com/tobymao/sqlglot/commit/db410ab5ca369711c460189ed6a8566b7e37ca7c) - **optimizer**: remap GROUP BY ordinals on projection prune [GROK] *(PR [#8025](https://github.com/tobymao/sqlglot/pull/8025) by [@PriyankaDaneva](https://github.com/PriyankaDaneva))*
|
|
176
|
+
- [`3329bb6`](https://github.com/tobymao/sqlglot/commit/3329bb6776761a355dbc8cddcdd2a4bb1807286c) - **optimizer**: annotate ArraySize as INT for Hive et al *(PR [#8046](https://github.com/tobymao/sqlglot/pull/8046) by [@georgesittas](https://github.com/georgesittas))*
|
|
177
|
+
- [`d4742de`](https://github.com/tobymao/sqlglot/commit/d4742deec595b8fa0a85da5339ed56e018234636) - **optimizer**: prevent fabrication of struct-field refs for schema-less correlated columns *(PR [#8043](https://github.com/tobymao/sqlglot/pull/8043) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
|
|
178
|
+
- [`00ca3ed`](https://github.com/tobymao/sqlglot/commit/00ca3ed452a5a315447ede73c75e70520dd11e68) - **optimizer**: only qualify lateral sources in their defining scope *(PR [#8049](https://github.com/tobymao/sqlglot/pull/8049) by [@georgesittas](https://github.com/georgesittas))*
|
|
179
|
+
- [`cb4a821`](https://github.com/tobymao/sqlglot/commit/cb4a8214605bf038c185a6b09d2541ff39475650) - **lineage**: trace columns through chained (UN)PIVOT operators *(PR [#8042](https://github.com/tobymao/sqlglot/pull/8042) by [@georgesittas](https://github.com/georgesittas))*
|
|
180
|
+
- [`dedc7e3`](https://github.com/tobymao/sqlglot/commit/dedc7e3671eb180688c621c8053b7f86dc181dc6) - **optimizer**: expand qualify inner columns with QUALIFY/HAVING *(PR [#8050](https://github.com/tobymao/sqlglot/pull/8050) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
|
|
181
|
+
- [`0c19a6d`](https://github.com/tobymao/sqlglot/commit/0c19a6dab6b8259711cf91a2c70a4dc88cebd07f) - **tsql**: support nullability in ALTER COLUMN *(PR [#8053](https://github.com/tobymao/sqlglot/pull/8053) by [@sravankumarkunadi](https://github.com/sravankumarkunadi))*
|
|
182
|
+
- [`463c015`](https://github.com/tobymao/sqlglot/commit/463c015289c5098641d208265f0902e4ea6e7c43) - **optimizer**: restore FLOOR type annotation lost in ANNOTATORS refactor [CLAUDE] *(PR [#8067](https://github.com/tobymao/sqlglot/pull/8067) by [@DivyaNarahari97](https://github.com/DivyaNarahari97))*
|
|
183
|
+
- [`30c278e`](https://github.com/tobymao/sqlglot/commit/30c278e0f0f17a185902c787bb58c6b312f73fe5) - **optimizer**: annotate boolean binary predicates as BOOLEAN [CLAUDE] *(PR [#8069](https://github.com/tobymao/sqlglot/pull/8069) by [@DivyaNarahari97](https://github.com/DivyaNarahari97))*
|
|
184
|
+
- [`d6d174e`](https://github.com/tobymao/sqlglot/commit/d6d174e85e37d7644d16c0bce3e4fb49384a6bc8) - **sqlite**: map json_extract func to ->> closes [#8076](https://github.com/tobymao/sqlglot/pull/8076) *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
185
|
+
- [`fa10c2c`](https://github.com/tobymao/sqlglot/commit/fa10c2c6460d18c17acbc10faecca9748be7a6c3) - **sqlite**: preserve json_extract semantics instead of rewriting to -> *(PR [#8082](https://github.com/tobymao/sqlglot/pull/8082) by [@RogerHYang](https://github.com/RogerHYang))*
|
|
186
|
+
- :arrow_lower_right: *fixes issue [#8076](https://github.com/tobymao/sqlglot/issues/8076) opened by [@RogerHYang](https://github.com/RogerHYang)*
|
|
187
|
+
- [`b4776a4`](https://github.com/tobymao/sqlglot/commit/b4776a40995985c5523849269e1ab6d29e667ec6) - **generator**: avoid materializing huge integers when capping numeric type params, closes [#8113](https://github.com/tobymao/sqlglot/pull/8113) *(commit by [@tobymao](https://github.com/tobymao))*
|
|
188
|
+
- [`df5ec1e`](https://github.com/tobymao/sqlglot/commit/df5ec1ecd43b83ac63800bf40b04362c9af0173e) - **parser**: break out of the function-property loop on a failed property, closes [#8112](https://github.com/tobymao/sqlglot/pull/8112) *(commit by [@tobymao](https://github.com/tobymao))*
|
|
189
|
+
- [`c25225d`](https://github.com/tobymao/sqlglot/commit/c25225d9ac7390ef87bd02a3d2ac005073a1e27d) - **generator**: double the delimiter in Unicode literals instead of applying string escapes, closes [#8110](https://github.com/tobymao/sqlglot/pull/8110) *(commit by [@dgvj-work](https://github.com/dgvj-work))*
|
|
190
|
+
- [`13e6c07`](https://github.com/tobymao/sqlglot/commit/13e6c07984e3ba8c34021ae72366a014a8f54a4e) - **optimizer**: annotate grouping properly in the hive hierarchy *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
191
|
+
- [`66ecca3`](https://github.com/tobymao/sqlglot/commit/66ecca33975e06fc862d3b159f8c4c1418fc04e9) - **clickhouse**: parse MODIFY COLUMN as AlterColumn *(PR [#8091](https://github.com/tobymao/sqlglot/pull/8091) by [@dgvj-work](https://github.com/dgvj-work))*
|
|
192
|
+
- :arrow_lower_right: *fixes issue [#8019](https://github.com/tobymao/sqlglot/issues/8019) opened by [@dgvj-work](https://github.com/dgvj-work)*
|
|
193
|
+
- [`f7dfbac`](https://github.com/tobymao/sqlglot/commit/f7dfbacd3b245aca169abb52f0b515230e9b6715) - **expressions**: classify boolean binary operators as Predicate *(PR [#8073](https://github.com/tobymao/sqlglot/pull/8073) by [@georgesittas](https://github.com/georgesittas))*
|
|
194
|
+
- [`617989c`](https://github.com/tobymao/sqlglot/commit/617989c38ea251b0aca35e2ffe205db96b856797) - **clickhouse**: clean up MODIFY COLUMN handling *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
195
|
+
- [`f15c499`](https://github.com/tobymao/sqlglot/commit/f15c499771c44e2800338c15974c5618d5403cc7) - **optimizer**: keep parens around a predicate under bitwise NOT *(PR [#8119](https://github.com/tobymao/sqlglot/pull/8119) by [@georgesittas](https://github.com/georgesittas))*
|
|
196
|
+
- [`7810755`](https://github.com/tobymao/sqlglot/commit/7810755168e8d57d8e5f632248779ecfed782689) - **parser**: move JSON extraction operators to Postgres's binary-operator precedence tier *(PR [#8063](https://github.com/tobymao/sqlglot/pull/8063) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
|
|
197
|
+
- :arrow_lower_right: *fixes issue [#8035](https://github.com/tobymao/sqlglot/issues/8035) opened by [@RogerHYang](https://github.com/RogerHYang)*
|
|
198
|
+
- [`2f914c5`](https://github.com/tobymao/sqlglot/commit/2f914c54aa4817a0a5e65a0d7d5e7cba9037ac30) - **sqlite**: parse ||, -> and ->> as a single tier that binds tighter than arithmetic closes [#8115](https://github.com/tobymao/sqlglot/pull/8115) *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
199
|
+
|
|
200
|
+
### :recycle: Refactors
|
|
201
|
+
- [`381f49c`](https://github.com/tobymao/sqlglot/commit/381f49c2cd38563f283309c39bf8810127328e27) - **trino**: parse inline UDF `IF` branches iteraitvely *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
202
|
+
- [`eb7e248`](https://github.com/tobymao/sqlglot/commit/eb7e24829320163bcd2f4aa8823c75ce6c102934) - clean up redundant type annotations *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
203
|
+
- [`9fc3578`](https://github.com/tobymao/sqlglot/commit/9fc35781e4eba77dd5e771608bfb027be8f8c831) - **expressions**: specify variable length `Func` spill arg explicitly *(PR [#8120](https://github.com/tobymao/sqlglot/pull/8120) by [@georgesittas](https://github.com/georgesittas))*
|
|
204
|
+
|
|
205
|
+
### :white_check_mark: Tests
|
|
206
|
+
- [`5258f24`](https://github.com/tobymao/sqlglot/commit/5258f24934a0f68cb42c6698db6e4992eedeb1c9) - **sqlite**: cover root, non-literal and subscript paths for json_extract *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
207
|
+
|
|
208
|
+
### :wrench: Chores
|
|
209
|
+
- [`c164cce`](https://github.com/tobymao/sqlglot/commit/c164cce9341eae08dcf3d4a43fc53e49fb69d59e) - default UNKNOWN for mysql BIT_AND *(commit by [@geooo109](https://github.com/geooo109))*
|
|
210
|
+
- [`515083c`](https://github.com/tobymao/sqlglot/commit/515083ca63a4bc6a85549a10e1c5651215d9a01f) - don't leak `decimal.InvalidOperation` on bad inputs *(PR [#8117](https://github.com/tobymao/sqlglot/pull/8117) by [@eeshsaxena](https://github.com/eeshsaxena))*
|
|
211
|
+
- [`e36ba73`](https://github.com/tobymao/sqlglot/commit/e36ba73f651c9a82fbe831195fa7883799d0ddb0) - improve type hints to facilitate better mypyc compilation *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
212
|
+
|
|
213
|
+
|
|
4
214
|
## [v30.14.0] - 2026-07-27
|
|
5
215
|
### :boom: BREAKING CHANGES
|
|
6
216
|
- due to [`a715f9f`](https://github.com/tobymao/sqlglot/commit/a715f9f9aa1ba640f558c7602af9a63fc35d8697) - type annotation for databricks NANVL, SIGN, SHIFTLEFT, SIGNUM, SHUFFLE *(PR [#7896](https://github.com/tobymao/sqlglot/pull/7896) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*:
|
|
@@ -15186,3 +15396,4 @@ pip install "sqlglot[c]" # compiled — faster, but no subclassing
|
|
|
15186
15396
|
[v30.12.0]: https://github.com/tobymao/sqlglot/compare/v30.11.0...v30.12.0
|
|
15187
15397
|
[v30.13.0]: https://github.com/tobymao/sqlglot/compare/v30.12.0...v30.13.0
|
|
15188
15398
|
[v30.14.0]: https://github.com/tobymao/sqlglot/compare/v30.13.0...v30.14.0
|
|
15399
|
+
[v30.16.0]: https://github.com/tobymao/sqlglot/compare/v30.15.0...v30.16.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sqlglot
|
|
3
|
-
Version: 30.
|
|
3
|
+
Version: 30.17.0
|
|
4
4
|
Summary: An easily customizable SQL parser and transpiler
|
|
5
5
|
Author-email: Toby Mao <toby.mao@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -19,7 +19,7 @@ Description-Content-Type: text/markdown
|
|
|
19
19
|
License-File: LICENSE
|
|
20
20
|
Provides-Extra: dev
|
|
21
21
|
Requires-Dist: duckdb>=0.6; extra == "dev"
|
|
22
|
-
Requires-Dist: sqlglot-mypy>=2.
|
|
22
|
+
Requires-Dist: sqlglot-mypy>=2.3.0.post1; python_version >= "3.10" and extra == "dev"
|
|
23
23
|
Requires-Dist: mypy; python_version < "3.10" and extra == "dev"
|
|
24
24
|
Requires-Dist: setuptools_scm; extra == "dev"
|
|
25
25
|
Requires-Dist: pandas; extra == "dev"
|
|
@@ -34,10 +34,10 @@ Requires-Dist: types-pytz; extra == "dev"
|
|
|
34
34
|
Requires-Dist: typing_extensions; extra == "dev"
|
|
35
35
|
Requires-Dist: pyperf; extra == "dev"
|
|
36
36
|
Provides-Extra: c
|
|
37
|
-
Requires-Dist: sqlglotc==30.
|
|
37
|
+
Requires-Dist: sqlglotc==30.17.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.17.0; python_version >= "3.10" and extra == "rs"
|
|
41
41
|
Dynamic: license-file
|
|
42
42
|
Dynamic: provides-extra
|
|
43
43
|
|
|
@@ -9,7 +9,7 @@ setup(
|
|
|
9
9
|
"duckdb>=0.6",
|
|
10
10
|
# sqlglot-mypy 1.20+ is the build dep for sqlglotc and only ships
|
|
11
11
|
# for py3.10+; on py3.9 just use upstream mypy for type checking.
|
|
12
|
-
"sqlglot-mypy >= 2.
|
|
12
|
+
"sqlglot-mypy >= 2.3.0.post1; python_version >= '3.10'",
|
|
13
13
|
"mypy; python_version < '3.10'",
|
|
14
14
|
"setuptools_scm",
|
|
15
15
|
"pandas",
|
|
@@ -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.17.0'
|
|
22
|
+
__version_tuple__ = version_tuple = (30, 17, 0)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g9a8129b6f'
|
|
@@ -2213,7 +2213,11 @@ def build_json_extract_path(
|
|
|
2213
2213
|
for arg in args[1:]:
|
|
2214
2214
|
if not isinstance(arg, exp.Literal):
|
|
2215
2215
|
# We use the fallback parser because we can't really transpile non-literals safely
|
|
2216
|
-
return expr_type
|
|
2216
|
+
return expr_type(
|
|
2217
|
+
this=seq_get(args, 0),
|
|
2218
|
+
expression=seq_get(args, 1),
|
|
2219
|
+
expressions=list(args[2:]) or None,
|
|
2220
|
+
)
|
|
2217
2221
|
|
|
2218
2222
|
text = arg.name
|
|
2219
2223
|
if is_int(text) and (not arrow_req_json_type or not arg.is_string):
|
|
@@ -72,7 +72,21 @@ class ParseError(SqlglotError):
|
|
|
72
72
|
|
|
73
73
|
|
|
74
74
|
class TokenError(SqlglotError):
|
|
75
|
-
|
|
75
|
+
"""Error raised when tokenizing fails.
|
|
76
|
+
|
|
77
|
+
When available, `start` and `end` are the offsets in the source SQL of the context
|
|
78
|
+
snippet quoted in the message, i.e. the snippet is `sql[start:end]`.
|
|
79
|
+
"""
|
|
80
|
+
|
|
81
|
+
def __init__(
|
|
82
|
+
self,
|
|
83
|
+
message: str,
|
|
84
|
+
start: int | None = None,
|
|
85
|
+
end: int | None = None,
|
|
86
|
+
):
|
|
87
|
+
super().__init__(message)
|
|
88
|
+
self.start = start
|
|
89
|
+
self.end = end
|
|
76
90
|
|
|
77
91
|
|
|
78
92
|
class OptimizeError(SqlglotError):
|
|
@@ -185,6 +185,12 @@ def ordered(this, desc, nulls_first):
|
|
|
185
185
|
return this
|
|
186
186
|
|
|
187
187
|
|
|
188
|
+
def _like(this, e, flags=0):
|
|
189
|
+
return bool(
|
|
190
|
+
re.fullmatch(re.escape(e).replace("_", ".").replace("%", ".*"), this, re.DOTALL | flags)
|
|
191
|
+
)
|
|
192
|
+
|
|
193
|
+
|
|
188
194
|
@null_if_any
|
|
189
195
|
def interval(this, unit):
|
|
190
196
|
plural = unit + "S"
|
|
@@ -255,9 +261,9 @@ ENV = {
|
|
|
255
261
|
"INTERVAL": interval,
|
|
256
262
|
"JSONEXTRACT": jsonextract,
|
|
257
263
|
"LEFT": null_if_any(lambda this, e: this[:e]),
|
|
258
|
-
"
|
|
259
|
-
|
|
260
|
-
),
|
|
264
|
+
"LENGTH": null_if_any(len),
|
|
265
|
+
"LIKE": null_if_any(lambda this, e: _like(this, e)),
|
|
266
|
+
"ILIKE": null_if_any(lambda this, e: _like(this, e, re.IGNORECASE)),
|
|
261
267
|
"LOWER": null_if_any(lambda arg: arg.lower()),
|
|
262
268
|
"LT": null_if_any(lambda this, e: this < e),
|
|
263
269
|
"LTE": null_if_any(lambda this, e: this <= e),
|
|
@@ -8,6 +8,7 @@ from sqlglot.expressions.core import (
|
|
|
8
8
|
Expr,
|
|
9
9
|
Func,
|
|
10
10
|
Binary,
|
|
11
|
+
Predicate,
|
|
11
12
|
to_identifier,
|
|
12
13
|
)
|
|
13
14
|
from sqlglot.helper import trait
|
|
@@ -109,16 +110,16 @@ class ArrayAny(Expression, Func):
|
|
|
109
110
|
arg_types = {"this": True, "expression": True}
|
|
110
111
|
|
|
111
112
|
|
|
112
|
-
class ArrayContains(Expression, Binary, Func):
|
|
113
|
+
class ArrayContains(Expression, Binary, Predicate, Func):
|
|
113
114
|
arg_types = {"this": True, "expression": True, "ensure_variant": False, "check_null": False}
|
|
114
115
|
_sql_names = ["ARRAY_CONTAINS", "ARRAY_HAS"]
|
|
115
116
|
|
|
116
117
|
|
|
117
|
-
class ArrayContainsAll(Expression, Binary, Func):
|
|
118
|
+
class ArrayContainsAll(Expression, Binary, Predicate, Func):
|
|
118
119
|
_sql_names = ["ARRAY_CONTAINS_ALL", "ARRAY_HAS_ALL"]
|
|
119
120
|
|
|
120
121
|
|
|
121
|
-
class ArrayContainedBy(Expression, Binary, Func):
|
|
122
|
+
class ArrayContainedBy(Expression, Binary, Predicate, Func):
|
|
122
123
|
pass
|
|
123
124
|
|
|
124
125
|
|
|
@@ -132,7 +133,7 @@ class ArrayIntersect(Expression, Func):
|
|
|
132
133
|
_sql_names = ["ARRAY_INTERSECT", "ARRAY_INTERSECTION"]
|
|
133
134
|
|
|
134
135
|
|
|
135
|
-
class ArrayOverlaps(Expression, Binary, Func):
|
|
136
|
+
class ArrayOverlaps(Expression, Binary, Predicate, Func):
|
|
136
137
|
arg_types = {"this": True, "expression": True, "null_safe": False}
|
|
137
138
|
|
|
138
139
|
|
|
@@ -343,6 +344,7 @@ class ToMap(Expression, Func):
|
|
|
343
344
|
class VarMap(Expression, Func):
|
|
344
345
|
arg_types = {"keys": True, "values": True}
|
|
345
346
|
is_var_len_args = True
|
|
347
|
+
var_len_arg_key = "values"
|
|
346
348
|
|
|
347
349
|
@property
|
|
348
350
|
def keys(self) -> list[Expr]:
|
|
@@ -14,7 +14,7 @@ from builtins import type as Type
|
|
|
14
14
|
from collections import deque
|
|
15
15
|
from collections.abc import Collection, Iterator, Mapping, MutableMapping, Sequence
|
|
16
16
|
from copy import deepcopy
|
|
17
|
-
from decimal import Decimal
|
|
17
|
+
from decimal import Decimal, InvalidOperation
|
|
18
18
|
from functools import reduce
|
|
19
19
|
|
|
20
20
|
from sqlglot._typing import E, GeneratorNoDialectArgs, ParserNoDialectArgs, T
|
|
@@ -85,6 +85,7 @@ class Expr:
|
|
|
85
85
|
arg_types: t.ClassVar[dict[str, bool]] = {"this": True}
|
|
86
86
|
required_args: t.ClassVar[set[str]] = {"this"}
|
|
87
87
|
is_var_len_args: t.ClassVar[bool] = False
|
|
88
|
+
var_len_arg_key: t.ClassVar[str] = "expressions"
|
|
88
89
|
_hash_raw_args: t.ClassVar[bool] = False
|
|
89
90
|
is_subquery: t.ClassVar[bool] = False
|
|
90
91
|
is_cast: t.ClassVar[bool] = False
|
|
@@ -1577,7 +1578,7 @@ class Condition(Expr):
|
|
|
1577
1578
|
|
|
1578
1579
|
@trait
|
|
1579
1580
|
class Predicate(Condition):
|
|
1580
|
-
"""
|
|
1581
|
+
"""Any condition that evaluates to a boolean, e.g. x = y, x LIKE 'a%', a @> b."""
|
|
1581
1582
|
|
|
1582
1583
|
|
|
1583
1584
|
class Cache(Expression):
|
|
@@ -1643,8 +1644,11 @@ class Func(Condition):
|
|
|
1643
1644
|
The base class for all function expressions.
|
|
1644
1645
|
|
|
1645
1646
|
Attributes:
|
|
1646
|
-
is_var_len_args (bool): if set to True the
|
|
1647
|
+
is_var_len_args (bool): if set to True the argument identified by var_len_arg_key will be
|
|
1647
1648
|
treated as a variable length argument and the argument's value will be stored as a list.
|
|
1649
|
+
var_len_arg_key (str): the arg_types key that collects the variable length arguments.
|
|
1650
|
+
Arguments preceding it in arg_types are filled positionally; those following it (e.g.
|
|
1651
|
+
dialect flags) are never populated by from_arg_list.
|
|
1648
1652
|
_sql_names (list): the SQL name (1st item in the list) and aliases (subsequent items) for this
|
|
1649
1653
|
function expression. These values are used to map this node to a name during parsing as
|
|
1650
1654
|
well as to provide the function's name during SQL string generation. By default the SQL
|
|
@@ -1652,18 +1656,17 @@ class Func(Condition):
|
|
|
1652
1656
|
"""
|
|
1653
1657
|
|
|
1654
1658
|
is_var_len_args: t.ClassVar[bool] = False
|
|
1659
|
+
var_len_arg_key: t.ClassVar[str] = "expressions"
|
|
1655
1660
|
_sql_names: t.ClassVar[list[str]] = []
|
|
1656
1661
|
|
|
1657
1662
|
@classmethod
|
|
1658
1663
|
def from_arg_list(cls, args: Sequence[object]) -> Self:
|
|
1659
1664
|
if cls.is_var_len_args:
|
|
1660
1665
|
all_arg_keys = tuple(cls.arg_types)
|
|
1661
|
-
|
|
1662
|
-
non_var_len_arg_keys = all_arg_keys[:-1] if cls.is_var_len_args else all_arg_keys
|
|
1663
|
-
num_non_var = len(non_var_len_arg_keys)
|
|
1666
|
+
var_len_index = all_arg_keys.index(cls.var_len_arg_key)
|
|
1664
1667
|
|
|
1665
|
-
args_dict = {arg_key: arg for arg, arg_key in zip(args,
|
|
1666
|
-
args_dict[
|
|
1668
|
+
args_dict = {arg_key: arg for arg, arg_key in zip(args, all_arg_keys[:var_len_index])}
|
|
1669
|
+
args_dict[cls.var_len_arg_key] = args[var_len_index:]
|
|
1667
1670
|
else:
|
|
1668
1671
|
args_dict = {arg_key: arg for arg, arg_key in zip(args, cls.arg_types)}
|
|
1669
1672
|
|
|
@@ -1696,7 +1699,16 @@ class AggFunc(Func):
|
|
|
1696
1699
|
|
|
1697
1700
|
|
|
1698
1701
|
class Column(Expression, Condition):
|
|
1699
|
-
|
|
1702
|
+
# "shadow" marks a column whose qualifier is shadowed by a projection alias, so it must be
|
|
1703
|
+
# rendered unqualified in dialects where PROJECTION_ALIASES_SHADOW_SOURCE_NAMES is set
|
|
1704
|
+
arg_types = {
|
|
1705
|
+
"this": True,
|
|
1706
|
+
"table": False,
|
|
1707
|
+
"db": False,
|
|
1708
|
+
"catalog": False,
|
|
1709
|
+
"join_mark": False,
|
|
1710
|
+
"shadow": False,
|
|
1711
|
+
}
|
|
1700
1712
|
|
|
1701
1713
|
@property
|
|
1702
1714
|
def table(self) -> str:
|
|
@@ -1764,7 +1776,10 @@ class Literal(Expression, Condition):
|
|
|
1764
1776
|
try:
|
|
1765
1777
|
return int(self.this)
|
|
1766
1778
|
except ValueError:
|
|
1767
|
-
|
|
1779
|
+
try:
|
|
1780
|
+
return Decimal(self.this)
|
|
1781
|
+
except InvalidOperation as e:
|
|
1782
|
+
raise ValueError(f"Invalid numeric literal: {self.this!r}") from e
|
|
1768
1783
|
return self.this
|
|
1769
1784
|
|
|
1770
1785
|
|
|
@@ -2119,15 +2134,15 @@ class Div(Expression, Binary):
|
|
|
2119
2134
|
arg_types = {"this": True, "expression": True, "typed": False, "safe": False}
|
|
2120
2135
|
|
|
2121
2136
|
|
|
2122
|
-
class Overlaps(Expression, Binary):
|
|
2137
|
+
class Overlaps(Expression, Binary, Predicate):
|
|
2123
2138
|
pass
|
|
2124
2139
|
|
|
2125
2140
|
|
|
2126
|
-
class ExtendsLeft(Expression, Binary):
|
|
2141
|
+
class ExtendsLeft(Expression, Binary, Predicate):
|
|
2127
2142
|
pass
|
|
2128
2143
|
|
|
2129
2144
|
|
|
2130
|
-
class ExtendsRight(Expression, Binary):
|
|
2145
|
+
class ExtendsRight(Expression, Binary, Predicate):
|
|
2131
2146
|
pass
|
|
2132
2147
|
|
|
2133
2148
|
|
|
@@ -2231,7 +2246,7 @@ class Sub(Expression, Binary):
|
|
|
2231
2246
|
pass
|
|
2232
2247
|
|
|
2233
2248
|
|
|
2234
|
-
class Adjacent(Expression, Binary):
|
|
2249
|
+
class Adjacent(Expression, Binary, Predicate):
|
|
2235
2250
|
pass
|
|
2236
2251
|
|
|
2237
2252
|
|
|
@@ -2317,7 +2332,7 @@ class Pow(Expression, Binary, Func):
|
|
|
2317
2332
|
_sql_names = ["POWER", "POW"]
|
|
2318
2333
|
|
|
2319
2334
|
|
|
2320
|
-
class RegexpLike(Expression, Binary, Func):
|
|
2335
|
+
class RegexpLike(Expression, Binary, Predicate, Func):
|
|
2321
2336
|
arg_types = {"this": True, "expression": True, "flag": False, "full_match": False}
|
|
2322
2337
|
|
|
2323
2338
|
|
|
@@ -46,15 +46,15 @@ class JSONArrayInsert(Expression, Func):
|
|
|
46
46
|
_sql_names = ["JSON_ARRAY_INSERT"]
|
|
47
47
|
|
|
48
48
|
|
|
49
|
-
class JSONBContains(Expression, Binary, Func):
|
|
49
|
+
class JSONBContains(Expression, Binary, Predicate, Func):
|
|
50
50
|
_sql_names = ["JSONB_CONTAINS"]
|
|
51
51
|
|
|
52
52
|
|
|
53
|
-
class JSONBContainsAllTopKeys(Expression, Binary, Func):
|
|
53
|
+
class JSONBContainsAllTopKeys(Expression, Binary, Predicate, Func):
|
|
54
54
|
pass
|
|
55
55
|
|
|
56
56
|
|
|
57
|
-
class JSONBContainsAnyTopKeys(Expression, Binary, Func):
|
|
57
|
+
class JSONBContainsAnyTopKeys(Expression, Binary, Predicate, Func):
|
|
58
58
|
pass
|
|
59
59
|
|
|
60
60
|
|
|
@@ -133,6 +133,7 @@ class JSONExtractScalar(Expression, Binary, Func):
|
|
|
133
133
|
"expressions": False,
|
|
134
134
|
"json_type": False,
|
|
135
135
|
"scalar_only": False,
|
|
136
|
+
"json_subtype": False,
|
|
136
137
|
}
|
|
137
138
|
_sql_names = ["JSON_EXTRACT_SCALAR"]
|
|
138
139
|
is_var_len_args = True
|
|
@@ -1050,6 +1050,11 @@ class SetOperation(Expression, Query):
|
|
|
1050
1050
|
def named_selects(self) -> list[str]:
|
|
1051
1051
|
expr: Expr = self
|
|
1052
1052
|
while isinstance(expr, SetOperation):
|
|
1053
|
+
if expr.args.get("by_name"):
|
|
1054
|
+
left = t.cast(Selectable, expr.this.unnest()).named_selects
|
|
1055
|
+
right = t.cast(Selectable, expr.expression.unnest()).named_selects
|
|
1056
|
+
return list(dict.fromkeys(left + right))
|
|
1057
|
+
|
|
1053
1058
|
expr = expr.this.unnest()
|
|
1054
1059
|
return _named_selects(expr)
|
|
1055
1060
|
|
|
@@ -2119,8 +2124,28 @@ class IfBlock(Expression):
|
|
|
2119
2124
|
arg_types = {"this": True, "true": True, "false": False}
|
|
2120
2125
|
|
|
2121
2126
|
|
|
2127
|
+
class CaseStatement(Expression):
|
|
2128
|
+
arg_types = {"this": False, "ifs": True, "default": False}
|
|
2129
|
+
|
|
2130
|
+
|
|
2122
2131
|
class WhileBlock(Expression):
|
|
2123
|
-
arg_types = {"this": True, "body": True}
|
|
2132
|
+
arg_types = {"this": True, "body": True, "label": False}
|
|
2133
|
+
|
|
2134
|
+
|
|
2135
|
+
class LoopBlock(Expression):
|
|
2136
|
+
arg_types = {"body": True, "label": False}
|
|
2137
|
+
|
|
2138
|
+
|
|
2139
|
+
class RepeatBlock(Expression):
|
|
2140
|
+
arg_types = {"body": True, "until": True, "label": False}
|
|
2141
|
+
|
|
2142
|
+
|
|
2143
|
+
class Leave(Expression):
|
|
2144
|
+
pass
|
|
2145
|
+
|
|
2146
|
+
|
|
2147
|
+
class Iterate(Expression):
|
|
2148
|
+
pass
|
|
2124
2149
|
|
|
2125
2150
|
|
|
2126
2151
|
class EndStatement(Expression):
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
from sqlglot.expressions.core import Expression, Func, Binary
|
|
5
|
+
from sqlglot.expressions.core import Expression, Func, Binary, Predicate
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
# String basics
|
|
@@ -445,11 +445,11 @@ class RegexpExtractAll(Expression, Func):
|
|
|
445
445
|
}
|
|
446
446
|
|
|
447
447
|
|
|
448
|
-
class RegexpFullMatch(Expression, Binary, Func):
|
|
448
|
+
class RegexpFullMatch(Expression, Binary, Predicate, Func):
|
|
449
449
|
arg_types = {"this": True, "expression": True, "options": False}
|
|
450
450
|
|
|
451
451
|
|
|
452
|
-
class RegexpILike(Expression, Binary, Func):
|
|
452
|
+
class RegexpILike(Expression, Binary, Predicate, Func):
|
|
453
453
|
arg_types = {"this": True, "expression": True, "flag": False}
|
|
454
454
|
|
|
455
455
|
|