polyglot-sql 0.5.8__tar.gz → 0.5.9__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.8 → polyglot_sql-0.5.9}/Cargo.lock +5 -5
  2. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/Cargo.toml +1 -1
  3. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/PKG-INFO +1 -1
  4. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/Cargo.toml +1 -1
  5. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/resolver.rs +92 -1
  6. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/query_analysis.rs +99 -1
  7. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/tests/test_query_analysis.py +40 -0
  8. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/README.md +0 -0
  9. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/README.md +0 -0
  10. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/benches/in_list.rs +0 -0
  11. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/benches/parsing.rs +0 -0
  12. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/benches/rust_parsing.rs +0 -0
  13. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/benches/transpile.rs +0 -0
  14. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/examples/basic_usage.rs +0 -0
  15. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/examples/bench_json.rs +0 -0
  16. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/ast_json.rs +0 -0
  17. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/ast_transforms.rs +0 -0
  18. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/builder.rs +0 -0
  19. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/athena.rs +0 -0
  20. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/bigquery.rs +0 -0
  21. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/clickhouse.rs +0 -0
  22. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/cockroachdb.rs +0 -0
  23. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/databricks.rs +0 -0
  24. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/datafusion.rs +0 -0
  25. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/doris.rs +0 -0
  26. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/dremio.rs +0 -0
  27. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/drill.rs +0 -0
  28. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/druid.rs +0 -0
  29. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/duckdb.rs +0 -0
  30. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/dune.rs +0 -0
  31. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/exasol.rs +0 -0
  32. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/fabric.rs +0 -0
  33. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/generic.rs +0 -0
  34. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/hive.rs +0 -0
  35. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/materialize.rs +0 -0
  36. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/mod.rs +0 -0
  37. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/mysql.rs +0 -0
  38. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/oracle.rs +0 -0
  39. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/postgres.rs +0 -0
  40. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/presto.rs +0 -0
  41. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/redshift.rs +0 -0
  42. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/risingwave.rs +0 -0
  43. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/singlestore.rs +0 -0
  44. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/snowflake.rs +0 -0
  45. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/solr.rs +0 -0
  46. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/spark.rs +0 -0
  47. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/sqlite.rs +0 -0
  48. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/starrocks.rs +0 -0
  49. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/tableau.rs +0 -0
  50. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/teradata.rs +0 -0
  51. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/tidb.rs +0 -0
  52. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/trino.rs +0 -0
  53. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/dialects/tsql.rs +0 -0
  54. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/diff.rs +0 -0
  55. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/error.rs +0 -0
  56. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/expressions.rs +0 -0
  57. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/function_catalog.rs +0 -0
  58. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/function_registry.rs +0 -0
  59. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/generator.rs +0 -0
  60. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/helper.rs +0 -0
  61. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/lib.rs +0 -0
  62. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/lineage.rs +0 -0
  63. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/openlineage.rs +0 -0
  64. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/optimizer/annotate_types.rs +0 -0
  65. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/optimizer/canonicalize.rs +0 -0
  66. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/optimizer/eliminate_ctes.rs +0 -0
  67. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/optimizer/eliminate_joins.rs +0 -0
  68. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/optimizer/isolate_table_selects.rs +0 -0
  69. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/optimizer/mod.rs +0 -0
  70. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/optimizer/normalize.rs +0 -0
  71. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/optimizer/normalize_identifiers.rs +0 -0
  72. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/optimizer/optimize_joins.rs +0 -0
  73. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/optimizer/optimizer.rs +0 -0
  74. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/optimizer/pushdown_predicates.rs +0 -0
  75. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/optimizer/pushdown_projections.rs +0 -0
  76. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/optimizer/qualify_columns.rs +0 -0
  77. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/optimizer/qualify_tables.rs +0 -0
  78. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/optimizer/simplify.rs +0 -0
  79. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/optimizer/subquery.rs +0 -0
  80. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/parser.rs +0 -0
  81. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/planner.rs +0 -0
  82. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/query_analysis.rs +0 -0
  83. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/schema.rs +0 -0
  84. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/scope.rs +0 -0
  85. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/time.rs +0 -0
  86. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/tokens.rs +0 -0
  87. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/transforms.rs +0 -0
  88. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/traversal.rs +0 -0
  89. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/trie.rs +0 -0
  90. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/validation/tests.rs +0 -0
  91. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/src/validation.rs +0 -0
  92. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/analyze_failures.rs +0 -0
  93. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/clickhouse_regression.rs +0 -0
  94. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/common/known_failures.rs +0 -0
  95. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/common/mod.rs +0 -0
  96. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/common/test_data.rs +0 -0
  97. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/common/test_runner.rs +0 -0
  98. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/custom_clickhouse_coverage.rs +0 -0
  99. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/custom_clickhouse_parser.rs +0 -0
  100. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/custom_dialect.rs +0 -0
  101. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/custom_dialect_tests.rs +0 -0
  102. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/custom_fixtures/datafusion/ddl.json +0 -0
  103. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/custom_fixtures/datafusion/dml.json +0 -0
  104. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/custom_fixtures/datafusion/functions.json +0 -0
  105. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/custom_fixtures/datafusion/identity.json +0 -0
  106. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/custom_fixtures/datafusion/operators.json +0 -0
  107. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/custom_fixtures/datafusion/select.json +0 -0
  108. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/custom_fixtures/datafusion/transpilation.json +0 -0
  109. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/custom_fixtures/datafusion/types.json +0 -0
  110. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/data_type_api.rs +0 -0
  111. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/deep_nesting_regression.rs +0 -0
  112. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/dialect_matrix.rs +0 -0
  113. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/error_handling.rs +0 -0
  114. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/fabric_regression.rs +0 -0
  115. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/fabric_tpch_regression.rs +0 -0
  116. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/identity_roundtrip.rs +0 -0
  117. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/issue201_regression_test.rs +0 -0
  118. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/issue210_regression_test.rs +0 -0
  119. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/issue226_regression_test.rs +0 -0
  120. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/issue227_strict_unsupported.rs +0 -0
  121. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/postgres_sqlite_regression.rs +0 -0
  122. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/query_analysis_regression.rs +0 -0
  123. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/snowflake_regression_test.rs +0 -0
  124. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/sqlglot_compat.rs +0 -0
  125. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/sqlglot_dialect_identity.rs +0 -0
  126. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/sqlglot_identity.rs +0 -0
  127. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/sqlglot_identity_detailed.rs +0 -0
  128. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/sqlglot_parser.rs +0 -0
  129. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/sqlglot_pretty.rs +0 -0
  130. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/sqlglot_transpilation.rs +0 -0
  131. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/sqlglot_transpile.rs +0 -0
  132. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/tpch_transpile_stack.rs +0 -0
  133. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/transform_regression.rs +0 -0
  134. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql/tests/tsql_regression.rs +0 -0
  135. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-function-catalogs/Cargo.toml +0 -0
  136. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-function-catalogs/README.md +0 -0
  137. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-function-catalogs/src/clickhouse.rs +0 -0
  138. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-function-catalogs/src/duckdb.rs +0 -0
  139. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-function-catalogs/src/lib.rs +0 -0
  140. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-function-catalogs/tools/clickhouse/extract_functions.py +0 -0
  141. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-function-catalogs/tools/duckdb/extract_functions.py +0 -0
  142. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/Cargo.toml +0 -0
  143. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/README.md +0 -0
  144. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/docs/api.md +0 -0
  145. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/docs/index.md +0 -0
  146. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/mkdocs.yml +0 -0
  147. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/src/annotate_types.rs +0 -0
  148. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/src/dialects.rs +0 -0
  149. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/src/diff.rs +0 -0
  150. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/src/errors.rs +0 -0
  151. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/src/expr.rs +0 -0
  152. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/src/expr_types.rs +0 -0
  153. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/src/format.rs +0 -0
  154. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/src/generate.rs +0 -0
  155. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/src/helpers.rs +0 -0
  156. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/src/lib.rs +0 -0
  157. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/src/lineage.rs +0 -0
  158. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/src/openlineage.rs +0 -0
  159. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/src/optimize.rs +0 -0
  160. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/src/parse.rs +0 -0
  161. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/src/query_analysis.rs +0 -0
  162. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/src/tokenize.rs +0 -0
  163. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/src/transforms.rs +0 -0
  164. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/src/transpile.rs +0 -0
  165. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/src/types.rs +0 -0
  166. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/src/validate.rs +0 -0
  167. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/tests/conftest.py +0 -0
  168. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/tests/test_compat.py +0 -0
  169. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/tests/test_dialects.py +0 -0
  170. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/tests/test_diff.py +0 -0
  171. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/tests/test_expression.py +0 -0
  172. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/tests/test_format.py +0 -0
  173. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/tests/test_generate.py +0 -0
  174. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/tests/test_lineage.py +0 -0
  175. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/tests/test_optimize.py +0 -0
  176. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/tests/test_parse.py +0 -0
  177. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/tests/test_transforms.py +0 -0
  178. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/tests/test_transpile.py +0 -0
  179. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/tests/test_validate.py +0 -0
  180. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/crates/polyglot-sql-python/uv.lock +0 -0
  181. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/pyproject.toml +0 -0
  182. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/python/polyglot_sql/__init__.py +0 -0
  183. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/python/polyglot_sql/__init__.pyi +0 -0
  184. {polyglot_sql-0.5.8 → polyglot_sql-0.5.9}/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.8"
