polyglot-sql 0.5.4__tar.gz → 0.5.5__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 (184) hide show
  1. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/Cargo.lock +5 -5
  2. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/Cargo.toml +1 -1
  3. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/PKG-INFO +1 -1
  4. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/Cargo.toml +1 -1
  5. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/tsql.rs +2 -0
  6. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/generator.rs +6 -1
  7. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/query_analysis.rs +17 -3
  8. polyglot_sql-0.5.5/crates/polyglot-sql/tests/query_analysis_regression.rs +79 -0
  9. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/tsql_regression.rs +41 -1
  10. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/README.md +0 -0
  11. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/README.md +0 -0
  12. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/benches/in_list.rs +0 -0
  13. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/benches/parsing.rs +0 -0
  14. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/benches/rust_parsing.rs +0 -0
  15. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/benches/transpile.rs +0 -0
  16. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/examples/basic_usage.rs +0 -0
  17. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/examples/bench_json.rs +0 -0
  18. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/ast_json.rs +0 -0
  19. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/ast_transforms.rs +0 -0
  20. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/builder.rs +0 -0
  21. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/athena.rs +0 -0
  22. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/bigquery.rs +0 -0
  23. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/clickhouse.rs +0 -0
  24. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/cockroachdb.rs +0 -0
  25. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/databricks.rs +0 -0
  26. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/datafusion.rs +0 -0
  27. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/doris.rs +0 -0
  28. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/dremio.rs +0 -0
  29. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/drill.rs +0 -0
  30. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/druid.rs +0 -0
  31. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/duckdb.rs +0 -0
  32. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/dune.rs +0 -0
  33. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/exasol.rs +0 -0
  34. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/fabric.rs +0 -0
  35. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/generic.rs +0 -0
  36. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/hive.rs +0 -0
  37. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/materialize.rs +0 -0
  38. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/mod.rs +0 -0
  39. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/mysql.rs +0 -0
  40. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/oracle.rs +0 -0
  41. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/postgres.rs +0 -0
  42. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/presto.rs +0 -0
  43. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/redshift.rs +0 -0
  44. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/risingwave.rs +0 -0
  45. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/singlestore.rs +0 -0
  46. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/snowflake.rs +0 -0
  47. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/solr.rs +0 -0
  48. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/spark.rs +0 -0
  49. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/sqlite.rs +0 -0
  50. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/starrocks.rs +0 -0
  51. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/tableau.rs +0 -0
  52. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/teradata.rs +0 -0
  53. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/tidb.rs +0 -0
  54. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/dialects/trino.rs +0 -0
  55. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/diff.rs +0 -0
  56. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/error.rs +0 -0
  57. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/expressions.rs +0 -0
  58. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/function_catalog.rs +0 -0
  59. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/function_registry.rs +0 -0
  60. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/helper.rs +0 -0
  61. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/lib.rs +0 -0
  62. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/lineage.rs +0 -0
  63. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/openlineage.rs +0 -0
  64. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/optimizer/annotate_types.rs +0 -0
  65. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/optimizer/canonicalize.rs +0 -0
  66. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/optimizer/eliminate_ctes.rs +0 -0
  67. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/optimizer/eliminate_joins.rs +0 -0
  68. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/optimizer/isolate_table_selects.rs +0 -0
  69. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/optimizer/mod.rs +0 -0
  70. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/optimizer/normalize.rs +0 -0
  71. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/optimizer/normalize_identifiers.rs +0 -0
  72. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/optimizer/optimize_joins.rs +0 -0
  73. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/optimizer/optimizer.rs +0 -0
  74. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/optimizer/pushdown_predicates.rs +0 -0
  75. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/optimizer/pushdown_projections.rs +0 -0
  76. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/optimizer/qualify_columns.rs +0 -0
  77. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/optimizer/qualify_tables.rs +0 -0
  78. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/optimizer/simplify.rs +0 -0
  79. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/optimizer/subquery.rs +0 -0
  80. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/parser.rs +0 -0
  81. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/planner.rs +0 -0
  82. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/resolver.rs +0 -0
  83. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/schema.rs +0 -0
  84. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/scope.rs +0 -0
  85. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/time.rs +0 -0
  86. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/tokens.rs +0 -0
  87. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/transforms.rs +0 -0
  88. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/traversal.rs +0 -0
  89. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/trie.rs +0 -0
  90. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/validation/tests.rs +0 -0
  91. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/src/validation.rs +0 -0
  92. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/analyze_failures.rs +0 -0
  93. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/clickhouse_regression.rs +0 -0
  94. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/common/known_failures.rs +0 -0
  95. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/common/mod.rs +0 -0
  96. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/common/test_data.rs +0 -0
  97. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/common/test_runner.rs +0 -0
  98. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/custom_clickhouse_coverage.rs +0 -0
  99. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/custom_clickhouse_parser.rs +0 -0
  100. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/custom_dialect.rs +0 -0
  101. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/custom_dialect_tests.rs +0 -0
  102. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/custom_fixtures/datafusion/ddl.json +0 -0
  103. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/custom_fixtures/datafusion/dml.json +0 -0
  104. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/custom_fixtures/datafusion/functions.json +0 -0
  105. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/custom_fixtures/datafusion/identity.json +0 -0
  106. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/custom_fixtures/datafusion/operators.json +0 -0
  107. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/custom_fixtures/datafusion/select.json +0 -0
  108. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/custom_fixtures/datafusion/transpilation.json +0 -0
  109. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/custom_fixtures/datafusion/types.json +0 -0
  110. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/data_type_api.rs +0 -0
  111. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/deep_nesting_regression.rs +0 -0
  112. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/dialect_matrix.rs +0 -0
  113. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/error_handling.rs +0 -0
  114. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/fabric_regression.rs +0 -0
  115. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/fabric_tpch_regression.rs +0 -0
  116. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/identity_roundtrip.rs +0 -0
  117. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/issue201_regression_test.rs +0 -0
  118. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/issue210_regression_test.rs +0 -0
  119. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/issue226_regression_test.rs +0 -0
  120. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/issue227_strict_unsupported.rs +0 -0
  121. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/postgres_sqlite_regression.rs +0 -0
  122. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/query_analysis.rs +0 -0
  123. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/snowflake_regression_test.rs +0 -0
  124. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/sqlglot_compat.rs +0 -0
  125. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/sqlglot_dialect_identity.rs +0 -0
  126. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/sqlglot_identity.rs +0 -0
  127. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/sqlglot_identity_detailed.rs +0 -0
  128. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/sqlglot_parser.rs +0 -0
  129. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/sqlglot_pretty.rs +0 -0
  130. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/sqlglot_transpilation.rs +0 -0
  131. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/sqlglot_transpile.rs +0 -0
  132. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/tpch_transpile_stack.rs +0 -0
  133. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql/tests/transform_regression.rs +0 -0
  134. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-function-catalogs/Cargo.toml +0 -0
  135. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-function-catalogs/README.md +0 -0
  136. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-function-catalogs/src/clickhouse.rs +0 -0
  137. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-function-catalogs/src/duckdb.rs +0 -0
  138. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-function-catalogs/src/lib.rs +0 -0
  139. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-function-catalogs/tools/clickhouse/extract_functions.py +0 -0
  140. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-function-catalogs/tools/duckdb/extract_functions.py +0 -0
  141. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/Cargo.toml +0 -0
  142. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/README.md +0 -0
  143. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/docs/api.md +0 -0
  144. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/docs/index.md +0 -0
  145. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/mkdocs.yml +0 -0
  146. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/src/annotate_types.rs +0 -0
  147. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/src/dialects.rs +0 -0
  148. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/src/diff.rs +0 -0
  149. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/src/errors.rs +0 -0
  150. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/src/expr.rs +0 -0
  151. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/src/expr_types.rs +0 -0
  152. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/src/format.rs +0 -0
  153. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/src/generate.rs +0 -0
  154. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/src/helpers.rs +0 -0
  155. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/src/lib.rs +0 -0
  156. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/src/lineage.rs +0 -0
  157. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/src/openlineage.rs +0 -0
  158. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/src/optimize.rs +0 -0
  159. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/src/parse.rs +0 -0
  160. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/src/query_analysis.rs +0 -0
  161. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/src/tokenize.rs +0 -0
  162. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/src/transforms.rs +0 -0
  163. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/src/transpile.rs +0 -0
  164. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/src/types.rs +0 -0
  165. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/src/validate.rs +0 -0
  166. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/tests/conftest.py +0 -0
  167. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/tests/test_compat.py +0 -0
  168. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/tests/test_dialects.py +0 -0
  169. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/tests/test_diff.py +0 -0
  170. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/tests/test_expression.py +0 -0
  171. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/tests/test_format.py +0 -0
  172. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/tests/test_generate.py +0 -0
  173. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/tests/test_lineage.py +0 -0
  174. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/tests/test_optimize.py +0 -0
  175. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/tests/test_parse.py +0 -0
  176. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/tests/test_query_analysis.py +0 -0
  177. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/tests/test_transforms.py +0 -0
  178. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/tests/test_transpile.py +0 -0
  179. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/tests/test_validate.py +0 -0
  180. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/crates/polyglot-sql-python/uv.lock +0 -0
  181. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/pyproject.toml +0 -0
  182. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/python/polyglot_sql/__init__.py +0 -0
  183. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/python/polyglot_sql/__init__.pyi +0 -0
  184. {polyglot_sql-0.5.4 → polyglot_sql-0.5.5}/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.5.4"
