sqlglot 30.5.0__tar.gz → 30.6.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 (322) hide show
  1. {sqlglot-30.5.0 → sqlglot-30.6.0}/CHANGELOG.md +77 -0
  2. {sqlglot-30.5.0/sqlglot.egg-info → sqlglot-30.6.0}/PKG-INFO +3 -3
  3. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/_version.py +3 -3
  4. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/executor/python.py +4 -108
  5. sqlglot-30.6.0/sqlglot/generators/python.py +108 -0
  6. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parser.py +1 -1
  7. {sqlglot-30.5.0 → sqlglot-30.6.0/sqlglot.egg-info}/PKG-INFO +3 -3
  8. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot.egg-info/SOURCES.txt +1 -0
  9. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot.egg-info/requires.txt +2 -2
  10. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_postgres.py +2 -0
  11. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/test_executor.py +0 -4
  12. {sqlglot-30.5.0 → sqlglot-30.6.0}/.gitignore +0 -0
  13. {sqlglot-30.5.0 → sqlglot-30.6.0}/.gitmodules +0 -0
  14. {sqlglot-30.5.0 → sqlglot-30.6.0}/.gitpod.yml +0 -0
  15. {sqlglot-30.5.0 → sqlglot-30.6.0}/.pre-commit-config.yaml +0 -0
  16. {sqlglot-30.5.0 → sqlglot-30.6.0}/AGENTS.md +0 -0
  17. {sqlglot-30.5.0 → sqlglot-30.6.0}/CLAUDE.md +0 -0
  18. {sqlglot-30.5.0 → sqlglot-30.6.0}/CONTRIBUTING.md +0 -0
  19. {sqlglot-30.5.0 → sqlglot-30.6.0}/LICENSE +0 -0
  20. {sqlglot-30.5.0 → sqlglot-30.6.0}/MANIFEST.in +0 -0
  21. {sqlglot-30.5.0 → sqlglot-30.6.0}/Makefile +0 -0
  22. {sqlglot-30.5.0 → sqlglot-30.6.0}/README.md +0 -0
  23. {sqlglot-30.5.0 → sqlglot-30.6.0}/pyproject.toml +0 -0
  24. {sqlglot-30.5.0 → sqlglot-30.6.0}/setup.cfg +0 -0
  25. {sqlglot-30.5.0 → sqlglot-30.6.0}/setup.py +0 -0
  26. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/__init__.py +0 -0
  27. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/__main__.py +0 -0
  28. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/_typing.py +0 -0
  29. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/__init__.py +0 -0
  30. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/athena.py +0 -0
  31. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/bigquery.py +0 -0
  32. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/clickhouse.py +0 -0
  33. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/databricks.py +0 -0
  34. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/dialect.py +0 -0
  35. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/doris.py +0 -0
  36. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/dremio.py +0 -0
  37. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/drill.py +0 -0
  38. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/druid.py +0 -0
  39. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/duckdb.py +0 -0
  40. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/dune.py +0 -0
  41. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/exasol.py +0 -0
  42. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/fabric.py +0 -0
  43. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/hive.py +0 -0
  44. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/materialize.py +0 -0
  45. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/mysql.py +0 -0
  46. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/oracle.py +0 -0
  47. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/postgres.py +0 -0
  48. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/presto.py +0 -0
  49. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/prql.py +0 -0
  50. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/redshift.py +0 -0
  51. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/risingwave.py +0 -0
  52. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/singlestore.py +0 -0
  53. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/snowflake.py +0 -0
  54. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/solr.py +0 -0
  55. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/spark.py +0 -0
  56. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/spark2.py +0 -0
  57. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/sqlite.py +0 -0
  58. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/starrocks.py +0 -0
  59. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/tableau.py +0 -0
  60. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/teradata.py +0 -0
  61. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/trino.py +0 -0
  62. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/dialects/tsql.py +0 -0
  63. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/diff.py +0 -0
  64. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/errors.py +0 -0
  65. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/executor/__init__.py +0 -0
  66. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/executor/context.py +0 -0
  67. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/executor/env.py +0 -0
  68. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/executor/table.py +0 -0
  69. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/expressions/__init__.py +0 -0
  70. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/expressions/aggregate.py +0 -0
  71. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/expressions/array.py +0 -0
  72. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/expressions/builders.py +0 -0
  73. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/expressions/constraints.py +0 -0
  74. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/expressions/core.py +0 -0
  75. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/expressions/datatypes.py +0 -0
  76. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/expressions/ddl.py +0 -0
  77. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/expressions/dml.py +0 -0
  78. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/expressions/functions.py +0 -0
  79. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/expressions/json.py +0 -0
  80. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/expressions/math.py +0 -0
  81. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/expressions/properties.py +0 -0
  82. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/expressions/query.py +0 -0
  83. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/expressions/string.py +0 -0
  84. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/expressions/temporal.py +0 -0
  85. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generator.py +0 -0
  86. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/__init__.py +0 -0
  87. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/athena.py +0 -0
  88. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/bigquery.py +0 -0
  89. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/clickhouse.py +0 -0
  90. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/databricks.py +0 -0
  91. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/doris.py +0 -0
  92. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/dremio.py +0 -0
  93. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/drill.py +0 -0
  94. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/druid.py +0 -0
  95. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/duckdb.py +0 -0
  96. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/dune.py +0 -0
  97. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/exasol.py +0 -0
  98. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/fabric.py +0 -0
  99. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/hive.py +0 -0
  100. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/materialize.py +0 -0
  101. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/mysql.py +0 -0
  102. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/oracle.py +0 -0
  103. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/postgres.py +0 -0
  104. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/presto.py +0 -0
  105. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/prql.py +0 -0
  106. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/redshift.py +0 -0
  107. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/risingwave.py +0 -0
  108. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/singlestore.py +0 -0
  109. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/snowflake.py +0 -0
  110. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/solr.py +0 -0
  111. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/spark.py +0 -0
  112. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/spark2.py +0 -0
  113. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/sqlite.py +0 -0
  114. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/starrocks.py +0 -0
  115. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/tableau.py +0 -0
  116. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/teradata.py +0 -0
  117. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/trino.py +0 -0
  118. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/generators/tsql.py +0 -0
  119. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/helper.py +0 -0
  120. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/jsonpath.py +0 -0
  121. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/lineage.py +0 -0
  122. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/optimizer/__init__.py +0 -0
  123. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/optimizer/annotate_types.py +0 -0
  124. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/optimizer/canonicalize.py +0 -0
  125. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/optimizer/eliminate_ctes.py +0 -0
  126. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/optimizer/eliminate_joins.py +0 -0
  127. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/optimizer/eliminate_subqueries.py +0 -0
  128. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/optimizer/isolate_table_selects.py +0 -0
  129. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/optimizer/merge_subqueries.py +0 -0
  130. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/optimizer/normalize.py +0 -0
  131. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/optimizer/normalize_identifiers.py +0 -0
  132. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/optimizer/optimize_joins.py +0 -0
  133. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/optimizer/optimizer.py +0 -0
  134. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/optimizer/pushdown_predicates.py +0 -0
  135. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/optimizer/pushdown_projections.py +0 -0
  136. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/optimizer/qualify.py +0 -0
  137. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/optimizer/qualify_columns.py +0 -0
  138. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/optimizer/qualify_tables.py +0 -0
  139. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/optimizer/resolver.py +0 -0
  140. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/optimizer/scope.py +0 -0
  141. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/optimizer/simplify.py +0 -0
  142. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/optimizer/unnest_subqueries.py +0 -0
  143. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/__init__.py +0 -0
  144. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/athena.py +0 -0
  145. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/base.py +0 -0
  146. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/bigquery.py +0 -0
  147. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/clickhouse.py +0 -0
  148. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/databricks.py +0 -0
  149. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/doris.py +0 -0
  150. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/dremio.py +0 -0
  151. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/drill.py +0 -0
  152. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/druid.py +0 -0
  153. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/duckdb.py +0 -0
  154. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/dune.py +0 -0
  155. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/exasol.py +0 -0
  156. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/fabric.py +0 -0
  157. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/hive.py +0 -0
  158. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/materialize.py +0 -0
  159. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/mysql.py +0 -0
  160. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/oracle.py +0 -0
  161. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/postgres.py +0 -0
  162. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/presto.py +0 -0
  163. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/prql.py +0 -0
  164. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/redshift.py +0 -0
  165. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/risingwave.py +0 -0
  166. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/singlestore.py +0 -0
  167. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/snowflake.py +0 -0
  168. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/solr.py +0 -0
  169. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/spark.py +0 -0
  170. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/spark2.py +0 -0
  171. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/sqlite.py +0 -0
  172. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/starrocks.py +0 -0
  173. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/tableau.py +0 -0
  174. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/teradata.py +0 -0
  175. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/trino.py +0 -0
  176. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/parsers/tsql.py +0 -0
  177. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/planner.py +0 -0
  178. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/py.typed +0 -0
  179. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/schema.py +0 -0
  180. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/serde.py +0 -0
  181. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/time.py +0 -0
  182. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/tokenizer_core.py +0 -0
  183. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/tokens.py +0 -0
  184. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/transforms.py +0 -0
  185. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/trie.py +0 -0
  186. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/typing/__init__.py +0 -0
  187. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/typing/bigquery.py +0 -0
  188. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/typing/clickhouse.py +0 -0
  189. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/typing/duckdb.py +0 -0
  190. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/typing/hive.py +0 -0
  191. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/typing/mysql.py +0 -0
  192. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/typing/presto.py +0 -0
  193. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/typing/redshift.py +0 -0
  194. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/typing/snowflake.py +0 -0
  195. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/typing/spark.py +0 -0
  196. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/typing/spark2.py +0 -0
  197. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot/typing/tsql.py +0 -0
  198. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot.egg-info/dependency_links.txt +0 -0
  199. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot.egg-info/top_level.txt +0 -0
  200. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglot.png +0 -0
  201. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglotc/MANIFEST.in +0 -0
  202. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglotc/pyproject.toml +0 -0
  203. {sqlglot-30.5.0 → sqlglot-30.6.0}/sqlglotc/setup.py +0 -0
  204. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/__init__.py +0 -0
  205. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/__init__.py +0 -0
  206. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_athena.py +0 -0
  207. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_bigquery.py +0 -0
  208. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_clickhouse.py +0 -0
  209. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_databricks.py +0 -0
  210. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_dialect.py +0 -0
  211. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_doris.py +0 -0
  212. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_dremio.py +0 -0
  213. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_drill.py +0 -0
  214. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_druid.py +0 -0
  215. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_duckdb.py +0 -0
  216. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_dune.py +0 -0
  217. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_exasol.py +0 -0
  218. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_fabric.py +0 -0
  219. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_hive.py +0 -0
  220. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_materialize.py +0 -0
  221. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_mysql.py +0 -0
  222. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_oracle.py +0 -0
  223. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_pipe_syntax.py +0 -0
  224. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_presto.py +0 -0
  225. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_prql.py +0 -0
  226. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_redshift.py +0 -0
  227. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_risingwave.py +0 -0
  228. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_singlestore.py +0 -0
  229. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_snowflake.py +0 -0
  230. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_solr.py +0 -0
  231. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_spark.py +0 -0
  232. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_sqlite.py +0 -0
  233. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_starrocks.py +0 -0
  234. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_tableau.py +0 -0
  235. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_teradata.py +0 -0
  236. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_trino.py +0 -0
  237. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/dialects/test_tsql.py +0 -0
  238. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/identity.sql +0 -0
  239. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/jsonpath/LICENSE +0 -0
  240. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/jsonpath/cts.json +0 -0
  241. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/annotate_functions.sql +0 -0
  242. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/annotate_types.sql +0 -0
  243. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/canonicalize.sql +0 -0
  244. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/eliminate_ctes.sql +0 -0
  245. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/eliminate_joins.sql +0 -0
  246. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/eliminate_subqueries.sql +0 -0
  247. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/isolate_table_selects.sql +0 -0
  248. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/merge_subqueries.sql +0 -0
  249. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/normalize.sql +0 -0
  250. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/normalize_identifiers.sql +0 -0
  251. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/optimize_joins.sql +0 -0
  252. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/optimizer.sql +0 -0
  253. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/pushdown_cte_alias_columns.sql +0 -0
  254. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/pushdown_predicates.sql +0 -0
  255. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/pushdown_projections.sql +0 -0
  256. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/qualify_columns.sql +0 -0
  257. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/qualify_columns__invalid.sql +0 -0
  258. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/qualify_columns__with_invisible.sql +0 -0
  259. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/qualify_columns_ddl.sql +0 -0
  260. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/qualify_tables.sql +0 -0
  261. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/quote_identifiers.sql +0 -0
  262. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/simplify.sql +0 -0
  263. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-ds/call_center.csv.gz +0 -0
  264. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-ds/catalog_page.csv.gz +0 -0
  265. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-ds/catalog_returns.csv.gz +0 -0
  266. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-ds/catalog_sales.csv.gz +0 -0
  267. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-ds/customer.csv.gz +0 -0
  268. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-ds/customer_address.csv.gz +0 -0
  269. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-ds/customer_demographics.csv.gz +0 -0
  270. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-ds/date_dim.csv.gz +0 -0
  271. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-ds/household_demographics.csv.gz +0 -0
  272. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-ds/income_band.csv.gz +0 -0
  273. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-ds/inventory.csv.gz +0 -0
  274. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-ds/item.csv.gz +0 -0
  275. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-ds/promotion.csv.gz +0 -0
  276. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-ds/reason.csv.gz +0 -0
  277. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-ds/ship_mode.csv.gz +0 -0
  278. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-ds/store.csv.gz +0 -0
  279. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-ds/store_returns.csv.gz +0 -0
  280. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-ds/store_sales.csv.gz +0 -0
  281. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-ds/time_dim.csv.gz +0 -0
  282. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-ds/tpc-ds.sql +0 -0
  283. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-ds/warehouse.csv.gz +0 -0
  284. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-ds/web_page.csv.gz +0 -0
  285. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-ds/web_returns.csv.gz +0 -0
  286. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-ds/web_sales.csv.gz +0 -0
  287. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-ds/web_site.csv.gz +0 -0
  288. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-h/customer.csv.gz +0 -0
  289. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-h/lineitem.csv.gz +0 -0
  290. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-h/nation.csv.gz +0 -0
  291. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-h/orders.csv.gz +0 -0
  292. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-h/part.csv.gz +0 -0
  293. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-h/partsupp.csv.gz +0 -0
  294. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-h/region.csv.gz +0 -0
  295. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-h/supplier.csv.gz +0 -0
  296. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/tpc-h/tpc-h.sql +0 -0
  297. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/optimizer/unnest_subqueries.sql +0 -0
  298. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/partial.sql +0 -0
  299. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/fixtures/pretty.sql +0 -0
  300. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/gen_fixtures.py +0 -0
  301. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/helpers.py +0 -0
  302. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/sqlglot/__init__.py +0 -0
  303. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/test_build.py +0 -0
  304. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/test_dialect_entry_points.py +0 -0
  305. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/test_dialect_imports.py +0 -0
  306. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/test_diff.py +0 -0
  307. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/test_docs.py +0 -0
  308. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/test_errors.py +0 -0
  309. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/test_expressions.py +0 -0
  310. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/test_generator.py +0 -0
  311. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/test_helper.py +0 -0
  312. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/test_integration_loader.py +0 -0
  313. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/test_jsonpath.py +0 -0
  314. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/test_lineage.py +0 -0
  315. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/test_optimizer.py +0 -0
  316. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/test_parser.py +0 -0
  317. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/test_schema.py +0 -0
  318. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/test_serde.py +0 -0
  319. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/test_time.py +0 -0
  320. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/test_tokens.py +0 -0
  321. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/test_transforms.py +0 -0
  322. {sqlglot-30.5.0 → sqlglot-30.6.0}/tests/test_transpile.py +0 -0
