sqlglot 30.6.0__tar.gz → 30.7.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.6.0 → sqlglot-30.7.0}/CHANGELOG.md +18 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/Makefile +19 -3
- {sqlglot-30.6.0/sqlglot.egg-info → sqlglot-30.7.0}/PKG-INFO +5 -4
- sqlglot-30.7.0/setup.py +34 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/__init__.py +1 -17
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/_version.py +3 -3
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/dialect.py +9 -5
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/dremio.py +1 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/drill.py +1 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/duckdb.py +2 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/hive.py +1 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/postgres.py +1 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/presto.py +1 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/snowflake.py +1 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/trino.py +1 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/tsql.py +1 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/expressions/array.py +5 -1
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/expressions/core.py +294 -294
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/expressions/datatypes.py +40 -21
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/expressions/ddl.py +8 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/expressions/json.py +1 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/expressions/query.py +59 -1
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generator.py +26 -5
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/clickhouse.py +4 -1
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/duckdb.py +94 -10
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/exasol.py +26 -1
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/mysql.py +1 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/oracle.py +2 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/presto.py +1 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/redshift.py +8 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/singlestore.py +1 -1
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/snowflake.py +6 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/lineage.py +119 -31
- sqlglot-30.7.0/sqlglot/optimizer/__init__.py +65 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/annotate_types.py +72 -7
- sqlglot-30.7.0/sqlglot/optimizer/canonicalize_internal_names.py +302 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/eliminate_joins.py +22 -21
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/normalize.py +14 -3
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/optimize_joins.py +6 -3
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/pushdown_predicates.py +12 -5
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/qualify_columns.py +9 -44
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/qualify_tables.py +6 -3
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/resolver.py +49 -29
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/scope.py +3 -1
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/unnest_subqueries.py +3 -2
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parser.py +70 -36
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/duckdb.py +2 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/exasol.py +6 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/hive.py +11 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/mysql.py +41 -3
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/oracle.py +1 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/prql.py +2 -2
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/redshift.py +9 -1
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/snowflake.py +6 -2
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/spark2.py +1 -1
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/schema.py +1 -1
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/tokenizer_core.py +8 -8
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/tokens.py +24 -6
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/typing/__init__.py +3 -2
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/typing/bigquery.py +4 -5
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/typing/hive.py +2 -1
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/typing/snowflake.py +12 -7
- {sqlglot-30.6.0 → sqlglot-30.7.0/sqlglot.egg-info}/PKG-INFO +5 -4
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot.egg-info/SOURCES.txt +3 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot.egg-info/requires.txt +12 -3
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglotc/pyproject.toml +9 -3
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglotc/setup.py +5 -1
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_bigquery.py +4 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_clickhouse.py +8 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_dialect.py +12 -15
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_duckdb.py +29 -3
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_exasol.py +63 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_hive.py +1 -1
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_mysql.py +46 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_oracle.py +14 -1
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_postgres.py +13 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_presto.py +3 -3
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_redshift.py +13 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_snowflake.py +23 -8
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_spark.py +19 -1
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/annotate_functions.sql +18 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/annotate_types.sql +12 -0
- sqlglot-30.7.0/tests/fixtures/optimizer/canonicalize_internal_names.sql +251 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/qualify_columns.sql +1 -1
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/qualify_tables.sql +6 -0
- sqlglot-30.7.0/tests/leakcheck.py +365 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_lineage.py +201 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_optimizer.py +342 -3
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_transpile.py +5 -0
- sqlglot-30.6.0/setup.py +0 -29
- sqlglot-30.6.0/sqlglot/optimizer/__init__.py +0 -11
- {sqlglot-30.6.0 → sqlglot-30.7.0}/.gitignore +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/.gitmodules +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/.gitpod.yml +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/.pre-commit-config.yaml +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/AGENTS.md +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/CLAUDE.md +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/CONTRIBUTING.md +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/LICENSE +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/MANIFEST.in +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/README.md +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/pyproject.toml +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/setup.cfg +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/__main__.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/_typing.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/__init__.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/athena.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/bigquery.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/clickhouse.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/databricks.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/doris.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/druid.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/dune.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/exasol.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/fabric.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/materialize.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/mysql.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/oracle.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/prql.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/redshift.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/risingwave.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/singlestore.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/solr.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/spark.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/spark2.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/sqlite.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/starrocks.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/tableau.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/teradata.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/diff.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/errors.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/executor/__init__.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/executor/context.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/executor/env.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/executor/python.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/executor/table.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/expressions/__init__.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/expressions/aggregate.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/expressions/builders.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/expressions/constraints.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/expressions/dml.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/expressions/functions.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/expressions/math.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/expressions/properties.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/expressions/string.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/expressions/temporal.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/__init__.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/athena.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/bigquery.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/databricks.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/doris.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/dremio.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/drill.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/druid.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/dune.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/fabric.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/hive.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/materialize.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/postgres.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/prql.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/python.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/risingwave.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/solr.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/spark.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/spark2.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/sqlite.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/starrocks.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/tableau.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/teradata.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/trino.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/tsql.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/helper.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/jsonpath.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/canonicalize.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/eliminate_ctes.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/eliminate_subqueries.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/isolate_table_selects.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/merge_subqueries.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/normalize_identifiers.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/optimizer.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/pushdown_projections.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/qualify.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/simplify.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/__init__.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/athena.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/base.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/bigquery.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/clickhouse.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/databricks.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/doris.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/dremio.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/drill.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/druid.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/dune.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/fabric.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/materialize.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/postgres.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/presto.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/risingwave.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/singlestore.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/solr.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/spark.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/sqlite.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/starrocks.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/tableau.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/teradata.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/trino.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/tsql.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/planner.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/py.typed +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/serde.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/time.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/transforms.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/trie.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/typing/clickhouse.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/typing/duckdb.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/typing/mysql.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/typing/presto.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/typing/redshift.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/typing/spark.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/typing/spark2.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/typing/tsql.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot.egg-info/dependency_links.txt +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot.egg-info/top_level.txt +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot.png +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglotc/MANIFEST.in +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/__init__.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/__init__.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_athena.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_databricks.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_doris.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_dremio.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_drill.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_druid.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_dune.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_fabric.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_materialize.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_pipe_syntax.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_prql.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_risingwave.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_singlestore.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_solr.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_sqlite.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_starrocks.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_tableau.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_teradata.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_trino.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_tsql.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/identity.sql +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/jsonpath/LICENSE +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/jsonpath/cts.json +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/canonicalize.sql +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/eliminate_ctes.sql +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/eliminate_joins.sql +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/eliminate_subqueries.sql +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/isolate_table_selects.sql +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/merge_subqueries.sql +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/normalize.sql +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/normalize_identifiers.sql +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/optimize_joins.sql +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/optimizer.sql +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/pushdown_cte_alias_columns.sql +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/pushdown_predicates.sql +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/pushdown_projections.sql +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/qualify_columns__invalid.sql +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/qualify_columns__with_invisible.sql +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/qualify_columns_ddl.sql +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/quote_identifiers.sql +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/simplify.sql +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/call_center.csv.gz +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/catalog_page.csv.gz +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/catalog_returns.csv.gz +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/catalog_sales.csv.gz +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/customer.csv.gz +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/customer_address.csv.gz +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/customer_demographics.csv.gz +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/date_dim.csv.gz +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/household_demographics.csv.gz +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/income_band.csv.gz +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/inventory.csv.gz +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/item.csv.gz +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/promotion.csv.gz +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/reason.csv.gz +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/ship_mode.csv.gz +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/store.csv.gz +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/store_returns.csv.gz +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/store_sales.csv.gz +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/time_dim.csv.gz +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/tpc-ds.sql +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/warehouse.csv.gz +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/web_page.csv.gz +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/web_returns.csv.gz +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/web_sales.csv.gz +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/web_site.csv.gz +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-h/customer.csv.gz +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-h/lineitem.csv.gz +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-h/nation.csv.gz +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-h/orders.csv.gz +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-h/part.csv.gz +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-h/partsupp.csv.gz +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-h/region.csv.gz +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-h/supplier.csv.gz +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-h/tpc-h.sql +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/unnest_subqueries.sql +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/partial.sql +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/pretty.sql +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/gen_fixtures.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/helpers.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/sqlglot/__init__.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_build.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_dialect_entry_points.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_dialect_imports.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_diff.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_docs.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_errors.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_executor.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_expressions.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_generator.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_helper.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_integration_loader.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_jsonpath.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_parser.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_schema.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_serde.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_time.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_tokens.py +0 -0
- {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_transforms.py +0 -0
|
@@ -1,6 +1,23 @@
|
|
|
1
1
|
Changelog
|
|
2
2
|
=========
|
|
3
3
|
|
|
4
|
+
## [v30.6.0] - 2026-04-20
|
|
5
|
+
### :boom: BREAKING CHANGES
|
|
6
|
+
- due to [`dcf9ed5`](https://github.com/tobymao/sqlglot/commit/dcf9ed58303bf320f3e3498618bd95639037efde) - compile python generator *(PR [#7528](https://github.com/tobymao/sqlglot/pull/7528) by [@georgesittas](https://github.com/georgesittas))*:
|
|
7
|
+
|
|
8
|
+
compile python generator (#7528)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### :sparkles: New Features
|
|
12
|
+
- [`dcf9ed5`](https://github.com/tobymao/sqlglot/commit/dcf9ed58303bf320f3e3498618bd95639037efde) - **mypyc**: compile python generator *(PR [#7528](https://github.com/tobymao/sqlglot/pull/7528) by [@georgesittas](https://github.com/georgesittas))*
|
|
13
|
+
|
|
14
|
+
### :bug: Bug Fixes
|
|
15
|
+
- [`8e5e255`](https://github.com/tobymao/sqlglot/commit/8e5e2557c7f40c61fcf08d22141a3dd94b3a2ccb) - **postgres**: dotted function calls in create trigger ddls closes [#7527](https://github.com/tobymao/sqlglot/pull/7527) *(commit by [@georgesittas](https://github.com/georgesittas))*
|
|
16
|
+
|
|
17
|
+
### :wrench: Chores
|
|
18
|
+
- [`08ea329`](https://github.com/tobymao/sqlglot/commit/08ea3293631ba930d01bbb2b62cca969354f8134) - avoid git submodule errors when publishing API docs *(PR [#7526](https://github.com/tobymao/sqlglot/pull/7526) by [@georgesittas](https://github.com/georgesittas))*
|
|
19
|
+
|
|
20
|
+
|
|
4
21
|
## [v30.5.0] - 2026-04-20
|
|
5
22
|
### :boom: BREAKING CHANGES
|
|
6
23
|
- due to [`98ca4cd`](https://github.com/tobymao/sqlglot/commit/98ca4cdd60124c0e566d1de40855b30a169219fd) - transpile TRY_DIVIDE to/from other dialects [CLAUDE] *(PR [#7489](https://github.com/tobymao/sqlglot/pull/7489) by [@baruchoxman](https://github.com/baruchoxman))*:
|
|
@@ -14226,3 +14243,4 @@ pip install "sqlglot[c]" # compiled — faster, but no subclassing
|
|
|
14226
14243
|
[v30.4.2]: https://github.com/tobymao/sqlglot/compare/v30.4.1...v30.4.2
|
|
14227
14244
|
[v30.4.3]: https://github.com/tobymao/sqlglot/compare/v30.4.2...v30.4.3
|
|
14228
14245
|
[v30.5.0]: https://github.com/tobymao/sqlglot/compare/v30.4.3...v30.5.0
|
|
14246
|
+
[v30.6.0]: https://github.com/tobymao/sqlglot/compare/v30.5.0...v30.6.0
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.PHONY: install install-dev install-devc install-devc-release install-pre-commit bench bench-parse bench-transpile bench-optimize test test-fast unit testc unitc style check docs docs-serve hidec showc clean resolve-integration-conflicts update-fixtures
|
|
1
|
+
.PHONY: install install-dev install-devc install-devc-release install-pre-commit bench bench-parse bench-transpile bench-optimize test test-fast unit testc unitc leakcheck style check docs docs-serve hidec showc clean resolve-integration-conflicts update-fixtures
|
|
2
2
|
|
|
3
3
|
ifdef UV
|
|
4
4
|
PIP := uv pip
|
|
@@ -8,6 +8,7 @@ endif
|
|
|
8
8
|
|
|
9
9
|
SO_BACKUP := /tmp/sqlglot_so_backup
|
|
10
10
|
FIND_SO := find sqlglot -name "*.so"
|
|
11
|
+
NPROC := $(shell python -c "import os; print(os.cpu_count() or 1)")
|
|
11
12
|
|
|
12
13
|
hidec:
|
|
13
14
|
rm -rf $(SO_BACKUP) && $(FIND_SO) | tar cf $(SO_BACKUP) -T - 2>/dev/null && $(FIND_SO) -delete; true
|
|
@@ -37,11 +38,23 @@ install-dev:
|
|
|
37
38
|
fi; \
|
|
38
39
|
fi
|
|
39
40
|
|
|
41
|
+
# sqlglotc requires Python 3.10+ (sqlglot-mypy 1.20+ dropped 3.9). On 3.9
|
|
42
|
+
# we skip the C build; tests fall back to pure-Python sqlglot.
|
|
43
|
+
PY_GE_310 := $(shell python -c "import sys; print(int(sys.version_info >= (3, 10)))")
|
|
44
|
+
|
|
40
45
|
install-devc:
|
|
41
|
-
|
|
46
|
+
@if [ "$(PY_GE_310)" = "1" ]; then \
|
|
47
|
+
cd sqlglotc && MYPYC_OPT=0 python setup.py build_ext --inplace -j $(NPROC); \
|
|
48
|
+
else \
|
|
49
|
+
echo "Skipping sqlglotc build: requires Python 3.10+"; \
|
|
50
|
+
fi
|
|
42
51
|
|
|
43
52
|
install-devc-release: clean
|
|
44
|
-
|
|
53
|
+
@if [ "$(PY_GE_310)" = "1" ]; then \
|
|
54
|
+
cd sqlglotc && python setup.py build_ext --inplace -j $(NPROC); \
|
|
55
|
+
else \
|
|
56
|
+
echo "Skipping sqlglotc build: requires Python 3.10+"; \
|
|
57
|
+
fi
|
|
45
58
|
|
|
46
59
|
install-pre-commit:
|
|
47
60
|
pre-commit install
|
|
@@ -77,6 +90,9 @@ testc: install-devc
|
|
|
77
90
|
unitc: install-devc
|
|
78
91
|
SKIP_INTEGRATION=1 python -m unittest
|
|
79
92
|
|
|
93
|
+
leakcheck: install-devc
|
|
94
|
+
python -m tests.leakcheck
|
|
95
|
+
|
|
80
96
|
style:
|
|
81
97
|
pre-commit run --all-files
|
|
82
98
|
@if [ -f sqlglot-integration-tests/Makefile ]; then $(MAKE) -C sqlglot-integration-tests check-submodule; fi
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sqlglot
|
|
3
|
-
Version: 30.
|
|
3
|
+
Version: 30.7.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,8 @@ 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; extra == "dev"
|
|
22
|
+
Requires-Dist: sqlglot-mypy>=1.20.0.post6; python_version >= "3.10" and extra == "dev"
|
|
23
|
+
Requires-Dist: mypy; python_version < "3.10" and extra == "dev"
|
|
23
24
|
Requires-Dist: setuptools_scm; extra == "dev"
|
|
24
25
|
Requires-Dist: pandas; extra == "dev"
|
|
25
26
|
Requires-Dist: pandas-stubs; extra == "dev"
|
|
@@ -33,10 +34,10 @@ Requires-Dist: types-pytz; extra == "dev"
|
|
|
33
34
|
Requires-Dist: typing_extensions; extra == "dev"
|
|
34
35
|
Requires-Dist: pyperf; extra == "dev"
|
|
35
36
|
Provides-Extra: c
|
|
36
|
-
Requires-Dist: sqlglotc==30.
|
|
37
|
+
Requires-Dist: sqlglotc==30.7.0; python_version >= "3.10" and extra == "c"
|
|
37
38
|
Provides-Extra: rs
|
|
38
39
|
Requires-Dist: sqlglotrs==0.13.0; extra == "rs"
|
|
39
|
-
Requires-Dist: sqlglotc==30.
|
|
40
|
+
Requires-Dist: sqlglotc==30.7.0; python_version >= "3.10" and extra == "rs"
|
|
40
41
|
Dynamic: license-file
|
|
41
42
|
Dynamic: provides-extra
|
|
42
43
|
|
sqlglot-30.7.0/setup.py
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
from setuptools import setup
|
|
2
|
+
from setuptools_scm import get_version
|
|
3
|
+
|
|
4
|
+
version = get_version(local_scheme="no-local-version")
|
|
5
|
+
|
|
6
|
+
setup(
|
|
7
|
+
extras_require={
|
|
8
|
+
"dev": [
|
|
9
|
+
"duckdb>=0.6",
|
|
10
|
+
# sqlglot-mypy 1.20+ is the build dep for sqlglotc and only ships
|
|
11
|
+
# for py3.10+; on py3.9 just use upstream mypy for type checking.
|
|
12
|
+
"sqlglot-mypy >= 1.20.0.post6; python_version >= '3.10'",
|
|
13
|
+
"mypy; python_version < '3.10'",
|
|
14
|
+
"setuptools_scm",
|
|
15
|
+
"pandas",
|
|
16
|
+
"pandas-stubs",
|
|
17
|
+
"python-dateutil",
|
|
18
|
+
"pytz",
|
|
19
|
+
"pdoc",
|
|
20
|
+
"pre-commit",
|
|
21
|
+
"ruff==0.15.6",
|
|
22
|
+
"types-python-dateutil",
|
|
23
|
+
"types-pytz",
|
|
24
|
+
"typing_extensions",
|
|
25
|
+
"pyperf",
|
|
26
|
+
],
|
|
27
|
+
# Compiles from source on the user's machine. Requires Python 3.10+
|
|
28
|
+
# because the build dep (sqlglot-mypy 1.20+) dropped 3.9; on 3.9
|
|
29
|
+
# `pip install sqlglot[c]` is a no-op and you just get pure-Python sqlglot.
|
|
30
|
+
"c": [f"sqlglotc=={version}; python_version >= '3.10'"],
|
|
31
|
+
# Deprecated: the Rust tokenizer has been replaced by sqlglotc.
|
|
32
|
+
"rs": ["sqlglotrs==0.13.0", f"sqlglotc=={version}; python_version >= '3.10'"],
|
|
33
|
+
},
|
|
34
|
+
)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ruff: noqa: F401
|
|
1
|
+
# ruff: noqa: F401
|
|
2
2
|
"""
|
|
3
3
|
.. include:: ../README.md
|
|
4
4
|
|
|
@@ -7,25 +7,9 @@
|
|
|
7
7
|
|
|
8
8
|
from __future__ import annotations
|
|
9
9
|
|
|
10
|
-
# bootstrap mypyc runtime: compiled .so modules do a top-level `import HASH__mypyc`,
|
|
11
|
-
# but the runtime .so lives inside sqlglot/. Pre-load it into sys.modules.
|
|
12
|
-
# this is only needed for editable builds
|
|
13
10
|
from collections.abc import Collection
|
|
14
|
-
import sys
|
|
15
|
-
from pathlib import Path
|
|
16
11
|
from builtins import type as Type
|
|
17
12
|
|
|
18
|
-
for path in Path(__file__).parent.glob("*__mypyc*.so"):
|
|
19
|
-
name = path.stem.split(".")[0]
|
|
20
|
-
if name not in sys.modules:
|
|
21
|
-
import importlib.util
|
|
22
|
-
|
|
23
|
-
spec = importlib.util.spec_from_file_location(name, path)
|
|
24
|
-
if spec and spec.loader:
|
|
25
|
-
mod = importlib.util.module_from_spec(spec)
|
|
26
|
-
sys.modules[name] = mod
|
|
27
|
-
spec.loader.exec_module(mod)
|
|
28
|
-
|
|
29
13
|
import logging
|
|
30
14
|
import typing as t
|
|
31
15
|
|
|
@@ -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.7.0'
|
|
22
|
+
__version_tuple__ = version_tuple = (30, 7, 0)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g693f4ed6d'
|
|
@@ -399,6 +399,9 @@ class Dialect(metaclass=_Dialect):
|
|
|
399
399
|
CONCAT_COALESCE = False
|
|
400
400
|
"""A `NULL` arg in `CONCAT` yields `NULL` by default, but in some dialects it yields an empty string."""
|
|
401
401
|
|
|
402
|
+
CONCAT_WS_COALESCE = False
|
|
403
|
+
"""A `NULL` arg in `CONCAT_WS` yields `NULL` by default, but in some dialects it is skipped."""
|
|
404
|
+
|
|
402
405
|
HEX_LOWERCASE = False
|
|
403
406
|
"""Whether the `HEX` function returns a lowercase hexadecimal string."""
|
|
404
407
|
|
|
@@ -1761,15 +1764,16 @@ def count_if_to_sum(self: Generator, expression: exp.CountIf) -> str:
|
|
|
1761
1764
|
|
|
1762
1765
|
|
|
1763
1766
|
def trim_sql(self: Generator, expression: exp.Trim, default_trim_type: str = "") -> str:
|
|
1764
|
-
target = self.sql(expression, "this")
|
|
1765
|
-
trim_type = self.sql(expression, "position") or default_trim_type
|
|
1766
1767
|
remove_chars = self.sql(expression, "expression")
|
|
1767
|
-
collation = self.sql(expression, "collation")
|
|
1768
1768
|
|
|
1769
1769
|
# Use TRIM/LTRIM/RTRIM syntax if the expression isn't database-specific
|
|
1770
1770
|
if not remove_chars:
|
|
1771
1771
|
return self.trim_sql(expression)
|
|
1772
1772
|
|
|
1773
|
+
target = self.sql(expression, "this")
|
|
1774
|
+
trim_type = self.sql(expression, "position") or default_trim_type
|
|
1775
|
+
collation = self.sql(expression, "collation")
|
|
1776
|
+
|
|
1773
1777
|
trim_type = f"{trim_type} " if trim_type else ""
|
|
1774
1778
|
remove_chars = f"{remove_chars} " if remove_chars else ""
|
|
1775
1779
|
from_part = "FROM " if trim_type or remove_chars else ""
|
|
@@ -1827,7 +1831,7 @@ def pivot_column_names(aggregations: Iterable[exp.Expr], dialect: DialectType) -
|
|
|
1827
1831
|
be quoted in the base parser's `_parse_pivot` method, due to `to_identifier`.
|
|
1828
1832
|
Otherwise, we'd end up with `col_avg(`foo`)` (notice the double quotes).
|
|
1829
1833
|
"""
|
|
1830
|
-
agg_all_unquoted = agg.transform(
|
|
1834
|
+
agg_all_unquoted: exp.Expr = agg.transform(
|
|
1831
1835
|
lambda node: (
|
|
1832
1836
|
exp.Identifier(this=node.name, quoted=False)
|
|
1833
1837
|
if isinstance(node, exp.Identifier)
|
|
@@ -2236,7 +2240,7 @@ def build_default_decimal_type(
|
|
|
2236
2240
|
return dtype
|
|
2237
2241
|
|
|
2238
2242
|
params = f"{precision}{f', {scale}' if scale is not None else ''}"
|
|
2239
|
-
return exp.DataType.
|
|
2243
|
+
return exp.DataType.from_str(f"DECIMAL({params})")
|
|
2240
2244
|
|
|
2241
2245
|
return _builder
|
|
2242
2246
|
|
|
@@ -19,10 +19,12 @@ class DuckDB(Dialect):
|
|
|
19
19
|
SAFE_DIVISION = True
|
|
20
20
|
INDEX_OFFSET = 1
|
|
21
21
|
CONCAT_COALESCE = True
|
|
22
|
+
CONCAT_WS_COALESCE = True
|
|
22
23
|
SUPPORTS_ORDER_BY_ALL = True
|
|
23
24
|
SUPPORTS_FIXED_SIZE_ARRAYS = True
|
|
24
25
|
STRICT_JSON_PATH_SYNTAX = False
|
|
25
26
|
NUMBERS_CAN_BE_UNDERSCORE_SEPARATED = True
|
|
27
|
+
UUID_IS_STRING_TYPE = False
|
|
26
28
|
|
|
27
29
|
# https://duckdb.org/docs/sql/introduction.html#creating-a-new-table
|
|
28
30
|
NORMALIZATION_STRATEGY = NormalizationStrategy.CASE_INSENSITIVE
|
|
@@ -20,6 +20,7 @@ class Hive(Dialect):
|
|
|
20
20
|
IDENTIFIERS_CAN_START_WITH_DIGIT = True
|
|
21
21
|
SUPPORTS_USER_DEFINED_TYPES = False
|
|
22
22
|
SAFE_DIVISION = True
|
|
23
|
+
CONCAT_WS_COALESCE = True
|
|
23
24
|
ARRAY_AGG_INCLUDES_NULLS = None
|
|
24
25
|
REGEXP_EXTRACT_DEFAULT_GROUP = 1
|
|
25
26
|
ALTER_TABLE_SUPPORTS_CASCADE = True
|
|
@@ -189,7 +189,11 @@ class Flatten(Expression, Func):
|
|
|
189
189
|
|
|
190
190
|
class StringToArray(Expression, Func):
|
|
191
191
|
arg_types = {"this": True, "expression": False, "null": False}
|
|
192
|
-
_sql_names = ["STRING_TO_ARRAY", "SPLIT_BY_STRING"
|
|
192
|
+
_sql_names = ["STRING_TO_ARRAY", "SPLIT_BY_STRING"]
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
class StrtokToArray(Expression, Func):
|
|
196
|
+
arg_types = {"this": True, "expression": False}
|
|
193
197
|
|
|
194
198
|
|
|
195
199
|
# Higher-order / lambda
|