608
+ version = "0.5.5"
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.5.4"
624
+ version = "0.5.5"
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.5.4"
634
+ version = "0.5.5"
635
635
 
636
636
  [[package]]
637
637
  name = "polyglot-sql-python"
638
- version = "0.5.4"
638
+ version = "0.5.5"
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.5.4"
649
+ version = "0.5.5"
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.5.4"
9
+ version = "0.5.5"
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.5.4
3
+ Version: 0.5.5
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: License :: OSI Approved :: MIT License
@@ -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.5.4", optional = true, default-features = false }
109
+ polyglot-sql-function-catalogs = { path = "../polyglot-sql-function-catalogs", version = "0.5.5", optional = true, default-features = false }
110
110
 
111
111
  [dev-dependencies]
112
112
  pretty_assertions = "1.4"
@@ -36,6 +36,8 @@ impl DialectImpl for TSQLDialect {
36
36
  config.identifiers.insert('[', ']');
37
37
  // SQL Server also supports double quotes (when QUOTED_IDENTIFIER is ON)
38
38
  config.identifiers.insert('"', '"');
39
+ // SQL Server uses 0x-prefixed binary/varbinary hex literals.
40
+ config.hex_number_strings = true;
39
41
  config
40
42
  }
41
43
 
@@ -14733,8 +14733,13 @@ impl Generator {
14733
14733
  }
