polyglot-sql 0.3.9__tar.gz → 0.3.10__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 (171) hide show
  1. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/Cargo.lock +5 -5
  2. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/Cargo.toml +1 -1
  3. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/PKG-INFO +1 -1
  4. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/Cargo.toml +1 -1
  5. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/ast_transforms.rs +73 -0
  6. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/mod.rs +8 -2
  7. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/generator.rs +37 -3
  8. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/lib.rs +5 -3
  9. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/optimizer/qualify_tables.rs +315 -30
  10. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/custom_fixtures/datafusion/transpilation.json +9 -9
  11. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/fabric_regression.rs +75 -0
  12. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/tsql_regression.rs +44 -0
  13. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/lib.rs +3 -0
  14. polyglot_sql-0.3.10/crates/polyglot-sql-python/src/transforms.rs +121 -0
  15. polyglot_sql-0.3.10/crates/polyglot-sql-python/tests/test_transforms.py +44 -0
  16. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/python/polyglot_sql/__init__.py +4 -0
  17. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/python/polyglot_sql/__init__.pyi +35 -0
  18. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/README.md +0 -0
  19. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/README.md +0 -0
  20. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/benches/in_list.rs +0 -0
  21. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/benches/parsing.rs +0 -0
  22. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/benches/rust_parsing.rs +0 -0
  23. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/benches/transpile.rs +0 -0
  24. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/examples/basic_usage.rs +0 -0
  25. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/examples/bench_json.rs +0 -0
  26. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/builder.rs +0 -0
  27. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/athena.rs +0 -0
  28. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/bigquery.rs +0 -0
  29. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/clickhouse.rs +0 -0
  30. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/cockroachdb.rs +0 -0
  31. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/databricks.rs +0 -0
  32. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/datafusion.rs +0 -0
  33. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/doris.rs +0 -0
  34. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/dremio.rs +0 -0
  35. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/drill.rs +0 -0
  36. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/druid.rs +0 -0
  37. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/duckdb.rs +0 -0
  38. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/dune.rs +0 -0
  39. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/exasol.rs +0 -0
  40. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/fabric.rs +0 -0
  41. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/generic.rs +0 -0
  42. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/hive.rs +0 -0
  43. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/materialize.rs +0 -0
  44. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/mysql.rs +0 -0
  45. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/oracle.rs +0 -0
  46. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/postgres.rs +0 -0
  47. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/presto.rs +0 -0
  48. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/redshift.rs +0 -0
  49. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/risingwave.rs +0 -0
  50. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/singlestore.rs +0 -0
  51. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/snowflake.rs +0 -0
  52. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/solr.rs +0 -0
  53. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/spark.rs +0 -0
  54. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/sqlite.rs +0 -0
  55. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/starrocks.rs +0 -0
  56. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/tableau.rs +0 -0
  57. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/teradata.rs +0 -0
  58. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/tidb.rs +0 -0
  59. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/trino.rs +0 -0
  60. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/dialects/tsql.rs +0 -0
  61. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/diff.rs +0 -0
  62. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/error.rs +0 -0
  63. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/expressions.rs +0 -0
  64. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/function_catalog.rs +0 -0
  65. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/function_registry.rs +0 -0
  66. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/helper.rs +0 -0
  67. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/lineage.rs +0 -0
  68. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/optimizer/annotate_types.rs +0 -0
  69. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/optimizer/canonicalize.rs +0 -0
  70. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/optimizer/eliminate_ctes.rs +0 -0
  71. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/optimizer/eliminate_joins.rs +0 -0
  72. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/optimizer/isolate_table_selects.rs +0 -0
  73. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/optimizer/mod.rs +0 -0
  74. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/optimizer/normalize.rs +0 -0
  75. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/optimizer/normalize_identifiers.rs +0 -0
  76. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/optimizer/optimize_joins.rs +0 -0
  77. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/optimizer/optimizer.rs +0 -0
  78. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/optimizer/pushdown_predicates.rs +0 -0
  79. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/optimizer/pushdown_projections.rs +0 -0
  80. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/optimizer/qualify_columns.rs +0 -0
  81. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/optimizer/simplify.rs +0 -0
  82. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/optimizer/subquery.rs +0 -0
  83. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/parser.rs +0 -0
  84. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/planner.rs +0 -0
  85. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/resolver.rs +0 -0
  86. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/schema.rs +0 -0
  87. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/scope.rs +0 -0
  88. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/time.rs +0 -0
  89. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/tokens.rs +0 -0
  90. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/transforms.rs +0 -0
  91. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/traversal.rs +0 -0
  92. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/trie.rs +0 -0
  93. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/validation/tests.rs +0 -0
  94. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/src/validation.rs +0 -0
  95. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/analyze_failures.rs +0 -0
  96. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/clickhouse_regression.rs +0 -0
  97. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/common/known_failures.rs +0 -0
  98. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/common/mod.rs +0 -0
  99. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/common/test_data.rs +0 -0
  100. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/common/test_runner.rs +0 -0
  101. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/custom_clickhouse_coverage.rs +0 -0
  102. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/custom_clickhouse_parser.rs +0 -0
  103. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/custom_dialect.rs +0 -0
  104. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/custom_dialect_tests.rs +0 -0
  105. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/custom_fixtures/datafusion/ddl.json +0 -0
  106. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/custom_fixtures/datafusion/dml.json +0 -0
  107. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/custom_fixtures/datafusion/functions.json +0 -0
  108. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/custom_fixtures/datafusion/identity.json +0 -0
  109. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/custom_fixtures/datafusion/operators.json +0 -0
  110. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/custom_fixtures/datafusion/select.json +0 -0
  111. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/custom_fixtures/datafusion/types.json +0 -0
  112. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/deep_nesting_regression.rs +0 -0
  113. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/dialect_matrix.rs +0 -0
  114. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/error_handling.rs +0 -0
  115. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/fabric_tpch_regression.rs +0 -0
  116. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/identity_roundtrip.rs +0 -0
  117. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/postgres_sqlite_regression.rs +0 -0
  118. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/snowflake_regression_test.rs +0 -0
  119. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/sqlglot_compat.rs +0 -0
  120. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/sqlglot_dialect_identity.rs +0 -0
  121. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/sqlglot_identity.rs +0 -0
  122. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/sqlglot_identity_detailed.rs +0 -0
  123. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/sqlglot_parser.rs +0 -0
  124. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/sqlglot_pretty.rs +0 -0
  125. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/sqlglot_transpilation.rs +0 -0
  126. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/sqlglot_transpile.rs +0 -0
  127. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/tpch_transpile_stack.rs +0 -0
  128. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql/tests/transform_regression.rs +0 -0
  129. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-function-catalogs/Cargo.toml +0 -0
  130. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-function-catalogs/README.md +0 -0
  131. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-function-catalogs/src/clickhouse.rs +0 -0
  132. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-function-catalogs/src/duckdb.rs +0 -0
  133. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-function-catalogs/src/lib.rs +0 -0
  134. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-function-catalogs/tools/clickhouse/extract_functions.py +0 -0
  135. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-function-catalogs/tools/duckdb/extract_functions.py +0 -0
  136. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/Cargo.toml +0 -0
  137. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/README.md +0 -0
  138. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/docs/api.md +0 -0
  139. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/docs/index.md +0 -0
  140. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/mkdocs.yml +0 -0
  141. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/annotate_types.rs +0 -0
  142. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/dialects.rs +0 -0
  143. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/diff.rs +0 -0
  144. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/errors.rs +0 -0
  145. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/expr.rs +0 -0
  146. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/expr_types.rs +0 -0
  147. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/format.rs +0 -0
  148. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/generate.rs +0 -0
  149. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/helpers.rs +0 -0
  150. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/lineage.rs +0 -0
  151. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/optimize.rs +0 -0
  152. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/parse.rs +0 -0
  153. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/tokenize.rs +0 -0
  154. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/transpile.rs +0 -0
  155. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/types.rs +0 -0
  156. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/src/validate.rs +0 -0
  157. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/tests/conftest.py +0 -0
  158. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/tests/test_compat.py +0 -0
  159. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/tests/test_dialects.py +0 -0
  160. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/tests/test_diff.py +0 -0
  161. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/tests/test_expression.py +0 -0
  162. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/tests/test_format.py +0 -0
  163. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/tests/test_generate.py +0 -0
  164. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/tests/test_lineage.py +0 -0
  165. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/tests/test_optimize.py +0 -0
  166. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/tests/test_parse.py +0 -0
  167. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/tests/test_transpile.py +0 -0
  168. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/tests/test_validate.py +0 -0
  169. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/crates/polyglot-sql-python/uv.lock +0 -0
  170. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/pyproject.toml +0 -0
  171. {polyglot_sql-0.3.9 → polyglot_sql-0.3.10}/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.9"
