polyglot-sql 0.12.1__tar.gz → 0.13.0__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 (229) hide show
  1. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/Cargo.lock +6 -6
  2. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/Cargo.toml +1 -1
  3. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/PKG-INFO +2 -2
  4. {polyglot_sql-0.12.1/crates/polyglot-sql-python → polyglot_sql-0.13.0}/README.md +1 -1
  5. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/Cargo.toml +6 -3
  6. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/README.md +5 -5
  7. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/benches/allocation_hotspots.rs +48 -54
  8. polyglot_sql-0.13.0/crates/polyglot-sql/benches/common/mod.rs +93 -0
  9. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/benches/performance_hotspots.rs +44 -55
  10. polyglot_sql-0.13.0/crates/polyglot-sql/src/ast_children.rs +190 -0
  11. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/ast_mutation.rs +38 -13
  12. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/ast_transforms.rs +253 -10
  13. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/builder/mod.rs +3 -0
  14. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/bigquery.rs +103 -4
  15. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/clickhouse.rs +10 -0
  16. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/databricks.rs +2 -0
  17. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/duckdb.rs +738 -28
  18. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/exasol.rs +2 -0
  19. polyglot_sql-0.13.0/crates/polyglot-sql/src/dialects/hana.rs +39 -0
  20. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/mod.rs +315 -69
  21. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/mysql.rs +3 -0
  22. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/normalization/aggregates.rs +19 -0
  23. polyglot_sql-0.13.0/crates/polyglot-sql/src/dialects/normalization/hana.rs +151 -0
  24. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/normalization/json.rs +6 -0
  25. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/normalization/mod.rs +51 -15
  26. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/normalization/operators.rs +5 -2
  27. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/normalization/scalar.rs +78 -4
  28. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/normalization/statements.rs +1 -0
  29. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/normalization/temporal.rs +430 -0
  30. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/normalization/types.rs +5 -4
  31. polyglot_sql-0.13.0/crates/polyglot-sql/src/dialects/normalization/vertica.rs +880 -0
  32. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/postgres.rs +12 -0
  33. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/presto.rs +10 -0
  34. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/redshift.rs +4 -0
  35. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/snowflake.rs +30 -0
  36. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/spark.rs +4 -0
  37. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/trino.rs +4 -0
  38. polyglot_sql-0.13.0/crates/polyglot-sql/src/dialects/vertica.rs +319 -0
  39. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/expressions.rs +615 -0
  40. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/format_tokens.rs +51 -0
  41. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/function_registry.rs +329 -0
  42. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/generator.rs +3147 -154
  43. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/lib.rs +1 -0
  44. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/lineage.rs +80 -18
  45. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/optimizer/annotate_types.rs +64 -1
  46. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/optimizer/canonicalize.rs +17 -27
  47. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/optimizer/normalize_identifiers.rs +15 -3
  48. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/optimizer/pushdown_projections.rs +2 -0
  49. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/optimizer/set_operation_types.rs +3 -1
  50. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/parser.rs +3058 -75
  51. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/resolver.rs +41 -3
  52. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/scope.rs +79 -18
  53. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/tokens.rs +4 -0
  54. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/transforms.rs +21 -0
  55. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/traversal.rs +131 -8
  56. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/validation/tests.rs +201 -0
  57. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/validation.rs +47 -8
  58. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/common/known_failures.rs +13 -0
  59. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/common/test_runner.rs +2 -0
  60. polyglot_sql-0.13.0/crates/polyglot-sql/tests/custom_dialect_tests.rs +1639 -0
  61. polyglot_sql-0.13.0/crates/polyglot-sql/tests/custom_fixtures/hana/ddl.json +66 -0
  62. polyglot_sql-0.13.0/crates/polyglot-sql/tests/custom_fixtures/hana/dml.json +51 -0
  63. polyglot_sql-0.13.0/crates/polyglot-sql/tests/custom_fixtures/hana/functions.json +136 -0
  64. polyglot_sql-0.13.0/crates/polyglot-sql/tests/custom_fixtures/hana/identity.json +163 -0
  65. polyglot_sql-0.13.0/crates/polyglot-sql/tests/custom_fixtures/hana/select.json +128 -0
  66. polyglot_sql-0.13.0/crates/polyglot-sql/tests/custom_fixtures/hana/types.json +39 -0
  67. polyglot_sql-0.13.0/crates/polyglot-sql/tests/custom_fixtures/vertica/identity.json +215 -0
  68. polyglot_sql-0.13.0/crates/polyglot-sql/tests/custom_fixtures/vertica/transpilation.json +188 -0
  69. polyglot_sql-0.13.0/crates/polyglot-sql/tests/custom_fixtures/vertica/types.json +50 -0
  70. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/deep_nesting_regression.rs +29 -0
  71. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/dialect_matrix.rs +843 -2
  72. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/query_analysis.rs +83 -0
  73. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/transform_regression.rs +212 -0
  74. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-ast-derive/src/lib.rs +97 -55
  75. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-function-catalogs/README.md +1 -1
  76. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0/crates/polyglot-sql-python}/README.md +1 -1
  77. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/src/dialects.rs +2 -0
  78. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/src/expr_types.rs +6 -0
  79. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/tests/test_dialects.py +2 -0
  80. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/tests/test_expression.py +25 -0
  81. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/tests/test_transpile.py +22 -0
  82. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/python/polyglot_sql/__init__.py +12 -0
  83. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/python/polyglot_sql/__init__.pyi +6 -0
  84. polyglot_sql-0.12.1/crates/polyglot-sql/src/ast_children.rs +0 -105
  85. polyglot_sql-0.12.1/crates/polyglot-sql/tests/custom_dialect_tests.rs +0 -274
  86. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/benches/ast_traversal.rs +0 -0
  87. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/benches/in_list.rs +0 -0
  88. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/benches/lineage.rs +0 -0
  89. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/benches/parsing.rs +0 -0
  90. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/benches/rust_parsing.rs +0 -0
  91. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/benches/transpile.rs +0 -0
  92. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/examples/basic_usage.rs +0 -0
  93. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/examples/bench_json.rs +0 -0
  94. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/ast_json.rs +0 -0
  95. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/binding.rs +0 -0
  96. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/builder/plan.rs +0 -0
  97. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/athena.rs +0 -0
  98. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/cockroachdb.rs +0 -0
  99. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/datafusion.rs +0 -0
  100. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/doris.rs +0 -0
  101. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/dremio.rs +0 -0
  102. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/drill.rs +0 -0
  103. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/druid.rs +0 -0
  104. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/dune.rs +0 -0
  105. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/fabric.rs +0 -0
  106. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/generic.rs +0 -0
  107. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/hive.rs +0 -0
  108. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/materialize.rs +0 -0
  109. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/normalization/collections.rs +0 -0
  110. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/normalization/postgres_interval.rs +0 -0
  111. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/oracle.rs +0 -0
  112. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/risingwave.rs +0 -0
  113. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/singlestore.rs +0 -0
  114. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/solr.rs +0 -0
  115. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/sqlite.rs +0 -0
  116. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/starrocks.rs +0 -0
  117. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/tableau.rs +0 -0
  118. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/teradata.rs +0 -0
  119. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/tidb.rs +0 -0
  120. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/dialects/tsql.rs +0 -0
  121. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/diff.rs +0 -0
  122. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/error.rs +0 -0
  123. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/function_catalog.rs +0 -0
  124. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/guard.rs +0 -0
  125. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/helper.rs +0 -0
  126. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/openlineage.rs +0 -0
  127. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/optimizer/eliminate_ctes.rs +0 -0
  128. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/optimizer/eliminate_joins.rs +0 -0
  129. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/optimizer/isolate_table_selects.rs +0 -0
  130. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/optimizer/mod.rs +0 -0
  131. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/optimizer/normalize.rs +0 -0
  132. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/optimizer/optimize_joins.rs +0 -0
  133. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/optimizer/optimizer.rs +0 -0
  134. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/optimizer/pushdown_predicates.rs +0 -0
  135. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/optimizer/qualify_columns.rs +0 -0
  136. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/optimizer/qualify_tables.rs +0 -0
  137. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/optimizer/simplify.rs +0 -0
  138. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/optimizer/subquery.rs +0 -0
  139. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/planner.rs +0 -0
  140. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/query_analysis/column_uses.rs +0 -0
  141. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/query_analysis.rs +0 -0
  142. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/schema.rs +0 -0
  143. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/set_operation.rs +0 -0
  144. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/time.rs +0 -0
  145. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/trie.rs +0 -0
  146. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/src/validation/semantics.rs +0 -0
  147. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/analyze_failures.rs +0 -0
  148. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/clickhouse_regression.rs +0 -0
  149. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/common/mod.rs +0 -0
  150. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/common/test_data.rs +0 -0
  151. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/create_view_security_comment_regression.rs +0 -0
  152. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/custom_clickhouse_coverage.rs +0 -0
  153. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/custom_clickhouse_parser.rs +0 -0
  154. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/custom_dialect.rs +0 -0
  155. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/custom_fixtures/datafusion/ddl.json +0 -0
  156. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/custom_fixtures/datafusion/dml.json +0 -0
  157. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/custom_fixtures/datafusion/functions.json +0 -0
  158. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/custom_fixtures/datafusion/identity.json +0 -0
  159. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/custom_fixtures/datafusion/operators.json +0 -0
  160. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/custom_fixtures/datafusion/select.json +0 -0
  161. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/custom_fixtures/datafusion/transpilation.json +0 -0
  162. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/custom_fixtures/datafusion/types.json +0 -0
  163. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/data_type_api.rs +0 -0
  164. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/error_handling.rs +0 -0
  165. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/fabric_regression.rs +0 -0
  166. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/fabric_tpch_regression.rs +0 -0
  167. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/identity_roundtrip.rs +0 -0
  168. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/oracle_data_types_regression.rs +0 -0
  169. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/postgres_explain_options.rs +0 -0
  170. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/postgres_regexp_clickhouse.rs +0 -0
  171. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/postgres_sqlite_regression.rs +0 -0
  172. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/query_analysis_regression.rs +0 -0
  173. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/snowflake_regression_test.rs +0 -0
  174. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/sqlglot_compat.rs +0 -0
  175. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/sqlglot_dialect_identity.rs +0 -0
  176. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/sqlglot_identity.rs +0 -0
  177. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/sqlglot_identity_detailed.rs +0 -0
  178. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/sqlglot_parser.rs +0 -0
  179. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/sqlglot_pretty.rs +0 -0
  180. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/sqlglot_transpilation.rs +0 -0
  181. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/sqlglot_transpile.rs +0 -0
  182. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/tpch_transpile_stack.rs +0 -0
  183. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql/tests/tsql_regression.rs +0 -0
  184. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-ast-derive/Cargo.toml +0 -0
  185. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-function-catalogs/Cargo.toml +0 -0
  186. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-function-catalogs/src/clickhouse.rs +0 -0
  187. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-function-catalogs/src/duckdb.rs +0 -0
  188. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-function-catalogs/src/lib.rs +0 -0
  189. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-function-catalogs/tools/clickhouse/extract_functions.py +0 -0
  190. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-function-catalogs/tools/duckdb/extract_functions.py +0 -0
  191. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/Cargo.toml +0 -0
  192. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/docs/api.md +0 -0
  193. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/docs/index.md +0 -0
  194. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/mkdocs.yml +0 -0
  195. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/src/annotate_types.rs +0 -0
  196. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/src/builders.rs +0 -0
  197. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/src/diff.rs +0 -0
  198. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/src/errors.rs +0 -0
  199. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/src/expr.rs +0 -0
  200. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/src/format.rs +0 -0
  201. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/src/generate.rs +0 -0
  202. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/src/helpers.rs +0 -0
  203. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/src/lib.rs +0 -0
  204. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/src/lineage.rs +0 -0
  205. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/src/openlineage.rs +0 -0
  206. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/src/optimize.rs +0 -0
  207. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/src/parse.rs +0 -0
  208. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/src/query_analysis.rs +0 -0
  209. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/src/tokenize.rs +0 -0
  210. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/src/transforms.rs +0 -0
  211. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/src/transpile.rs +0 -0
  212. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/src/types.rs +0 -0
  213. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/src/validate.rs +0 -0
  214. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/tests/conftest.py +0 -0
  215. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/tests/test_builders.py +0 -0
  216. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/tests/test_compat.py +0 -0
  217. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/tests/test_diff.py +0 -0
  218. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/tests/test_format.py +0 -0
  219. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/tests/test_generate.py +0 -0
  220. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/tests/test_lineage.py +0 -0
  221. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/tests/test_optimize.py +0 -0
  222. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/tests/test_parse.py +0 -0
  223. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/tests/test_query_analysis.py +0 -0
  224. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/tests/test_transforms.py +0 -0
  225. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/tests/test_validate.py +0 -0
  226. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/crates/polyglot-sql-python/uv.lock +0 -0
  227. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/pyproject.toml +0 -0
  228. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/python/polyglot_sql/analysis_types.py +0 -0
  229. {polyglot_sql-0.12.1 → polyglot_sql-0.13.0}/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.12.1"