@@ -1,6 +1,82 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ ## [v30.5.0] - 2026-04-20
5
+ ### :boom: BREAKING CHANGES
6
+ - due to [`98ca4cd`](https://github.com/tobymao/sqlglot/commit/98ca4cdd60124c0e566d1de40855b30a169219fd) - transpile TRY_DIVIDE to/from other dialects [CLAUDE] *(PR [#7489](https://github.com/tobymao/sqlglot/pull/7489) by [@baruchoxman](https://github.com/baruchoxman))*:
7
+
8
+ transpile TRY_DIVIDE to/from other dialects [CLAUDE] (#7489)
9
+
10
+ - due to [`ec516f2`](https://github.com/tobymao/sqlglot/commit/ec516f27213286c7b46731ea0fa72972b1b2f68a) - add typed AI scalar function nodes *(PR [#7479](https://github.com/tobymao/sqlglot/pull/7479) by [@RedZapdos123](https://github.com/RedZapdos123))*:
11
+
12
+ add typed AI scalar function nodes (#7479)
13
+
14
+ - due to [`800ca41`](https://github.com/tobymao/sqlglot/commit/800ca4105583e74cf18fed737bd90f24f55de428) - support LOAD DATA FROM FILES syntax *(PR [#7482](https://github.com/tobymao/sqlglot/pull/7482) by [@RedZapdos123](https://github.com/RedZapdos123))*:
15
+
16
+ support LOAD DATA FROM FILES syntax (#7482)
17
+
18
+ - due to [`efbc5e2`](https://github.com/tobymao/sqlglot/commit/efbc5e220c54c838e6684683fddb77f8056692bf) - add missing TO_CHAR format tokens (Mon, Month, Day, Dy, AM/PM, HH) *(PR [#7477](https://github.com/tobymao/sqlglot/pull/7477) by [@mwade0118](https://github.com/mwade0118))*:
19
+
20
+ add missing TO_CHAR format tokens (Mon, Month, Day, Dy, AM/PM, HH) (#7477)
21
+
22
+ - due to [`d289db3`](https://github.com/tobymao/sqlglot/commit/d289db33be43b99096ee9ec8e1c6d695b1d2a4a5) - stop eliminating semi/anti joins, QUALIFY, and FULL OUTER JOIN [CLAUDE] *(PR [#7524](https://github.com/tobymao/sqlglot/pull/7524) by [@dwoldemariam-klav](https://github.com/dwoldemariam-klav))*:
23
+
24
+ stop eliminating semi/anti joins, QUALIFY, and FULL OUTER JOIN [CLAUDE] (#7524)
25
+
26
+
27
+ ### :sparkles: New Features
28
+ - [`c80c3fd`](https://github.com/tobymao/sqlglot/commit/c80c3fd5c7f74aec28a3377583018b5aa03ec838) - **duckdb**: warn when transpiling snowflake's `ENCRYPT` *(PR [#7472](https://github.com/tobymao/sqlglot/pull/7472) by [@fivetran-ashashankar](https://github.com/fivetran-ashashankar))*
29
+ - [`e150296`](https://github.com/tobymao/sqlglot/commit/e15029667b3672d0b0f83fa035da6bd01dda6f3d) - **duckdb**: warn when generating Snowflake's `[TRY_]DECRYPT_RAW` *(PR [#7475](https://github.com/tobymao/sqlglot/pull/7475) by [@fivetran-ashashankar](https://github.com/fivetran-ashashankar))*
30
+ - [`4ac6389`](https://github.com/tobymao/sqlglot/commit/4ac6389cf9ddde2236e76571453117d681995ecf) - **snowflake**: mark ENCRYPT_RAW as unsupported in DuckDB *(PR [#7485](https://github.com/tobymao/sqlglot/pull/7485) by [@fivetran-ashashankar](https://github.com/fivetran-ashashankar))*
31
+ - [`ec516f2`](https://github.com/tobymao/sqlglot/commit/ec516f27213286c7b46731ea0fa72972b1b2f68a) - **bigquery**: add typed AI scalar function nodes *(PR [#7479](https://github.com/tobymao/sqlglot/pull/7479) by [@RedZapdos123](https://github.com/RedZapdos123))*
32
+ - :arrow_lower_right: *addresses issue [#7478](https://github.com/tobymao/sqlglot/issues/7478) opened by [@RedZapdos123](https://github.com/RedZapdos123)*
33
+ - [`a7ae102`](https://github.com/tobymao/sqlglot/commit/a7ae102520b5c2632314481d5ef040b3fa129d49) - **duckdb**: mark PARSE_URL as unsupported *(PR [#7499](https://github.com/tobymao/sqlglot/pull/7499) by [@fivetran-ashashankar](https://github.com/fivetran-ashashankar))*
34
+ - [`045f30e`](https://github.com/tobymao/sqlglot/commit/045f30e6ff8026de4a0a2acbdf8aef604c27a60a) - **duckdb**: mark PARSE_IP as unsupported [CLAUDE] *(PR [#7500](https://github.com/tobymao/sqlglot/pull/7500) by [@fivetran-ashashankar](https://github.com/fivetran-ashashankar))*
35
+ - [`70dec2e`](https://github.com/tobymao/sqlglot/commit/70dec2ec7e6708406c815fab4436db540efe30fd) - **duckdb**: Add transpilation support for INSERT function *(PR [#7486](https://github.com/tobymao/sqlglot/pull/7486) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
36
+ - [`fb7d5b2`](https://github.com/tobymao/sqlglot/commit/fb7d5b2458cd65149475e42271ed22055ad1579f) - **oracle**: Support WHERE on MERGE statement *(PR [#7492](https://github.com/tobymao/sqlglot/pull/7492) by [@galunto](https://github.com/galunto))*
37
+ - [`ed58b9b`](https://github.com/tobymao/sqlglot/commit/ed58b9bd942282e1c9b81af5b11e952211d4fe78) - **clickhouse**: support groupConcat parametric syntax *(PR [#7487](https://github.com/tobymao/sqlglot/pull/7487) by [@betodealmeida](https://github.com/betodealmeida))*
38
+ - [`73c1983`](https://github.com/tobymao/sqlglot/commit/73c198380e083d28ac9f0f42cf74f6280e9052db) - **parser**: introduce flag to control AST size *(PR [#7502](https://github.com/tobymao/sqlglot/pull/7502) by [@georgesittas](https://github.com/georgesittas))*
39
+ - [`b985092`](https://github.com/tobymao/sqlglot/commit/b985092f817fb93670355c166839dc2617b47777) - **duckdb**: Add transpilation support for SUBSTR-SUBSTRING functions *(PR [#7471](https://github.com/tobymao/sqlglot/pull/7471) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
40
+ - [`1a55f07`](https://github.com/tobymao/sqlglot/commit/1a55f07cc0b27c3826659c1ba7f7873863d22502) - **duckdb**: transpile snowflake's JAROWINKLER_SIMILARITY properly *(PR [#7501](https://github.com/tobymao/sqlglot/pull/7501) by [@fivetran-ashashankar](https://github.com/fivetran-ashashankar))*
41
+ - [`5fb1f7c`](https://github.com/tobymao/sqlglot/commit/5fb1f7c3d70d00b1e864a3bc2a1db271e72f8bc4) - **duckdb**: Mark ARRAY_UNION_AGG as unsupported [CLAUDE] *(PR [#7503](https://github.com/tobymao/sqlglot/pull/7503) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
42
+ - [`d0407ed`](https://github.com/tobymao/sqlglot/commit/d0407edee90cdf75e11bb5ca3064975c0bbfe08b) - **duckdb**: support dollars in identifiers closes [#7509](https://github.com/tobymao/sqlglot/pull/7509) *(commit by [@georgesittas](https://github.com/georgesittas))*
43
+ - [`6678ee0`](https://github.com/tobymao/sqlglot/commit/6678ee028d0de97d6cce222302da29477bd3d72b) - **mysql**: Add `INVISIBLE` column constraint for MySQL. *(PR [#7510](https://github.com/tobymao/sqlglot/pull/7510) by [@burnison](https://github.com/burnison))*
44
+ - [`cb91d91`](https://github.com/tobymao/sqlglot/commit/cb91d9142a76234630b4e9dfbccf1fdb8076c830) - **mysql**: support `ALTER TABLE ... RENAME INDEX`. *(PR [#7511](https://github.com/tobymao/sqlglot/pull/7511) by [@burnison](https://github.com/burnison))*
45
+ - [`7660486`](https://github.com/tobymao/sqlglot/commit/7660486c4cc6a679e73d2a45498982d8895b64c0) - **doris, starrocks**: support two-argument DATE_ADD/DATE_SUB *(PR [#7514](https://github.com/tobymao/sqlglot/pull/7514) by [@wuqicyber](https://github.com/wuqicyber))*
46
+ - :arrow_lower_right: *addresses issue [#6341](https://github.com/tobymao/sqlglot/issues/6341) opened by [@HolgerWang1999](https://github.com/HolgerWang1999)*
47
+ - [`e2d6bfe`](https://github.com/tobymao/sqlglot/commit/e2d6bfeeae76846c24dc10a4f758585c828e2928) - **mysql**: parse `ALTER TABLE AUTO_INCREMENT`. *(PR [#7520](https://github.com/tobymao/sqlglot/pull/7520) by [@burnison](https://github.com/burnison))*
48
+ - [`0cd09c2`](https://github.com/tobymao/sqlglot/commit/0cd09c25d14aef5a1c8d9c197bf4b38ad7875e5d) - **mysql**: parse hints on `UPDATE` and `DELETE`. *(PR [#7523](https://github.com/tobymao/sqlglot/pull/7523) by [@burnison](https://github.com/burnison))*
49
+ - [`ceb14fa`](https://github.com/tobymao/sqlglot/commit/ceb14fad0b3e2be7e66523076a78b172d99eb306) - **duckdb**: Add transpilation unsupported for SOUNDEX function *(PR [#7517](https://github.com/tobymao/sqlglot/pull/7517) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
50
+ - [`d289db3`](https://github.com/tobymao/sqlglot/commit/d289db33be43b99096ee9ec8e1c6d695b1d2a4a5) - **starrocks**: stop eliminating semi/anti joins, QUALIFY, and FULL OUTER JOIN [CLAUDE] *(PR [#7524](https://github.com/tobymao/sqlglot/pull/7524) by [@dwoldemariam-klav](https://github.com/dwoldemariam-klav))*
51
+
52
+ ### :bug: Bug Fixes
53
+ - [`ecd325b`](https://github.com/tobymao/sqlglot/commit/ecd325b4e3e09acfca4273661dffa4aba3302ad4) - **databricks**: support IFF as a synonym for IF [CLAUDE] *(PR [#7488](https://github.com/tobymao/sqlglot/pull/7488) by [@baruchoxman](https://github.com/baruchoxman))*
54
+ - :arrow_lower_right: *fixes issue [#7347](https://github.com/tobymao/sqlglot/issues/7347) opened by [@baruchoxman](https://github.com/baruchoxman)*
55
+ - [`e3cd4a4`](https://github.com/tobymao/sqlglot/commit/e3cd4a4c175525948e319adede3a743f0128701d) - **bigquery**: parse FOR SYSTEM TIME AS OF (with spaces) *(PR [#7493](https://github.com/tobymao/sqlglot/pull/7493) by [@lawrence3699](https://github.com/lawrence3699))*
56
+ - :arrow_lower_right: *fixes issue [#7481](https://github.com/tobymao/sqlglot/issues/7481) opened by [@roykoand](https://github.com/roykoand)*
57
+ - [`c16630f`](https://github.com/tobymao/sqlglot/commit/c16630f61dfa738ac70079a275426549dfa547d6) - **snowflake**: map JSON type to VARIANT in Snowflake generator [CLAUDE] *(PR [#7496](https://github.com/tobymao/sqlglot/pull/7496) by [@maxa-jonathan-hallee](https://github.com/maxa-jonathan-hallee))*
58
+ - [`98ca4cd`](https://github.com/tobymao/sqlglot/commit/98ca4cdd60124c0e566d1de40855b30a169219fd) - **databricks**: transpile TRY_DIVIDE to/from other dialects [CLAUDE] *(PR [#7489](https://github.com/tobymao/sqlglot/pull/7489) by [@baruchoxman](https://github.com/baruchoxman))*
59
+ - :arrow_lower_right: *fixes issue [#7312](https://github.com/tobymao/sqlglot/issues/7312) opened by [@baruchoxman](https://github.com/baruchoxman)*
60
+ - [`800ca41`](https://github.com/tobymao/sqlglot/commit/800ca4105583e74cf18fed737bd90f24f55de428) - **bigquery**: support LOAD DATA FROM FILES syntax *(PR [#7482](https://github.com/tobymao/sqlglot/pull/7482) by [@RedZapdos123](https://github.com/RedZapdos123))*
61
+ - :arrow_lower_right: *fixes issue [#7480](https://github.com/tobymao/sqlglot/issues/7480) opened by [@roykoand](https://github.com/roykoand)*
62
+ - [`efbc5e2`](https://github.com/tobymao/sqlglot/commit/efbc5e220c54c838e6684683fddb77f8056692bf) - **postgres**: add missing TO_CHAR format tokens (Mon, Month, Day, Dy, AM/PM, HH) *(PR [#7477](https://github.com/tobymao/sqlglot/pull/7477) by [@mwade0118](https://github.com/mwade0118))*
63
+ - :arrow_lower_right: *fixes issue [#7476](https://github.com/tobymao/sqlglot/issues/7476) opened by [@mwade0118](https://github.com/mwade0118)*
64
+ - [`0b46b39`](https://github.com/tobymao/sqlglot/commit/0b46b39639d149ff57b4b9dc0000732f9096468d) - **snowflake**: transpile REDUCE to DuckDB LIST_REDUCE *(PR [#7505](https://github.com/tobymao/sqlglot/pull/7505) by [@fivetran-ashashankar](https://github.com/fivetran-ashashankar))*
65
+ - [`35c6d37`](https://github.com/tobymao/sqlglot/commit/35c6d37c5a32fa7dd95b998c5e06688e1bffb7ea) - **duckdb**: wrap OCTET_LENGTH string arguments with ENCODE *(PR [#7507](https://github.com/tobymao/sqlglot/pull/7507) by [@fivetran-ashashankar](https://github.com/fivetran-ashashankar))*
66
+ - [`930ff33`](https://github.com/tobymao/sqlglot/commit/930ff330616f72966bb67231bfb26301022814c3) - **snowflake**: transpile DuckDB JSON_ARRAY to ARRAY_CONSTRUCT [CLAUDE] *(PR [#7497](https://github.com/tobymao/sqlglot/pull/7497) by [@maxa-jonathan-hallee](https://github.com/maxa-jonathan-hallee))*
67
+ - [`998b42b`](https://github.com/tobymao/sqlglot/commit/998b42b4edd650dd272284d511a724be27e1b89e) - **exasol**: enable minus *(PR [#7521](https://github.com/tobymao/sqlglot/pull/7521) by [@Hfuegl](https://github.com/Hfuegl))*
68
+ - [`18231ca`](https://github.com/tobymao/sqlglot/commit/18231cad0a187e2646e550b27af68b72eef2cd84) - **mysql**: parse quoted constraint names. *(PR [#7519](https://github.com/tobymao/sqlglot/pull/7519) by [@burnison](https://github.com/burnison))*
69
+ - [`6da9653`](https://github.com/tobymao/sqlglot/commit/6da9653d5f25f9d44ad002b9d072b0d8fd39bcc1) - **optimizer**: support bigquery type inference for unnest + array + struct *(PR [#7525](https://github.com/tobymao/sqlglot/pull/7525) by [@geooo109](https://github.com/geooo109))*
70
+
71
+ ### :white_check_mark: Tests
72
+ - [`ad2c98d`](https://github.com/tobymao/sqlglot/commit/ad2c98d771a9818a521e15e26dbea3833ed0295a) - **databricks**: add explicit tests for SET VAR / SET VARIABLE [CLAUDE] *(PR [#7490](https://github.com/tobymao/sqlglot/pull/7490) by [@baruchoxman](https://github.com/baruchoxman))*
73
+ - :arrow_lower_right: *addresses issue [#7358](https://github.com/tobymao/sqlglot/issues/7358) opened by [@baruchoxman](https://github.com/baruchoxman)*
74
+
75
+ ### :wrench: Chores
76
+ - [`224e64d`](https://github.com/tobymao/sqlglot/commit/224e64dad3b0dcfc753b9bca78cff326080edbd0) - style for dbx tests *(commit by [@geooo109](https://github.com/geooo109))*
77
+ - [`c1f929f`](https://github.com/tobymao/sqlglot/commit/c1f929fa6cf775bf778a0b832f6df8860bfe62b7) - Fix PR 7510 *(PR [#7513](https://github.com/tobymao/sqlglot/pull/7513) by [@VaggelisD](https://github.com/VaggelisD))*
78
+
79
+
4
80
  ## [v30.4.3] - 2026-04-13
5
81
  ### :bug: Bug Fixes
6
82
  - [`713e95f`](https://github.com/tobymao/sqlglot/commit/713e95fb9bca5fa6ac0aa660f599a4be632872e2) - **snowflake**: parse GET_DDL #unknown_policy in ROW ACCESS POLICY [CLAUDE] *(PR [#7491](https://github.com/tobymao/sqlglot/pull/7491) by [@eakmanrq](https://github.com/eakmanrq))*
@@ -14149,3 +14225,4 @@ pip install "sqlglot[c]" # compiled — faster, but no subclassing
14149
14225
  [v30.4.0]: https://github.com/tobymao/sqlglot/compare/v30.3.0...v30.4.0
14150
14226
  [v30.4.2]: https://github.com/tobymao/sqlglot/compare/v30.4.1...v30.4.2
14151
14227
  [v30.4.3]: https://github.com/tobymao/sqlglot/compare/v30.4.2...v30.4.3
14228
+ [v30.5.0]: https://github.com/tobymao/sqlglot/compare/v30.4.3...v30.5.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlglot
3
- Version: 30.5.0
3
+ Version: 30.6.0
4
4
  Summary: An easily customizable SQL parser and transpiler
5
5
  Author-email: Toby Mao <toby.mao@gmail.com>
6
6
  License-Expression: MIT
@@ -33,10 +33,10 @@ Requires-Dist: types-pytz; extra == "dev"
33
33
  Requires-Dist: typing_extensions; extra == "dev"
34
34
  Requires-Dist: pyperf; extra == "dev"
35
35
  Provides-Extra: c
36
- Requires-Dist: sqlglotc==30.5.0; extra == "c"
36
+ Requires-Dist: sqlglotc==30.6.0; extra == "c"
37
37
  Provides-Extra: rs
38
38
  Requires-Dist: sqlglotrs==0.13.0; extra == "rs"
39
- Requires-Dist: sqlglotc==30.5.0; extra == "rs"
39
+ Requires-Dist: sqlglotc==30.6.0; extra == "rs"
40
40
  Dynamic: license-file
41
41
  Dynamic: provides-extra
42
42
 
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '30.5.0'
22
- __version_tuple__ = version_tuple = (30, 5, 0)
21
+ __version__ = version = '30.6.0'
22
+ __version_tuple__ = version_tuple = (30, 6, 0)
23
23
 
24
- __commit_id__ = commit_id = 'g64d385f36'
24
+ __commit_id__ = commit_id = 'gdcf9ed583'
@@ -2,13 +2,13 @@ import collections
2
2
  import itertools
3
3
  import math
4
4
 
5
- from sqlglot import exp, generator, planner, tokens
6
- from sqlglot.dialects.dialect import Dialect, inline_array_sql
5
+ from sqlglot import exp, planner, tokens
6
+ from sqlglot.dialects.dialect import Dialect
7
7
  from sqlglot.errors import ExecuteError
8
8
  from sqlglot.executor.context import Context
9
9
  from sqlglot.executor.env import ENV
10
10
  from sqlglot.executor.table import RowReader, Table
11
- from sqlglot.helper import subclasses
11
+ from sqlglot.generators.python import PythonGenerator
12
12
 
13
13
 
14
14
  class PythonExecutor:
@@ -324,112 +324,8 @@ class PythonExecutor:
324
324
  return self.context({step.name: sink})
325
325
 
326
326
 
327
- def _ordered_py(self, expression):
328
- this = self.sql(expression, "this")
329
- desc = "True" if expression.args.get("desc") else "False"
330
- nulls_first = "True" if expression.args.get("nulls_first") else "False"
331
- return f"ORDERED({this}, {desc}, {nulls_first})"
332
-
333
-
334
- def _rename(self, e):
335
- try:
336
- values = list(e.args.values())
337
-
338
- if len(values) == 1:
339
- values = values[0]
340
- if not isinstance(values, list):
341
- return self.func(e.key, values)
342
- return self.func(e.key, *values)
343
-
344
- if isinstance(e, exp.Func) and e.is_var_len_args:
345
- args = itertools.chain.from_iterable(x if isinstance(x, list) else [x] for x in values)
346
- return self.func(e.key, *args)
347
-
348
- return self.func(e.key, *values)
349
- except Exception as ex:
350
- raise Exception(f"Could not rename {repr(e)}") from ex
351
-
352
-
353
- def _case_sql(self, expression):
354
- this = self.sql(expression, "this")
355
- chain = self.sql(expression, "default") or "None"
356
-
357
- for e in reversed(expression.args["ifs"]):
358
- true = self.sql(e, "true")
359
- condition = self.sql(e, "this")
360
- condition = f"{this} = ({condition})" if this else condition
361
- chain = f"{true} if {condition} else ({chain})"
362
-
363
- return chain
364
-
365
-
366
- def _lambda_sql(self, e: exp.Lambda) -> str:
367
- names = {e.name.lower() for e in e.expressions}
368
-
369
- e = e.transform(
370
- lambda n: (
371
- exp.var(n.name) if isinstance(n, exp.Identifier) and n.name.lower() in names else n
372
- )
373
- ).assert_is(exp.Lambda)
374
-
375
- return f"lambda {self.expressions(e, flat=True)}: {self.sql(e, 'this')}"
376
-
377
-
378
- def _div_sql(self: generator.Generator, e: exp.Div) -> str:
379
- denominator = self.sql(e, "expression")
380
-
381
- if e.args.get("safe"):
382
- denominator += " or None"
383
-
384
- sql = f"DIV({self.sql(e, 'this')}, {denominator})"
385
-
386
- if e.args.get("typed"):
387
- sql = f"int({sql})"
388
-
389
- return sql
390
-
391
-
392
327
  class Python(Dialect):
393
328
  class Tokenizer(tokens.Tokenizer):
394
329
  STRING_ESCAPES = ["\\"]
395
330
 
396
- class Generator(generator.Generator):
397
- TRANSFORMS = {
398
- **{klass: _rename for klass in subclasses(exp.__name__, exp.Binary)},
399
- **{klass: _rename for klass in exp.ALL_FUNCTIONS},
400
- exp.Case: _case_sql,
401
- exp.Alias: lambda self, e: self.sql(e.this),
402
- exp.Array: inline_array_sql,
403
- exp.And: lambda self, e: self.binary(e, "and"),
404
- exp.Between: _rename,
405
- exp.Boolean: lambda self, e: "True" if e.this else "False",
406
- exp.Cast: lambda self, e: f"CAST({self.sql(e.this)}, exp.DType.{e.args['to']})",
407
- exp.Column: lambda self, e: (
408
- f"scope[{self.sql(e, 'table') or None}][{self.sql(e.this)}]"
409
- ),
410
- exp.Concat: lambda self, e: self.func(
411
- "SAFECONCAT" if e.args.get("safe") else "CONCAT", *e.expressions
412
- ),
413
- exp.Distinct: lambda self, e: f"set({self.sql(e, 'this')})",
414
- exp.Div: _div_sql,
415
- exp.Extract: lambda self, e: (
416
- f"EXTRACT('{e.name.lower()}', {self.sql(e, 'expression')})"
417
- ),
418
- exp.In: lambda self, e: (
419
- f"{self.sql(e, 'this')} in {{{self.expressions(e, flat=True)}}}"
420
- ),
421
- exp.Interval: lambda self, e: f"INTERVAL({self.sql(e.this)}, '{self.sql(e.unit)}')",
422
- exp.Is: lambda self, e: (
423
- self.binary(e, "==") if isinstance(e.this, exp.Literal) else self.binary(e, "is")
424
- ),
425
- exp.JSONExtract: lambda self, e: self.func(e.key, e.this, e.expression, *e.expressions),
426
- exp.JSONPath: lambda self, e: f"[{','.join(self.sql(p) for p in e.expressions[1:])}]",
427
- exp.JSONPathKey: lambda self, e: f"'{self.sql(e.this)}'",
428
- exp.JSONPathSubscript: lambda self, e: f"'{e.this}'",
429
- exp.Lambda: _lambda_sql,
430
- exp.Not: lambda self, e: f"not {self.sql(e.this)}",
431
- exp.Null: lambda *_: "None",
432
- exp.Or: lambda self, e: self.binary(e, "or"),
433
- exp.Ordered: _ordered_py,
434
- exp.Star: lambda *_: "1",
435
- }
331
+ Generator = PythonGenerator
@@ -0,0 +1,108 @@
1
+ from __future__ import annotations
2
+
3
+ import itertools
4
+
5
+ from sqlglot import exp, generator
6
+ from sqlglot.dialects.dialect import inline_array_sql
7
+ from sqlglot.helper import subclasses
8
+
9
+
10
+ def _ordered_py(self, expression):
11
+ this = self.sql(expression, "this")
12
+ desc = "True" if expression.args.get("desc") else "False"
13
+ nulls_first = "True" if expression.args.get("nulls_first") else "False"
14
+ return f"ORDERED({this}, {desc}, {nulls_first})"
15
+
16
+
17
+ def _rename(self, e):
18
+ try:
19
+ values = list(e.args.values())
20
+
21
+ if len(values) == 1:
22
+ values = values[0]
23
+ if not isinstance(values, list):
24
+ return self.func(e.key, values)
25
+ return self.func(e.key, *values)
26
+
27
+ if isinstance(e, exp.Func) and e.is_var_len_args:
28
+ args = itertools.chain.from_iterable(x if isinstance(x, list) else [x] for x in values)
29
+ return self.func(e.key, *args)
30
+
31
+ return self.func(e.key, *values)
32
+ except Exception as ex:
33
+ raise Exception(f"Could not rename {repr(e)}") from ex
34
+
35
+
36
+ def _case_sql(self, expression):
37
+ this = self.sql(expression, "this")
38
+ chain = self.sql(expression, "default") or "None"
39
+
40
+ for e in reversed(expression.args["ifs"]):
41
+ true = self.sql(e, "true")
42
+ condition = self.sql(e, "this")
43
+ condition = f"{this} = ({condition})" if this else condition
44
+ chain = f"{true} if {condition} else ({chain})"
45
+
46
+ return chain
47
+
48
+
49
+ def _lambda_sql(self, e: exp.Lambda) -> str:
50
+ names = {e.name.lower() for e in e.expressions}
51
+
52
+ e = e.transform(
53
+ lambda n: (
54
+ exp.var(n.name) if isinstance(n, exp.Identifier) and n.name.lower() in names else n
55
+ )
56
+ ).assert_is(exp.Lambda)
57
+
58
+ return f"lambda {self.expressions(e, flat=True)}: {self.sql(e, 'this')}"
59
+
60
+
61
+ def _div_sql(self: generator.Generator, e: exp.Div) -> str:
62
+ denominator = self.sql(e, "expression")
63
+
64
+ if e.args.get("safe"):
65
+ denominator += " or None"
66
+
67
+ sql = f"DIV({self.sql(e, 'this')}, {denominator})"
68
+
69
+ if e.args.get("typed"):
70
+ sql = f"int({sql})"
71
+
72
+ return sql
73
+
74
+
75
+ class PythonGenerator(generator.Generator):
76
+ TRANSFORMS = {
77
+ **{klass: _rename for klass in subclasses(exp.__name__, exp.Binary)},
78
+ **{klass: _rename for klass in exp.ALL_FUNCTIONS},
79
+ exp.Case: _case_sql,
80
+ exp.Alias: lambda self, e: self.sql(e.this),
81
+ exp.Array: inline_array_sql,
82
+ exp.And: lambda self, e: self.binary(e, "and"),
83
+ exp.Between: _rename,
84
+ exp.Boolean: lambda self, e: "True" if e.this else "False",
85
+ exp.Cast: lambda self, e: f"CAST({self.sql(e.this)}, exp.DType.{e.args['to']})",
86
+ exp.Column: lambda self, e: f"scope[{self.sql(e, 'table') or None}][{self.sql(e.this)}]",
87
+ exp.Concat: lambda self, e: self.func(
88
+ "SAFECONCAT" if e.args.get("safe") else "CONCAT", *e.expressions
89
+ ),
90
+ exp.Distinct: lambda self, e: f"set({self.sql(e, 'this')})",
91
+ exp.Div: _div_sql,
92
+ exp.Extract: lambda self, e: f"EXTRACT('{e.name.lower()}', {self.sql(e, 'expression')})",
93
+ exp.In: lambda self, e: f"{self.sql(e, 'this')} in {{{self.expressions(e, flat=True)}}}",
94
+ exp.Interval: lambda self, e: f"INTERVAL({self.sql(e.this)}, '{self.sql(e.unit)}')",
95
+ exp.Is: lambda self, e: (
96
+ self.binary(e, "==") if isinstance(e.this, exp.Literal) else self.binary(e, "is")
97
+ ),
98
+ exp.JSONExtract: lambda self, e: self.func(e.key, e.this, e.expression, *e.expressions),
99
+ exp.JSONPath: lambda self, e: f"[{','.join(self.sql(p) for p in e.expressions[1:])}]",
100
+ exp.JSONPathKey: lambda self, e: f"'{self.sql(e.this)}'",
101
+ exp.JSONPathSubscript: lambda self, e: f"'{e.this}'",
102
+ exp.Lambda: _lambda_sql,
103
+ exp.Not: lambda self, e: f"not {self.sql(e.this)}",
104
+ exp.Null: lambda *_: "None",
105
+ exp.Or: lambda self, e: self.binary(e, "or"),
106
+ exp.Ordered: _ordered_py,
107
+ exp.Star: lambda *_: "1",
108
+ }
@@ -2688,7 +2688,7 @@ class Parser:
2688
2688
  if not self._match_set((TokenType.FUNCTION, TokenType.PROCEDURE)):
2689
2689
  self.raise_error("Expected FUNCTION or PROCEDURE after EXECUTE")
2690
2690
 
2691
- func_call = self._parse_function(anonymous=True, optional_parens=False)
2691
+ func_call = self._parse_column()
2692
2692
  return self.expression(exp.TriggerExecute(this=func_call))
2693
2693
 
2694
2694
  def _parse_property_before(self) -> exp.Expr | list[exp.Expr] | None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlglot
3
- Version: 30.5.0
3
+ Version: 30.6.0
4
4
  Summary: An easily customizable SQL parser and transpiler
5
5
  Author-email: Toby Mao <toby.mao@gmail.com>
6
6
  License-Expression: MIT
@@ -33,10 +33,10 @@ Requires-Dist: types-pytz; extra == "dev"
33
33
  Requires-Dist: typing_extensions; extra == "dev"
34
34
  Requires-Dist: pyperf; extra == "dev"
35
35
  Provides-Extra: c
36
- Requires-Dist: sqlglotc==30.5.0; extra == "c"
36
+ Requires-Dist: sqlglotc==30.6.0; extra == "c"
37
37
  Provides-Extra: rs
38
38
  Requires-Dist: sqlglotrs==0.13.0; extra == "rs"
39
- Requires-Dist: sqlglotc==30.5.0; extra == "rs"
39
+ Requires-Dist: sqlglotc==30.6.0; extra == "rs"
40
40
  Dynamic: license-file
41
41
  Dynamic: provides-extra
42
42
 
@@ -114,6 +114,7 @@ sqlglot/generators/oracle.py
114
114
  sqlglot/generators/postgres.py
115
115
  sqlglot/generators/presto.py
116
116
  sqlglot/generators/prql.py
117
+ sqlglot/generators/python.py
117
118
  sqlglot/generators/redshift.py
118
119
  sqlglot/generators/risingwave.py
119
120
  sqlglot/generators/singlestore.py
@@ -1,6 +1,6 @@
1
1
 
2
2
  [c]
3
- sqlglotc==30.5.0
3
+ sqlglotc==30.6.0
4
4
 
5
5
  [dev]
6
6
  duckdb>=0.6
@@ -20,4 +20,4 @@ pyperf
20
20
 
21
21
  [rs]
22
22
  sqlglotrs==0.13.0
23
- sqlglotc==30.5.0
23
+ sqlglotc==30.6.0
@@ -1815,6 +1815,8 @@ CROSS JOIN JSON_ARRAY_ELEMENTS(CAST(JSON_EXTRACT_PATH(tbox, 'boxes') AS JSON)) A
1815
1815
  "CREATE OR REPLACE TRIGGER replace_trigger BEFORE INSERT ON users FOR EACH ROW EXECUTE FUNCTION LOG_INSERT()",
1816
1816
  "CREATE TRIGGER param_trigger BEFORE INSERT ON users FOR EACH ROW EXECUTE FUNCTION LOG_WITH_PARAMS('insert', 'users')",
1817
1817
  "CREATE TRIGGER my_trigger BEFORE INSERT ON myschema.users FOR EACH ROW EXECUTE FUNCTION LOG_CHANGES()",
1818
+ "CREATE TRIGGER trg_foo BEFORE UPDATE ON bar.bat FOR EACH ROW EXECUTE FUNCTION baz.asdf()",
1819
+ "CREATE TRIGGER trg_foo BEFORE UPDATE ON bar.bat FOR EACH ROW EXECUTE FUNCTION c.s.asdf('x', 1)",
1818
1820
  "CREATE TRIGGER truncate_trigger BEFORE TRUNCATE ON users FOR EACH STATEMENT EXECUTE FUNCTION LOG_TRUNCATE()",
1819
1821
  "CREATE TRIGGER complex_when BEFORE UPDATE ON accounts FOR EACH ROW WHEN (OLD.balance IS DISTINCT FROM NEW.balance AND NEW.balance > 0) EXECUTE FUNCTION CHECK_BALANCE()",
1820
1822
  "CREATE TRIGGER emp_stamp BEFORE INSERT OR UPDATE ON emp FOR EACH ROW EXECUTE FUNCTION EMP_STAMP()",
@@ -10,7 +10,6 @@ import numpy as np
10
10
  import pandas as pd
11
11
  from pandas.testing import assert_frame_equal
12
12
 
13
- import sqlglot.generator as _generator_module
14
13
  from sqlglot import exp, find_tables, parse_one, transpile
15
14
  from sqlglot.errors import ExecuteError
16
15
  from sqlglot.executor import execute
@@ -26,8 +25,6 @@ from tests.helpers import (
26
25
  load_sql_fixture_pairs,
27
26
  )
28
27
 
29
- _GENERATOR_IS_COMPILED = getattr(_generator_module, "__file__", "").endswith(".so")
30
-
31
28
  DIR_TPCH = FIXTURES_DIR + "/optimizer/tpc-h/"
32
29
  DIR_TPCDS = FIXTURES_DIR + "/optimizer/tpc-ds/"
33
30
 
@@ -69,7 +66,6 @@ def mp_execute(expression, meta):
69
66
 
70
67
 
71
68
  @unittest.skipIf(SKIP_INTEGRATION, "Skipping Integration Tests since `SKIP_INTEGRATION` is set")
72
- @unittest.skipIf(_GENERATOR_IS_COMPILED, "executor requires interpreted Generator subclass")
73
69
  class TestExecutor(unittest.TestCase):
74
70
  @classmethod
75
71
  def setUpClass(cls):
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes