polyglot-sql 0.4.1__tar.gz → 0.4.2__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 (174) hide show
  1. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/Cargo.lock +5 -5
  2. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/Cargo.toml +1 -1
  3. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/PKG-INFO +1 -1
  4. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/Cargo.toml +1 -1
  5. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/bigquery.rs +32 -0
  6. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/lineage.rs +91 -5
  7. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/openlineage.rs +39 -0
  8. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/parser.rs +50 -20
  9. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/README.md +0 -0
  10. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/README.md +0 -0
  11. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/benches/in_list.rs +0 -0
  12. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/benches/parsing.rs +0 -0
  13. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/benches/rust_parsing.rs +0 -0
  14. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/benches/transpile.rs +0 -0
  15. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/examples/basic_usage.rs +0 -0
  16. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/examples/bench_json.rs +0 -0
  17. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/ast_transforms.rs +0 -0
  18. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/builder.rs +0 -0
  19. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/athena.rs +0 -0
  20. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/clickhouse.rs +0 -0
  21. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/cockroachdb.rs +0 -0
  22. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/databricks.rs +0 -0
  23. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/datafusion.rs +0 -0
  24. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/doris.rs +0 -0
  25. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/dremio.rs +0 -0
  26. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/drill.rs +0 -0
  27. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/druid.rs +0 -0
  28. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/duckdb.rs +0 -0
  29. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/dune.rs +0 -0
  30. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/exasol.rs +0 -0
  31. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/fabric.rs +0 -0
  32. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/generic.rs +0 -0
  33. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/hive.rs +0 -0
  34. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/materialize.rs +0 -0
  35. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/mod.rs +0 -0
  36. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/mysql.rs +0 -0
  37. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/oracle.rs +0 -0
  38. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/postgres.rs +0 -0
  39. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/presto.rs +0 -0
  40. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/redshift.rs +0 -0
  41. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/risingwave.rs +0 -0
  42. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/singlestore.rs +0 -0
  43. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/snowflake.rs +0 -0
  44. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/solr.rs +0 -0
  45. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/spark.rs +0 -0
  46. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/sqlite.rs +0 -0
  47. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/starrocks.rs +0 -0
  48. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/tableau.rs +0 -0
  49. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/teradata.rs +0 -0
  50. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/tidb.rs +0 -0
  51. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/trino.rs +0 -0
  52. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/dialects/tsql.rs +0 -0
  53. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/diff.rs +0 -0
  54. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/error.rs +0 -0
  55. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/expressions.rs +0 -0
  56. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/function_catalog.rs +0 -0
  57. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/function_registry.rs +0 -0
  58. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/generator.rs +0 -0
  59. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/helper.rs +0 -0
  60. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/lib.rs +0 -0
  61. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/optimizer/annotate_types.rs +0 -0
  62. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/optimizer/canonicalize.rs +0 -0
  63. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/optimizer/eliminate_ctes.rs +0 -0
  64. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/optimizer/eliminate_joins.rs +0 -0
  65. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/optimizer/isolate_table_selects.rs +0 -0
  66. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/optimizer/mod.rs +0 -0
  67. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/optimizer/normalize.rs +0 -0
  68. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/optimizer/normalize_identifiers.rs +0 -0
  69. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/optimizer/optimize_joins.rs +0 -0
  70. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/optimizer/optimizer.rs +0 -0
  71. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/optimizer/pushdown_predicates.rs +0 -0
  72. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/optimizer/pushdown_projections.rs +0 -0
  73. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/optimizer/qualify_columns.rs +0 -0
  74. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/optimizer/qualify_tables.rs +0 -0
  75. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/optimizer/simplify.rs +0 -0
  76. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/optimizer/subquery.rs +0 -0
  77. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/planner.rs +0 -0
  78. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/resolver.rs +0 -0
  79. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/schema.rs +0 -0
  80. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/scope.rs +0 -0
  81. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/time.rs +0 -0
  82. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/tokens.rs +0 -0
  83. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/transforms.rs +0 -0
  84. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/traversal.rs +0 -0
  85. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/trie.rs +0 -0
  86. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/validation/tests.rs +0 -0
  87. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/src/validation.rs +0 -0
  88. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/analyze_failures.rs +0 -0
  89. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/clickhouse_regression.rs +0 -0
  90. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/common/known_failures.rs +0 -0
  91. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/common/mod.rs +0 -0
  92. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/common/test_data.rs +0 -0
  93. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/common/test_runner.rs +0 -0
  94. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/custom_clickhouse_coverage.rs +0 -0
  95. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/custom_clickhouse_parser.rs +0 -0
  96. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/custom_dialect.rs +0 -0
  97. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/custom_dialect_tests.rs +0 -0
  98. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/custom_fixtures/datafusion/ddl.json +0 -0
  99. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/custom_fixtures/datafusion/dml.json +0 -0
  100. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/custom_fixtures/datafusion/functions.json +0 -0
  101. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/custom_fixtures/datafusion/identity.json +0 -0
  102. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/custom_fixtures/datafusion/operators.json +0 -0
  103. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/custom_fixtures/datafusion/select.json +0 -0
  104. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/custom_fixtures/datafusion/transpilation.json +0 -0
  105. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/custom_fixtures/datafusion/types.json +0 -0
  106. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/deep_nesting_regression.rs +0 -0
  107. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/dialect_matrix.rs +0 -0
  108. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/error_handling.rs +0 -0
  109. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/fabric_regression.rs +0 -0
  110. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/fabric_tpch_regression.rs +0 -0
  111. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/identity_roundtrip.rs +0 -0
  112. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/issue201_regression_test.rs +0 -0
  113. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/postgres_sqlite_regression.rs +0 -0
  114. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/snowflake_regression_test.rs +0 -0
  115. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/sqlglot_compat.rs +0 -0
  116. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/sqlglot_dialect_identity.rs +0 -0
  117. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/sqlglot_identity.rs +0 -0
  118. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/sqlglot_identity_detailed.rs +0 -0
  119. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/sqlglot_parser.rs +0 -0
  120. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/sqlglot_pretty.rs +0 -0
  121. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/sqlglot_transpilation.rs +0 -0
  122. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/sqlglot_transpile.rs +0 -0
  123. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/tpch_transpile_stack.rs +0 -0
  124. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/transform_regression.rs +0 -0
  125. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql/tests/tsql_regression.rs +0 -0
  126. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-function-catalogs/Cargo.toml +0 -0
  127. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-function-catalogs/README.md +0 -0
  128. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-function-catalogs/src/clickhouse.rs +0 -0
  129. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-function-catalogs/src/duckdb.rs +0 -0
  130. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-function-catalogs/src/lib.rs +0 -0
  131. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-function-catalogs/tools/clickhouse/extract_functions.py +0 -0
  132. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-function-catalogs/tools/duckdb/extract_functions.py +0 -0
  133. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/Cargo.toml +0 -0
  134. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/README.md +0 -0
  135. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/docs/api.md +0 -0
  136. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/docs/index.md +0 -0
  137. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/mkdocs.yml +0 -0
  138. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/src/annotate_types.rs +0 -0
  139. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/src/dialects.rs +0 -0
  140. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/src/diff.rs +0 -0
  141. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/src/errors.rs +0 -0
  142. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/src/expr.rs +0 -0
  143. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/src/expr_types.rs +0 -0
  144. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/src/format.rs +0 -0
  145. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/src/generate.rs +0 -0
  146. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/src/helpers.rs +0 -0
  147. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/src/lib.rs +0 -0
  148. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/src/lineage.rs +0 -0
  149. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/src/openlineage.rs +0 -0
  150. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/src/optimize.rs +0 -0
  151. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/src/parse.rs +0 -0
  152. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/src/tokenize.rs +0 -0
  153. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/src/transforms.rs +0 -0
  154. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/src/transpile.rs +0 -0
  155. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/src/types.rs +0 -0
  156. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/src/validate.rs +0 -0
  157. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/tests/conftest.py +0 -0
  158. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/tests/test_compat.py +0 -0
  159. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/tests/test_dialects.py +0 -0
  160. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/tests/test_diff.py +0 -0
  161. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/tests/test_expression.py +0 -0
  162. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/tests/test_format.py +0 -0
  163. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/tests/test_generate.py +0 -0
  164. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/tests/test_lineage.py +0 -0
  165. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/tests/test_optimize.py +0 -0
  166. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/tests/test_parse.py +0 -0
  167. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/tests/test_transforms.py +0 -0
  168. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/tests/test_transpile.py +0 -0
  169. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/tests/test_validate.py +0 -0
  170. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/crates/polyglot-sql-python/uv.lock +0 -0
  171. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/pyproject.toml +0 -0
  172. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/python/polyglot_sql/__init__.py +0 -0
  173. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/python/polyglot_sql/__init__.pyi +0 -0
  174. {polyglot_sql-0.4.1 → polyglot_sql-0.4.2}/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.4.1"
608
+ version = "0.4.2"
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.4.1"
624
+ version = "0.4.2"
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.4.1"
634
+ version = "0.4.2"
635
635
 
636
636
  [[package]]
637
637
  name = "polyglot-sql-python"
638
- version = "0.4.1"
638
+ version = "0.4.2"
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.4.1"
649
+ version = "0.4.2"
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.4.1"
9
+ version = "0.4.2"
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.4.1
3
+ Version: 0.4.2
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.4.1", optional = true, default-features = false }
109
+ polyglot-sql-function-catalogs = { path = "../polyglot-sql-function-catalogs", version = "0.4.2", optional = true, default-features = false }
110
110
 
111
111
  [dev-dependencies]
112
112
  pretty_assertions = "1.4"
@@ -1587,6 +1587,38 @@ mod tests {
1587
1587
  assert_eq!(result, expected, "SQL: {}", sql);
1588
1588
  }
1589
1589
 
1590
+ #[test]
1591
+ fn test_safe_namespace_parses_as_function() {
1592
+ let expr = parse_one(
1593
+ "SELECT SAFE.PARSE_JSON(data) AS json_data FROM t",
1594
+ DialectType::BigQuery,
1595
+ )
1596
+ .expect("parse");
1597
+
1598
+ let Expression::Select(select) = expr else {
1599
+ panic!("expected SELECT");
1600
+ };
1601
+ let Expression::Alias(alias) = &select.expressions[0] else {
1602
+ panic!("expected alias");
1603
+ };
1604
+ let Expression::Function(function) = &alias.this else {
1605
+ panic!("expected SAFE namespace call to parse as Function");
1606
+ };
1607
+
1608
+ assert_eq!(function.name, "SAFE.PARSE_JSON");
1609
+ assert_eq!(function.args.len(), 1);
1610
+ }
1611
+
1612
+ #[test]
1613
+ fn test_safe_namespace_identity() {
1614
+ bigquery_identity("SAFE.PARSE_JSON(data)", "SAFE.PARSE_JSON(data)");
1615
+ bigquery_identity(
1616
+ "SAFE.PARSE_DATE('%Y-%m-%d', date_col)",
1617
+ "SAFE.PARSE_DATE('%F', date_col)",
1618
+ );
1619
+ bigquery_identity("SAFE.DIVIDE(a, b)", "SAFE.DIVIDE(a, b)");
1620
+ }
1621
+
1590
1622
  #[test]
1591
1623
  fn test_cast_char_to_string() {
1592
1624
  bigquery_identity("CAST(x AS CHAR)", "CAST(x AS STRING)");
@@ -714,7 +714,7 @@ fn to_node_inner(
714
714
  }
715
715
 
716
716
  // 7. Column references — trace each column to its source
717
- let col_refs = find_column_refs_in_expr(&select_expr);
717
+ let col_refs = find_column_refs_in_expr(&select_expr, dialect);
718
718
  for col_ref in col_refs {
719
719
  let col_name = &col_ref.column;
720
720
  if let Some(ref table_id) = col_ref.table {
@@ -1265,13 +1265,30 @@ struct SimpleColumnRef {
1265
1265
  }
1266
1266
 
1267
1267
  /// Find all column references in an expression (does not recurse into subqueries).
1268
- fn find_column_refs_in_expr(expr: &Expression) -> Vec<SimpleColumnRef> {
1268
+ fn find_column_refs_in_expr(
1269
+ expr: &Expression,
1270
+ dialect: Option<DialectType>,
1271
+ ) -> Vec<SimpleColumnRef> {
1269
1272
  let mut refs = Vec::new();
1270
- collect_column_refs(expr, &mut refs);
1273
+ collect_column_refs(expr, dialect, &mut refs);
1271
1274
  refs
1272
1275
  }
1273
1276
 
1274
- fn collect_column_refs(expr: &Expression, refs: &mut Vec<SimpleColumnRef>) {
1277
+ fn is_bigquery_safe_namespace_receiver(expr: &Expression) -> bool {
1278
+ match expr {
1279
+ Expression::Column(col) => {
1280
+ col.table.is_none() && !col.name.quoted && col.name.name.eq_ignore_ascii_case("SAFE")
1281
+ }
1282
+ Expression::Identifier(id) => !id.quoted && id.name.eq_ignore_ascii_case("SAFE"),
1283
+ _ => false,
1284
+ }
1285
+ }
1286
+
1287
+ fn collect_column_refs(
1288
+ expr: &Expression,
1289
+ dialect: Option<DialectType>,
1290
+ refs: &mut Vec<SimpleColumnRef>,
1291
+ ) {
1275
1292
  let mut stack: Vec<&Expression> = vec![expr];
1276
1293
 
1277
1294
  while let Some(current) = stack.pop() {
@@ -1638,7 +1655,11 @@ fn collect_column_refs(expr: &Expression, refs: &mut Vec<SimpleColumnRef>) {
1638
1655
  stack.push(&d.this);
1639
1656
  }
1640
1657
  Expression::MethodCall(m) => {
1641
- stack.push(&m.this);
1658
+ if !matches!(dialect, Some(DialectType::BigQuery))
1659
+ || !is_bigquery_safe_namespace_receiver(&m.this)
1660
+ {
1661
+ stack.push(&m.this);
1662
+ }
1642
1663
  for arg in &m.args {
1643
1664
  stack.push(arg);
1644
1665
  }
@@ -2989,6 +3010,71 @@ mod tests {
2989
3010
  );
2990
3011
  }
2991
3012
 
3013
+ #[test]
3014
+ fn test_lineage_bigquery_safe_namespace_issue207() {
3015
+ let query = r#"
3016
+ WITH import_cte AS (
3017
+ SELECT timestamp, data, operation
3018
+ FROM `project`.`dataset`.`source_table`
3019
+ ),
3020
+ transform_cte AS (
3021
+ SELECT
3022
+ timestamp,
3023
+ SAFE.PARSE_JSON(data) AS json_data
3024
+ FROM import_cte
3025
+ )
3026
+ SELECT json_data FROM transform_cte
3027
+ "#;
3028
+ let expr = parse_one(query, DialectType::BigQuery).expect("parse");
3029
+ let node = lineage("json_data", &expr, Some(DialectType::BigQuery), false)
3030
+ .expect("lineage should resolve SAFE.PARSE_JSON arguments");
3031
+ let names: Vec<_> = node.walk().map(|n| n.name.clone()).collect();
3032
+
3033
+ assert!(
3034
+ names.iter().any(|name| name == "source_table.data"),
3035
+ "expected source_table.data in lineage, got {names:?}"
3036
+ );
3037
+ assert!(
3038
+ !names
3039
+ .iter()
3040
+ .any(|name| name.eq_ignore_ascii_case("import_cte.safe")),
3041
+ "did not expect SAFE namespace receiver in lineage, got {names:?}"
3042
+ );
3043
+ }
3044
+
3045
+ #[test]
3046
+ fn test_lineage_bigquery_safe_namespace_method_call_guard() {
3047
+ let expr = parse("SELECT SAFE.PARSE_JSON(data) AS json_data FROM t");
3048
+ let node = lineage("json_data", &expr, Some(DialectType::BigQuery), false)
3049
+ .expect("lineage should resolve SAFE.PARSE_JSON arguments");
3050
+ let names: Vec<_> = node.walk().map(|n| n.name.clone()).collect();
3051
+
3052
+ assert!(
3053
+ names.iter().any(|name| name == "t.data"),
3054
+ "expected t.data in lineage, got {names:?}"
3055
+ );
3056
+ assert!(
3057
+ !names.iter().any(|name| name.eq_ignore_ascii_case("t.safe")),
3058
+ "did not expect SAFE namespace receiver in lineage, got {names:?}"
3059
+ );
3060
+ }
3061
+
3062
+ #[test]
3063
+ fn test_lineage_method_call_receiver_control() {
3064
+ let expr = parse("SELECT obj.METHOD(arg) AS out FROM t");
3065
+ let node = lineage("out", &expr, None, false).expect("lineage");
3066
+ let names: Vec<_> = node.walk().map(|n| n.name.clone()).collect();
3067
+
3068
+ assert!(
3069
+ names.iter().any(|name| name == "t.obj"),
3070
+ "expected ordinary method receiver to remain in lineage, got {names:?}"
3071
+ );
3072
+ assert!(
3073
+ names.iter().any(|name| name == "t.arg"),
3074
+ "expected method argument in lineage, got {names:?}"
3075
+ );
3076
+ }
3077
+
2992
3078
  #[test]
2993
3079
  fn test_lineage_upper_function() {
2994
3080
  let expr = parse("SELECT UPPER(name) AS upper_name FROM users");
@@ -1126,6 +1126,45 @@ mod tests {
1126
1126
  .all(|f| f.transformations[0].subtype == "TRANSFORMATION"));
1127
1127
  }
1128
1128
 
1129
+ #[test]
1130
+ fn omits_bigquery_safe_namespace_from_column_lineage_issue207() {
1131
+ let mut opts = options();
1132
+ opts.dialect = DialectType::BigQuery;
1133
+
1134
+ let result = openlineage_column_lineage(
1135
+ r#"
1136
+ WITH import_cte AS (
1137
+ SELECT timestamp, data, operation
1138
+ FROM `project`.`dataset`.`source_table`
1139
+ ),
1140
+ transform_cte AS (
1141
+ SELECT
1142
+ timestamp,
1143
+ SAFE.PARSE_JSON(data) AS json_data
1144
+ FROM import_cte
1145
+ )
1146
+ SELECT json_data FROM transform_cte
1147
+ "#,
1148
+ &opts,
1149
+ )
1150
+ .expect("lineage");
1151
+ let field = result.facet.fields.get("json_data").expect("json_data");
1152
+
1153
+ assert!(
1154
+ field.input_fields.iter().any(|input| input.field == "data"),
1155
+ "expected data input field, got {:?}",
1156
+ field.input_fields
1157
+ );
1158
+ assert!(
1159
+ !field
1160
+ .input_fields
1161
+ .iter()
1162
+ .any(|input| input.field.eq_ignore_ascii_case("safe")),
1163
+ "did not expect SAFE namespace as input field, got {:?}",
1164
+ field.input_fields
1165
+ );
1166
+ }
1167
+
1129
1168
  #[test]
1130
1169
  fn emits_aggregation_column_lineage() {
1131
1170
  let result =
@@ -619,6 +619,39 @@ impl Parser {
619
619
  parser.parse()
620
620
  }
621
621
 
622
+ fn is_bigquery_safe_namespace_receiver(expr: &Expression) -> bool {
623
+ match expr {
624
+ Expression::Column(col) => {
625
+ col.table.is_none()
626
+ && !col.name.quoted
627
+ && col.name.name.eq_ignore_ascii_case("SAFE")
628
+ }
629
+ Expression::Identifier(id) => !id.quoted && id.name.eq_ignore_ascii_case("SAFE"),
630
+ _ => false,
631
+ }
632
+ }
633
+
634
+ fn parse_method_call_expression(
635
+ &self,
636
+ this: Expression,
637
+ method: Identifier,
638
+ args: Vec<Expression>,
639
+ ) -> Expression {
640
+ if matches!(
641
+ self.config.dialect,
642
+ Some(crate::dialects::DialectType::BigQuery)
643
+ ) && Self::is_bigquery_safe_namespace_receiver(&this)
644
+ && !method.quoted
645
+ {
646
+ return Expression::Function(Box::new(Function::new(
647
+ format!("SAFE.{}", method.name),
648
+ args,
649
+ )));
650
+ }
651
+
652
+ Expression::MethodCall(Box::new(MethodCall { this, method, args }))
653
+ }
654
+
622
655
  /// Parse all remaining statements from the token stream.
623
656
  ///
624
657
  /// Consumes tokens until the end of input, splitting on semicolons.
@@ -30471,18 +30504,15 @@ impl Parser {
30471
30504
  self.parse_function_arguments()?
30472
30505
  };
30473
30506
  self.expect(TokenType::RParen)?;
30474
- let method_call = Expression::MethodCall(Box::new(MethodCall {
30475
- this: Expression::boxed_column(Column {
30476
- name: ident.clone(),
30477
- table: None,
30478
- join_mark: false,
30479
- trailing_comments: Vec::new(),
30480
- span: None,
30481
- inferred_type: None,
30482
- }),
30483
- method: col_ident,
30484
- args,
30485
- }));
30507
+ let this = Expression::boxed_column(Column {
30508
+ name: ident.clone(),
30509
+ table: None,
30510
+ join_mark: false,
30511
+ trailing_comments: Vec::new(),
30512
+ span: None,
30513
+ inferred_type: None,
30514
+ });
30515
+ let method_call = self.parse_method_call_expression(this, col_ident, args);
30486
30516
  return self.maybe_parse_subscript(method_call);
30487
30517
  }
30488
30518
 
@@ -32321,11 +32351,11 @@ impl Parser {
32321
32351
  self.parse_expression_list()?
32322
32352
  };
32323
32353
  self.expect(TokenType::RParen)?;
32324
- let method_call = Expression::MethodCall(Box::new(MethodCall {
32325
- this: Expression::Identifier(Identifier::new(name)),
32326
- method: col_ident,
32354
+ let method_call = self.parse_method_call_expression(
32355
+ Expression::Identifier(Identifier::new(name)),
32356
+ col_ident,
32327
32357
  args,
32328
- }));
32358
+ );
32329
32359
  return self.maybe_parse_subscript(method_call);
32330
32360
  }
32331
32361
 
@@ -37831,11 +37861,11 @@ impl Parser {
37831
37861
  };
37832
37862
  self.expect(TokenType::RParen)?;
37833
37863
  // Create a method call expression (DotAccess with function call)
37834
- expr = Expression::MethodCall(Box::new(MethodCall {
37835
- this: expr,
37836
- method: Identifier::new(field_name),
37864
+ expr = self.parse_method_call_expression(
37865
+ expr,
37866
+ Identifier::new(field_name),
37837
37867
  args,
37838
- }));
37868
+ );
37839
37869
  } else {
37840
37870
  let mut ident = Identifier::new(field_name);
37841
37871
  if is_quoted {
File without changes