608
+ version = "0.13.0"
609
609
  dependencies = [
610
610
  "criterion",
611
611
  "once_cell",
@@ -623,7 +623,7 @@ dependencies = [
623
623
 
624
624
  [[package]]
625
625
  name = "polyglot-sql-ast-derive"
626
- version = "0.12.1"
626
+ version = "0.13.0"
627
627
  dependencies = [
628
628
  "proc-macro2",
629
629
  "quote",
@@ -632,7 +632,7 @@ dependencies = [
632
632
 
633
633
  [[package]]
634
634
  name = "polyglot-sql-ffi"
635
- version = "0.12.1"
635
+ version = "0.13.0"
636
636
  dependencies = [
637
637
  "cbindgen",
638
638
  "polyglot-sql",
@@ -642,11 +642,11 @@ dependencies = [
642
642
 
643
643
  [[package]]
644
644
  name = "polyglot-sql-function-catalogs"
645
- version = "0.12.1"
645
+ version = "0.13.0"
646
646
 
647
647
  [[package]]
648
648
  name = "polyglot-sql-python"
649
- version = "0.12.1"
649
+ version = "0.13.0"
650
650
  dependencies = [
651
651
  "polyglot-sql",
652
652
  "pyo3",
@@ -657,7 +657,7 @@ dependencies = [
657
657
 
658
658
  [[package]]
659
659
  name = "polyglot-sql-wasm"
660
- version = "0.12.1"
660
+ version = "0.13.0"
661
661
  dependencies = [
662
662
  "console_error_panic_hook",
663
663
  "js-sys",
@@ -6,7 +6,7 @@ exclude = [
6
6
  ]
7
7
 
8
8
  [workspace.package]
9
- version = "0.12.1"
9
+ version = "0.13.0"
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.12.1
3
+ Version: 0.13.0
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: License :: OSI Approved :: MIT License
@@ -356,7 +356,7 @@ All functions are exported from `polyglot_sql`.
356
356
 
357
357
  Current dialect names returned by `polyglot_sql.dialects()`:
358
358
 
359
- `athena`, `bigquery`, `clickhouse`, `cockroachdb`, `datafusion`, `databricks`, `doris`, `dremio`, `drill`, `druid`, `duckdb`, `dune`, `exasol`, `fabric`, `generic`, `hive`, `materialize`, `mysql`, `oracle`, `postgres`, `presto`, `redshift`, `risingwave`, `singlestore`, `snowflake`, `solr`, `spark`, `sqlite`, `starrocks`, `tableau`, `teradata`, `tidb`, `trino`, `tsql`.
359
+ `athena`, `bigquery`, `clickhouse`, `cockroachdb`, `datafusion`, `databricks`, `doris`, `dremio`, `drill`, `druid`, `duckdb`, `dune`, `exasol`, `fabric`, `generic`, `hana`, `hive`, `materialize`, `mysql`, `oracle`, `postgres`, `presto`, `redshift`, `risingwave`, `singlestore`, `snowflake`, `solr`, `spark`, `sqlite`, `starrocks`, `tableau`, `teradata`, `tidb`, `trino`, `tsql`, `vertica`.
360
360
 
361
361
  ## Error Handling
362
362
 
@@ -329,7 +329,7 @@ All functions are exported from `polyglot_sql`.
329
329
 
330
330
  Current dialect names returned by `polyglot_sql.dialects()`:
331
331
 
332
- `athena`, `bigquery`, `clickhouse`, `cockroachdb`, `datafusion`, `databricks`, `doris`, `dremio`, `drill`, `druid`, `duckdb`, `dune`, `exasol`, `fabric`, `generic`, `hive`, `materialize`, `mysql`, `oracle`, `postgres`, `presto`, `redshift`, `risingwave`, `singlestore`, `snowflake`, `solr`, `spark`, `sqlite`, `starrocks`, `tableau`, `teradata`, `tidb`, `trino`, `tsql`.
332
+ `athena`, `bigquery`, `clickhouse`, `cockroachdb`, `datafusion`, `databricks`, `doris`, `dremio`, `drill`, `druid`, `duckdb`, `dune`, `exasol`, `fabric`, `generic`, `hana`, `hive`, `materialize`, `mysql`, `oracle`, `postgres`, `presto`, `redshift`, `risingwave`, `singlestore`, `snowflake`, `solr`, `spark`, `sqlite`, `starrocks`, `tableau`, `teradata`, `tidb`, `trino`, `tsql`, `vertica`.
333
333
 
334
334
  ## Error Handling
335
335
 
@@ -48,7 +48,8 @@ all-dialects = [
48
48
  "dialect-singlestore", "dialect-cockroachdb", "dialect-tidb",
49
49
  "dialect-druid", "dialect-solr", "dialect-tableau",
50
50
  "dialect-dune", "dialect-fabric", "dialect-drill",
51
- "dialect-dremio", "dialect-exasol", "dialect-datafusion",
51
+ "dialect-dremio", "dialect-exasol", "dialect-datafusion", "dialect-hana",
52
+ "dialect-vertica",
52
53
  ]
53
54
  dialect-postgresql = []
54
55
  dialect-mysql = []
@@ -83,6 +84,8 @@ dialect-drill = []
83
84
  dialect-dremio = []
84
85
  dialect-exasol = []
85
86
  dialect-datafusion = []
87
+ dialect-hana = []
88
+ dialect-vertica = []
86
89
  function-catalog-clickhouse = [
87
90
  "semantic",
88
91
  "dep:polyglot-sql-function-catalogs",
@@ -100,14 +103,14 @@ function-catalog-all-dialects = [
100
103
  ]
101
104
 
102
105
  [dependencies]
103
- polyglot-sql-ast-derive = { path = "../polyglot-sql-ast-derive", version = "0.12.1" }
106
+ polyglot-sql-ast-derive = { path = "../polyglot-sql-ast-derive", version = "0.13.0" }
104
107
  serde = { workspace = true }
105
108
  serde_json = { workspace = true }
106
109
  thiserror = { workspace = true }
107
110
  unicode-segmentation = { workspace = true }
108
111
  stacker = { version = "0.1", optional = true }
109
112
  ts-rs = { version = "12.0", features = ["serde-compat"], optional = true }
110
- polyglot-sql-function-catalogs = { path = "../polyglot-sql-function-catalogs", version = "0.12.1", optional = true, default-features = false }
113
+ polyglot-sql-function-catalogs = { path = "../polyglot-sql-function-catalogs", version = "0.13.0", optional = true, default-features = false }
111
114
 
112
115
  [dev-dependencies]
113
116
  pretty_assertions = "1.4"
@@ -25,12 +25,12 @@ By default, `polyglot-sql` enables the full public API. Parser-only consumers ca
25
25
  disable default features and opt into only the dialect parsers they need:
26
26
 
27
27
  ```toml
28
- polyglot-sql = { version = "0.12.1", default-features = false }
28
+ polyglot-sql = { version = "0.13.0", default-features = false }
29
29
  ```
30
30
 
31
31
  ```toml
32
32
  polyglot-sql = {
33
- version = "0.12.1",
33
+ version = "0.13.0",
34
34
  default-features = false,
35
35
  features = ["dialect-clickhouse"],
36
36
  }
@@ -44,14 +44,14 @@ Examples:
44
44
  ```toml
45
45
  # Parse and generate SQL for one dialect.
46
46
  polyglot-sql = {
47
- version = "0.12.1",
47
+ version = "0.13.0",
48
48
  default-features = false,
49
49
  features = ["generate", "dialect-clickhouse"],
50
50
  }
51
51
 
52
52
  # Cross-dialect transpilation.
53
53
  polyglot-sql = {
54
- version = "0.12.1",
54
+ version = "0.13.0",
55
55
  default-features = false,
56
56
  features = ["transpile", "dialect-clickhouse", "dialect-postgresql"],
57
57
  }
@@ -488,7 +488,7 @@ assert_eq!(err.line(), None);
488
488
 
489
489
  ## Supported Dialects
490
490
 
491
- Athena, BigQuery, ClickHouse, CockroachDB, DataFusion, Databricks, Doris, Dremio, Drill, Druid, DuckDB, Dune, Exasol, Fabric, Generic SQL, Hive, Materialize, MySQL, Oracle, PostgreSQL, Presto, Redshift, RisingWave, SingleStore, Snowflake, Solr, Spark, SQLite, StarRocks, Tableau, Teradata, TiDB, Trino, TSQL
491
+ Athena, BigQuery, ClickHouse, CockroachDB, DataFusion, Databricks, Doris, Dremio, Drill, Druid, DuckDB, Dune, Exasol, Fabric, Generic SQL, SAP HANA, Hive, Materialize, MySQL, Oracle, PostgreSQL, Presto, Redshift, RisingWave, SingleStore, Snowflake, Solr, Spark, SQLite, StarRocks, Tableau, Teradata, TiDB, Trino, TSQL, Vertica
492
492
 
493
493
  ## Feature Flags
494
494
 
@@ -3,62 +3,15 @@ use stats_alloc::{Region, Stats, StatsAlloc, INSTRUMENTED_SYSTEM};
3
3
  use std::alloc::System;
4
4
  use std::hint::black_box;
5
5
 
6
- #[global_allocator]
7
- static GLOBAL: &StatsAlloc<System> = &INSTRUMENTED_SYSTEM;
8
-
9
- const SHORT_ASCII: &str =
10
- "SELECT a, b, SUM(c) AS total FROM events WHERE created_at >= '2025-01-01' GROUP BY a, b";
11
- const UNICODE: &str =
12
- "SELECT \"Kundennummer\", 'Gr\u{00fc}\u{00df}e aus Z\u{00fc}rich' AS \"Mitteilung\" FROM \"Bestellungen\" WHERE \"Stadt\" = 'M\u{00fc}nchen'";
13
- const COMMENT_AND_STRING_HEAVY: &str = r#"
14
- -- leading comment
15
- SELECT 'alpha''beta' AS value, "quoted name", E'line\nvalue'
16
- FROM events /* source comment */
17
- WHERE payload = '{"key":"value"}' -- trailing comment
18
- "#;
19
-
20
- fn large_token_list() -> String {
21
- let values = (0..20_000)
22
- .map(|value| value.to_string())
23
- .collect::<Vec<_>>()
24
- .join(", ");
25
- format!("SELECT * FROM events WHERE event_id IN ({values})")
26
- }
6
+ mod common;
27
7
 
28
- fn many_columns() -> String {
29
- format!(
30
- "SELECT {} FROM t",
31
- (0..1_000)
32
- .map(|index| format!("c{index}"))
33
- .collect::<Vec<_>>()
34
- .join(", ")
35
- )
36
- }
37
-
38
- fn nested_functions() -> String {
39
- format!(
40
- "SELECT {}x{} FROM t",
41
- "COALESCE(".repeat(20),
42
- ", NULL)".repeat(20)
43
- )
44
- }
45
-
46
- fn large_strings() -> String {
47
- format!(
48
- "SELECT {} FROM t",
49
- vec![format!("'{}'", "x".repeat(100)); 500].join(", ")
50
- )
51
- }
8
+ use common::{
9
+ large_strings, large_token_list, many_columns, many_numbers, nested_functions,
10
+ COMMENT_AND_STRING_HEAVY, SHORT_ASCII, UNICODE,
11
+ };
52
12
 
53
- fn many_numbers() -> String {
54
- format!(
55
- "SELECT {} FROM t",
56
- (0..10_000)
57
- .map(|value| value.to_string())
58
- .collect::<Vec<_>>()
59
- .join(", ")
60
- )
61
- }
13
+ #[global_allocator]
14
+ static GLOBAL: &StatsAlloc<System> = &INSTRUMENTED_SYSTEM;
62
15
 
63
16
  fn measure<T>(operation: impl FnOnce() -> T) -> Stats {
64
17
  let region = Region::new(GLOBAL);
@@ -83,6 +36,13 @@ fn main() {
83
36
  let functions = nested_functions();
84
37
  let strings = large_strings();
85
38
  let numbers = many_numbers();
39
+ let generic_functions = format!(
40
+ "SELECT {} FROM t",
41
+ (0..1_000)
42
+ .map(|i| format!("my_udf(c{i}) AS v{i}"))
43
+ .collect::<Vec<_>>()
44
+ .join(", ")
45
+ );
86
46
  let inputs = [
87
47
  ("short_ascii", SHORT_ASCII),
88
48
  ("unicode", UNICODE),
@@ -92,6 +52,7 @@ fn main() {
92
52
  ("nested_functions", functions.as_str()),
93
53
  ("large_strings", strings.as_str()),
94
54
  ("many_numbers", numbers.as_str()),
55
+ ("generic_functions", generic_functions.as_str()),
95
56
  ];
96
57
 
97
58
  black_box(dialect.tokenize(SHORT_ASCII).unwrap());
@@ -119,4 +80,37 @@ fn main() {
119
80
  0,
120
81
  measure(|| Dialect::get(DialectType::PostgreSQL)),
121
82
  );
83
+
84
+ for depth in [10, 20, 40, 80] {
85
+ let mut sql = "SELECT 1".to_owned();
86
+ for _ in 0..depth {
87
+ sql = format!("SELECT ({sql})");
88
+ }
89
+ for kind in [DialectType::PostgreSQL, DialectType::HANA] {
90
+ let dialect = Dialect::get(kind);
91
+ black_box(dialect.parse(&sql).unwrap());
92
+ print_stats(
93
+ &format!("nested_{depth}_{kind}"),
94
+ "parse",
95
+ sql.len(),
96
+ measure(|| dialect.parse(&sql).unwrap()),
97
+ );
98
+ }
99
+ }
100
+
101
+ #[cfg(feature = "transpile")]
102
+ {
103
+ let options = polyglot_sql::TranspileOptions::strict();
104
+ for (name, sql) in common::transpilation_queries() {
105
+ let run =
106
+ || polyglot_sql::transpile_with_by_name(&sql, "hana", "duckdb", &options).unwrap();
107
+ black_box(run());
108
+ print_stats(
109
+ &format!("hana_{name}"),
110
+ "transpile",
111
+ sql.len(),
112
+ measure(run),
113
+ );
114
+ }
115
+ }
122
116
  }
@@ -0,0 +1,93 @@
1
+ //! SQL inputs shared by the latency and allocation hotspot benchmarks.
2
+ //! Dialect selection stays in the callers, so both suites use identical fixtures.
3
+
4
+ pub(super) const SHORT_ASCII: &str =
5
+ "SELECT a, b, SUM(c) AS total FROM events WHERE created_at >= '2025-01-01' GROUP BY a, b";
6
+
7
+ pub(super) const UNICODE: &str =
8
+ "SELECT \"Kundennummer\", 'Gr\u{00fc}\u{00df}e aus Z\u{00fc}rich' AS \"Mitteilung\" FROM \"Bestellungen\" WHERE \"Stadt\" = 'M\u{00fc}nchen'";
9
+
10
+ pub(super) const COMMENT_AND_STRING_HEAVY: &str = r#"
11
+ -- leading comment
12
+ SELECT 'alpha''beta' AS value, "quoted name", E'line\nvalue'
13
+ FROM events /* source comment */
14
+ WHERE payload = '{"key":"value"}' -- trailing comment
15
+ "#;
16
+
17
+ pub(super) fn large_token_list() -> String {
18
+ let values = (0..20_000)
19
+ .map(|value| value.to_string())
20
+ .collect::<Vec<_>>()
21
+ .join(", ");
22
+ format!("SELECT * FROM events WHERE event_id IN ({values})")
23
+ }
24
+
25
+ pub(super) fn many_columns() -> String {
26
+ format!(
27
+ "SELECT {} FROM t",
28
+ (0..1_000)
29
+ .map(|index| format!("c{index}"))
30
+ .collect::<Vec<_>>()
31
+ .join(", ")
32
+ )
33
+ }
34
+
35
+ pub(super) fn nested_functions() -> String {
36
+ format!(
37
+ "SELECT {}x{} FROM t",
38
+ "COALESCE(".repeat(20),
39
+ ", NULL)".repeat(20)
40
+ )
41
+ }
42
+
43
+ pub(super) fn large_strings() -> String {
44
+ format!(
45
+ "SELECT {} FROM t",
46
+ vec![format!("'{}'", "x".repeat(100)); 500].join(", ")
47
+ )
48
+ }
49
+
50
+ pub(super) fn many_numbers() -> String {
51
+ format!(
52
+ "SELECT {} FROM t",
53
+ (0..10_000)
54
+ .map(|value| value.to_string())
55
+ .collect::<Vec<_>>()
56
+ .join(", ")
57
+ )
58
+ }
59
+
60
+ #[cfg(feature = "transpile")]
61
+ pub(super) fn transpilation_queries() -> Vec<(&'static str, String)> {
62
+ vec![
63
+ ("short", "SELECT COALESCE(x, 0) FROM t".to_owned()),
64
+ (
65
+ "wide",
66
+ format!(
67
+ "SELECT {} FROM t",
68
+ (0..100)
69
+ .map(|i| format!("COALESCE(c{i}, 0) AS v{i}"))
70
+ .collect::<Vec<_>>()
71
+ .join(", ")
72
+ ),
73
+ ),
74
+ (
75
+ "nested",
76
+ format!(
77
+ "SELECT {}x{} FROM t",
78
+ "COALESCE(".repeat(20),
79
+ ", 0)".repeat(20)
80
+ ),
81
+ ),
82
+ (
83
+ "casts",
84
+ format!(
85
+ "SELECT {}",
86
+ (0..100)
87
+ .map(|i| format!("CAST({i}.123 AS DECIMAL(10, 2)) AS v{i}"))
88
+ .collect::<Vec<_>>()
89
+ .join(", ")
90
+ ),
91
+ ),
92
+ ]
93
+ }
@@ -4,18 +4,12 @@ use polyglot_sql::parser::{Parser, ParserConfig};
4
4
  use polyglot_sql::ComplexityGuardOptions;
5
5
  use std::time::Duration;
6
6
 
7
- const SHORT_ASCII: &str =
8
- "SELECT a, b, SUM(c) AS total FROM events WHERE created_at >= '2025-01-01' GROUP BY a, b";
7
+ mod common;
9
8
 
10
- const UNICODE: &str =
11
- "SELECT \"Kundennummer\", 'Gr\u{00fc}\u{00df}e aus Z\u{00fc}rich' AS \"Mitteilung\" FROM \"Bestellungen\" WHERE \"Stadt\" = 'M\u{00fc}nchen'";
12
-
13
- const COMMENT_AND_STRING_HEAVY: &str = r#"
14
- -- leading comment
15
- SELECT 'alpha''beta' AS value, "quoted name", E'line\nvalue'
16
- FROM events /* source comment */
17
- WHERE payload = '{"key":"value"}' -- trailing comment
18
- "#;
9
+ use common::{
10
+ large_strings, large_token_list, many_columns, many_numbers, nested_functions,
11
+ COMMENT_AND_STRING_HEAVY, SHORT_ASCII, UNICODE,
12
+ };
19
13
 
20
14
  const TPCH_STYLE: &str = r#"
21
15
  WITH regional_sales AS (
@@ -36,49 +30,6 @@ WHERE ranked.position <= 10
36
30
  ORDER BY ranked.revenue DESC
37
31
  "#;
38
32
 
39
- fn large_token_list() -> String {
40
- let values = (0..20_000)
41
- .map(|value| value.to_string())
42
- .collect::<Vec<_>>()
43
- .join(", ");
44
- format!("SELECT * FROM events WHERE event_id IN ({values})")
45
- }
46
-
47
- fn many_columns() -> String {
48
- format!(
49
- "SELECT {} FROM t",
50
- (0..1_000)
51
- .map(|index| format!("c{index}"))
52
- .collect::<Vec<_>>()
53
- .join(", ")
54
- )
55
- }
56
-
57
- fn nested_functions() -> String {
58
- format!(
59
- "SELECT {}x{} FROM t",
60
- "COALESCE(".repeat(20),
61
- ", NULL)".repeat(20)
62
- )
63
- }
64
-
65
- fn large_strings() -> String {
66
- format!(
67
- "SELECT {} FROM t",
68
- vec![format!("'{}'", "x".repeat(100)); 500].join(", ")
69
- )
70
- }
71
-
72
- fn many_numbers() -> String {
73
- format!(
74
- "SELECT {} FROM t",
75
- (0..10_000)
76
- .map(|value| value.to_string())
77
- .collect::<Vec<_>>()
78
- .join(", ")
79
- )
80
- }
81
-
82
33
  fn disabled_guards() -> ComplexityGuardOptions {
83
34
  ComplexityGuardOptions {
84
35
  max_parser_depth: None,
@@ -269,11 +220,49 @@ fn bench_validation_and_analysis(c: &mut Criterion) {
269
220
  let _ = c;
270
221
  }
271
222
 
223
+ fn bench_hana_nested_queries(c: &mut Criterion) {
224
+ let mut group = c.benchmark_group("nested_query_dialects");
225
+ for depth in [10, 20, 40, 80] {
226
+ let mut sql = "SELECT 1".to_owned();
227
+ for _ in 0..depth {
228
+ sql = format!("SELECT ({sql})");
229
+ }
230
+ for kind in [DialectType::PostgreSQL, DialectType::HANA] {
231
+ let dialect = Dialect::get(kind);
232
+ group.bench_with_input(BenchmarkId::new(kind.to_string(), depth), &sql, |b, sql| {
233
+ b.iter(|| dialect.parse(black_box(sql)).unwrap());
234
+ });
235
+ }
236
+ }
237
+ group.finish();
238
+ }
239
+
240
+ fn bench_hana_source_validation(c: &mut Criterion) {
241
+ #[cfg(feature = "transpile")]
242
+ {
243
+ let options = polyglot_sql::TranspileOptions::strict();
244
+ let mut group = c.benchmark_group("hana_source_validation");
245
+ for (name, sql) in common::transpilation_queries() {
246
+ group.bench_with_input(BenchmarkId::from_parameter(name), &sql, |b, sql| {
247
+ b.iter(|| {
248
+ polyglot_sql::transpile_with_by_name(black_box(sql), "hana", "duckdb", &options)
249
+ .unwrap()
250
+ });
251
+ });
252
+ }
253
+ group.finish();
254
+ }
255
+ #[cfg(not(feature = "transpile"))]
256
+ let _ = c;
257
+ }
258
+
272
259
  criterion_group!(
273
260
  benches,
274
261
  bench_dialect_construction,
275
262
  bench_fresh_vs_reused_dialect,
276
263
  bench_tokenize_and_parse,
277
- bench_validation_and_analysis
264
+ bench_validation_and_analysis,
265
+ bench_hana_nested_queries,
266
+ bench_hana_source_validation
278
267
  );
279
268
  criterion_main!(benches);