polyglot-sql 0.3.9__tar.gz → 0.3.10__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.
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/Cargo.lock +5 -5
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/Cargo.toml +1 -1
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/PKG-INFO +1 -1
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/Cargo.toml +1 -1
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/ast_transforms.rs +73 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/mod.rs +8 -2
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/generator.rs +37 -3
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/lib.rs +5 -3
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/optimizer/qualify_tables.rs +315 -30
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/custom_fixtures/datafusion/transpilation.json +9 -9
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/fabric_regression.rs +75 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/tsql_regression.rs +44 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/lib.rs +3 -0
- polyglot_sql-0.3.10/crates/polyglot-sql-python/src/transforms.rs +121 -0
- polyglot_sql-0.3.10/crates/polyglot-sql-python/tests/test_transforms.py +44 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/python/polyglot_sql/__init__.py +4 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/python/polyglot_sql/__init__.pyi +35 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/README.md +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/README.md +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/benches/in_list.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/benches/parsing.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/benches/rust_parsing.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/benches/transpile.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/examples/basic_usage.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/examples/bench_json.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/builder.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/athena.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/bigquery.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/clickhouse.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/cockroachdb.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/databricks.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/datafusion.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/doris.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/dremio.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/drill.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/druid.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/duckdb.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/dune.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/exasol.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/fabric.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/generic.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/hive.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/materialize.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/mysql.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/oracle.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/postgres.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/presto.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/redshift.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/risingwave.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/singlestore.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/snowflake.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/solr.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/spark.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/sqlite.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/starrocks.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/tableau.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/teradata.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/tidb.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/trino.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/tsql.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/diff.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/error.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/expressions.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/function_catalog.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/function_registry.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/helper.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/lineage.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/optimizer/annotate_types.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/optimizer/canonicalize.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/optimizer/eliminate_ctes.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/optimizer/eliminate_joins.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/optimizer/isolate_table_selects.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/optimizer/mod.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/optimizer/normalize.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/optimizer/normalize_identifiers.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/optimizer/optimize_joins.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/optimizer/optimizer.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/optimizer/pushdown_predicates.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/optimizer/pushdown_projections.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/optimizer/qualify_columns.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/optimizer/simplify.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/optimizer/subquery.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/parser.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/planner.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/resolver.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/schema.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/scope.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/time.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/tokens.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/transforms.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/traversal.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/trie.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/validation/tests.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/validation.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/analyze_failures.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/clickhouse_regression.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/common/known_failures.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/common/mod.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/common/test_data.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/common/test_runner.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/custom_clickhouse_coverage.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/custom_clickhouse_parser.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/custom_dialect.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/custom_dialect_tests.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/custom_fixtures/datafusion/ddl.json +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/custom_fixtures/datafusion/dml.json +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/custom_fixtures/datafusion/functions.json +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/custom_fixtures/datafusion/identity.json +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/custom_fixtures/datafusion/operators.json +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/custom_fixtures/datafusion/select.json +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/custom_fixtures/datafusion/types.json +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/deep_nesting_regression.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/dialect_matrix.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/error_handling.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/fabric_tpch_regression.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/identity_roundtrip.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/postgres_sqlite_regression.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/snowflake_regression_test.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/sqlglot_compat.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/sqlglot_dialect_identity.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/sqlglot_identity.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/sqlglot_identity_detailed.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/sqlglot_parser.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/sqlglot_pretty.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/sqlglot_transpilation.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/sqlglot_transpile.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/tpch_transpile_stack.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/transform_regression.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-function-catalogs/Cargo.toml +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-function-catalogs/README.md +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-function-catalogs/src/clickhouse.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-function-catalogs/src/duckdb.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-function-catalogs/src/lib.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-function-catalogs/tools/clickhouse/extract_functions.py +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-function-catalogs/tools/duckdb/extract_functions.py +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/Cargo.toml +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/README.md +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/docs/api.md +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/docs/index.md +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/mkdocs.yml +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/annotate_types.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/dialects.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/diff.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/errors.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/expr.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/expr_types.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/format.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/generate.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/helpers.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/lineage.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/optimize.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/parse.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/tokenize.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/transpile.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/types.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/validate.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/tests/conftest.py +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/tests/test_compat.py +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/tests/test_dialects.py +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/tests/test_diff.py +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/tests/test_expression.py +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/tests/test_format.py +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/tests/test_generate.py +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/tests/test_lineage.py +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/tests/test_optimize.py +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/tests/test_parse.py +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/tests/test_transpile.py +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/tests/test_validate.py +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/uv.lock +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/pyproject.toml +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/python/polyglot_sql/py.typed +0 -0
|
@@ -605,7 +605,7 @@ dependencies = [
|
|
|
605
605
|
|
|
606
606
|
[[package]]
|
|
607
607
|
name = "polyglot-sql"
|
|
608
|
-
version = "0.3.
|
|
608
|
+
version = "0.3.10"
|
|
609
609
|
dependencies = [
|
|
610
610
|
"criterion",
|
|
611
611
|
"once_cell",
|
|
@@ -621,7 +621,7 @@ dependencies = [
|
|
|
621
621
|
|
|
622
622
|
[[package]]
|
|
623
623
|
name = "polyglot-sql-ffi"
|
|
624
|
-
version = "0.3.
|
|
624
|
+
version = "0.3.10"
|
|
625
625
|
dependencies = [
|
|
626
626
|
"cbindgen",
|
|
627
627
|
"polyglot-sql",
|
|
@@ -631,11 +631,11 @@ dependencies = [
|
|
|
631
631
|
|
|
632
632
|
[[package]]
|
|
633
633
|
name = "polyglot-sql-function-catalogs"
|
|
634
|
-
version = "0.3.
|
|
634
|
+
version = "0.3.10"
|
|
635
635
|
|
|
636
636
|
[[package]]
|
|
637
637
|
name = "polyglot-sql-python"
|
|
638
|
-
version = "0.3.
|
|
638
|
+
version = "0.3.10"
|
|
639
639
|
dependencies = [
|
|
640
640
|
"polyglot-sql",
|
|
641
641
|
"pyo3",
|
|
@@ -646,7 +646,7 @@ dependencies = [
|
|
|
646
646
|
|
|
647
647
|
[[package]]
|
|
648
648
|
name = "polyglot-sql-wasm"
|
|
649
|
-
version = "0.3.
|
|
649
|
+
version = "0.3.10"
|
|
650
650
|
dependencies = [
|
|
651
651
|
"console_error_panic_hook",
|
|
652
652
|
"js-sys",
|
|
@@ -83,7 +83,7 @@ thiserror = { workspace = true }
|
|
|
83
83
|
unicode-segmentation = { workspace = true }
|
|
84
84
|
stacker = { version = "0.1", optional = true }
|
|
85
85
|
ts-rs = { version = "12.0", features = ["serde-compat"], optional = true }
|
|
86
|
-
polyglot-sql-function-catalogs = { path = "../polyglot-sql-function-catalogs", version = "0.3.
|
|
86
|
+
polyglot-sql-function-catalogs = { path = "../polyglot-sql-function-catalogs", version = "0.3.10", optional = true, default-features = false }
|
|
87
87
|
|
|
88
88
|
[dev-dependencies]
|
|
89
89
|
pretty_assertions = "1.4"
|
|
@@ -159,12 +159,61 @@ pub fn rename_columns(expr: Expression, mapping: &HashMap<String, String>) -> Ex
|
|
|
159
159
|
})
|
|
160
160
|
}
|
|
161
161
|
|
|
162
|
+
/// Options for table renaming.
|
|
163
|
+
#[derive(Debug, Clone)]
|
|
164
|
+
pub struct RenameTablesOptions {
|
|
165
|
+
/// Whether renamed table references should receive aliases.
|
|
166
|
+
pub alias_renamed_tables: bool,
|
|
167
|
+
/// Whether existing aliases should be preserved when aliasing renamed tables.
|
|
168
|
+
pub preserve_existing_aliases: bool,
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
impl Default for RenameTablesOptions {
|
|
172
|
+
fn default() -> Self {
|
|
173
|
+
Self {
|
|
174
|
+
alias_renamed_tables: false,
|
|
175
|
+
preserve_existing_aliases: true,
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
impl RenameTablesOptions {
|
|
181
|
+
pub fn new() -> Self {
|
|
182
|
+
Self::default()
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
pub fn with_alias_renamed_tables(mut self, alias: bool) -> Self {
|
|
186
|
+
self.alias_renamed_tables = alias;
|
|
187
|
+
self
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
pub fn with_preserve_existing_aliases(mut self, preserve: bool) -> Self {
|
|
191
|
+
self.preserve_existing_aliases = preserve;
|
|
192
|
+
self
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
162
196
|
/// Rename tables throughout the expression tree using the provided mapping.
|
|
163
197
|
pub fn rename_tables(expr: Expression, mapping: &HashMap<String, String>) -> Expression {
|
|
198
|
+
rename_tables_with_options(expr, mapping, &RenameTablesOptions::default())
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/// Rename tables throughout the expression tree using the provided mapping and options.
|
|
202
|
+
pub fn rename_tables_with_options(
|
|
203
|
+
expr: Expression,
|
|
204
|
+
mapping: &HashMap<String, String>,
|
|
205
|
+
options: &RenameTablesOptions,
|
|
206
|
+
) -> Expression {
|
|
164
207
|
xform(expr, |node| match node {
|
|
165
208
|
Expression::Table(mut tbl) => {
|
|
166
209
|
if let Some(new_name) = mapping.get(&tbl.name.name) {
|
|
167
210
|
tbl.name.name = new_name.clone();
|
|
211
|
+
if options.alias_renamed_tables
|
|
212
|
+
&& (!options.preserve_existing_aliases || tbl.alias.is_none())
|
|
213
|
+
{
|
|
214
|
+
tbl.alias = Some(Identifier::new(new_name));
|
|
215
|
+
tbl.alias_explicit_as = true;
|
|
216
|
+
}
|
|
168
217
|
}
|
|
169
218
|
Expression::Table(tbl)
|
|
170
219
|
}
|
|
@@ -701,6 +750,30 @@ mod tests {
|
|
|
701
750
|
assert!(sql.contains("new_table"), "Expected new_table in: {}", sql);
|
|
702
751
|
}
|
|
703
752
|
|
|
753
|
+
#[test]
|
|
754
|
+
fn test_rename_tables_with_alias_renamed_tables() {
|
|
755
|
+
let expr = parse_one("SELECT a FROM old_table");
|
|
756
|
+
let mut mapping = HashMap::new();
|
|
757
|
+
mapping.insert("old_table".to_string(), "new_table".to_string());
|
|
758
|
+
let options = RenameTablesOptions::new().with_alias_renamed_tables(true);
|
|
759
|
+
let result = rename_tables_with_options(expr, &mapping, &options);
|
|
760
|
+
let sql = result.sql();
|
|
761
|
+
|
|
762
|
+
assert_eq!(sql, "SELECT a FROM new_table AS new_table");
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
#[test]
|
|
766
|
+
fn test_rename_tables_with_alias_preserves_existing_alias() {
|
|
767
|
+
let expr = parse_one("SELECT a FROM old_table AS t");
|
|
768
|
+
let mut mapping = HashMap::new();
|
|
769
|
+
mapping.insert("old_table".to_string(), "new_table".to_string());
|
|
770
|
+
let options = RenameTablesOptions::new().with_alias_renamed_tables(true);
|
|
771
|
+
let result = rename_tables_with_options(expr, &mapping, &options);
|
|
772
|
+
let sql = result.sql();
|
|
773
|
+
|
|
774
|
+
assert_eq!(sql, "SELECT a FROM new_table AS t");
|
|
775
|
+
}
|
|
776
|
+
|
|
704
777
|
#[test]
|
|
705
778
|
fn test_set_distinct() {
|
|
706
779
|
let expr = parse_one("SELECT a FROM t");
|
|
@@ -8285,15 +8285,21 @@ impl Dialect {
|
|
|
8285
8285
|
if matches!(target, DialectType::MySQL) && o.nulls_first.is_some() {
|
|
8286
8286
|
Action::MysqlNullsOrdering
|
|
8287
8287
|
} else {
|
|
8288
|
-
// Skip targets that don't support NULLS FIRST/LAST syntax
|
|
8288
|
+
// Skip targets that don't support NULLS FIRST/LAST syntax unless
|
|
8289
|
+
// the generator can preserve semantics with a CASE sort key.
|
|
8290
|
+
let target_rewrites_nulls =
|
|
8291
|
+
matches!(target, DialectType::TSQL | DialectType::Fabric);
|
|
8289
8292
|
let target_supports_nulls = !matches!(
|
|
8290
8293
|
target,
|
|
8291
8294
|
DialectType::MySQL
|
|
8292
8295
|
| DialectType::TSQL
|
|
8296
|
+
| DialectType::Fabric
|
|
8293
8297
|
| DialectType::StarRocks
|
|
8294
8298
|
| DialectType::Doris
|
|
8295
8299
|
);
|
|
8296
|
-
if o.nulls_first.is_none()
|
|
8300
|
+
if o.nulls_first.is_none()
|
|
8301
|
+
&& source != target
|
|
8302
|
+
&& (target_supports_nulls || target_rewrites_nulls)
|
|
8297
8303
|
{
|
|
8298
8304
|
Action::NullsOrdering
|
|
8299
8305
|
} else {
|
|
@@ -4803,7 +4803,10 @@ impl Generator {
|
|
|
4803
4803
|
} else {
|
|
4804
4804
|
self.write_space();
|
|
4805
4805
|
}
|
|
4806
|
-
if matches!(
|
|
4806
|
+
if matches!(
|
|
4807
|
+
self.config.dialect,
|
|
4808
|
+
Some(DialectType::TSQL) | Some(DialectType::Fabric)
|
|
4809
|
+
) {
|
|
4807
4810
|
// SQL Server 2012+ OFFSET ... FETCH syntax
|
|
4808
4811
|
self.write_keyword("OFFSET");
|
|
4809
4812
|
self.write_space();
|
|
@@ -23212,6 +23215,36 @@ impl Generator {
|
|
|
23212
23215
|
}
|
|
23213
23216
|
|
|
23214
23217
|
fn generate_ordered(&mut self, ordered: &Ordered) -> Result<()> {
|
|
23218
|
+
let unsupported_tsql_null_ordering = ordered.nulls_first.is_some()
|
|
23219
|
+
&& !self.config.null_ordering_supported
|
|
23220
|
+
&& matches!(
|
|
23221
|
+
self.config.dialect,
|
|
23222
|
+
Some(DialectType::TSQL) | Some(DialectType::Fabric)
|
|
23223
|
+
);
|
|
23224
|
+
let random_ordering = matches!(ordered.this, Expression::Rand(_) | Expression::Random(_));
|
|
23225
|
+
let emulate_tsql_null_ordering = if let Some(nulls_first) = ordered.nulls_first {
|
|
23226
|
+
let target_default_nulls_first = !ordered.desc;
|
|
23227
|
+
|
|
23228
|
+
unsupported_tsql_null_ordering
|
|
23229
|
+
&& nulls_first != target_default_nulls_first
|
|
23230
|
+
&& !random_ordering
|
|
23231
|
+
} else {
|
|
23232
|
+
false
|
|
23233
|
+
};
|
|
23234
|
+
|
|
23235
|
+
if emulate_tsql_null_ordering {
|
|
23236
|
+
self.write_keyword("CASE WHEN");
|
|
23237
|
+
self.write_space();
|
|
23238
|
+
self.generate_expression(&ordered.this)?;
|
|
23239
|
+
self.write_space();
|
|
23240
|
+
self.write_keyword("IS NULL THEN 1 ELSE 0 END");
|
|
23241
|
+
if ordered.nulls_first == Some(true) {
|
|
23242
|
+
self.write_space();
|
|
23243
|
+
self.write_keyword("DESC");
|
|
23244
|
+
}
|
|
23245
|
+
self.write(", ");
|
|
23246
|
+
}
|
|
23247
|
+
|
|
23215
23248
|
self.generate_expression(&ordered.this)?;
|
|
23216
23249
|
if ordered.desc {
|
|
23217
23250
|
self.write_space();
|
|
@@ -23221,8 +23254,9 @@ impl Generator {
|
|
|
23221
23254
|
self.write_keyword("ASC");
|
|
23222
23255
|
}
|
|
23223
23256
|
if let Some(nulls_first) = ordered.nulls_first {
|
|
23224
|
-
if
|
|
23225
|
-
|
|
23257
|
+
if !unsupported_tsql_null_ordering
|
|
23258
|
+
&& (self.config.null_ordering_supported
|
|
23259
|
+
|| !matches!(self.config.dialect, Some(DialectType::Fabric)))
|
|
23226
23260
|
{
|
|
23227
23261
|
// Determine if we should skip outputting NULLS FIRST/LAST when it's the default
|
|
23228
23262
|
// for the dialect. Different dialects have different NULL ordering defaults:
|
|
@@ -42,8 +42,8 @@ pub use ast_transforms::{
|
|
|
42
42
|
add_select_columns, add_where, get_aggregate_functions, get_column_names, get_functions,
|
|
43
43
|
get_identifiers, get_literals, get_output_column_names, get_subqueries, get_table_names,
|
|
44
44
|
get_window_functions, node_count, qualify_columns, remove_limit_offset, remove_nodes,
|
|
45
|
-
remove_select_columns, remove_where, rename_columns, rename_tables,
|
|
46
|
-
replace_nodes, set_distinct, set_limit, set_offset,
|
|
45
|
+
remove_select_columns, remove_where, rename_columns, rename_tables, rename_tables_with_options,
|
|
46
|
+
replace_by_type, replace_nodes, set_distinct, set_limit, set_offset, RenameTablesOptions,
|
|
47
47
|
};
|
|
48
48
|
pub use dialects::{
|
|
49
49
|
unregister_custom_dialect, CustomDialectBuilder, Dialect, DialectType, TranspileOptions,
|
|
@@ -59,7 +59,9 @@ pub use helper::{
|
|
|
59
59
|
csv, find_new_name, is_date_unit, is_float, is_int, is_iso_date, is_iso_datetime, merge_ranges,
|
|
60
60
|
name_sequence, seq_get, split_num_words, tsort, while_changing, DATE_UNITS,
|
|
61
61
|
};
|
|
62
|
-
pub use optimizer::{
|
|
62
|
+
pub use optimizer::{
|
|
63
|
+
annotate_types, qualify_tables, QualifyTablesOptions, TypeAnnotator, TypeCoercionClass,
|
|
64
|
+
};
|
|
63
65
|
pub use parser::Parser;
|
|
64
66
|
pub use resolver::{is_column_ambiguous, resolve_column, Resolver, ResolverError, ResolverResult};
|
|
65
67
|
pub use schema::{
|