polyglot-sql 0.3.10__tar.gz → 0.3.11__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/Cargo.lock +5 -5
  2. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/Cargo.toml +1 -1
  3. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/PKG-INFO +1 -1
  4. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/Cargo.toml +1 -1
  5. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/fabric.rs +11 -2
  6. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/generator.rs +52 -0
  7. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/parser.rs +50 -13
  8. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/common/known_failures.rs +2 -3
  9. polyglot_sql-0.3.11/crates/polyglot-sql/tests/issue201_regression_test.rs +38 -0
  10. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/snowflake_regression_test.rs +26 -0
  11. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/sqlglot_dialect_identity.rs +4 -0
  12. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/sqlglot_transpilation.rs +0 -1
  13. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/tests/test_transpile.py +27 -0
  14. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/README.md +0 -0
  15. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/README.md +0 -0
  16. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/benches/in_list.rs +0 -0
  17. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/benches/parsing.rs +0 -0
  18. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/benches/rust_parsing.rs +0 -0
  19. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/benches/transpile.rs +0 -0
  20. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/examples/basic_usage.rs +0 -0
  21. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/examples/bench_json.rs +0 -0
  22. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/ast_transforms.rs +0 -0
  23. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/builder.rs +0 -0
  24. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/athena.rs +0 -0
  25. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/bigquery.rs +0 -0
  26. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/clickhouse.rs +0 -0
  27. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/cockroachdb.rs +0 -0
  28. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/databricks.rs +0 -0
  29. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/datafusion.rs +0 -0
  30. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/doris.rs +0 -0
  31. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/dremio.rs +0 -0
  32. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/drill.rs +0 -0
  33. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/druid.rs +0 -0
  34. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/duckdb.rs +0 -0
  35. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/dune.rs +0 -0
  36. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/exasol.rs +0 -0
  37. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/generic.rs +0 -0
  38. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/hive.rs +0 -0
  39. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/materialize.rs +0 -0
  40. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/mod.rs +0 -0
  41. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/mysql.rs +0 -0
  42. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/oracle.rs +0 -0
  43. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/postgres.rs +0 -0
  44. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/presto.rs +0 -0
  45. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/redshift.rs +0 -0
  46. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/risingwave.rs +0 -0
  47. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/singlestore.rs +0 -0
  48. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/snowflake.rs +0 -0
  49. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/solr.rs +0 -0
  50. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/spark.rs +0 -0
  51. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/sqlite.rs +0 -0
  52. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/starrocks.rs +0 -0
  53. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/tableau.rs +0 -0
  54. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/teradata.rs +0 -0
  55. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/tidb.rs +0 -0
  56. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/trino.rs +0 -0
  57. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/dialects/tsql.rs +0 -0
  58. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/diff.rs +0 -0
  59. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/error.rs +0 -0
  60. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/expressions.rs +0 -0
  61. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/function_catalog.rs +0 -0
  62. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/function_registry.rs +0 -0
  63. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/helper.rs +0 -0
  64. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/lib.rs +0 -0
  65. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/lineage.rs +0 -0
  66. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/optimizer/annotate_types.rs +0 -0
  67. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/optimizer/canonicalize.rs +0 -0
  68. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/optimizer/eliminate_ctes.rs +0 -0
  69. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/optimizer/eliminate_joins.rs +0 -0
  70. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/optimizer/isolate_table_selects.rs +0 -0
  71. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/optimizer/mod.rs +0 -0
  72. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/optimizer/normalize.rs +0 -0
  73. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/optimizer/normalize_identifiers.rs +0 -0
  74. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/optimizer/optimize_joins.rs +0 -0
  75. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/optimizer/optimizer.rs +0 -0
  76. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/optimizer/pushdown_predicates.rs +0 -0
  77. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/optimizer/pushdown_projections.rs +0 -0
  78. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/optimizer/qualify_columns.rs +0 -0
  79. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/optimizer/qualify_tables.rs +0 -0
  80. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/optimizer/simplify.rs +0 -0
  81. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/optimizer/subquery.rs +0 -0
  82. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/planner.rs +0 -0
  83. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/resolver.rs +0 -0
  84. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/schema.rs +0 -0
  85. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/scope.rs +0 -0
  86. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/time.rs +0 -0
  87. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/tokens.rs +0 -0
  88. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/transforms.rs +0 -0
  89. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/traversal.rs +0 -0
  90. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/trie.rs +0 -0
  91. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/validation/tests.rs +0 -0
  92. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/src/validation.rs +0 -0
  93. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/analyze_failures.rs +0 -0
  94. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/clickhouse_regression.rs +0 -0
  95. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/common/mod.rs +0 -0
  96. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/common/test_data.rs +0 -0
  97. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/common/test_runner.rs +0 -0
  98. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/custom_clickhouse_coverage.rs +0 -0
  99. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/custom_clickhouse_parser.rs +0 -0
  100. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/custom_dialect.rs +0 -0
  101. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/custom_dialect_tests.rs +0 -0
  102. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/custom_fixtures/datafusion/ddl.json +0 -0
  103. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/custom_fixtures/datafusion/dml.json +0 -0
  104. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/custom_fixtures/datafusion/functions.json +0 -0
  105. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/custom_fixtures/datafusion/identity.json +0 -0
  106. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/custom_fixtures/datafusion/operators.json +0 -0
  107. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/custom_fixtures/datafusion/select.json +0 -0
  108. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/custom_fixtures/datafusion/transpilation.json +0 -0
  109. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/custom_fixtures/datafusion/types.json +0 -0
  110. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/deep_nesting_regression.rs +0 -0
  111. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/dialect_matrix.rs +0 -0
  112. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/error_handling.rs +0 -0
  113. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/fabric_regression.rs +0 -0
  114. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/fabric_tpch_regression.rs +0 -0
  115. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/identity_roundtrip.rs +0 -0
  116. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/postgres_sqlite_regression.rs +0 -0
  117. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/sqlglot_compat.rs +0 -0
  118. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/sqlglot_identity.rs +0 -0
  119. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/sqlglot_identity_detailed.rs +0 -0
  120. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/sqlglot_parser.rs +0 -0
  121. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/sqlglot_pretty.rs +0 -0
  122. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/sqlglot_transpile.rs +0 -0
  123. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/tpch_transpile_stack.rs +0 -0
  124. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/transform_regression.rs +0 -0
  125. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql/tests/tsql_regression.rs +0 -0
  126. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-function-catalogs/Cargo.toml +0 -0
  127. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-function-catalogs/README.md +0 -0
  128. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-function-catalogs/src/clickhouse.rs +0 -0
  129. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-function-catalogs/src/duckdb.rs +0 -0
  130. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-function-catalogs/src/lib.rs +0 -0
  131. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-function-catalogs/tools/clickhouse/extract_functions.py +0 -0
  132. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-function-catalogs/tools/duckdb/extract_functions.py +0 -0
  133. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/Cargo.toml +0 -0
  134. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/README.md +0 -0
  135. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/docs/api.md +0 -0
  136. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/docs/index.md +0 -0
  137. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/mkdocs.yml +0 -0
  138. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/annotate_types.rs +0 -0
  139. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/dialects.rs +0 -0
  140. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/diff.rs +0 -0
  141. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/errors.rs +0 -0
  142. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/expr.rs +0 -0
  143. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/expr_types.rs +0 -0
  144. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/format.rs +0 -0
  145. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/generate.rs +0 -0
  146. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/helpers.rs +0 -0
  147. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/lib.rs +0 -0
  148. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/lineage.rs +0 -0
  149. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/optimize.rs +0 -0
  150. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/parse.rs +0 -0
  151. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/tokenize.rs +0 -0
  152. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/transforms.rs +0 -0
  153. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/transpile.rs +0 -0
  154. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/types.rs +0 -0
  155. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/src/validate.rs +0 -0
  156. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/tests/conftest.py +0 -0
  157. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/tests/test_compat.py +0 -0
  158. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/tests/test_dialects.py +0 -0
  159. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/tests/test_diff.py +0 -0
  160. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/tests/test_expression.py +0 -0
  161. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/tests/test_format.py +0 -0
  162. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/tests/test_generate.py +0 -0
  163. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/tests/test_lineage.py +0 -0
  164. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/tests/test_optimize.py +0 -0
  165. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/tests/test_parse.py +0 -0
  166. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/tests/test_transforms.py +0 -0
  167. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/tests/test_validate.py +0 -0
  168. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/crates/polyglot-sql-python/uv.lock +0 -0
  169. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/pyproject.toml +0 -0
  170. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/python/polyglot_sql/__init__.py +0 -0
  171. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/python/polyglot_sql/__init__.pyi +0 -0
  172. {polyglot_sql-0.3.10 → polyglot_sql-0.3.11}/python/polyglot_sql/py.typed +0 -0