14734
14734
  }
14735
14735
  Literal::HexString(h) => {
14736
- // Most dialects use lowercase x'...' for hex literals; Spark/Databricks/Teradata use uppercase X'...'
14736
+ // Most dialects use lowercase x'...' for hex literals.
14737
14737
  match self.config.dialect {
14738
+ Some(DialectType::TSQL) | Some(DialectType::Fabric) => {
14739
+ self.write("0x");
14740
+ self.write(h);
14741
+ return Ok(());
14742
+ }
14738
14743
  Some(DialectType::Spark)
14739
14744
  | Some(DialectType::Databricks)
14740
14745
  | Some(DialectType::Teradata) => self.write("X'"),
@@ -775,6 +775,23 @@ fn transform_function_fact(
775
775
  expression: &Expression,
776
776
  scope: &Scope,
777
777
  dialect: DialectType,
778
+ ) -> Option<TransformFunctionFact> {
779
+ let mut matches = expression
780
+ .find_all(|candidate| transform_function_fact_for_node(candidate, scope, dialect).is_some())
781
+ .into_iter();
782
+
783
+ let first = matches.next()?;
784
+ if matches.next().is_some() {
785
+ return None;
786
+ }
787
+
788
+ transform_function_fact_for_node(first, scope, dialect)
789
+ }
790
+
791
+ fn transform_function_fact_for_node(
792
+ expression: &Expression,
793
+ scope: &Scope,
794
+ dialect: DialectType,
778
795
  ) -> Option<TransformFunctionFact> {
779
796
  match expression {
780
797
  Expression::Function(function) => Some(transform_function_from_args(
@@ -789,9 +806,6 @@ fn transform_function_fact(
789
806
  scope,
790
807
  dialect,
791
808
  )),
792
- Expression::WindowFunction(function) => {
793
- transform_function_fact(&function.this, scope, dialect)
794
- }
795
809
  Expression::DateTrunc(function) => Some(transform_function_from_parts(
796
810
  "DATE_TRUNC",
797
811
  vec![datetime_field_name(&function.unit)],
@@ -0,0 +1,79 @@
1
+ use polyglot_sql::{analyze_query, AnalyzeQueryOptions, DialectType, TransformKind};
2
+
3
+ fn first_projection(sql: &str) -> polyglot_sql::ProjectionFact {
4
+ let analysis = analyze_query(
5
+ sql,
6
+ AnalyzeQueryOptions {
7
+ dialect: DialectType::DuckDB,
8
+ ..Default::default()
9
+ },
10
+ )
11
+ .unwrap_or_else(|error| panic!("analyze_query failed for {sql:?}: {error}"));
12
+
13
+ analysis
14
+ .projections
15
+ .into_iter()
16
+ .next()
17
+ .expect("expected one projection")
18
+ }
19
+
20
+ #[test]
21
+ fn analyze_query_reports_top_level_transform_function() {
22
+ let projection = first_projection("SELECT DATE_TRUNC('month', created_at) AS m FROM orders");
23
+
24
+ let transform = projection
25
+ .transform_function
26
+ .expect("DATE_TRUNC should be reported");
27
+ assert_eq!(projection.transform_kind, TransformKind::Expression);
28
+ assert_eq!(transform.name, "DATE_TRUNC");
29
+ assert_eq!(transform.literal_args, vec!["month"]);
30
+ assert_eq!(transform.column_args.len(), 1);
31
+ assert_eq!(transform.column_args[0].table.as_deref(), Some("orders"));
32
+ assert_eq!(transform.column_args[0].column, "created_at");
33
+ }
34
+
35
+ #[test]
36
+ fn analyze_query_reports_transform_function_wrapped_in_coalesce() {
37
+ let projection = first_projection(
38
+ "SELECT COALESCE(DATE_TRUNC('month', created_at), DATE '1970-01-01') AS m FROM orders",
39
+ );
40
+
41
+ let transform = projection
42
+ .transform_function
43
+ .expect("nested DATE_TRUNC should be reported");
44
+ assert_eq!(projection.transform_kind, TransformKind::Expression);
45
+ assert_eq!(transform.name, "DATE_TRUNC");
46
+ assert_eq!(transform.literal_args, vec!["month"]);
47
+ assert_eq!(transform.column_args.len(), 1);
48
+ assert_eq!(transform.column_args[0].table.as_deref(), Some("orders"));
49
+ assert_eq!(transform.column_args[0].column, "created_at");
50
+ }
51
+
52
+ #[test]
53
+ fn analyze_query_reports_transform_function_wrapped_in_cast() {
54
+ let projection =
55
+ first_projection("SELECT CAST(DATE_TRUNC('day', created_at) AS DATE) AS d FROM orders");
56
+
57
+ let transform = projection
58
+ .transform_function
59
+ .expect("nested DATE_TRUNC should be reported");
60
+ assert_eq!(projection.transform_kind, TransformKind::Cast);
61
+ assert_eq!(projection.cast_type.as_deref(), Some("DATE"));
62
+ assert_eq!(transform.name, "DATE_TRUNC");
63
+ assert_eq!(transform.literal_args, vec!["day"]);
64
+ assert_eq!(transform.column_args.len(), 1);
65
+ assert_eq!(transform.column_args[0].table.as_deref(), Some("orders"));
66
+ assert_eq!(transform.column_args[0].column, "created_at");
67
+ }
68
+
69
+ #[test]
70
+ fn analyze_query_omits_ambiguous_nested_transform_functions() {
71
+ let projection = first_projection(
72
+ "SELECT COALESCE(DATE_TRUNC('month', created_at), DATE_TRUNC('day', updated_at)) AS m FROM orders",
73
+ );
74
+
75
+ assert!(
76
+ projection.transform_function.is_none(),
77
+ "multiple transform function candidates should remain ambiguous"
78
+ );
79
+ }
@@ -2,7 +2,8 @@
2
2
 
3
3
  use polyglot_sql::generator::{Generator, GeneratorConfig};
4
4
  use polyglot_sql::{
5
- get_all_tables, parse, transpile, validate, DialectType, Expression, ExpressionWalk, Parser,
5
+ get_all_tables, parse, transpile, validate, Dialect, DialectType, Expression, ExpressionWalk,
6
+ Parser, TokenType,
6
7
  };
7
8
 
8
9
  fn pg_to_tsql(sql: &str) -> String {
@@ -32,6 +33,45 @@ BEGIN CATCH
32
33
  INSERT INTO error_log (msg) VALUES (ERROR_MESSAGE());
33
34
  END CATCH"#;
34
35
 
36
+ // ---------------------------------------------------------------------------
37
+ // T-SQL hex literals
38
+ // ---------------------------------------------------------------------------
39
+
40
+ #[test]
41
+ fn tsql_hex_literals_tokenize_as_hex_strings() {
42
+ let dialect = Dialect::get(DialectType::TSQL);
43
+ let tokens = dialect
44
+ .tokenize("SELECT * FROM Employees WHERE EmployeeId = 0x1")
45
+ .expect("T-SQL hex literal should tokenize");
46
+
47
+ let hex = tokens
48
+ .iter()
49
+ .find(|token| token.token_type == TokenType::HexString)
50
+ .expect("expected a HexString token for 0x1");
51
+
52
+ assert_eq!(hex.text, "1");
53
+ }
54
+
55
+ #[test]
56
+ fn tsql_hex_literals_parse_and_roundtrip() {
57
+ for sql in [
58
+ "SELECT * FROM Employees WHERE EmployeeId = 0x1",
59
+ "INSERT INTO t (bin) VALUES (0xFF)",
60
+ "SELECT 0xCAFE + 1",
61
+ ] {
62
+ let ast = parse(sql, DialectType::TSQL)
63
+ .unwrap_or_else(|error| panic!("T-SQL hex literal should parse for {sql:?}: {error}"));
64
+ assert_eq!(ast.len(), 1);
65
+ assert_eq!(generate_tsql(&ast[0]), sql);
66
+
67
+ let roundtrip =
68
+ transpile(sql, DialectType::TSQL, DialectType::TSQL).unwrap_or_else(|error| {
69
+ panic!("T-SQL hex literal should transpile for {sql:?}: {error}")
70
+ });
71
+ assert_eq!(roundtrip, vec![sql.to_string()]);
72
+ }
73
+ }
74
+
35
75
  // ---------------------------------------------------------------------------
36
76
  // T-SQL SET options
37
77
  // ---------------------------------------------------------------------------
File without changes