polyglot-sql 0.12.1__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.12.1 → polyglot_sql-0.13.1}/Cargo.lock +6 -6
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/Cargo.toml +1 -1
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/PKG-INFO +2 -2
- {polyglot_sql-0.12.1/crates/polyglot-sql-python → polyglot_sql-0.13.1}/README.md +1 -1
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/Cargo.toml +6 -3
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/README.md +5 -5
- polyglot_sql-0.13.1/crates/polyglot-sql/benches/allocation_hotspots.rs +167 -0
- polyglot_sql-0.13.1/crates/polyglot-sql/benches/common/mod.rs +93 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/benches/performance_hotspots.rs +44 -55
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/benches/transpile.rs +45 -1
- polyglot_sql-0.13.1/crates/polyglot-sql/src/ast_children.rs +190 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/ast_mutation.rs +38 -13
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/ast_transforms.rs +253 -10
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/builder/mod.rs +3 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/bigquery.rs +103 -4
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/clickhouse.rs +10 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/databricks.rs +2 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/duckdb.rs +738 -28
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/exasol.rs +2 -0
- polyglot_sql-0.13.1/crates/polyglot-sql/src/dialects/hana.rs +39 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/mod.rs +315 -69
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/mysql.rs +3 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/normalization/aggregates.rs +19 -0
- polyglot_sql-0.13.1/crates/polyglot-sql/src/dialects/normalization/hana.rs +151 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/normalization/json.rs +6 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/normalization/mod.rs +51 -15
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/normalization/operators.rs +5 -2
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/normalization/scalar.rs +78 -4
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/normalization/statements.rs +3 -24
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/normalization/temporal.rs +430 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/normalization/types.rs +5 -4
- polyglot_sql-0.13.1/crates/polyglot-sql/src/dialects/normalization/vertica.rs +880 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/oracle.rs +2 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/postgres.rs +12 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/presto.rs +10 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/redshift.rs +4 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/snowflake.rs +30 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/spark.rs +4 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/trino.rs +4 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/tsql.rs +2 -2
- polyglot_sql-0.13.1/crates/polyglot-sql/src/dialects/vertica.rs +319 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/expressions.rs +650 -3
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/format_tokens.rs +51 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/function_registry.rs +329 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/generator.rs +3685 -374
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/lib.rs +1 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/lineage.rs +80 -18
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/annotate_types.rs +64 -1
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/canonicalize.rs +17 -27
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/normalize_identifiers.rs +15 -3
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/pushdown_projections.rs +2 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/qualify_columns.rs +17 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/set_operation_types.rs +3 -1
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/parser.rs +3212 -167
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/resolver.rs +41 -3
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/scope.rs +79 -18
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/tokens.rs +4 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/transforms.rs +25 -8
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/traversal.rs +131 -8
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/validation/tests.rs +201 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/validation.rs +47 -8
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/common/known_failures.rs +13 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/common/test_runner.rs +2 -0
- polyglot_sql-0.13.1/crates/polyglot-sql/tests/custom_dialect_tests.rs +1639 -0
- polyglot_sql-0.13.1/crates/polyglot-sql/tests/custom_fixtures/hana/ddl.json +66 -0
- polyglot_sql-0.13.1/crates/polyglot-sql/tests/custom_fixtures/hana/dml.json +51 -0
- polyglot_sql-0.13.1/crates/polyglot-sql/tests/custom_fixtures/hana/functions.json +136 -0
- polyglot_sql-0.13.1/crates/polyglot-sql/tests/custom_fixtures/hana/identity.json +163 -0
- polyglot_sql-0.13.1/crates/polyglot-sql/tests/custom_fixtures/hana/select.json +128 -0
- polyglot_sql-0.13.1/crates/polyglot-sql/tests/custom_fixtures/hana/types.json +39 -0
- polyglot_sql-0.13.1/crates/polyglot-sql/tests/custom_fixtures/vertica/identity.json +215 -0
- polyglot_sql-0.13.1/crates/polyglot-sql/tests/custom_fixtures/vertica/transpilation.json +188 -0
- polyglot_sql-0.13.1/crates/polyglot-sql/tests/custom_fixtures/vertica/types.json +50 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/deep_nesting_regression.rs +29 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/dialect_matrix.rs +1299 -2
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/query_analysis.rs +83 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/transform_regression.rs +212 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-ast-derive/src/lib.rs +97 -55
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-function-catalogs/README.md +1 -1
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1/crates/polyglot-sql-python}/README.md +1 -1
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/dialects.rs +2 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/expr_types.rs +6 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/tests/test_dialects.py +2 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/tests/test_expression.py +25 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/tests/test_transpile.py +22 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/python/polyglot_sql/__init__.py +12 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/python/polyglot_sql/__init__.pyi +6 -0
- polyglot_sql-0.12.1/crates/polyglot-sql/benches/allocation_hotspots.rs +0 -122
- polyglot_sql-0.12.1/crates/polyglot-sql/src/ast_children.rs +0 -105
- polyglot_sql-0.12.1/crates/polyglot-sql/tests/custom_dialect_tests.rs +0 -274
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/benches/ast_traversal.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/benches/in_list.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/benches/lineage.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/benches/parsing.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/benches/rust_parsing.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/examples/basic_usage.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/examples/bench_json.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/ast_json.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/binding.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/builder/plan.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/athena.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/cockroachdb.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/datafusion.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/doris.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/dremio.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/drill.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/druid.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/dune.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/fabric.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/generic.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/hive.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/materialize.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/normalization/collections.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/normalization/postgres_interval.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/risingwave.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/singlestore.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/solr.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/sqlite.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/starrocks.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/tableau.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/teradata.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/dialects/tidb.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/diff.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/error.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/function_catalog.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/guard.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/helper.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/openlineage.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/eliminate_ctes.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/eliminate_joins.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/isolate_table_selects.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/mod.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/normalize.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/optimize_joins.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/optimizer.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/pushdown_predicates.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/qualify_tables.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/simplify.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/optimizer/subquery.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/planner.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/query_analysis/column_uses.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/query_analysis.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/schema.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/set_operation.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/time.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/trie.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/src/validation/semantics.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/analyze_failures.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/clickhouse_regression.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/common/mod.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/common/test_data.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/create_view_security_comment_regression.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/custom_clickhouse_coverage.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/custom_clickhouse_parser.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/custom_dialect.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/custom_fixtures/datafusion/ddl.json +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/custom_fixtures/datafusion/dml.json +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/custom_fixtures/datafusion/functions.json +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/custom_fixtures/datafusion/identity.json +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/custom_fixtures/datafusion/operators.json +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/custom_fixtures/datafusion/select.json +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/custom_fixtures/datafusion/transpilation.json +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/custom_fixtures/datafusion/types.json +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/data_type_api.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/error_handling.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/fabric_regression.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/fabric_tpch_regression.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/identity_roundtrip.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/oracle_data_types_regression.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/postgres_explain_options.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/postgres_regexp_clickhouse.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/postgres_sqlite_regression.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/query_analysis_regression.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/snowflake_regression_test.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/sqlglot_compat.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/sqlglot_dialect_identity.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/sqlglot_identity.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/sqlglot_identity_detailed.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/sqlglot_parser.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/sqlglot_pretty.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/sqlglot_transpilation.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/sqlglot_transpile.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/tpch_transpile_stack.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/tests/tsql_regression.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-ast-derive/Cargo.toml +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-function-catalogs/Cargo.toml +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-function-catalogs/src/clickhouse.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-function-catalogs/src/duckdb.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-function-catalogs/src/lib.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-function-catalogs/tools/clickhouse/extract_functions.py +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-function-catalogs/tools/duckdb/extract_functions.py +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/Cargo.toml +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/docs/api.md +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/docs/index.md +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/mkdocs.yml +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/annotate_types.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/builders.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/diff.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/errors.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/expr.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/format.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/generate.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/helpers.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/lib.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/lineage.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/openlineage.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/optimize.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/parse.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/query_analysis.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/tokenize.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/transforms.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/transpile.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/types.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/src/validate.rs +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/tests/conftest.py +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/tests/test_builders.py +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/tests/test_compat.py +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/tests/test_diff.py +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/tests/test_format.py +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/tests/test_generate.py +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/tests/test_lineage.py +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/tests/test_optimize.py +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/tests/test_parse.py +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/tests/test_query_analysis.py +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/tests/test_transforms.py +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/tests/test_validate.py +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql-python/uv.lock +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/pyproject.toml +0 -0
- {polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/python/polyglot_sql/analysis_types.py +0 -0
- {polyglot_sql-0.12.1 → 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.
|
|
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.
|
|
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.
|
|
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.
|
|
645
|
+
version = "0.13.1"
|
|
646
646
|
|
|
647
647
|
[[package]]
|
|
648
648
|
name = "polyglot-sql-python"
|
|
649
|
-
version = "0.
|
|
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.
|
|
660
|
+
version = "0.13.1"
|
|
661
661
|
dependencies = [
|
|
662
662
|
"console_error_panic_hook",
|
|
663
663
|
"js-sys",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: polyglot-sql
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.13.1
|
|
4
4
|
Classifier: Development Status :: 4 - Beta
|
|
5
5
|
Classifier: Intended Audience :: Developers
|
|
6
6
|
Classifier: License :: OSI Approved :: MIT License
|
|
@@ -356,7 +356,7 @@ All functions are exported from `polyglot_sql`.
|
|
|
356
356
|
|
|
357
357
|
Current dialect names returned by `polyglot_sql.dialects()`:
|
|
358
358
|
|
|
359
|
-
`athena`, `bigquery`, `clickhouse`, `cockroachdb`, `datafusion`, `databricks`, `doris`, `dremio`, `drill`, `druid`, `duckdb`, `dune`, `exasol`, `fabric`, `generic`, `hive`, `materialize`, `mysql`, `oracle`, `postgres`, `presto`, `redshift`, `risingwave`, `singlestore`, `snowflake`, `solr`, `spark`, `sqlite`, `starrocks`, `tableau`, `teradata`, `tidb`, `trino`, `tsql`.
|
|
359
|
+
`athena`, `bigquery`, `clickhouse`, `cockroachdb`, `datafusion`, `databricks`, `doris`, `dremio`, `drill`, `druid`, `duckdb`, `dune`, `exasol`, `fabric`, `generic`, `hana`, `hive`, `materialize`, `mysql`, `oracle`, `postgres`, `presto`, `redshift`, `risingwave`, `singlestore`, `snowflake`, `solr`, `spark`, `sqlite`, `starrocks`, `tableau`, `teradata`, `tidb`, `trino`, `tsql`, `vertica`.
|
|
360
360
|
|
|
361
361
|
## Error Handling
|
|
362
362
|
|
|
@@ -329,7 +329,7 @@ All functions are exported from `polyglot_sql`.
|
|
|
329
329
|
|
|
330
330
|
Current dialect names returned by `polyglot_sql.dialects()`:
|
|
331
331
|
|
|
332
|
-
`athena`, `bigquery`, `clickhouse`, `cockroachdb`, `datafusion`, `databricks`, `doris`, `dremio`, `drill`, `druid`, `duckdb`, `dune`, `exasol`, `fabric`, `generic`, `hive`, `materialize`, `mysql`, `oracle`, `postgres`, `presto`, `redshift`, `risingwave`, `singlestore`, `snowflake`, `solr`, `spark`, `sqlite`, `starrocks`, `tableau`, `teradata`, `tidb`, `trino`, `tsql`.
|
|
332
|
+
`athena`, `bigquery`, `clickhouse`, `cockroachdb`, `datafusion`, `databricks`, `doris`, `dremio`, `drill`, `druid`, `duckdb`, `dune`, `exasol`, `fabric`, `generic`, `hana`, `hive`, `materialize`, `mysql`, `oracle`, `postgres`, `presto`, `redshift`, `risingwave`, `singlestore`, `snowflake`, `solr`, `spark`, `sqlite`, `starrocks`, `tableau`, `teradata`, `tidb`, `trino`, `tsql`, `vertica`.
|
|
333
333
|
|
|
334
334
|
## Error Handling
|
|
335
335
|
|
|
@@ -48,7 +48,8 @@ all-dialects = [
|
|
|
48
48
|
"dialect-singlestore", "dialect-cockroachdb", "dialect-tidb",
|
|
49
49
|
"dialect-druid", "dialect-solr", "dialect-tableau",
|
|
50
50
|
"dialect-dune", "dialect-fabric", "dialect-drill",
|
|
51
|
-
"dialect-dremio", "dialect-exasol", "dialect-datafusion",
|
|
51
|
+
"dialect-dremio", "dialect-exasol", "dialect-datafusion", "dialect-hana",
|
|
52
|
+
"dialect-vertica",
|
|
52
53
|
]
|
|
53
54
|
dialect-postgresql = []
|
|
54
55
|
dialect-mysql = []
|
|
@@ -83,6 +84,8 @@ dialect-drill = []
|
|
|
83
84
|
dialect-dremio = []
|
|
84
85
|
dialect-exasol = []
|
|
85
86
|
dialect-datafusion = []
|
|
87
|
+
dialect-hana = []
|
|
88
|
+
dialect-vertica = []
|
|
86
89
|
function-catalog-clickhouse = [
|
|
87
90
|
"semantic",
|
|
88
91
|
"dep:polyglot-sql-function-catalogs",
|
|
@@ -100,14 +103,14 @@ function-catalog-all-dialects = [
|
|
|
100
103
|
]
|
|
101
104
|
|
|
102
105
|
[dependencies]
|
|
103
|
-
polyglot-sql-ast-derive = { path = "../polyglot-sql-ast-derive", version = "0.
|
|
106
|
+
polyglot-sql-ast-derive = { path = "../polyglot-sql-ast-derive", version = "0.13.1" }
|
|
104
107
|
serde = { workspace = true }
|
|
105
108
|
serde_json = { workspace = true }
|
|
106
109
|
thiserror = { workspace = true }
|
|
107
110
|
unicode-segmentation = { workspace = true }
|
|
108
111
|
stacker = { version = "0.1", optional = true }
|
|
109
112
|
ts-rs = { version = "12.0", features = ["serde-compat"], optional = true }
|
|
110
|
-
polyglot-sql-function-catalogs = { path = "../polyglot-sql-function-catalogs", version = "0.
|
|
113
|
+
polyglot-sql-function-catalogs = { path = "../polyglot-sql-function-catalogs", version = "0.13.1", optional = true, default-features = false }
|
|
111
114
|
|
|
112
115
|
[dev-dependencies]
|
|
113
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.
|
|
28
|
+
polyglot-sql = { version = "0.13.1", default-features = false }
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
```toml
|
|
32
32
|
polyglot-sql = {
|
|
33
|
-
version = "0.
|
|
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.
|
|
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.
|
|
54
|
+
version = "0.13.1",
|
|
55
55
|
default-features = false,
|
|
56
56
|
features = ["transpile", "dialect-clickhouse", "dialect-postgresql"],
|
|
57
57
|
}
|
|
@@ -488,7 +488,7 @@ assert_eq!(err.line(), None);
|
|
|
488
488
|
|
|
489
489
|
## Supported Dialects
|
|
490
490
|
|
|
491
|
-
Athena, BigQuery, ClickHouse, CockroachDB, DataFusion, Databricks, Doris, Dremio, Drill, Druid, DuckDB, Dune, Exasol, Fabric, Generic SQL, Hive, Materialize, MySQL, Oracle, PostgreSQL, Presto, Redshift, RisingWave, SingleStore, Snowflake, Solr, Spark, SQLite, StarRocks, Tableau, Teradata, TiDB, Trino, TSQL
|
|
491
|
+
Athena, BigQuery, ClickHouse, CockroachDB, DataFusion, Databricks, Doris, Dremio, Drill, Druid, DuckDB, Dune, Exasol, Fabric, Generic SQL, SAP HANA, Hive, Materialize, MySQL, Oracle, PostgreSQL, Presto, Redshift, RisingWave, SingleStore, Snowflake, Solr, Spark, SQLite, StarRocks, Tableau, Teradata, TiDB, Trino, TSQL, Vertica
|
|
492
492
|
|
|
493
493
|
## Feature Flags
|
|
494
494
|
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
use polyglot_sql::dialects::{Dialect, DialectType};
|
|
2
|
+
use stats_alloc::{Region, Stats, StatsAlloc, INSTRUMENTED_SYSTEM};
|
|
3
|
+
use std::alloc::System;
|
|
4
|
+
use std::hint::black_box;
|
|
5
|
+
|
|
6
|
+
mod common;
|
|
7
|
+
|
|
8
|
+
use common::{
|
|
9
|
+
large_strings, large_token_list, many_columns, many_numbers, nested_functions,
|
|
10
|
+
COMMENT_AND_STRING_HEAVY, SHORT_ASCII, UNICODE,
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
#[global_allocator]
|
|
14
|
+
static GLOBAL: &StatsAlloc<System> = &INSTRUMENTED_SYSTEM;
|
|
15
|
+
|
|
16
|
+
fn measure<T>(operation: impl FnOnce() -> T) -> Stats {
|
|
17
|
+
let region = Region::new(GLOBAL);
|
|
18
|
+
black_box(operation());
|
|
19
|
+
region.change()
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
fn print_stats(case: &str, operation: &str, input_bytes: usize, stats: Stats) {
|
|
23
|
+
println!(
|
|
24
|
+
"{{\"case\":\"{case}\",\"operation\":\"{operation}\",\"input_bytes\":{input_bytes},\"allocations\":{},\"deallocations\":{},\"bytes_allocated\":{},\"bytes_deallocated\":{}}}",
|
|
25
|
+
stats.allocations,
|
|
26
|
+
stats.deallocations,
|
|
27
|
+
stats.bytes_allocated,
|
|
28
|
+
stats.bytes_deallocated,
|
|
29
|
+
);
|
|
30
|
+
}
|
|
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
|
+
|
|
82
|
+
fn main() {
|
|
83
|
+
compound_row_limits();
|
|
84
|
+
let dialect = Dialect::get(DialectType::PostgreSQL);
|
|
85
|
+
let large = large_token_list();
|
|
86
|
+
let columns = many_columns();
|
|
87
|
+
let functions = nested_functions();
|
|
88
|
+
let strings = large_strings();
|
|
89
|
+
let numbers = many_numbers();
|
|
90
|
+
let generic_functions = format!(
|
|
91
|
+
"SELECT {} FROM t",
|
|
92
|
+
(0..1_000)
|
|
93
|
+
.map(|i| format!("my_udf(c{i}) AS v{i}"))
|
|
94
|
+
.collect::<Vec<_>>()
|
|
95
|
+
.join(", ")
|
|
96
|
+
);
|
|
97
|
+
let inputs = [
|
|
98
|
+
("short_ascii", SHORT_ASCII),
|
|
99
|
+
("unicode", UNICODE),
|
|
100
|
+
("comments_strings", COMMENT_AND_STRING_HEAVY),
|
|
101
|
+
("large_tokens", large.as_str()),
|
|
102
|
+
("many_columns", columns.as_str()),
|
|
103
|
+
("nested_functions", functions.as_str()),
|
|
104
|
+
("large_strings", strings.as_str()),
|
|
105
|
+
("many_numbers", numbers.as_str()),
|
|
106
|
+
("generic_functions", generic_functions.as_str()),
|
|
107
|
+
];
|
|
108
|
+
|
|
109
|
+
black_box(dialect.tokenize(SHORT_ASCII).unwrap());
|
|
110
|
+
black_box(dialect.parse(SHORT_ASCII).unwrap());
|
|
111
|
+
black_box(Dialect::get(DialectType::PostgreSQL));
|
|
112
|
+
|
|
113
|
+
for (case, sql) in inputs {
|
|
114
|
+
print_stats(
|
|
115
|
+
case,
|
|
116
|
+
"tokenize",
|
|
117
|
+
sql.len(),
|
|
118
|
+
measure(|| dialect.tokenize(sql).unwrap()),
|
|
119
|
+
);
|
|
120
|
+
print_stats(
|
|
121
|
+
case,
|
|
122
|
+
"parse",
|
|
123
|
+
sql.len(),
|
|
124
|
+
measure(|| dialect.parse(sql).unwrap()),
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
print_stats(
|
|
129
|
+
"postgresql",
|
|
130
|
+
"dialect_get",
|
|
131
|
+
0,
|
|
132
|
+
measure(|| Dialect::get(DialectType::PostgreSQL)),
|
|
133
|
+
);
|
|
134
|
+
|
|
135
|
+
for depth in [10, 20, 40, 80] {
|
|
136
|
+
let mut sql = "SELECT 1".to_owned();
|
|
137
|
+
for _ in 0..depth {
|
|
138
|
+
sql = format!("SELECT ({sql})");
|
|
139
|
+
}
|
|
140
|
+
for kind in [DialectType::PostgreSQL, DialectType::HANA] {
|
|
141
|
+
let dialect = Dialect::get(kind);
|
|
142
|
+
black_box(dialect.parse(&sql).unwrap());
|
|
143
|
+
print_stats(
|
|
144
|
+
&format!("nested_{depth}_{kind}"),
|
|
145
|
+
"parse",
|
|
146
|
+
sql.len(),
|
|
147
|
+
measure(|| dialect.parse(&sql).unwrap()),
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
#[cfg(feature = "transpile")]
|
|
153
|
+
{
|
|
154
|
+
let options = polyglot_sql::TranspileOptions::strict();
|
|
155
|
+
for (name, sql) in common::transpilation_queries() {
|
|
156
|
+
let run =
|
|
157
|
+
|| polyglot_sql::transpile_with_by_name(&sql, "hana", "duckdb", &options).unwrap();
|
|
158
|
+
black_box(run());
|
|
159
|
+
print_stats(
|
|
160
|
+
&format!("hana_{name}"),
|
|
161
|
+
"transpile",
|
|
162
|
+
sql.len(),
|
|
163
|
+
measure(run),
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
//! SQL inputs shared by the latency and allocation hotspot benchmarks.
|
|
2
|
+
//! Dialect selection stays in the callers, so both suites use identical fixtures.
|
|
3
|
+
|
|
4
|
+
pub(super) const SHORT_ASCII: &str =
|
|
5
|
+
"SELECT a, b, SUM(c) AS total FROM events WHERE created_at >= '2025-01-01' GROUP BY a, b";
|
|
6
|
+
|
|
7
|
+
pub(super) const UNICODE: &str =
|
|
8
|
+
"SELECT \"Kundennummer\", 'Gr\u{00fc}\u{00df}e aus Z\u{00fc}rich' AS \"Mitteilung\" FROM \"Bestellungen\" WHERE \"Stadt\" = 'M\u{00fc}nchen'";
|
|
9
|
+
|
|
10
|
+
pub(super) const COMMENT_AND_STRING_HEAVY: &str = r#"
|
|
11
|
+
-- leading comment
|
|
12
|
+
SELECT 'alpha''beta' AS value, "quoted name", E'line\nvalue'
|
|
13
|
+
FROM events /* source comment */
|
|
14
|
+
WHERE payload = '{"key":"value"}' -- trailing comment
|
|
15
|
+
"#;
|
|
16
|
+
|
|
17
|
+
pub(super) fn large_token_list() -> String {
|
|
18
|
+
let values = (0..20_000)
|
|
19
|
+
.map(|value| value.to_string())
|
|
20
|
+
.collect::<Vec<_>>()
|
|
21
|
+
.join(", ");
|
|
22
|
+
format!("SELECT * FROM events WHERE event_id IN ({values})")
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
pub(super) fn many_columns() -> String {
|
|
26
|
+
format!(
|
|
27
|
+
"SELECT {} FROM t",
|
|
28
|
+
(0..1_000)
|
|
29
|
+
.map(|index| format!("c{index}"))
|
|
30
|
+
.collect::<Vec<_>>()
|
|
31
|
+
.join(", ")
|
|
32
|
+
)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
pub(super) fn nested_functions() -> String {
|
|
36
|
+
format!(
|
|
37
|
+
"SELECT {}x{} FROM t",
|
|
38
|
+
"COALESCE(".repeat(20),
|
|
39
|
+
", NULL)".repeat(20)
|
|
40
|
+
)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
pub(super) fn large_strings() -> String {
|
|
44
|
+
format!(
|
|
45
|
+
"SELECT {} FROM t",
|
|
46
|
+
vec![format!("'{}'", "x".repeat(100)); 500].join(", ")
|
|
47
|
+
)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
pub(super) fn many_numbers() -> String {
|
|
51
|
+
format!(
|
|
52
|
+
"SELECT {} FROM t",
|
|
53
|
+
(0..10_000)
|
|
54
|
+
.map(|value| value.to_string())
|
|
55
|
+
.collect::<Vec<_>>()
|
|
56
|
+
.join(", ")
|
|
57
|
+
)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
#[cfg(feature = "transpile")]
|
|
61
|
+
pub(super) fn transpilation_queries() -> Vec<(&'static str, String)> {
|
|
62
|
+
vec![
|
|
63
|
+
("short", "SELECT COALESCE(x, 0) FROM t".to_owned()),
|
|
64
|
+
(
|
|
65
|
+
"wide",
|
|
66
|
+
format!(
|
|
67
|
+
"SELECT {} FROM t",
|
|
68
|
+
(0..100)
|
|
69
|
+
.map(|i| format!("COALESCE(c{i}, 0) AS v{i}"))
|
|
70
|
+
.collect::<Vec<_>>()
|
|
71
|
+
.join(", ")
|
|
72
|
+
),
|
|
73
|
+
),
|
|
74
|
+
(
|
|
75
|
+
"nested",
|
|
76
|
+
format!(
|
|
77
|
+
"SELECT {}x{} FROM t",
|
|
78
|
+
"COALESCE(".repeat(20),
|
|
79
|
+
", 0)".repeat(20)
|
|
80
|
+
),
|
|
81
|
+
),
|
|
82
|
+
(
|
|
83
|
+
"casts",
|
|
84
|
+
format!(
|
|
85
|
+
"SELECT {}",
|
|
86
|
+
(0..100)
|
|
87
|
+
.map(|i| format!("CAST({i}.123 AS DECIMAL(10, 2)) AS v{i}"))
|
|
88
|
+
.collect::<Vec<_>>()
|
|
89
|
+
.join(", ")
|
|
90
|
+
),
|
|
91
|
+
),
|
|
92
|
+
]
|
|
93
|
+
}
|
{polyglot_sql-0.12.1 → polyglot_sql-0.13.1}/crates/polyglot-sql/benches/performance_hotspots.rs
RENAMED
|
@@ -4,18 +4,12 @@ use polyglot_sql::parser::{Parser, ParserConfig};
|
|
|
4
4
|
use polyglot_sql::ComplexityGuardOptions;
|
|
5
5
|
use std::time::Duration;
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
"SELECT a, b, SUM(c) AS total FROM events WHERE created_at >= '2025-01-01' GROUP BY a, b";
|
|
7
|
+
mod common;
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
-- leading comment
|
|
15
|
-
SELECT 'alpha''beta' AS value, "quoted name", E'line\nvalue'
|
|
16
|
-
FROM events /* source comment */
|
|
17
|
-
WHERE payload = '{"key":"value"}' -- trailing comment
|
|
18
|
-
"#;
|
|
9
|
+
use common::{
|
|
10
|
+
large_strings, large_token_list, many_columns, many_numbers, nested_functions,
|
|
11
|
+
COMMENT_AND_STRING_HEAVY, SHORT_ASCII, UNICODE,
|
|
12
|
+
};
|
|
19
13
|
|
|
20
14
|
const TPCH_STYLE: &str = r#"
|
|
21
15
|
WITH regional_sales AS (
|
|
@@ -36,49 +30,6 @@ WHERE ranked.position <= 10
|
|
|
36
30
|
ORDER BY ranked.revenue DESC
|
|
37
31
|
"#;
|
|
38
32
|
|
|
39
|
-
fn large_token_list() -> String {
|
|
40
|
-
let values = (0..20_000)
|
|
41
|
-
.map(|value| value.to_string())
|
|
42
|
-
.collect::<Vec<_>>()
|
|
43
|
-
.join(", ");
|
|
44
|
-
format!("SELECT * FROM events WHERE event_id IN ({values})")
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
fn many_columns() -> String {
|
|
48
|
-
format!(
|
|
49
|
-
"SELECT {} FROM t",
|
|
50
|
-
(0..1_000)
|
|
51
|
-
.map(|index| format!("c{index}"))
|
|
52
|
-
.collect::<Vec<_>>()
|
|
53
|
-
.join(", ")
|
|
54
|
-
)
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
fn nested_functions() -> String {
|
|
58
|
-
format!(
|
|
59
|
-
"SELECT {}x{} FROM t",
|
|
60
|
-
"COALESCE(".repeat(20),
|
|
61
|
-
", NULL)".repeat(20)
|
|
62
|
-
)
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
fn large_strings() -> String {
|
|
66
|
-
format!(
|
|
67
|
-
"SELECT {} FROM t",
|
|
68
|
-
vec![format!("'{}'", "x".repeat(100)); 500].join(", ")
|
|
69
|
-
)
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
fn many_numbers() -> String {
|
|
73
|
-
format!(
|
|
74
|
-
"SELECT {} FROM t",
|
|
75
|
-
(0..10_000)
|
|
76
|
-
.map(|value| value.to_string())
|
|
77
|
-
.collect::<Vec<_>>()
|
|
78
|
-
.join(", ")
|
|
79
|
-
)
|
|
80
|
-
}
|
|
81
|
-
|
|
82
33
|
fn disabled_guards() -> ComplexityGuardOptions {
|
|
83
34
|
ComplexityGuardOptions {
|
|
84
35
|
max_parser_depth: None,
|
|
@@ -269,11 +220,49 @@ fn bench_validation_and_analysis(c: &mut Criterion) {
|
|
|
269
220
|
let _ = c;
|
|
270
221
|
}
|
|
271
222
|
|
|
223
|
+
fn bench_hana_nested_queries(c: &mut Criterion) {
|
|
224
|
+
let mut group = c.benchmark_group("nested_query_dialects");
|
|
225
|
+
for depth in [10, 20, 40, 80] {
|
|
226
|
+
let mut sql = "SELECT 1".to_owned();
|
|
227
|
+
for _ in 0..depth {
|
|
228
|
+
sql = format!("SELECT ({sql})");
|
|
229
|
+
}
|
|
230
|
+
for kind in [DialectType::PostgreSQL, DialectType::HANA] {
|
|
231
|
+
let dialect = Dialect::get(kind);
|
|
232
|
+
group.bench_with_input(BenchmarkId::new(kind.to_string(), depth), &sql, |b, sql| {
|
|
233
|
+
b.iter(|| dialect.parse(black_box(sql)).unwrap());
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
group.finish();
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
fn bench_hana_source_validation(c: &mut Criterion) {
|
|
241
|
+
#[cfg(feature = "transpile")]
|
|
242
|
+
{
|
|
243
|
+
let options = polyglot_sql::TranspileOptions::strict();
|
|
244
|
+
let mut group = c.benchmark_group("hana_source_validation");
|
|
245
|
+
for (name, sql) in common::transpilation_queries() {
|
|
246
|
+
group.bench_with_input(BenchmarkId::from_parameter(name), &sql, |b, sql| {
|
|
247
|
+
b.iter(|| {
|
|
248
|
+
polyglot_sql::transpile_with_by_name(black_box(sql), "hana", "duckdb", &options)
|
|
249
|
+
.unwrap()
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
group.finish();
|
|
254
|
+
}
|
|
255
|
+
#[cfg(not(feature = "transpile"))]
|
|
256
|
+
let _ = c;
|
|
257
|
+
}
|
|
258
|
+
|
|
272
259
|
criterion_group!(
|
|
273
260
|
benches,
|
|
274
261
|
bench_dialect_construction,
|
|
275
262
|
bench_fresh_vs_reused_dialect,
|
|
276
263
|
bench_tokenize_and_parse,
|
|
277
|
-
bench_validation_and_analysis
|
|
264
|
+
bench_validation_and_analysis,
|
|
265
|
+
bench_hana_nested_queries,
|
|
266
|
+
bench_hana_source_validation
|
|
278
267
|
);
|
|
279
268
|
criterion_main!(benches);
|
|
@@ -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);
|