608
+ version = "0.3.10"
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.9"
624
+ version = "0.3.10"
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.9"
634
+ version = "0.3.10"
635
635
 
636
636
  [[package]]
637
637
  name = "polyglot-sql-python"
638
- version = "0.3.9"
638
+ version = "0.3.10"
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.9"
649
+ version = "0.3.10"
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.9"
9
+ version = "0.3.10"
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.9
3
+ Version: 0.3.10
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.9", optional = true, default-features = false }
86
+ polyglot-sql-function-catalogs = { path = "../polyglot-sql-function-catalogs", version = "0.3.10", optional = true, default-features = false }
87
87
 
88
88
  [dev-dependencies]
89
89
  pretty_assertions = "1.4"
@@ -159,12 +159,61 @@ pub fn rename_columns(expr: Expression, mapping: &HashMap<String, String>) -> Ex
159
159
  })
160
160
  }
161
161
 
162
+ /// Options for table renaming.
163
+ #[derive(Debug, Clone)]
164
+ pub struct RenameTablesOptions {
165
+ /// Whether renamed table references should receive aliases.
166
+ pub alias_renamed_tables: bool,
167
+ /// Whether existing aliases should be preserved when aliasing renamed tables.
168
+ pub preserve_existing_aliases: bool,
169
+ }
170
+
171
+ impl Default for RenameTablesOptions {
172
+ fn default() -> Self {
173
+ Self {
174
+ alias_renamed_tables: false,
175
+ preserve_existing_aliases: true,
176
+ }
177
+ }
178
+ }
179
+
180
+ impl RenameTablesOptions {
181
+ pub fn new() -> Self {
182
+ Self::default()
183
+ }
184
+
185
+ pub fn with_alias_renamed_tables(mut self, alias: bool) -> Self {
186
+ self.alias_renamed_tables = alias;
187
+ self
188
+ }
189
+
190
+ pub fn with_preserve_existing_aliases(mut self, preserve: bool) -> Self {
191
+ self.preserve_existing_aliases = preserve;
192
+ self
193
+ }
194
+ }
195
+
162
196
  /// Rename tables throughout the expression tree using the provided mapping.
163
197
  pub fn rename_tables(expr: Expression, mapping: &HashMap<String, String>) -> Expression {
198
+ rename_tables_with_options(expr, mapping, &RenameTablesOptions::default())
199
+ }
200
+
201
+ /// Rename tables throughout the expression tree using the provided mapping and options.
202
+ pub fn rename_tables_with_options(
203
+ expr: Expression,
204
+ mapping: &HashMap<String, String>,
205
+ options: &RenameTablesOptions,
206
+ ) -> Expression {
164
207
  xform(expr, |node| match node {
165
208
  Expression::Table(mut tbl) => {
166
209
  if let Some(new_name) = mapping.get(&tbl.name.name) {
167
210
  tbl.name.name = new_name.clone();
211
+ if options.alias_renamed_tables
212
+ && (!options.preserve_existing_aliases || tbl.alias.is_none())
213
+ {
214
+ tbl.alias = Some(Identifier::new(new_name));
215
+ tbl.alias_explicit_as = true;
216
+ }
168
217
  }
169
218
  Expression::Table(tbl)
170
219
  }
@@ -701,6 +750,30 @@ mod tests {
701
750
  assert!(sql.contains("new_table"), "Expected new_table in: {}", sql);
702
751
  }
703
752
 
753
+ #[test]
754
+ fn test_rename_tables_with_alias_renamed_tables() {
755
+ let expr = parse_one("SELECT a FROM old_table");
756
+ let mut mapping = HashMap::new();
757
+ mapping.insert("old_table".to_string(), "new_table".to_string());
758
+ let options = RenameTablesOptions::new().with_alias_renamed_tables(true);
759
+ let result = rename_tables_with_options(expr, &mapping, &options);
760
+ let sql = result.sql();
761
+
762
+ assert_eq!(sql, "SELECT a FROM new_table AS new_table");
763
+ }
764
+
765
+ #[test]
766
+ fn test_rename_tables_with_alias_preserves_existing_alias() {
767
+ let expr = parse_one("SELECT a FROM old_table AS t");
768
+ let mut mapping = HashMap::new();
769
+ mapping.insert("old_table".to_string(), "new_table".to_string());
770
+ let options = RenameTablesOptions::new().with_alias_renamed_tables(true);
771
+ let result = rename_tables_with_options(expr, &mapping, &options);
772
+ let sql = result.sql();
773
+
774
+ assert_eq!(sql, "SELECT a FROM new_table AS t");
775
+ }
776
+
704
777
  #[test]
705
778
  fn test_set_distinct() {
706
779
  let expr = parse_one("SELECT a FROM t");
@@ -8285,15 +8285,21 @@ impl Dialect {
8285
8285
  if matches!(target, DialectType::MySQL) && o.nulls_first.is_some() {
8286
8286
  Action::MysqlNullsOrdering
8287
8287
  } else {
8288
- // Skip targets that don't support NULLS FIRST/LAST syntax
8288
+ // Skip targets that don't support NULLS FIRST/LAST syntax unless
8289
+ // the generator can preserve semantics with a CASE sort key.
8290
+ let target_rewrites_nulls =
8291
+ matches!(target, DialectType::TSQL | DialectType::Fabric);
8289
8292
  let target_supports_nulls = !matches!(
8290
8293
  target,
8291
8294
  DialectType::MySQL
8292
8295
  | DialectType::TSQL
8296
+ | DialectType::Fabric
8293
8297
  | DialectType::StarRocks
8294
8298
  | DialectType::Doris
8295
8299
  );
8296
- if o.nulls_first.is_none() && source != target && target_supports_nulls
8300
+ if o.nulls_first.is_none()
8301
+ && source != target
8302
+ && (target_supports_nulls || target_rewrites_nulls)
8297
8303
  {
8298
8304
  Action::NullsOrdering
8299
8305
  } else {
@@ -4803,7 +4803,10 @@ impl Generator {
4803
4803
  } else {
4804
4804
  self.write_space();
4805
4805
  }
4806
- if matches!(self.config.dialect, Some(DialectType::TSQL)) {
4806
+ if matches!(
4807
+ self.config.dialect,
4808
+ Some(DialectType::TSQL) | Some(DialectType::Fabric)
4809
+ ) {
4807
4810
  // SQL Server 2012+ OFFSET ... FETCH syntax
4808
4811
  self.write_keyword("OFFSET");
4809
4812
  self.write_space();
@@ -23212,6 +23215,36 @@ impl Generator {
23212
23215
  }
23213
23216
 
23214
23217
  fn generate_ordered(&mut self, ordered: &Ordered) -> Result<()> {
23218
+ let unsupported_tsql_null_ordering = ordered.nulls_first.is_some()
23219
+ && !self.config.null_ordering_supported
23220
+ && matches!(
23221
+ self.config.dialect,
23222
+ Some(DialectType::TSQL) | Some(DialectType::Fabric)
23223
+ );
23224
+ let random_ordering = matches!(ordered.this, Expression::Rand(_) | Expression::Random(_));
23225
+ let emulate_tsql_null_ordering = if let Some(nulls_first) = ordered.nulls_first {
23226
+ let target_default_nulls_first = !ordered.desc;
23227
+
23228
+ unsupported_tsql_null_ordering
23229
+ && nulls_first != target_default_nulls_first
23230
+ && !random_ordering
23231
+ } else {
23232
+ false
23233
+ };
23234
+
23235
+ if emulate_tsql_null_ordering {
23236
+ self.write_keyword("CASE WHEN");
23237
+ self.write_space();
23238
+ self.generate_expression(&ordered.this)?;
23239
+ self.write_space();
23240
+ self.write_keyword("IS NULL THEN 1 ELSE 0 END");
23241
+ if ordered.nulls_first == Some(true) {
23242
+ self.write_space();
23243
+ self.write_keyword("DESC");
23244
+ }
23245
+ self.write(", ");
23246
+ }
23247
+
23215
23248
  self.generate_expression(&ordered.this)?;
23216
23249
  if ordered.desc {
23217
23250
  self.write_space();
@@ -23221,8 +23254,9 @@ impl Generator {
23221
23254
  self.write_keyword("ASC");
23222
23255
  }
23223
23256
  if let Some(nulls_first) = ordered.nulls_first {
23224
- if self.config.null_ordering_supported
23225
- || !matches!(self.config.dialect, Some(DialectType::Fabric))
23257
+ if !unsupported_tsql_null_ordering
23258
+ && (self.config.null_ordering_supported
23259
+ || !matches!(self.config.dialect, Some(DialectType::Fabric)))
23226
23260
  {
23227
23261
  // Determine if we should skip outputting NULLS FIRST/LAST when it's the default
23228
23262
  // for the dialect. Different dialects have different NULL ordering defaults:
@@ -42,8 +42,8 @@ pub use ast_transforms::{
42
42
  add_select_columns, add_where, get_aggregate_functions, get_column_names, get_functions,
43
43
  get_identifiers, get_literals, get_output_column_names, get_subqueries, get_table_names,
44
44
  get_window_functions, node_count, qualify_columns, remove_limit_offset, remove_nodes,
45
- remove_select_columns, remove_where, rename_columns, rename_tables, replace_by_type,
46
- replace_nodes, set_distinct, set_limit, set_offset,
45
+ remove_select_columns, remove_where, rename_columns, rename_tables, rename_tables_with_options,
46
+ replace_by_type, replace_nodes, set_distinct, set_limit, set_offset, RenameTablesOptions,
47
47
  };
48
48
  pub use dialects::{
49
49
  unregister_custom_dialect, CustomDialectBuilder, Dialect, DialectType, TranspileOptions,
@@ -59,7 +59,9 @@ pub use helper::{
59
59
  csv, find_new_name, is_date_unit, is_float, is_int, is_iso_date, is_iso_datetime, merge_ranges,
60
60
  name_sequence, seq_get, split_num_words, tsort, while_changing, DATE_UNITS,
61
61
  };
62
- pub use optimizer::{annotate_types, TypeAnnotator, TypeCoercionClass};
62
+ pub use optimizer::{
63
+ annotate_types, qualify_tables, QualifyTablesOptions, TypeAnnotator, TypeCoercionClass,
64
+ };
63
65
  pub use parser::Parser;
64
66
  pub use resolver::{is_column_ambiguous, resolve_column, Resolver, ResolverError, ResolverResult};
65
67
  pub use schema::{