polyglot-sql 0.3.9__tar.gz → 0.3.11__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.11}/Cargo.lock +5 -5
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/Cargo.toml +1 -1
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/PKG-INFO +1 -1
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/Cargo.toml +1 -1
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/ast_transforms.rs +73 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/fabric.rs +11 -2
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/mod.rs +8 -2
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/generator.rs +89 -3
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/lib.rs +5 -3
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/optimizer/qualify_tables.rs +315 -30
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/parser.rs +50 -13
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/common/known_failures.rs +2 -3
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/custom_fixtures/datafusion/transpilation.json +9 -9
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/fabric_regression.rs +75 -0
- polyglot_sql-0.3.11/crates/polyglot-sql/tests/issue201_regression_test.rs +38 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/snowflake_regression_test.rs +26 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/sqlglot_dialect_identity.rs +4 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/sqlglot_transpilation.rs +0 -1
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/tsql_regression.rs +44 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/lib.rs +3 -0
- polyglot_sql-0.3.11/crates/polyglot-sql-python/src/transforms.rs +121 -0
- polyglot_sql-0.3.11/crates/polyglot-sql-python/tests/test_transforms.py +44 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/tests/test_transpile.py +27 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/python/polyglot_sql/__init__.py +4 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/python/polyglot_sql/__init__.pyi +35 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/README.md +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/README.md +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/benches/in_list.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/benches/parsing.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/benches/rust_parsing.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/benches/transpile.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/examples/basic_usage.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/examples/bench_json.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/builder.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/athena.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/bigquery.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/clickhouse.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/cockroachdb.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/databricks.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/datafusion.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/doris.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/dremio.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/drill.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/druid.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/duckdb.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/dune.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/exasol.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/generic.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/hive.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/materialize.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/mysql.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/oracle.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/postgres.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/presto.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/redshift.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/risingwave.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/singlestore.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/snowflake.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/solr.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/spark.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/sqlite.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/starrocks.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/tableau.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/teradata.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/tidb.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/trino.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/tsql.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/diff.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/error.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/expressions.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/function_catalog.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/function_registry.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/helper.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/lineage.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/optimizer/annotate_types.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/optimizer/canonicalize.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/optimizer/eliminate_ctes.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/optimizer/eliminate_joins.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/optimizer/isolate_table_selects.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/optimizer/mod.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/optimizer/normalize.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/optimizer/normalize_identifiers.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/optimizer/optimize_joins.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/optimizer/optimizer.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/optimizer/pushdown_predicates.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/optimizer/pushdown_projections.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/optimizer/qualify_columns.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/optimizer/simplify.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/optimizer/subquery.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/planner.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/resolver.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/schema.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/scope.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/time.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/tokens.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/transforms.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/traversal.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/trie.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/validation/tests.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/validation.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/analyze_failures.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/clickhouse_regression.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/common/mod.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/common/test_data.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/common/test_runner.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/custom_clickhouse_coverage.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/custom_clickhouse_parser.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/custom_dialect.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/custom_dialect_tests.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/custom_fixtures/datafusion/ddl.json +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/custom_fixtures/datafusion/dml.json +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/custom_fixtures/datafusion/functions.json +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/custom_fixtures/datafusion/identity.json +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/custom_fixtures/datafusion/operators.json +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/custom_fixtures/datafusion/select.json +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/custom_fixtures/datafusion/types.json +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/deep_nesting_regression.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/dialect_matrix.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/error_handling.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/fabric_tpch_regression.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/identity_roundtrip.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/postgres_sqlite_regression.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/sqlglot_compat.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/sqlglot_identity.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/sqlglot_identity_detailed.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/sqlglot_parser.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/sqlglot_pretty.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/sqlglot_transpile.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/tpch_transpile_stack.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/transform_regression.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-function-catalogs/Cargo.toml +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-function-catalogs/README.md +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-function-catalogs/src/clickhouse.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-function-catalogs/src/duckdb.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-function-catalogs/src/lib.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-function-catalogs/tools/clickhouse/extract_functions.py +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-function-catalogs/tools/duckdb/extract_functions.py +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/Cargo.toml +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/README.md +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/docs/api.md +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/docs/index.md +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/mkdocs.yml +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/annotate_types.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/dialects.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/diff.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/errors.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/expr.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/expr_types.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/format.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/generate.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/helpers.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/lineage.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/optimize.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/parse.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/tokenize.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/transpile.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/types.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/validate.rs +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/tests/conftest.py +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/tests/test_compat.py +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/tests/test_dialects.py +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/tests/test_diff.py +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/tests/test_expression.py +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/tests/test_format.py +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/tests/test_generate.py +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/tests/test_lineage.py +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/tests/test_optimize.py +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/tests/test_parse.py +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/tests/test_validate.py +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/uv.lock +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/pyproject.toml +0 -0
- {polyglot_sql-0.3.9 → polyglot_sql-0.3.11}/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.11"
|
|
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.11"
|
|
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.11"
|
|
635
635
|
|
|
636
636
|
[[package]]
|
|
637
637
|
name = "polyglot-sql-python"
|
|
638
|
-
version = "0.3.
|
|
638
|
+
version = "0.3.11"
|
|
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.11"
|
|
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.11", 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");
|
|
@@ -371,6 +371,7 @@ impl FabricDialect {
|
|
|
371
371
|
// Parse out precision and scale if present: "TYPENAME(n)" or "TYPENAME(n, m)"
|
|
372
372
|
let (base_name, precision, scale) =
|
|
373
373
|
TSQLDialect::parse_type_precision_and_scale(&upper);
|
|
374
|
+
let has_max_length = upper.contains("(MAX)");
|
|
374
375
|
|
|
375
376
|
match base_name.as_str() {
|
|
376
377
|
// DATETIME -> DATETIME2(6)
|
|
@@ -445,7 +446,11 @@ impl FabricDialect {
|
|
|
445
446
|
|
|
446
447
|
// NCHAR -> CHAR (with length preserved)
|
|
447
448
|
"NCHAR" => {
|
|
448
|
-
if
|
|
449
|
+
if has_max_length {
|
|
450
|
+
DataType::Custom {
|
|
451
|
+
name: "CHAR(MAX)".to_string(),
|
|
452
|
+
}
|
|
453
|
+
} else if let Some(len) = precision {
|
|
449
454
|
DataType::Custom {
|
|
450
455
|
name: format!("CHAR({})", len),
|
|
451
456
|
}
|
|
@@ -458,7 +463,11 @@ impl FabricDialect {
|
|
|
458
463
|
|
|
459
464
|
// NVARCHAR -> VARCHAR (with length preserved)
|
|
460
465
|
"NVARCHAR" => {
|
|
461
|
-
if
|
|
466
|
+
if has_max_length {
|
|
467
|
+
DataType::Custom {
|
|
468
|
+
name: "VARCHAR(MAX)".to_string(),
|
|
469
|
+
}
|
|
470
|
+
} else if let Some(len) = precision {
|
|
462
471
|
DataType::Custom {
|
|
463
472
|
name: format!("VARCHAR({})", len),
|
|
464
473
|
}
|
|
@@ -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:
|
|
@@ -23995,6 +24029,12 @@ impl Generator {
|
|
|
23995
24029
|
} => {
|
|
23996
24030
|
// Dialect-specific timestamp type mappings
|
|
23997
24031
|
match self.config.dialect {
|
|
24032
|
+
Some(DialectType::Snowflake) if *timezone => {
|
|
24033
|
+
self.write_keyword("TIMESTAMPTZ");
|
|
24034
|
+
if let Some(p) = precision {
|
|
24035
|
+
self.write(&format!("({})", p));
|
|
24036
|
+
}
|
|
24037
|
+
}
|
|
23998
24038
|
Some(DialectType::ClickHouse) => {
|
|
23999
24039
|
self.write("DateTime");
|
|
24000
24040
|
if let Some(p) = precision {
|
|
@@ -24563,6 +24603,52 @@ impl Generator {
|
|
|
24563
24603
|
// MySQL doesn't support TIMESTAMPTZ/TIMESTAMPLTZ, use TIMESTAMP
|
|
24564
24604
|
self.write_keyword("TIMESTAMP");
|
|
24565
24605
|
}
|
|
24606
|
+
Some(DialectType::Snowflake) => {
|
|
24607
|
+
let (base_upper, suffix) = if let Some(idx) = name.find('(') {
|
|
24608
|
+
(name_upper[..idx].to_string(), &name[idx..])
|
|
24609
|
+
} else {
|
|
24610
|
+
(name_upper.clone(), "")
|
|
24611
|
+
};
|
|
24612
|
+
|
|
24613
|
+
match base_upper.as_str() {
|
|
24614
|
+
"TIMESTAMPNTZ" | "TIMESTAMP_NTZ" => {
|
|
24615
|
+
self.write_keyword("TIMESTAMPNTZ");
|
|
24616
|
+
self.write(suffix);
|
|
24617
|
+
}
|
|
24618
|
+
"TIMESTAMPLTZ" | "TIMESTAMP_LTZ" => {
|
|
24619
|
+
self.write_keyword("TIMESTAMPLTZ");
|
|
24620
|
+
self.write(suffix);
|
|
24621
|
+
}
|
|
24622
|
+
"TIMESTAMPTZ" | "TIMESTAMP_TZ" => {
|
|
24623
|
+
self.write_keyword("TIMESTAMPTZ");
|
|
24624
|
+
self.write(suffix);
|
|
24625
|
+
}
|
|
24626
|
+
_ => self.write(name),
|
|
24627
|
+
}
|
|
24628
|
+
}
|
|
24629
|
+
Some(DialectType::Fabric) => {
|
|
24630
|
+
let (base_upper, args_str) = if let Some(idx) = name.find('(') {
|
|
24631
|
+
(name_upper[..idx].to_string(), Some(&name[idx..]))
|
|
24632
|
+
} else {
|
|
24633
|
+
(name_upper.clone(), None)
|
|
24634
|
+
};
|
|
24635
|
+
|
|
24636
|
+
match base_upper.as_str() {
|
|
24637
|
+
"NVARCHAR" => {
|
|
24638
|
+
self.write_keyword("VARCHAR");
|
|
24639
|
+
if let Some(args) = args_str {
|
|
24640
|
+
self.write(args);
|
|
24641
|
+
}
|
|
24642
|
+
}
|
|
24643
|
+
"NCHAR" => {
|
|
24644
|
+
self.write_keyword("CHAR");
|
|
24645
|
+
if let Some(args) = args_str {
|
|
24646
|
+
self.write(args);
|
|
24647
|
+
}
|
|
24648
|
+
}
|
|
24649
|
+
_ => self.write(name),
|
|
24650
|
+
}
|
|
24651
|
+
}
|
|
24566
24652
|
Some(DialectType::TSQL) if name_upper == "VARIANT" => {
|
|
24567
24653
|
self.write_keyword("SQL_VARIANT");
|
|
24568
24654
|
}
|
|
@@ -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::{
|