polyglot-sql 0.4.4__tar.gz → 0.5.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/Cargo.lock +5 -5
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/Cargo.toml +1 -1
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/PKG-INFO +1 -1
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/Cargo.toml +1 -1
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/mod.rs +263 -15
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/generator.rs +3 -1
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/lib.rs +1 -1
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/lineage.rs +311 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/scope.rs +28 -0
- polyglot_sql-0.5.0/crates/polyglot-sql/tests/issue227_strict_unsupported.rs +181 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/src/helpers.rs +18 -1
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/src/transpile.rs +14 -3
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/tests/test_transpile.py +33 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/README.md +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/README.md +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/benches/in_list.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/benches/parsing.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/benches/rust_parsing.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/benches/transpile.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/examples/basic_usage.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/examples/bench_json.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/ast_transforms.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/builder.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/athena.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/bigquery.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/clickhouse.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/cockroachdb.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/databricks.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/datafusion.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/doris.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/dremio.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/drill.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/druid.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/duckdb.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/dune.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/exasol.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/fabric.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/generic.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/hive.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/materialize.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/mysql.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/oracle.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/postgres.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/presto.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/redshift.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/risingwave.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/singlestore.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/snowflake.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/solr.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/spark.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/sqlite.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/starrocks.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/tableau.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/teradata.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/tidb.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/trino.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/dialects/tsql.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/diff.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/error.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/expressions.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/function_catalog.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/function_registry.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/helper.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/openlineage.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/optimizer/annotate_types.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/optimizer/canonicalize.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/optimizer/eliminate_ctes.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/optimizer/eliminate_joins.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/optimizer/isolate_table_selects.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/optimizer/mod.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/optimizer/normalize.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/optimizer/normalize_identifiers.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/optimizer/optimize_joins.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/optimizer/optimizer.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/optimizer/pushdown_predicates.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/optimizer/pushdown_projections.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/optimizer/qualify_columns.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/optimizer/qualify_tables.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/optimizer/simplify.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/optimizer/subquery.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/parser.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/planner.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/resolver.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/schema.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/time.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/tokens.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/transforms.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/traversal.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/trie.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/validation/tests.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/src/validation.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/analyze_failures.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/clickhouse_regression.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/common/known_failures.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/common/mod.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/common/test_data.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/common/test_runner.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/custom_clickhouse_coverage.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/custom_clickhouse_parser.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/custom_dialect.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/custom_dialect_tests.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/custom_fixtures/datafusion/ddl.json +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/custom_fixtures/datafusion/dml.json +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/custom_fixtures/datafusion/functions.json +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/custom_fixtures/datafusion/identity.json +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/custom_fixtures/datafusion/operators.json +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/custom_fixtures/datafusion/select.json +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/custom_fixtures/datafusion/transpilation.json +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/custom_fixtures/datafusion/types.json +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/deep_nesting_regression.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/dialect_matrix.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/error_handling.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/fabric_regression.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/fabric_tpch_regression.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/identity_roundtrip.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/issue201_regression_test.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/issue210_regression_test.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/postgres_sqlite_regression.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/snowflake_regression_test.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/sqlglot_compat.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/sqlglot_dialect_identity.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/sqlglot_identity.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/sqlglot_identity_detailed.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/sqlglot_parser.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/sqlglot_pretty.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/sqlglot_transpilation.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/sqlglot_transpile.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/tpch_transpile_stack.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/transform_regression.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql/tests/tsql_regression.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-function-catalogs/Cargo.toml +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-function-catalogs/README.md +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-function-catalogs/src/clickhouse.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-function-catalogs/src/duckdb.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-function-catalogs/src/lib.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-function-catalogs/tools/clickhouse/extract_functions.py +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-function-catalogs/tools/duckdb/extract_functions.py +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/Cargo.toml +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/README.md +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/docs/api.md +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/docs/index.md +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/mkdocs.yml +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/src/annotate_types.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/src/dialects.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/src/diff.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/src/errors.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/src/expr.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/src/expr_types.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/src/format.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/src/generate.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/src/lib.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/src/lineage.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/src/openlineage.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/src/optimize.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/src/parse.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/src/tokenize.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/src/transforms.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/src/types.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/src/validate.rs +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/tests/conftest.py +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/tests/test_compat.py +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/tests/test_dialects.py +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/tests/test_diff.py +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/tests/test_expression.py +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/tests/test_format.py +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/tests/test_generate.py +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/tests/test_lineage.py +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/tests/test_optimize.py +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/tests/test_parse.py +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/tests/test_transforms.py +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/tests/test_validate.py +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/crates/polyglot-sql-python/uv.lock +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/pyproject.toml +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/python/polyglot_sql/__init__.py +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/python/polyglot_sql/__init__.pyi +0 -0
- {polyglot_sql-0.4.4 → polyglot_sql-0.5.0}/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.5.0"
|
|
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.
|
|
624
|
+
version = "0.5.0"
|
|
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.
|
|
634
|
+
version = "0.5.0"
|
|
635
635
|
|
|
636
636
|
[[package]]
|
|
637
637
|
name = "polyglot-sql-python"
|
|
638
|
-
version = "0.
|
|
638
|
+
version = "0.5.0"
|
|
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.
|
|
649
|
+
version = "0.5.0"
|
|
650
650
|
dependencies = [
|
|
651
651
|
"console_error_panic_hook",
|
|
652
652
|
"js-sys",
|
|
@@ -106,7 +106,7 @@ thiserror = { workspace = true }
|
|
|
106
106
|
unicode-segmentation = { workspace = true }
|
|
107
107
|
stacker = { version = "0.1", optional = true }
|
|
108
108
|
ts-rs = { version = "12.0", features = ["serde-compat"], optional = true }
|
|
109
|
-
polyglot-sql-function-catalogs = { path = "../polyglot-sql-function-catalogs", version = "0.
|
|
109
|
+
polyglot-sql-function-catalogs = { path = "../polyglot-sql-function-catalogs", version = "0.5.0", optional = true, default-features = false }
|
|
110
110
|
|
|
111
111
|
[dev-dependencies]
|
|
112
112
|
pretty_assertions = "1.4"
|
|
@@ -168,12 +168,16 @@ use crate::expressions::{ColumnConstraint, Function, Identifier, Literal};
|
|
|
168
168
|
feature = "semantic"
|
|
169
169
|
))]
|
|
170
170
|
use crate::expressions::{From, FunctionBody, Join, Null, OrderBy, OutputClause, TableRef, With};
|
|
171
|
+
#[cfg(feature = "transpile")]
|
|
172
|
+
use crate::generator::UnsupportedLevel;
|
|
171
173
|
#[cfg(feature = "generate")]
|
|
172
174
|
use crate::generator::{Generator, GeneratorConfig};
|
|
173
175
|
use crate::parser::Parser;
|
|
174
176
|
#[cfg(feature = "transpile")]
|
|
175
177
|
use crate::tokens::TokenType;
|
|
176
178
|
use crate::tokens::{Token, Tokenizer, TokenizerConfig};
|
|
179
|
+
#[cfg(feature = "transpile")]
|
|
180
|
+
use crate::traversal::ExpressionWalk;
|
|
177
181
|
use serde::{Deserialize, Serialize};
|
|
178
182
|
use std::collections::HashMap;
|
|
179
183
|
use std::sync::{Arc, LazyLock, RwLock};
|
|
@@ -3730,19 +3734,60 @@ pub struct Dialect {
|
|
|
3730
3734
|
/// The struct derives `Serialize`/`Deserialize` using camelCase field names so
|
|
3731
3735
|
/// it can be round-tripped over JSON bridges (C FFI, WASM) without mapping.
|
|
3732
3736
|
#[cfg(feature = "transpile")]
|
|
3733
|
-
#[derive(Debug, Clone,
|
|
3737
|
+
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
3734
3738
|
#[serde(rename_all = "camelCase", default)]
|
|
3735
3739
|
#[non_exhaustive]
|
|
3736
3740
|
pub struct TranspileOptions {
|
|
3737
3741
|
/// Whether to pretty-print the output SQL.
|
|
3738
3742
|
pub pretty: bool,
|
|
3743
|
+
/// How unsupported target-dialect constructs should be handled.
|
|
3744
|
+
///
|
|
3745
|
+
/// The default is [`UnsupportedLevel::Warn`], which preserves the current
|
|
3746
|
+
/// compatibility behavior and continues transpilation.
|
|
3747
|
+
pub unsupported_level: UnsupportedLevel,
|
|
3748
|
+
/// Maximum number of unsupported diagnostics to include in raised errors.
|
|
3749
|
+
pub max_unsupported: usize,
|
|
3750
|
+
}
|
|
3751
|
+
|
|
3752
|
+
#[cfg(feature = "transpile")]
|
|
3753
|
+
impl Default for TranspileOptions {
|
|
3754
|
+
fn default() -> Self {
|
|
3755
|
+
Self {
|
|
3756
|
+
pretty: false,
|
|
3757
|
+
unsupported_level: UnsupportedLevel::Warn,
|
|
3758
|
+
max_unsupported: 3,
|
|
3759
|
+
}
|
|
3760
|
+
}
|
|
3739
3761
|
}
|
|
3740
3762
|
|
|
3741
3763
|
#[cfg(feature = "transpile")]
|
|
3742
3764
|
impl TranspileOptions {
|
|
3743
3765
|
/// Construct options with pretty-printing enabled.
|
|
3744
3766
|
pub fn pretty() -> Self {
|
|
3745
|
-
Self {
|
|
3767
|
+
Self {
|
|
3768
|
+
pretty: true,
|
|
3769
|
+
..Default::default()
|
|
3770
|
+
}
|
|
3771
|
+
}
|
|
3772
|
+
|
|
3773
|
+
/// Construct options that raise when known unsupported constructs remain.
|
|
3774
|
+
pub fn strict() -> Self {
|
|
3775
|
+
Self {
|
|
3776
|
+
unsupported_level: UnsupportedLevel::Raise,
|
|
3777
|
+
..Default::default()
|
|
3778
|
+
}
|
|
3779
|
+
}
|
|
3780
|
+
|
|
3781
|
+
/// Set how unsupported target-dialect constructs should be handled.
|
|
3782
|
+
pub fn with_unsupported_level(mut self, level: UnsupportedLevel) -> Self {
|
|
3783
|
+
self.unsupported_level = level;
|
|
3784
|
+
self
|
|
3785
|
+
}
|
|
3786
|
+
|
|
3787
|
+
/// Set the maximum number of unsupported diagnostics to include in raised errors.
|
|
3788
|
+
pub fn with_max_unsupported(mut self, max: usize) -> Self {
|
|
3789
|
+
self.max_unsupported = max;
|
|
3790
|
+
self
|
|
3746
3791
|
}
|
|
3747
3792
|
}
|
|
3748
3793
|
|
|
@@ -3956,6 +4001,23 @@ impl Dialect {
|
|
|
3956
4001
|
generator.generate(expr)
|
|
3957
4002
|
}
|
|
3958
4003
|
|
|
4004
|
+
/// Generate SQL from an expression with source dialect and transpile options.
|
|
4005
|
+
#[cfg(all(feature = "generate", feature = "transpile"))]
|
|
4006
|
+
fn generate_with_transpile_options(
|
|
4007
|
+
&self,
|
|
4008
|
+
expr: &Expression,
|
|
4009
|
+
source: DialectType,
|
|
4010
|
+
opts: &TranspileOptions,
|
|
4011
|
+
) -> Result<String> {
|
|
4012
|
+
let mut config = self.get_config_for_expr(expr);
|
|
4013
|
+
config.source_dialect = Some(source);
|
|
4014
|
+
config.pretty = opts.pretty;
|
|
4015
|
+
config.unsupported_level = opts.unsupported_level;
|
|
4016
|
+
config.max_unsupported = opts.max_unsupported.max(1);
|
|
4017
|
+
let mut generator = Generator::with_config(config);
|
|
4018
|
+
generator.generate(expr)
|
|
4019
|
+
}
|
|
4020
|
+
|
|
3959
4021
|
/// Generate SQL from an expression with forced identifier quoting (identify=True)
|
|
3960
4022
|
#[cfg(feature = "generate")]
|
|
3961
4023
|
pub fn generate_with_identify(&self, expr: &Expression) -> Result<String> {
|
|
@@ -4232,7 +4294,7 @@ impl Dialect {
|
|
|
4232
4294
|
target: T,
|
|
4233
4295
|
opts: TranspileOptions,
|
|
4234
4296
|
) -> Result<Vec<String>> {
|
|
4235
|
-
target.with_dialect(|td| self.transpile_inner(sql, td, opts
|
|
4297
|
+
target.with_dialect(|td| self.transpile_inner(sql, td, &opts))
|
|
4236
4298
|
}
|
|
4237
4299
|
|
|
4238
4300
|
#[cfg(feature = "transpile")]
|
|
@@ -4240,7 +4302,7 @@ impl Dialect {
|
|
|
4240
4302
|
&self,
|
|
4241
4303
|
sql: &str,
|
|
4242
4304
|
target_dialect: &Dialect,
|
|
4243
|
-
|
|
4305
|
+
opts: &TranspileOptions,
|
|
4244
4306
|
) -> Result<Vec<String>> {
|
|
4245
4307
|
let target = target_dialect.dialect_type;
|
|
4246
4308
|
if matches!(self.dialect_type, DialectType::PostgreSQL)
|
|
@@ -4256,11 +4318,8 @@ impl Dialect {
|
|
|
4256
4318
|
return expressions
|
|
4257
4319
|
.into_iter()
|
|
4258
4320
|
.map(|expr| {
|
|
4259
|
-
|
|
4260
|
-
|
|
4261
|
-
} else {
|
|
4262
|
-
target_dialect.generate_with_source(&expr, self.dialect_type)
|
|
4263
|
-
}
|
|
4321
|
+
Self::reject_strict_unsupported(&expr, self.dialect_type, target, opts)?;
|
|
4322
|
+
target_dialect.generate_with_transpile_options(&expr, self.dialect_type, opts)
|
|
4264
4323
|
})
|
|
4265
4324
|
.collect();
|
|
4266
4325
|
}
|
|
@@ -4744,14 +4803,16 @@ impl Dialect {
|
|
|
4744
4803
|
transformed
|
|
4745
4804
|
};
|
|
4746
4805
|
|
|
4747
|
-
|
|
4748
|
-
|
|
4749
|
-
|
|
4750
|
-
|
|
4751
|
-
|
|
4806
|
+
Self::reject_strict_unsupported(&transformed, self.dialect_type, target, opts)?;
|
|
4807
|
+
|
|
4808
|
+
let mut sql = target_dialect.generate_with_transpile_options(
|
|
4809
|
+
&transformed,
|
|
4810
|
+
self.dialect_type,
|
|
4811
|
+
opts,
|
|
4812
|
+
)?;
|
|
4752
4813
|
|
|
4753
4814
|
// Align a known Snowflake pretty-print edge case with Python sqlglot output.
|
|
4754
|
-
if pretty && target == DialectType::Snowflake {
|
|
4815
|
+
if opts.pretty && target == DialectType::Snowflake {
|
|
4755
4816
|
sql = Self::normalize_snowflake_pretty(sql);
|
|
4756
4817
|
}
|
|
4757
4818
|
|
|
@@ -4764,6 +4825,193 @@ impl Dialect {
|
|
|
4764
4825
|
// Transpile-only methods: cross-dialect normalization and helpers
|
|
4765
4826
|
#[cfg(feature = "transpile")]
|
|
4766
4827
|
impl Dialect {
|
|
4828
|
+
fn reject_strict_unsupported(
|
|
4829
|
+
expr: &Expression,
|
|
4830
|
+
source: DialectType,
|
|
4831
|
+
target: DialectType,
|
|
4832
|
+
opts: &TranspileOptions,
|
|
4833
|
+
) -> Result<()> {
|
|
4834
|
+
if !matches!(
|
|
4835
|
+
opts.unsupported_level,
|
|
4836
|
+
UnsupportedLevel::Raise | UnsupportedLevel::Immediate
|
|
4837
|
+
) {
|
|
4838
|
+
return Ok(());
|
|
4839
|
+
}
|
|
4840
|
+
|
|
4841
|
+
let mut diagnostics = Vec::new();
|
|
4842
|
+
|
|
4843
|
+
for node in expr.dfs() {
|
|
4844
|
+
if matches!(target, DialectType::Fabric | DialectType::Hive)
|
|
4845
|
+
&& Self::node_has_recursive_with(node)
|
|
4846
|
+
{
|
|
4847
|
+
Self::push_unsupported_diagnostic(&mut diagnostics, "recursive CTEs");
|
|
4848
|
+
}
|
|
4849
|
+
|
|
4850
|
+
if matches!(target, DialectType::TSQL | DialectType::Fabric)
|
|
4851
|
+
&& Self::node_has_lateral(node)
|
|
4852
|
+
{
|
|
4853
|
+
Self::push_unsupported_diagnostic(&mut diagnostics, "LATERAL joins and subqueries");
|
|
4854
|
+
}
|
|
4855
|
+
|
|
4856
|
+
if !Self::target_supports_remaining_unnest(target) && Self::node_is_unnest(node) {
|
|
4857
|
+
Self::push_unsupported_diagnostic(&mut diagnostics, "UNNEST");
|
|
4858
|
+
}
|
|
4859
|
+
|
|
4860
|
+
if !Self::target_supports_remaining_explode(target) && Self::node_is_explode(node) {
|
|
4861
|
+
Self::push_unsupported_diagnostic(&mut diagnostics, "EXPLODE");
|
|
4862
|
+
}
|
|
4863
|
+
|
|
4864
|
+
if Self::target_lacks_array_agg(target) && Self::node_is_array_agg(node) {
|
|
4865
|
+
Self::push_unsupported_diagnostic(&mut diagnostics, "ARRAY_AGG");
|
|
4866
|
+
}
|
|
4867
|
+
|
|
4868
|
+
if matches!(source, DialectType::PostgreSQL | DialectType::CockroachDB)
|
|
4869
|
+
&& !matches!(target, DialectType::PostgreSQL | DialectType::CockroachDB)
|
|
4870
|
+
{
|
|
4871
|
+
if Self::node_is_function_named(node, "JSONB_BUILD_OBJECT") {
|
|
4872
|
+
Self::push_unsupported_diagnostic(
|
|
4873
|
+
&mut diagnostics,
|
|
4874
|
+
"PostgreSQL JSONB_BUILD_OBJECT",
|
|
4875
|
+
);
|
|
4876
|
+
}
|
|
4877
|
+
if Self::node_is_function_named(node, "TO_TSVECTOR") {
|
|
4878
|
+
Self::push_unsupported_diagnostic(&mut diagnostics, "PostgreSQL TO_TSVECTOR");
|
|
4879
|
+
}
|
|
4880
|
+
}
|
|
4881
|
+
|
|
4882
|
+
if opts.unsupported_level == UnsupportedLevel::Immediate && !diagnostics.is_empty() {
|
|
4883
|
+
break;
|
|
4884
|
+
}
|
|
4885
|
+
}
|
|
4886
|
+
|
|
4887
|
+
if diagnostics.is_empty() {
|
|
4888
|
+
return Ok(());
|
|
4889
|
+
}
|
|
4890
|
+
|
|
4891
|
+
let limit = if opts.unsupported_level == UnsupportedLevel::Immediate {
|
|
4892
|
+
1
|
|
4893
|
+
} else {
|
|
4894
|
+
opts.max_unsupported.max(1)
|
|
4895
|
+
};
|
|
4896
|
+
let mut messages = diagnostics.iter().take(limit).cloned().collect::<Vec<_>>();
|
|
4897
|
+
if diagnostics.len() > limit {
|
|
4898
|
+
messages.push(format!("... and {} more", diagnostics.len() - limit));
|
|
4899
|
+
}
|
|
4900
|
+
|
|
4901
|
+
Err(crate::error::Error::unsupported(
|
|
4902
|
+
messages.join("; "),
|
|
4903
|
+
target.to_string(),
|
|
4904
|
+
))
|
|
4905
|
+
}
|
|
4906
|
+
|
|
4907
|
+
fn push_unsupported_diagnostic(diagnostics: &mut Vec<String>, message: &str) {
|
|
4908
|
+
if !diagnostics.iter().any(|existing| existing == message) {
|
|
4909
|
+
diagnostics.push(message.to_string());
|
|
4910
|
+
}
|
|
4911
|
+
}
|
|
4912
|
+
|
|
4913
|
+
fn node_has_recursive_with(expr: &Expression) -> bool {
|
|
4914
|
+
fn recursive(with: &Option<With>) -> bool {
|
|
4915
|
+
with.as_ref().is_some_and(|with| with.recursive)
|
|
4916
|
+
}
|
|
4917
|
+
|
|
4918
|
+
match expr {
|
|
4919
|
+
Expression::With(with) => with.recursive,
|
|
4920
|
+
Expression::Select(select) => recursive(&select.with),
|
|
4921
|
+
Expression::Union(union) => recursive(&union.with),
|
|
4922
|
+
Expression::Intersect(intersect) => recursive(&intersect.with),
|
|
4923
|
+
Expression::Except(except) => recursive(&except.with),
|
|
4924
|
+
Expression::Pivot(pivot) => recursive(&pivot.with),
|
|
4925
|
+
Expression::Insert(insert) => recursive(&insert.with),
|
|
4926
|
+
Expression::Update(update) => recursive(&update.with),
|
|
4927
|
+
Expression::Delete(delete) => recursive(&delete.with),
|
|
4928
|
+
_ => false,
|
|
4929
|
+
}
|
|
4930
|
+
}
|
|
4931
|
+
|
|
4932
|
+
fn node_has_lateral(expr: &Expression) -> bool {
|
|
4933
|
+
fn joins_have_lateral(joins: &[Join]) -> bool {
|
|
4934
|
+
joins.iter().any(|join| {
|
|
4935
|
+
matches!(
|
|
4936
|
+
join.kind,
|
|
4937
|
+
crate::expressions::JoinKind::Lateral
|
|
4938
|
+
| crate::expressions::JoinKind::LeftLateral
|
|
4939
|
+
)
|
|
4940
|
+
})
|
|
4941
|
+
}
|
|
4942
|
+
|
|
4943
|
+
match expr {
|
|
4944
|
+
Expression::Subquery(subquery) => subquery.lateral,
|
|
4945
|
+
Expression::Lateral(_) | Expression::LateralView(_) => true,
|
|
4946
|
+
Expression::Join(join) => matches!(
|
|
4947
|
+
join.kind,
|
|
4948
|
+
crate::expressions::JoinKind::Lateral | crate::expressions::JoinKind::LeftLateral
|
|
4949
|
+
),
|
|
4950
|
+
Expression::Select(select) => {
|
|
4951
|
+
!select.lateral_views.is_empty() || joins_have_lateral(&select.joins)
|
|
4952
|
+
}
|
|
4953
|
+
Expression::JoinedTable(joined) => {
|
|
4954
|
+
!joined.lateral_views.is_empty() || joins_have_lateral(&joined.joins)
|
|
4955
|
+
}
|
|
4956
|
+
Expression::Update(update) => {
|
|
4957
|
+
joins_have_lateral(&update.table_joins) || joins_have_lateral(&update.from_joins)
|
|
4958
|
+
}
|
|
4959
|
+
_ => false,
|
|
4960
|
+
}
|
|
4961
|
+
}
|
|
4962
|
+
|
|
4963
|
+
fn target_supports_remaining_unnest(target: DialectType) -> bool {
|
|
4964
|
+
matches!(
|
|
4965
|
+
target,
|
|
4966
|
+
DialectType::PostgreSQL
|
|
4967
|
+
| DialectType::BigQuery
|
|
4968
|
+
| DialectType::DuckDB
|
|
4969
|
+
| DialectType::Presto
|
|
4970
|
+
| DialectType::Trino
|
|
4971
|
+
| DialectType::Athena
|
|
4972
|
+
)
|
|
4973
|
+
}
|
|
4974
|
+
|
|
4975
|
+
fn target_supports_remaining_explode(target: DialectType) -> bool {
|
|
4976
|
+
matches!(
|
|
4977
|
+
target,
|
|
4978
|
+
DialectType::Spark | DialectType::Databricks | DialectType::Hive
|
|
4979
|
+
)
|
|
4980
|
+
}
|
|
4981
|
+
|
|
4982
|
+
fn target_lacks_array_agg(target: DialectType) -> bool {
|
|
4983
|
+
matches!(
|
|
4984
|
+
target,
|
|
4985
|
+
DialectType::Fabric
|
|
4986
|
+
| DialectType::TSQL
|
|
4987
|
+
| DialectType::MySQL
|
|
4988
|
+
| DialectType::SQLite
|
|
4989
|
+
| DialectType::Oracle
|
|
4990
|
+
)
|
|
4991
|
+
}
|
|
4992
|
+
|
|
4993
|
+
fn node_is_unnest(expr: &Expression) -> bool {
|
|
4994
|
+
matches!(expr, Expression::Unnest(_)) || Self::node_is_function_named(expr, "UNNEST")
|
|
4995
|
+
}
|
|
4996
|
+
|
|
4997
|
+
fn node_is_explode(expr: &Expression) -> bool {
|
|
4998
|
+
matches!(expr, Expression::Explode(_) | Expression::ExplodeOuter(_))
|
|
4999
|
+
|| Self::node_is_function_named(expr, "EXPLODE")
|
|
5000
|
+
|| Self::node_is_function_named(expr, "EXPLODE_OUTER")
|
|
5001
|
+
}
|
|
5002
|
+
|
|
5003
|
+
fn node_is_array_agg(expr: &Expression) -> bool {
|
|
5004
|
+
matches!(expr, Expression::ArrayAgg(_)) || Self::node_is_function_named(expr, "ARRAY_AGG")
|
|
5005
|
+
}
|
|
5006
|
+
|
|
5007
|
+
fn node_is_function_named(expr: &Expression, name: &str) -> bool {
|
|
5008
|
+
match expr {
|
|
5009
|
+
Expression::Function(function) => function.name.eq_ignore_ascii_case(name),
|
|
5010
|
+
Expression::AggregateFunction(function) => function.name.eq_ignore_ascii_case(name),
|
|
5011
|
+
_ => false,
|
|
5012
|
+
}
|
|
5013
|
+
}
|
|
5014
|
+
|
|
4767
5015
|
fn rewrite_boolean_values_for_tsql(expr: Expression) -> Result<Expression> {
|
|
4768
5016
|
match expr {
|
|
4769
5017
|
Expression::Select(select) => Self::rewrite_boolean_values_in_tsql_select(select),
|
|
@@ -16,6 +16,7 @@ use std::sync::Arc;
|
|
|
16
16
|
use crate::error::Result;
|
|
17
17
|
use crate::expressions::*;
|
|
18
18
|
use crate::DialectType;
|
|
19
|
+
use serde::{Deserialize, Serialize};
|
|
19
20
|
|
|
20
21
|
/// SQL code generator that converts an AST (`Expression`) back into a SQL string.
|
|
21
22
|
///
|
|
@@ -99,7 +100,8 @@ pub enum NotInStyle {
|
|
|
99
100
|
}
|
|
100
101
|
|
|
101
102
|
/// Controls how the generator reacts when it encounters unsupported output.
|
|
102
|
-
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
|
|
103
|
+
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize)]
|
|
104
|
+
#[serde(rename_all = "lowercase")]
|
|
103
105
|
pub enum UnsupportedLevel {
|
|
104
106
|
/// Ignore unsupported diagnostics and continue generation.
|
|
105
107
|
Ignore,
|
|
@@ -78,7 +78,7 @@ pub use function_catalog::{
|
|
|
78
78
|
FunctionCatalog, FunctionNameCase, FunctionSignature, HashMapFunctionCatalog,
|
|
79
79
|
};
|
|
80
80
|
#[cfg(feature = "generate")]
|
|
81
|
-
pub use generator::Generator;
|
|
81
|
+
pub use generator::{Generator, UnsupportedLevel};
|
|
82
82
|
#[cfg(feature = "semantic")]
|
|
83
83
|
pub use helper::{
|
|
84
84
|
csv, find_new_name, is_date_unit, is_float, is_int, is_iso_date, is_iso_datetime, merge_ranges,
|