@@ -605,7 +605,7 @@ dependencies = [
605
605
 
606
606
  [[package]]
607
607
  name = "polyglot-sql"
608
- version = "0.3.10"
608
+ version = "0.3.11"
609
609
  dependencies = [
610
610
  "criterion",
611
611
  "once_cell",
@@ -621,7 +621,7 @@ dependencies = [
621
621
 
622
622
  [[package]]
623
623
  name = "polyglot-sql-ffi"
624
- version = "0.3.10"
624
+ version = "0.3.11"
625
625
  dependencies = [
626
626
  "cbindgen",
627
627
  "polyglot-sql",
@@ -631,11 +631,11 @@ dependencies = [
631
631
 
632
632
  [[package]]
633
633
  name = "polyglot-sql-function-catalogs"
634
- version = "0.3.10"
634
+ version = "0.3.11"
635
635
 
636
636
  [[package]]
637
637
  name = "polyglot-sql-python"
638
- version = "0.3.10"
638
+ version = "0.3.11"
639
639
  dependencies = [
640
640
  "polyglot-sql",
641
641
  "pyo3",
@@ -646,7 +646,7 @@ dependencies = [
646
646
 
647
647
  [[package]]
648
648
  name = "polyglot-sql-wasm"
649
- version = "0.3.10"
649
+ version = "0.3.11"
650
650
  dependencies = [
651
651
  "console_error_panic_hook",
652
652
  "js-sys",
@@ -6,7 +6,7 @@ exclude = [
6
6
  ]
7
7
 
8
8
  [workspace.package]
9
- version = "0.3.10"
9
+ version = "0.3.11"
10
10
  edition = "2021"
11
11
  license = "MIT"
12
12
  authors = ["polyglot contributors"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: polyglot-sql
3
- Version: 0.3.10
3
+ Version: 0.3.11
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: License :: OSI Approved :: MIT License
@@ -83,7 +83,7 @@ thiserror = { workspace = true }
83
83
  unicode-segmentation = { workspace = true }
84
84
  stacker = { version = "0.1", optional = true }
85
85
  ts-rs = { version = "12.0", features = ["serde-compat"], optional = true }
86
- polyglot-sql-function-catalogs = { path = "../polyglot-sql-function-catalogs", version = "0.3.10", optional = true, default-features = false }
86
+ polyglot-sql-function-catalogs = { path = "../polyglot-sql-function-catalogs", version = "0.3.11", optional = true, default-features = false }
87
87
 
88
88
  [dev-dependencies]
89
89
  pretty_assertions = "1.4"
@@ -371,6 +371,7 @@ impl FabricDialect {
371
371
  // Parse out precision and scale if present: "TYPENAME(n)" or "TYPENAME(n, m)"
372
372
  let (base_name, precision, scale) =
373
373
  TSQLDialect::parse_type_precision_and_scale(&upper);
374
+ let has_max_length = upper.contains("(MAX)");
374
375
 
375
376
  match base_name.as_str() {
376
377
  // DATETIME -> DATETIME2(6)
@@ -445,7 +446,11 @@ impl FabricDialect {
445
446
 
446
447
  // NCHAR -> CHAR (with length preserved)
447
448
  "NCHAR" => {
448
- if let Some(len) = precision {
449
+ if has_max_length {
450
+ DataType::Custom {
451
+ name: "CHAR(MAX)".to_string(),
452
+ }
453
+ } else if let Some(len) = precision {
449
454
  DataType::Custom {
450
455
  name: format!("CHAR({})", len),
451
456
  }
@@ -458,7 +463,11 @@ impl FabricDialect {
458
463
 
459
464
  // NVARCHAR -> VARCHAR (with length preserved)
460
465
  "NVARCHAR" => {
461
- if let Some(len) = precision {
466
+ if has_max_length {
467
+ DataType::Custom {
468
+ name: "VARCHAR(MAX)".to_string(),
469
+ }
470
+ } else if let Some(len) = precision {
462
471
  DataType::Custom {
463
472
  name: format!("VARCHAR({})", len),
464
473
  }
@@ -24029,6 +24029,12 @@ impl Generator {
24029
24029
  } => {
24030
24030
  // Dialect-specific timestamp type mappings
24031
24031
  match self.config.dialect {
24032
+ Some(DialectType::Snowflake) if *timezone => {
24033
+ self.write_keyword("TIMESTAMPTZ");
24034
+ if let Some(p) = precision {
24035
+ self.write(&format!("({})", p));
24036
+ }
24037
+ }
24032
24038
  Some(DialectType::ClickHouse) => {
24033
24039
  self.write("DateTime");
24034
24040
  if let Some(p) = precision {
@@ -24597,6 +24603,52 @@ impl Generator {
24597
24603
  // MySQL doesn't support TIMESTAMPTZ/TIMESTAMPLTZ, use TIMESTAMP
24598
24604
  self.write_keyword("TIMESTAMP");
24599
24605
  }
24606
+ Some(DialectType::Snowflake) => {
24607
+ let (base_upper, suffix) = if let Some(idx) = name.find('(') {
24608
+ (name_upper[..idx].to_string(), &name[idx..])
24609
+ } else {
24610
+ (name_upper.clone(), "")
24611
+ };
24612
+
24613
+ match base_upper.as_str() {
24614
+ "TIMESTAMPNTZ" | "TIMESTAMP_NTZ" => {
24615
+ self.write_keyword("TIMESTAMPNTZ");
24616
+ self.write(suffix);
24617
+ }
24618
+ "TIMESTAMPLTZ" | "TIMESTAMP_LTZ" => {
24619
+ self.write_keyword("TIMESTAMPLTZ");
24620
+ self.write(suffix);
24621
+ }
24622
+ "TIMESTAMPTZ" | "TIMESTAMP_TZ" => {
24623
+ self.write_keyword("TIMESTAMPTZ");
24624
+ self.write(suffix);
24625
+ }
24626
+ _ => self.write(name),
24627
+ }
24628
+ }
24629
+ Some(DialectType::Fabric) => {
24630
+ let (base_upper, args_str) = if let Some(idx) = name.find('(') {
24631
+ (name_upper[..idx].to_string(), Some(&name[idx..]))
24632
+ } else {
24633
+ (name_upper.clone(), None)
24634
+ };
24635
+
24636
+ match base_upper.as_str() {
24637
+ "NVARCHAR" => {
24638
+ self.write_keyword("VARCHAR");
24639
+ if let Some(args) = args_str {
24640
+ self.write(args);
24641
+ }
24642
+ }
24643
+ "NCHAR" => {
24644
+ self.write_keyword("CHAR");
24645
+ if let Some(args) = args_str {
24646
+ self.write(args);
24647
+ }
24648
+ }
24649
+ _ => self.write(name),
24650
+ }
24651
+ }
24600
24652
  Some(DialectType::TSQL) if name_upper == "VARIANT" => {
24601
24653
  self.write_keyword("SQL_VARIANT");
24602
24654
  }
@@ -40661,6 +40661,7 @@ impl Parser {
40661
40661
  DataType::Double { precision, scale }
40662
40662
  }
40663
40663
  "BPCHAR" | "CHARACTER" | "CHAR" | "NCHAR" => {
40664
+ let is_nchar = name == "NCHAR";
40664
40665
  // Handle CHARACTER VARYING / CHAR VARYING
40665
40666
  if self.match_identifier("VARYING") {
40666
40667
  let length = if self.match_token(TokenType::LParen) {
@@ -40670,9 +40671,18 @@ impl Parser {
40670
40671
  } else {
40671
40672
  None
40672
40673
  };
40673
- DataType::VarChar {
40674
- length,
40675
- parenthesized_length: false,
40674
+ if is_nchar {
40675
+ let name = if let Some(len) = length {
40676
+ format!("NVARCHAR({})", len)
40677
+ } else {
40678
+ "NVARCHAR".to_string()
40679
+ };
40680
+ DataType::Custom { name }
40681
+ } else {
40682
+ DataType::VarChar {
40683
+ length,
40684
+ parenthesized_length: false,
40685
+ }
40676
40686
  }
40677
40687
  } else {
40678
40688
  let length = if self.match_token(TokenType::LParen) {
@@ -40690,7 +40700,16 @@ impl Parser {
40690
40700
  let charset = self.expect_identifier_or_keyword()?;
40691
40701
  return Ok(DataType::CharacterSet { name: charset });
40692
40702
  }
40693
- DataType::Char { length }
40703
+ if is_nchar {
40704
+ let name = if let Some(len) = length {
40705
+ format!("NCHAR({})", len)
40706
+ } else {
40707
+ "NCHAR".to_string()
40708
+ };
40709
+ DataType::Custom { name }
40710
+ } else {
40711
+ DataType::Char { length }
40712
+ }
40694
40713
  }
40695
40714
  }
40696
40715
  "TIME" => {
@@ -40852,9 +40871,15 @@ impl Parser {
40852
40871
  if self.match_token(TokenType::LParen) {
40853
40872
  if self.check(TokenType::RParen) {
40854
40873
  self.skip();
40855
- DataType::VarChar {
40856
- length: None,
40857
- parenthesized_length: false,
40874
+ if is_nvarchar {
40875
+ DataType::Custom {
40876
+ name: "NVARCHAR".to_string(),
40877
+ }
40878
+ } else {
40879
+ DataType::VarChar {
40880
+ length: None,
40881
+ parenthesized_length: false,
40882
+ }
40858
40883
  }
40859
40884
  } else if self.check_identifier("MAX") {
40860
40885
  self.skip();
@@ -40870,15 +40895,27 @@ impl Parser {
40870
40895
  } else {
40871
40896
  let n = self.expect_number()? as u32;
40872
40897
  self.expect(TokenType::RParen)?;
40873
- DataType::VarChar {
40874
- length: Some(n),
40875
- parenthesized_length: false,
40898
+ if is_nvarchar {
40899
+ DataType::Custom {
40900
+ name: format!("NVARCHAR({})", n),
40901
+ }
40902
+ } else {
40903
+ DataType::VarChar {
40904
+ length: Some(n),
40905
+ parenthesized_length: false,
40906
+ }
40876
40907
  }
40877
40908
  }
40878
40909
  } else {
40879
- DataType::VarChar {
40880
- length: None,
40881
- parenthesized_length: false,
40910
+ if is_nvarchar {
40911
+ DataType::Custom {
40912
+ name: "NVARCHAR".to_string(),
40913
+ }
40914
+ } else {
40915
+ DataType::VarChar {
40916
+ length: None,
40917
+ parenthesized_length: false,
40918
+ }
40882
40919
  }
40883
40920
  }
40884
40921
  }
@@ -203,13 +203,12 @@ pub fn identity_known_failures() -> HashSet<String> {
203
203
  HashSet::new()
204
204
  }
205
205
 
206
- /// Load dialect identity test known failures
206
+ /// Load dialect identity tests that should be skipped for now.
207
207
  pub fn dialect_identity_known_failures(_dialect: &str) -> HashSet<String> {
208
- // Start with an empty set - failures will be added per dialect
209
208
  HashSet::new()
210
209
  }
211
210
 
212
- /// Load transpilation test known failures
211
+ /// Load transpilation tests that should be skipped for now.
213
212
  pub fn transpilation_known_failures(_source: &str, _target: &str) -> HashSet<String> {
214
213
  HashSet::new()
215
214
  }
@@ -0,0 +1,38 @@
1
+ use polyglot_sql::builder::{cast, col};
2
+ use polyglot_sql::dialects::{Dialect, DialectType};
3
+ use polyglot_sql::transpile;
4
+
5
+ #[test]
6
+ fn test_tsql_and_fabric_nvarchar_generation_differ_by_target() {
7
+ let expr = cast(col("x"), "NVARCHAR(MAX)").into_inner();
8
+
9
+ let tsql = Dialect::get(DialectType::TSQL).generate(&expr).unwrap();
10
+ assert_eq!(tsql, "CAST(x AS NVARCHAR(MAX))");
11
+
12
+ let fabric = Dialect::get(DialectType::Fabric).generate(&expr).unwrap();
13
+ assert_eq!(fabric, "CAST(x AS VARCHAR(MAX))");
14
+ }
15
+
16
+ #[test]
17
+ fn test_tsql_preserves_nvarchar_in_cast_parsing() {
18
+ let result = transpile(
19
+ "SELECT CAST(x AS NVARCHAR(100))",
20
+ DialectType::TSQL,
21
+ DialectType::TSQL,
22
+ )
23
+ .unwrap();
24
+
25
+ assert_eq!(result[0], "SELECT CAST(x AS NVARCHAR(100))");
26
+ }
27
+
28
+ #[test]
29
+ fn test_fabric_maps_nvarchar_to_supported_varchar() {
30
+ let result = transpile(
31
+ "SELECT CAST(x AS NVARCHAR(MAX))",
32
+ DialectType::Fabric,
33
+ DialectType::Fabric,
34
+ )
35
+ .unwrap();
36
+
37
+ assert_eq!(result[0], "SELECT CAST(x AS VARCHAR(MAX))");
38
+ }
@@ -98,6 +98,32 @@ fn test_snowflake_timestamp_cast_roundtrip() {
98
98
  );
99
99
  }
100
100
 
101
+ #[test]
102
+ fn test_snowflake_timestamp_variant_casts_generate_sqlglot_aliases() {
103
+ let cases = [
104
+ (
105
+ "SELECT CAST(CURRENT_TIMESTAMP() AS TIMESTAMP_NTZ)",
106
+ "SELECT CAST(CURRENT_TIMESTAMP() AS TIMESTAMPNTZ)",
107
+ ),
108
+ (
109
+ "SELECT CAST(CURRENT_TIMESTAMP() AS TIMESTAMP_LTZ)",
110
+ "SELECT CAST(CURRENT_TIMESTAMP() AS TIMESTAMPLTZ)",
111
+ ),
112
+ (
113
+ "SELECT CAST(CURRENT_TIMESTAMP() AS TIMESTAMP_TZ)",
114
+ "SELECT CAST(CURRENT_TIMESTAMP() AS TIMESTAMPTZ)",
115
+ ),
116
+ (
117
+ "SELECT CURRENT_TIMESTAMP()::TIMESTAMP_NTZ",
118
+ "SELECT CAST(CURRENT_TIMESTAMP() AS TIMESTAMPNTZ)",
119
+ ),
120
+ ];
121
+
122
+ for (sql, expected) in cases {
123
+ assert_eq!(parse_and_generate(sql), expected);
124
+ }
125
+ }
126
+
101
127
  // =====================================================================
102
128
  // Category 2: PUT file upload commands
103
129
  // =====================================================================
@@ -109,6 +109,10 @@ fn run_dialect_identity_tests_impl(dialect_name: &str) -> TestResults {
109
109
 
110
110
  for (i, test) in fixture.identity.iter().enumerate() {
111
111
  let test_id = format!("{}:identity:{}", dialect_name, i);
112
+ if known.contains(&test_id) {
113
+ results.known_failures += 1;
114
+ continue;
115
+ }
112
116
  let result = dialect_identity_test(&test.sql, test.expected.as_deref(), dialect_type);
113
117
  results.record_with_sql(&test_id, &test.sql, i, result);
114
118
  }
@@ -100,7 +100,6 @@ fn run_dialect_transpilation_tests(source_dialect: &str) -> TestResults {
100
100
 
101
101
  if known.contains(&test_id) {
102
102
  results.known_failures += 1;
103
- results.failed += 1;
104
103
  continue;
105
104
  }
106
105
 
@@ -33,6 +33,33 @@ def test_postgres_to_snowflake_cast_text():
33
33
  assert out == ["SELECT CAST(x AS VARCHAR) FROM t"]
34
34
 
35
35
 
36
+ def test_tsql_identity_preserves_nvarchar():
37
+ out = polyglot_sql.transpile(
38
+ "SELECT CAST(x AS NVARCHAR(MAX))",
39
+ read="tsql",
40
+ write="tsql",
41
+ )
42
+ assert out == ["SELECT CAST(x AS NVARCHAR(MAX))"]
43
+
44
+
45
+ def test_tsql_to_fabric_maps_nvarchar_to_varchar():
46
+ out = polyglot_sql.transpile(
47
+ "SELECT CAST(x AS NVARCHAR(MAX))",
48
+ read="tsql",
49
+ write="fabric",
50
+ )
51
+ assert out == ["SELECT CAST(x AS VARCHAR(MAX))"]
52
+
53
+
54
+ def test_snowflake_timestamp_variant_names_match_sqlglot_aliases():
55
+ out = polyglot_sql.transpile(
56
+ "SELECT CURRENT_TIMESTAMP()::TIMESTAMPNTZ",
57
+ read="snowflake",
58
+ write="snowflake",
59
+ )
60
+ assert out == ["SELECT CAST(CURRENT_TIMESTAMP() AS TIMESTAMPNTZ)"]
61
+
62
+
36
63
  def test_multi_statement_transpile_returns_multiple_entries():
37
64
  out = polyglot_sql.transpile(
38
65
  "SELECT 1; SELECT 2",
File without changes