polyglot-sql 0.13.0__tar.gz → 0.13.1__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.13.0 → polyglot_sql-0.13.1}/Cargo.lock +6 -6
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/Cargo.toml +1 -1
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/PKG-INFO +1 -1
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/Cargo.toml +2 -2
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/README.md +4 -4
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/benches/allocation_hotspots.rs +51 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/benches/transpile.rs +45 -1
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/normalization/statements.rs +2 -24
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/oracle.rs +2 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/tsql.rs +2 -2
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/expressions.rs +35 -3
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/generator.rs +543 -225
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/qualify_columns.rs +17 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/parser.rs +154 -92
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/transforms.rs +4 -8
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/dialect_matrix.rs +456 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-function-catalogs/README.md +1 -1
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/README.md +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/benches/ast_traversal.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/benches/common/mod.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/benches/in_list.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/benches/lineage.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/benches/parsing.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/benches/performance_hotspots.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/benches/rust_parsing.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/examples/basic_usage.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/examples/bench_json.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/ast_children.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/ast_json.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/ast_mutation.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/ast_transforms.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/binding.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/builder/mod.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/builder/plan.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/athena.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/bigquery.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/clickhouse.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/cockroachdb.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/databricks.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/datafusion.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/doris.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/dremio.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/drill.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/druid.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/duckdb.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/dune.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/exasol.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/fabric.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/generic.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/hana.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/hive.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/materialize.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/mod.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/mysql.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/normalization/aggregates.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/normalization/collections.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/normalization/hana.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/normalization/json.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/normalization/mod.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/normalization/operators.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/normalization/postgres_interval.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/normalization/scalar.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/normalization/temporal.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/normalization/types.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/normalization/vertica.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/postgres.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/presto.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/redshift.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/risingwave.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/singlestore.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/snowflake.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/solr.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/spark.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/sqlite.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/starrocks.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/tableau.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/teradata.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/tidb.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/trino.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/vertica.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/diff.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/error.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/format_tokens.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/function_catalog.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/function_registry.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/guard.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/helper.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/lib.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/lineage.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/openlineage.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/annotate_types.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/canonicalize.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/eliminate_ctes.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/eliminate_joins.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/isolate_table_selects.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/mod.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/normalize.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/normalize_identifiers.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/optimize_joins.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/optimizer.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/pushdown_predicates.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/pushdown_projections.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/qualify_tables.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/set_operation_types.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/simplify.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/subquery.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/planner.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/query_analysis/column_uses.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/query_analysis.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/resolver.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/schema.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/scope.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/set_operation.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/time.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/tokens.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/traversal.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/trie.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/validation/semantics.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/validation/tests.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/validation.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/analyze_failures.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/clickhouse_regression.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/common/known_failures.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/common/mod.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/common/test_data.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/common/test_runner.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/create_view_security_comment_regression.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/custom_clickhouse_coverage.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/custom_clickhouse_parser.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/custom_dialect.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/custom_dialect_tests.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/custom_fixtures/datafusion/ddl.json +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/custom_fixtures/datafusion/dml.json +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/custom_fixtures/datafusion/functions.json +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/custom_fixtures/datafusion/identity.json +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/custom_fixtures/datafusion/operators.json +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/custom_fixtures/datafusion/select.json +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/custom_fixtures/datafusion/transpilation.json +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/custom_fixtures/datafusion/types.json +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/custom_fixtures/hana/ddl.json +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/custom_fixtures/hana/dml.json +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/custom_fixtures/hana/functions.json +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/custom_fixtures/hana/identity.json +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/custom_fixtures/hana/select.json +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/custom_fixtures/hana/types.json +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/custom_fixtures/vertica/identity.json +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/custom_fixtures/vertica/transpilation.json +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/custom_fixtures/vertica/types.json +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/data_type_api.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/deep_nesting_regression.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/error_handling.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/fabric_regression.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/fabric_tpch_regression.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/identity_roundtrip.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/oracle_data_types_regression.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/postgres_explain_options.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/postgres_regexp_clickhouse.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/postgres_sqlite_regression.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/query_analysis.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/query_analysis_regression.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/snowflake_regression_test.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/sqlglot_compat.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/sqlglot_dialect_identity.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/sqlglot_identity.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/sqlglot_identity_detailed.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/sqlglot_parser.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/sqlglot_pretty.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/sqlglot_transpilation.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/sqlglot_transpile.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/tpch_transpile_stack.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/transform_regression.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/tsql_regression.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-ast-derive/Cargo.toml +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-ast-derive/src/lib.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-function-catalogs/Cargo.toml +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-function-catalogs/src/clickhouse.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-function-catalogs/src/duckdb.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-function-catalogs/src/lib.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-function-catalogs/tools/clickhouse/extract_functions.py +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-function-catalogs/tools/duckdb/extract_functions.py +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/Cargo.toml +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/README.md +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/docs/api.md +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/docs/index.md +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/mkdocs.yml +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/annotate_types.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/builders.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/dialects.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/diff.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/errors.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/expr.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/expr_types.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/format.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/generate.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/helpers.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/lib.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/lineage.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/openlineage.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/optimize.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/parse.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/query_analysis.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/tokenize.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/transforms.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/transpile.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/types.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/validate.rs +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/tests/conftest.py +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/tests/test_builders.py +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/tests/test_compat.py +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/tests/test_dialects.py +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/tests/test_diff.py +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/tests/test_expression.py +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/tests/test_format.py +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/tests/test_generate.py +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/tests/test_lineage.py +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/tests/test_optimize.py +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/tests/test_parse.py +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/tests/test_query_analysis.py +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/tests/test_transforms.py +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/tests/test_transpile.py +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/tests/test_validate.py +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/uv.lock +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/pyproject.toml +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/python/polyglot_sql/__init__.py +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/python/polyglot_sql/__init__.pyi +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/python/polyglot_sql/analysis_types.py +0 -0
- {polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/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.13.
|
|
608
|
+
version = "0.13.1"
|
|
609
609
|
dependencies = [
|
|
610
610
|
"criterion",
|
|
611
611
|
"once_cell",
|
|
@@ -623,7 +623,7 @@ dependencies = [
|
|
|
623
623
|
|
|
624
624
|
[[package]]
|
|
625
625
|
name = "polyglot-sql-ast-derive"
|
|
626
|
-
version = "0.13.
|
|
626
|
+
version = "0.13.1"
|
|
627
627
|
dependencies = [
|
|
628
628
|
"proc-macro2",
|
|
629
629
|
"quote",
|
|
@@ -632,7 +632,7 @@ dependencies = [
|
|
|
632
632
|
|
|
633
633
|
[[package]]
|
|
634
634
|
name = "polyglot-sql-ffi"
|
|
635
|
-
version = "0.13.
|
|
635
|
+
version = "0.13.1"
|
|
636
636
|
dependencies = [
|
|
637
637
|
"cbindgen",
|
|
638
638
|
"polyglot-sql",
|
|
@@ -642,11 +642,11 @@ dependencies = [
|
|
|
642
642
|
|
|
643
643
|
[[package]]
|
|
644
644
|
name = "polyglot-sql-function-catalogs"
|
|
645
|
-
version = "0.13.
|
|
645
|
+
version = "0.13.1"
|
|
646
646
|
|
|
647
647
|
[[package]]
|
|
648
648
|
name = "polyglot-sql-python"
|
|
649
|
-
version = "0.13.
|
|
649
|
+
version = "0.13.1"
|
|
650
650
|
dependencies = [
|
|
651
651
|
"polyglot-sql",
|
|
652
652
|
"pyo3",
|
|
@@ -657,7 +657,7 @@ dependencies = [
|
|
|
657
657
|
|
|
658
658
|
[[package]]
|
|
659
659
|
name = "polyglot-sql-wasm"
|
|
660
|
-
version = "0.13.
|
|
660
|
+
version = "0.13.1"
|
|
661
661
|
dependencies = [
|
|
662
662
|
"console_error_panic_hook",
|
|
663
663
|
"js-sys",
|
|
@@ -103,14 +103,14 @@ function-catalog-all-dialects = [
|
|
|
103
103
|
]
|
|
104
104
|
|
|
105
105
|
[dependencies]
|
|
106
|
-
polyglot-sql-ast-derive = { path = "../polyglot-sql-ast-derive", version = "0.13.
|
|
106
|
+
polyglot-sql-ast-derive = { path = "../polyglot-sql-ast-derive", version = "0.13.1" }
|
|
107
107
|
serde = { workspace = true }
|
|
108
108
|
serde_json = { workspace = true }
|
|
109
109
|
thiserror = { workspace = true }
|
|
110
110
|
unicode-segmentation = { workspace = true }
|
|
111
111
|
stacker = { version = "0.1", optional = true }
|
|
112
112
|
ts-rs = { version = "12.0", features = ["serde-compat"], optional = true }
|
|
113
|
-
polyglot-sql-function-catalogs = { path = "../polyglot-sql-function-catalogs", version = "0.13.
|
|
113
|
+
polyglot-sql-function-catalogs = { path = "../polyglot-sql-function-catalogs", version = "0.13.1", optional = true, default-features = false }
|
|
114
114
|
|
|
115
115
|
[dev-dependencies]
|
|
116
116
|
pretty_assertions = "1.4"
|
|
@@ -25,12 +25,12 @@ By default, `polyglot-sql` enables the full public API. Parser-only consumers ca
|
|
|
25
25
|
disable default features and opt into only the dialect parsers they need:
|
|
26
26
|
|
|
27
27
|
```toml
|
|
28
|
-
polyglot-sql = { version = "0.13.
|
|
28
|
+
polyglot-sql = { version = "0.13.1", default-features = false }
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
```toml
|
|
32
32
|
polyglot-sql = {
|
|
33
|
-
version = "0.13.
|
|
33
|
+
version = "0.13.1",
|
|
34
34
|
default-features = false,
|
|
35
35
|
features = ["dialect-clickhouse"],
|
|
36
36
|
}
|
|
@@ -44,14 +44,14 @@ Examples:
|
|
|
44
44
|
```toml
|
|
45
45
|
# Parse and generate SQL for one dialect.
|
|
46
46
|
polyglot-sql = {
|
|
47
|
-
version = "0.13.
|
|
47
|
+
version = "0.13.1",
|
|
48
48
|
default-features = false,
|
|
49
49
|
features = ["generate", "dialect-clickhouse"],
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
# Cross-dialect transpilation.
|
|
53
53
|
polyglot-sql = {
|
|
54
|
-
version = "0.13.
|
|
54
|
+
version = "0.13.1",
|
|
55
55
|
default-features = false,
|
|
56
56
|
features = ["transpile", "dialect-clickhouse", "dialect-postgresql"],
|
|
57
57
|
}
|
{polyglot_sql-0.13.0 → polyglot_sql-0.13.1}/crates/polyglot-sql/benches/allocation_hotspots.rs
RENAMED
|
@@ -29,7 +29,58 @@ fn print_stats(case: &str, operation: &str, input_bytes: usize, stats: Stats) {
|
|
|
29
29
|
);
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
+
fn compound_row_limits() {
|
|
33
|
+
for branches in [1, 10, 100] {
|
|
34
|
+
let body = vec!["SELECT a FROM t"; branches].join(" UNION ALL ");
|
|
35
|
+
for (name, source, target, tail) in [
|
|
36
|
+
(
|
|
37
|
+
"count",
|
|
38
|
+
DialectType::PostgreSQL,
|
|
39
|
+
DialectType::Oracle,
|
|
40
|
+
"LIMIT 5 OFFSET 2",
|
|
41
|
+
),
|
|
42
|
+
(
|
|
43
|
+
"percent",
|
|
44
|
+
DialectType::DuckDB,
|
|
45
|
+
DialectType::Oracle,
|
|
46
|
+
"LIMIT 10 PERCENT",
|
|
47
|
+
),
|
|
48
|
+
(
|
|
49
|
+
"fetch",
|
|
50
|
+
DialectType::Oracle,
|
|
51
|
+
DialectType::DuckDB,
|
|
52
|
+
"OFFSET 2 ROWS FETCH NEXT 5 ROWS ONLY",
|
|
53
|
+
),
|
|
54
|
+
] {
|
|
55
|
+
let sql = format!("{body} ORDER BY a {tail}");
|
|
56
|
+
let dialect = Dialect::get(source);
|
|
57
|
+
let writer = Dialect::get(target);
|
|
58
|
+
let ast = dialect.parse(&sql).unwrap();
|
|
59
|
+
let case = format!("compound/{name}/{branches}");
|
|
60
|
+
print_stats(
|
|
61
|
+
&case,
|
|
62
|
+
"parse",
|
|
63
|
+
sql.len(),
|
|
64
|
+
measure(|| dialect.parse(&sql).unwrap()),
|
|
65
|
+
);
|
|
66
|
+
print_stats(
|
|
67
|
+
&case,
|
|
68
|
+
"generate",
|
|
69
|
+
sql.len(),
|
|
70
|
+
measure(|| writer.generate(&ast[0]).unwrap()),
|
|
71
|
+
);
|
|
72
|
+
print_stats(
|
|
73
|
+
&case,
|
|
74
|
+
"transpile",
|
|
75
|
+
sql.len(),
|
|
76
|
+
measure(|| dialect.transpile(&sql, target).unwrap()),
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
32
82
|
fn main() {
|
|
83
|
+
compound_row_limits();
|
|
33
84
|
let dialect = Dialect::get(DialectType::PostgreSQL);
|
|
34
85
|
let large = large_token_list();
|
|
35
86
|
let columns = many_columns();
|
|
@@ -167,10 +167,54 @@ fn bench_roundtrip(c: &mut Criterion) {
|
|
|
167
167
|
group.finish();
|
|
168
168
|
}
|
|
169
169
|
|
|
170
|
+
fn bench_compound_row_limits(c: &mut Criterion) {
|
|
171
|
+
use polyglot_sql::dialects::Dialect;
|
|
172
|
+
use std::time::Duration;
|
|
173
|
+
|
|
174
|
+
let mut group = c.benchmark_group("compound_row_limits");
|
|
175
|
+
group.sample_size(30);
|
|
176
|
+
group.warm_up_time(Duration::from_millis(500));
|
|
177
|
+
group.measurement_time(Duration::from_secs(2));
|
|
178
|
+
for branches in [1, 10, 100] {
|
|
179
|
+
let body = vec!["SELECT a FROM t"; branches].join(" UNION ALL ");
|
|
180
|
+
for (name, source, target, tail) in [
|
|
181
|
+
(
|
|
182
|
+
"count",
|
|
183
|
+
DialectType::PostgreSQL,
|
|
184
|
+
DialectType::Oracle,
|
|
185
|
+
"LIMIT 5 OFFSET 2",
|
|
186
|
+
),
|
|
187
|
+
(
|
|
188
|
+
"percent",
|
|
189
|
+
DialectType::DuckDB,
|
|
190
|
+
DialectType::Oracle,
|
|
191
|
+
"LIMIT 10 PERCENT",
|
|
192
|
+
),
|
|
193
|
+
(
|
|
194
|
+
"fetch",
|
|
195
|
+
DialectType::Oracle,
|
|
196
|
+
DialectType::DuckDB,
|
|
197
|
+
"OFFSET 2 ROWS FETCH NEXT 5 ROWS ONLY",
|
|
198
|
+
),
|
|
199
|
+
] {
|
|
200
|
+
let sql = format!("{body} ORDER BY a {tail}");
|
|
201
|
+
let dialect = Dialect::get(source);
|
|
202
|
+
group.bench_function(format!("parse/{name}/{branches}"), |b| {
|
|
203
|
+
b.iter(|| dialect.parse(black_box(&sql)).unwrap())
|
|
204
|
+
});
|
|
205
|
+
group.bench_function(format!("transpile/{name}/{branches}"), |b| {
|
|
206
|
+
b.iter(|| transpile(black_box(&sql), source, target).unwrap())
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
group.finish();
|
|
211
|
+
}
|
|
212
|
+
|
|
170
213
|
criterion_group!(
|
|
171
214
|
benches,
|
|
172
215
|
bench_transpile_by_query_size,
|
|
173
216
|
bench_transpile_dialect_pairs,
|
|
174
|
-
bench_roundtrip
|
|
217
|
+
bench_roundtrip,
|
|
218
|
+
bench_compound_row_limits
|
|
175
219
|
);
|
|
176
220
|
criterion_main!(benches);
|
|
@@ -119,30 +119,8 @@ pub(super) fn normalize_root(expression: Expression, context: &NormalizationCont
|
|
|
119
119
|
expr
|
|
120
120
|
};
|
|
121
121
|
|
|
122
|
-
// Oracle
|
|
123
|
-
|
|
124
|
-
if let Expression::Select(mut select) = expr {
|
|
125
|
-
if let Some(limit) = select.limit.take() {
|
|
126
|
-
// Convert LIMIT to FETCH FIRST n ROWS ONLY
|
|
127
|
-
select.fetch = Some(crate::expressions::Fetch {
|
|
128
|
-
direction: "FIRST".to_string(),
|
|
129
|
-
count: Some(limit.this),
|
|
130
|
-
percent: false,
|
|
131
|
-
rows: true,
|
|
132
|
-
with_ties: false,
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
// Add ROWS to OFFSET if present
|
|
136
|
-
if let Some(ref mut offset) = select.offset {
|
|
137
|
-
offset.rows = Some(true);
|
|
138
|
-
}
|
|
139
|
-
Expression::Select(select)
|
|
140
|
-
} else {
|
|
141
|
-
expr
|
|
142
|
-
}
|
|
143
|
-
} else {
|
|
144
|
-
expr
|
|
145
|
-
};
|
|
122
|
+
// Oracle LIMIT/OFFSET -> OFFSET n ROWS FETCH FIRST m ROWS ONLY is rendered by the
|
|
123
|
+
// generator (`LimitFetchStyle::FetchFirst`), so it also applies to nested queries.
|
|
146
124
|
|
|
147
125
|
// Handle CreateTable WITH properties transformation before recursive transforms
|
|
148
126
|
let expr = if let Expression::CreateTable(mut ct) = expr {
|
|
@@ -56,6 +56,8 @@ impl DialectImpl for OracleDialect {
|
|
|
56
56
|
tz_to_with_time_zone: true,
|
|
57
57
|
// Oracle UNPIVOT aliases retain literal aliases as literals.
|
|
58
58
|
unpivot_aliases_are_identifiers: false,
|
|
59
|
+
// Oracle has no LIMIT: use OFFSET n ROWS FETCH FIRST m ROWS ONLY
|
|
60
|
+
limit_fetch_style: crate::generator::LimitFetchStyle::FetchFirst,
|
|
59
61
|
..Default::default()
|
|
60
62
|
}
|
|
61
63
|
}
|
|
@@ -62,8 +62,8 @@ impl DialectImpl for TSQLDialect {
|
|
|
62
62
|
identifier_quote_style: IdentifierQuoteStyle::BRACKET,
|
|
63
63
|
dialect: Some(DialectType::TSQL),
|
|
64
64
|
// T-SQL specific settings from Python sqlglot
|
|
65
|
-
// SQL Server uses TOP/FETCH instead of LIMIT
|
|
66
|
-
limit_fetch_style: crate::generator::LimitFetchStyle::
|
|
65
|
+
// SQL Server uses TOP (or OFFSET/FETCH, handled by the generator) instead of LIMIT
|
|
66
|
+
limit_fetch_style: crate::generator::LimitFetchStyle::Top,
|
|
67
67
|
// NULLS FIRST/LAST not supported in SQL Server
|
|
68
68
|
null_ordering_supported: false,
|
|
69
69
|
// SQL Server does not support SQL:2003 aggregate FILTER clauses.
|
|
@@ -3935,7 +3935,8 @@ pub struct Union {
|
|
|
3935
3935
|
pub with: Option<With>,
|
|
3936
3936
|
/// ORDER BY applied to entire UNION result
|
|
3937
3937
|
pub order_by: Option<OrderBy>,
|
|
3938
|
-
///
|
|
3938
|
+
/// Row limit applied to the entire UNION result: a legacy count expression,
|
|
3939
|
+
/// or a complete `Expression::Limit` / `Expression::Fetch` with clause options.
|
|
3939
3940
|
pub limit: Option<Box<Expression>>,
|
|
3940
3941
|
/// OFFSET applied to entire UNION result
|
|
3941
3942
|
pub offset: Option<Box<Expression>>,
|
|
@@ -4004,7 +4005,8 @@ pub struct Intersect {
|
|
|
4004
4005
|
pub with: Option<With>,
|
|
4005
4006
|
/// ORDER BY applied to entire INTERSECT result
|
|
4006
4007
|
pub order_by: Option<OrderBy>,
|
|
4007
|
-
///
|
|
4008
|
+
/// Row limit applied to the entire INTERSECT result: a legacy count expression,
|
|
4009
|
+
/// or a complete `Expression::Limit` / `Expression::Fetch` with clause options.
|
|
4008
4010
|
pub limit: Option<Box<Expression>>,
|
|
4009
4011
|
/// OFFSET applied to entire INTERSECT result
|
|
4010
4012
|
pub offset: Option<Box<Expression>>,
|
|
@@ -4071,7 +4073,8 @@ pub struct Except {
|
|
|
4071
4073
|
pub with: Option<With>,
|
|
4072
4074
|
/// ORDER BY applied to entire EXCEPT result
|
|
4073
4075
|
pub order_by: Option<OrderBy>,
|
|
4074
|
-
///
|
|
4076
|
+
/// Row limit applied to the entire EXCEPT result: a legacy count expression,
|
|
4077
|
+
/// or a complete `Expression::Limit` / `Expression::Fetch` with clause options.
|
|
4075
4078
|
pub limit: Option<Box<Expression>>,
|
|
4076
4079
|
/// OFFSET applied to entire EXCEPT result
|
|
4077
4080
|
pub offset: Option<Box<Expression>>,
|
|
@@ -5807,6 +5810,35 @@ pub struct Limit {
|
|
|
5807
5810
|
pub comments: Vec<String>,
|
|
5808
5811
|
}
|
|
5809
5812
|
|
|
5813
|
+
impl Limit {
|
|
5814
|
+
/// Preserve the legacy count-only set-operation AST when no metadata is needed.
|
|
5815
|
+
pub(crate) fn into_set_limit(self) -> Box<Expression> {
|
|
5816
|
+
if self.percent || !self.comments.is_empty() {
|
|
5817
|
+
Box::new(Expression::Limit(Box::new(self)))
|
|
5818
|
+
} else {
|
|
5819
|
+
Box::new(self.this)
|
|
5820
|
+
}
|
|
5821
|
+
}
|
|
5822
|
+
}
|
|
5823
|
+
|
|
5824
|
+
/// Move a compound query's row limit onto a SELECT without losing clause options.
|
|
5825
|
+
/// Bare expressions remain supported for existing builders and serialized ASTs.
|
|
5826
|
+
pub(crate) fn split_set_limit(limit: Option<Box<Expression>>) -> (Option<Limit>, Option<Fetch>) {
|
|
5827
|
+
match limit.map(|limit| *limit) {
|
|
5828
|
+
Some(Expression::Limit(limit)) => (Some(*limit), None),
|
|
5829
|
+
Some(Expression::Fetch(fetch)) => (None, Some(*fetch)),
|
|
5830
|
+
Some(this) => (
|
|
5831
|
+
Some(Limit {
|
|
5832
|
+
this,
|
|
5833
|
+
percent: false,
|
|
5834
|
+
comments: Vec::new(),
|
|
5835
|
+
}),
|
|
5836
|
+
None,
|
|
5837
|
+
),
|
|
5838
|
+
None => (None, None),
|
|
5839
|
+
}
|
|
5840
|
+
}
|
|
5841
|
+
|
|
5810
5842
|
/// OFFSET clause
|
|
5811
5843
|
#[derive(polyglot_sql_ast_derive::AstNode, Debug, Clone, PartialEq, Serialize, Deserialize)]
|
|
5812
5844
|
#[cfg_attr(feature = "bindings", derive(TS))]
|