608
+ version = "0.5.9"
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.8"
624
+ version = "0.5.9"
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.8"
634
+ version = "0.5.9"
635
635
 
636
636
  [[package]]
637
637
  name = "polyglot-sql-python"
638
- version = "0.5.8"
638
+ version = "0.5.9"
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.8"
649
+ version = "0.5.9"
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.8"
9
+ version = "0.5.9"
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.8
3
+ Version: 0.5.9
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.8", optional = true, default-features = false }
109
+ polyglot-sql-function-catalogs = { path = "../polyglot-sql-function-catalogs", version = "0.5.9", optional = true, default-features = false }
110
110
 
111
111
  [dev-dependencies]
112
112
  pretty_assertions = "1.4"
@@ -173,7 +173,14 @@ impl<'a> Resolver<'a> {
173
173
 
174
174
  /// Extract column names from a source expression
175
175
  fn extract_columns_from_source(&self, source_info: &SourceInfo) -> ResolverResult<Vec<String>> {
176
- let columns = match &source_info.expression {
176
+ self.get_source_columns_for_expression(&source_info.expression)
177
+ }
178
+
179
+ fn get_source_columns_for_expression(
180
+ &self,
181
+ expression: &Expression,
182
+ ) -> ResolverResult<Vec<String>> {
183
+ let columns = match expression {
177
184
  Expression::Table(table) => {
178
185
  // For tables, try to get columns from schema.
179
186
  // Build the fully qualified name (catalog.schema.table) to
@@ -211,6 +218,17 @@ impl<'a> Resolver<'a> {
211
218
  }
212
219
  Expression::Pivot(pivot) => self.get_pivot_output_columns(pivot),
213
220
  Expression::Unpivot(unpivot) => self.get_unpivot_output_columns(unpivot),
221
+ Expression::Alias(alias) if matches!(&alias.this, Expression::Unnest(_)) => {
222
+ alias_output_columns(alias)
223
+ }
224
+ Expression::Alias(alias) => {
225
+ let columns = self.get_source_columns_for_expression(&alias.this)?;
226
+ apply_alias_columns(columns, &alias.column_aliases)
227
+ }
228
+ Expression::Unnest(unnest) => unnest_output_columns(unnest),
229
+ Expression::Lateral(lateral) => lateral_output_columns(lateral),
230
+ Expression::LateralView(lateral_view) => lateral_view_output_columns(lateral_view),
231
+ Expression::Paren(paren) => self.get_source_columns_for_expression(&paren.this)?,
214
232
  _ => Vec::new(),
215
233
  };
216
234
 
@@ -228,6 +246,11 @@ impl<'a> Resolver<'a> {
228
246
  Expression::Intersect(intersect) => self.get_named_selects(&intersect.left),
229
247
  Expression::Except(except) => self.get_named_selects(&except.left),
230
248
  Expression::Subquery(subquery) => self.get_named_selects(&subquery.this),
249
+ Expression::Alias(alias) => {
250
+ let columns = self.get_named_selects(&alias.this);
251
+ apply_alias_columns(columns, &alias.column_aliases)
252
+ }
253
+ Expression::Paren(paren) => self.get_named_selects(&paren.this),
231
254
  _ => Vec::new(),
232
255
  }
233
256
  }
@@ -351,6 +374,16 @@ impl<'a> Resolver<'a> {
351
374
  Expression::Union(_) | Expression::Intersect(_) | Expression::Except(_) => self
352
375
  .get_source_columns_from_set_op(source)
353
376
  .unwrap_or_default(),
377
+ Expression::Alias(alias) if matches!(&alias.this, Expression::Unnest(_)) => {
378
+ alias_output_columns(alias)
379
+ }
380
+ Expression::Alias(alias) => {
381
+ let columns = self.get_source_output_columns(&alias.this);
382
+ apply_alias_columns(columns, &alias.column_aliases)
383
+ }
384
+ Expression::Unnest(unnest) => unnest_output_columns(unnest),
385
+ Expression::Lateral(lateral) => lateral_output_columns(lateral),
386
+ Expression::LateralView(lateral_view) => lateral_view_output_columns(lateral_view),
354
387
  Expression::Cte(cte) => {
355
388
  if cte.columns.is_empty() {
356
389
  self.get_named_selects(&cte.this)
@@ -383,6 +416,11 @@ impl<'a> Resolver<'a> {
383
416
  Ok(self.get_named_selects(&subquery.this))
384
417
  }
385
418
  }
419
+ Expression::Alias(alias) => {
420
+ let columns = self.get_source_columns_from_set_op(&alias.this)?;
421
+ Ok(apply_alias_columns(columns, &alias.column_aliases))
422
+ }
423
+ Expression::Paren(paren) => self.get_source_columns_from_set_op(&paren.this),
386
424
  Expression::Union(union) => {
387
425
  // Standard UNION: columns come from the left side
388
426
  self.get_source_columns_from_set_op(&union.left)
@@ -540,6 +578,59 @@ fn apply_alias_columns(mut columns: Vec<String>, alias_columns: &[Identifier]) -
540
578
  columns
541
579
  }
542
580
 
581
+ fn unnest_output_columns(unnest: &crate::expressions::UnnestFunc) -> Vec<String> {
582
+ unnest
583
+ .alias
584
+ .iter()
585
+ .map(|alias| alias.name.clone())
586
+ .chain(unnest.offset_alias.iter().map(|alias| alias.name.clone()))
587
+ .collect()
588
+ }
589
+
590
+ fn alias_output_columns(alias: &crate::expressions::Alias) -> Vec<String> {
591
+ if alias.column_aliases.is_empty() {
592
+ vec![alias.alias.name.clone()]
593
+ } else {
594
+ alias
595
+ .column_aliases
596
+ .iter()
597
+ .map(|column| column.name.clone())
598
+ .collect()
599
+ }
600
+ }
601
+
602
+ fn lateral_output_columns(lateral: &crate::expressions::Lateral) -> Vec<String> {
603
+ if lateral.column_aliases.is_empty() {
604
+ default_virtual_output_columns(&lateral.this)
605
+ } else {
606
+ lateral.column_aliases.clone()
607
+ }
608
+ }
609
+
610
+ fn lateral_view_output_columns(lateral_view: &crate::expressions::LateralView) -> Vec<String> {
611
+ lateral_view
612
+ .column_aliases
613
+ .iter()
614
+ .map(|column| column.name.clone())
615
+ .collect()
616
+ }
617
+
618
+ fn default_virtual_output_columns(expression: &Expression) -> Vec<String> {
619
+ match expression {
620
+ Expression::Unnest(unnest) => unnest_output_columns(unnest),
621
+ Expression::Alias(alias) if matches!(&alias.this, Expression::Unnest(_)) => {
622
+ alias_output_columns(alias)
623
+ }
624
+ Expression::Function(function) if function.name.eq_ignore_ascii_case("FLATTEN") => {
625
+ ["seq", "key", "path", "index", "value", "this"]
626
+ .into_iter()
627
+ .map(String::from)
628
+ .collect()
629
+ }
630
+ _ => Vec::new(),
631
+ }
632
+ }
633
+
543
634
  fn pivot_excluded_source_columns(
544
635
  pivot: &crate::expressions::Pivot,
545
636
  dialect: Option<DialectType>,
@@ -609,6 +609,32 @@ fn analyze_query_reports_base_tables_inside_derived_table_set_operation() {
609
609
  .any(|relation| relation.name == "u" && relation.kind == SourceKind::DerivedTable));
610
610
  }
611
611
 
612
+ fn single_column_schema(table_names: &[&str], column_name: &str) -> ValidationSchema {
613
+ let tables: Vec<_> = table_names
614
+ .iter()
615
+ .map(|name| {
616
+ json!({
617
+ "name": name,
618
+ "columns": [{"name": column_name, "type": "INT"}]
619
+ })
620
+ })
621
+ .collect();
622
+
623
+ serde_json::from_value(json!({ "tables": tables })).unwrap()
624
+ }
625
+
626
+ fn unnest_analysis_schema() -> ValidationSchema {
627
+ serde_json::from_value(json!({
628
+ "tables": [
629
+ {
630
+ "name": "t",
631
+ "columns": [{"name": "arr", "type": "INT"}]
632
+ }
633
+ ]
634
+ }))
635
+ .unwrap()
636
+ }
637
+
612
638
  #[test]
613
639
  fn analyze_query_resolves_nested_set_operation_inside_derived_table() {
614
640
  let analysis = analyze_query(
@@ -616,7 +642,7 @@ fn analyze_query_resolves_nested_set_operation_inside_derived_table() {
616
642
  UNION ALL SELECT v FROM t3) u",
617
643
  AnalyzeQueryOptions {
618
644
  dialect: DialectType::DuckDB,
619
- schema: None,
645
+ schema: Some(single_column_schema(&["t1", "t2", "t3"], "v")),
620
646
  },
621
647
  )
622
648
  .unwrap();
@@ -638,6 +664,78 @@ fn analyze_query_resolves_nested_set_operation_inside_derived_table() {
638
664
  assert_eq!(base_table_names, vec!["t1", "t2", "t3"]);
639
665
  }
640
666
 
667
+ #[test]
668
+ fn analyze_query_resolves_mixed_nested_set_operation_arm_inside_derived_table() {
669
+ let analysis = analyze_query(
670
+ "SELECT v FROM (SELECT v FROM t0 UNION ALL \
671
+ (SELECT v FROM t1 UNION ALL SELECT v FROM t2)) u",
672
+ AnalyzeQueryOptions {
673
+ dialect: DialectType::DuckDB,
674
+ schema: Some(single_column_schema(&["t0", "t1", "t2"], "v")),
675
+ },
676
+ )
677
+ .unwrap();
678
+
679
+ let upstream_tables: Vec<_> = analysis.projections[0]
680
+ .upstream
681
+ .iter()
682
+ .filter_map(|reference| reference.table.as_deref())
683
+ .collect();
684
+ assert!(upstream_tables.contains(&"t0"));
685
+ assert!(upstream_tables.contains(&"t1"));
686
+ assert!(upstream_tables.contains(&"t2"));
687
+ }
688
+
689
+ #[test]
690
+ fn analyze_query_resolves_nested_set_operation_inside_cte_with_schema() {
691
+ let analysis = analyze_query(
692
+ "WITH c AS (SELECT v FROM ((SELECT v FROM t1 UNION ALL SELECT v FROM t2) \
693
+ UNION ALL SELECT v FROM t3) u) SELECT v FROM c",
694
+ AnalyzeQueryOptions {
695
+ dialect: DialectType::DuckDB,
696
+ schema: Some(single_column_schema(&["t1", "t2", "t3"], "v")),
697
+ },
698
+ )
699
+ .unwrap();
700
+
701
+ let upstream_tables: Vec<_> = analysis.projections[0]
702
+ .upstream
703
+ .iter()
704
+ .filter_map(|reference| reference.table.as_deref())
705
+ .collect();
706
+ assert!(upstream_tables.contains(&"t1"));
707
+ assert!(upstream_tables.contains(&"t2"));
708
+ assert!(upstream_tables.contains(&"t3"));
709
+ }
710
+
711
+ #[test]
712
+ fn analyze_query_resolves_unnest_virtual_output_aliases_with_schema() {
713
+ for sql in [
714
+ "SELECT i FROM t, UNNEST(t.arr) AS i",
715
+ "SELECT i FROM t, UNNEST(t.arr) AS u(i)",
716
+ "SELECT u.i FROM t, UNNEST(t.arr) AS u(i)",
717
+ ] {
718
+ let analysis = analyze_query(
719
+ sql,
720
+ AnalyzeQueryOptions {
721
+ dialect: DialectType::DuckDB,
722
+ schema: Some(unnest_analysis_schema()),
723
+ },
724
+ )
725
+ .unwrap_or_else(|error| panic!("analyze_query failed for {sql:?}: {error}"));
726
+
727
+ assert!(
728
+ analysis.projections[0]
729
+ .upstream
730
+ .iter()
731
+ .any(|reference| reference.table.as_deref() == Some("t")
732
+ && reference.column == "arr"),
733
+ "expected t.arr upstream for {sql:?}, got {:?}",
734
+ analysis.projections[0].upstream
735
+ );
736
+ }
737
+ }
738
+
641
739
  #[test]
642
740
  fn analyze_query_resolves_same_select_alias_reference() {
643
741
  let analysis = analyze_query(
@@ -148,6 +148,46 @@ def test_analyze_query_resolves_pivot_alias_columns():
148
148
  )
149
149
 
150
150
 
151
+ def test_analyze_query_resolves_nested_set_operation_with_schema():
152
+ result = polyglot_sql.analyze_query(
153
+ "SELECT v FROM ((SELECT v FROM t1 UNION ALL SELECT v FROM t2) "
154
+ "UNION ALL SELECT v FROM t3) u",
155
+ {
156
+ "dialect": "duckdb",
157
+ "schema": {
158
+ "tables": [
159
+ {"name": "t1", "columns": [{"name": "v", "type": "INT"}]},
160
+ {"name": "t2", "columns": [{"name": "v", "type": "INT"}]},
161
+ {"name": "t3", "columns": [{"name": "v", "type": "INT"}]},
162
+ ]
163
+ },
164
+ },
165
+ )
166
+
167
+ upstream = result["projections"][0]["upstream"]
168
+ assert {reference["table"] for reference in upstream} == {"t1", "t2", "t3"}
169
+
170
+
171
+ def test_analyze_query_resolves_unnest_output_alias_with_schema():
172
+ result = polyglot_sql.analyze_query(
173
+ "SELECT i FROM t, UNNEST(t.arr) AS i",
174
+ {
175
+ "dialect": "duckdb",
176
+ "schema": {
177
+ "tables": [
178
+ {"name": "t", "columns": [{"name": "arr", "type": "INT"}]},
179
+ ]
180
+ },
181
+ },
182
+ )
183
+
184
+ upstream = result["projections"][0]["upstream"]
185
+ assert any(
186
+ reference["table"] == "t" and reference["column"] == "arr"
187
+ for reference in upstream
188
+ )
189
+
190
+
151
191
  def test_analyze_query_unknown_dialect_raises_value_error():
152
192
  with pytest.raises(ValueError):
153
193
  polyglot_sql.analyze_query("SELECT 1", dialect="not_a_dialect")
File without changes