sqlglot 30.6.0__tar.gz → 30.7.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 (327) hide show
  1. {sqlglot-30.6.0 → sqlglot-30.7.0}/CHANGELOG.md +18 -0
  2. {sqlglot-30.6.0 → sqlglot-30.7.0}/Makefile +19 -3
  3. {sqlglot-30.6.0/sqlglot.egg-info → sqlglot-30.7.0}/PKG-INFO +5 -4
  4. sqlglot-30.7.0/setup.py +34 -0
  5. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/__init__.py +1 -17
  6. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/_version.py +3 -3
  7. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/dialect.py +9 -5
  8. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/dremio.py +1 -0
  9. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/drill.py +1 -0
  10. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/duckdb.py +2 -0
  11. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/hive.py +1 -0
  12. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/postgres.py +1 -0
  13. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/presto.py +1 -0
  14. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/snowflake.py +1 -0
  15. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/trino.py +1 -0
  16. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/tsql.py +1 -0
  17. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/expressions/array.py +5 -1
  18. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/expressions/core.py +294 -294
  19. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/expressions/datatypes.py +40 -21
  20. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/expressions/ddl.py +8 -0
  21. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/expressions/json.py +1 -0
  22. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/expressions/query.py +59 -1
  23. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generator.py +26 -5
  24. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/clickhouse.py +4 -1
  25. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/duckdb.py +94 -10
  26. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/exasol.py +26 -1
  27. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/mysql.py +1 -0
  28. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/oracle.py +2 -0
  29. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/presto.py +1 -0
  30. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/redshift.py +8 -0
  31. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/singlestore.py +1 -1
  32. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/snowflake.py +6 -0
  33. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/lineage.py +119 -31
  34. sqlglot-30.7.0/sqlglot/optimizer/__init__.py +65 -0
  35. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/annotate_types.py +72 -7
  36. sqlglot-30.7.0/sqlglot/optimizer/canonicalize_internal_names.py +302 -0
  37. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/eliminate_joins.py +22 -21
  38. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/normalize.py +14 -3
  39. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/optimize_joins.py +6 -3
  40. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/pushdown_predicates.py +12 -5
  41. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/qualify_columns.py +9 -44
  42. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/qualify_tables.py +6 -3
  43. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/resolver.py +49 -29
  44. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/scope.py +3 -1
  45. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/unnest_subqueries.py +3 -2
  46. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parser.py +70 -36
  47. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/duckdb.py +2 -0
  48. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/exasol.py +6 -0
  49. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/hive.py +11 -0
  50. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/mysql.py +41 -3
  51. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/oracle.py +1 -0
  52. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/prql.py +2 -2
  53. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/redshift.py +9 -1
  54. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/snowflake.py +6 -2
  55. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/spark2.py +1 -1
  56. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/schema.py +1 -1
  57. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/tokenizer_core.py +8 -8
  58. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/tokens.py +24 -6
  59. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/typing/__init__.py +3 -2
  60. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/typing/bigquery.py +4 -5
  61. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/typing/hive.py +2 -1
  62. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/typing/snowflake.py +12 -7
  63. {sqlglot-30.6.0 → sqlglot-30.7.0/sqlglot.egg-info}/PKG-INFO +5 -4
  64. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot.egg-info/SOURCES.txt +3 -0
  65. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot.egg-info/requires.txt +12 -3
  66. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglotc/pyproject.toml +9 -3
  67. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglotc/setup.py +5 -1
  68. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_bigquery.py +4 -0
  69. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_clickhouse.py +8 -0
  70. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_dialect.py +12 -15
  71. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_duckdb.py +29 -3
  72. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_exasol.py +63 -0
  73. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_hive.py +1 -1
  74. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_mysql.py +46 -0
  75. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_oracle.py +14 -1
  76. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_postgres.py +13 -0
  77. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_presto.py +3 -3
  78. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_redshift.py +13 -0
  79. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_snowflake.py +23 -8
  80. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_spark.py +19 -1
  81. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/annotate_functions.sql +18 -0
  82. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/annotate_types.sql +12 -0
  83. sqlglot-30.7.0/tests/fixtures/optimizer/canonicalize_internal_names.sql +251 -0
  84. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/qualify_columns.sql +1 -1
  85. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/qualify_tables.sql +6 -0
  86. sqlglot-30.7.0/tests/leakcheck.py +365 -0
  87. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_lineage.py +201 -0
  88. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_optimizer.py +342 -3
  89. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_transpile.py +5 -0
  90. sqlglot-30.6.0/setup.py +0 -29
  91. sqlglot-30.6.0/sqlglot/optimizer/__init__.py +0 -11
  92. {sqlglot-30.6.0 → sqlglot-30.7.0}/.gitignore +0 -0
  93. {sqlglot-30.6.0 → sqlglot-30.7.0}/.gitmodules +0 -0
  94. {sqlglot-30.6.0 → sqlglot-30.7.0}/.gitpod.yml +0 -0
  95. {sqlglot-30.6.0 → sqlglot-30.7.0}/.pre-commit-config.yaml +0 -0
  96. {sqlglot-30.6.0 → sqlglot-30.7.0}/AGENTS.md +0 -0
  97. {sqlglot-30.6.0 → sqlglot-30.7.0}/CLAUDE.md +0 -0
  98. {sqlglot-30.6.0 → sqlglot-30.7.0}/CONTRIBUTING.md +0 -0
  99. {sqlglot-30.6.0 → sqlglot-30.7.0}/LICENSE +0 -0
  100. {sqlglot-30.6.0 → sqlglot-30.7.0}/MANIFEST.in +0 -0
  101. {sqlglot-30.6.0 → sqlglot-30.7.0}/README.md +0 -0
  102. {sqlglot-30.6.0 → sqlglot-30.7.0}/pyproject.toml +0 -0
  103. {sqlglot-30.6.0 → sqlglot-30.7.0}/setup.cfg +0 -0
  104. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/__main__.py +0 -0
  105. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/_typing.py +0 -0
  106. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/__init__.py +0 -0
  107. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/athena.py +0 -0
  108. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/bigquery.py +0 -0
  109. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/clickhouse.py +0 -0
  110. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/databricks.py +0 -0
  111. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/doris.py +0 -0
  112. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/druid.py +0 -0
  113. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/dune.py +0 -0
  114. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/exasol.py +0 -0
  115. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/fabric.py +0 -0
  116. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/materialize.py +0 -0
  117. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/mysql.py +0 -0
  118. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/oracle.py +0 -0
  119. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/prql.py +0 -0
  120. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/redshift.py +0 -0
  121. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/risingwave.py +0 -0
  122. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/singlestore.py +0 -0
  123. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/solr.py +0 -0
  124. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/spark.py +0 -0
  125. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/spark2.py +0 -0
  126. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/sqlite.py +0 -0
  127. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/starrocks.py +0 -0
  128. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/tableau.py +0 -0
  129. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/dialects/teradata.py +0 -0
  130. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/diff.py +0 -0
  131. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/errors.py +0 -0
  132. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/executor/__init__.py +0 -0
  133. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/executor/context.py +0 -0
  134. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/executor/env.py +0 -0
  135. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/executor/python.py +0 -0
  136. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/executor/table.py +0 -0
  137. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/expressions/__init__.py +0 -0
  138. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/expressions/aggregate.py +0 -0
  139. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/expressions/builders.py +0 -0
  140. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/expressions/constraints.py +0 -0
  141. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/expressions/dml.py +0 -0
  142. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/expressions/functions.py +0 -0
  143. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/expressions/math.py +0 -0
  144. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/expressions/properties.py +0 -0
  145. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/expressions/string.py +0 -0
  146. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/expressions/temporal.py +0 -0
  147. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/__init__.py +0 -0
  148. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/athena.py +0 -0
  149. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/bigquery.py +0 -0
  150. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/databricks.py +0 -0
  151. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/doris.py +0 -0
  152. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/dremio.py +0 -0
  153. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/drill.py +0 -0
  154. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/druid.py +0 -0
  155. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/dune.py +0 -0
  156. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/fabric.py +0 -0
  157. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/hive.py +0 -0
  158. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/materialize.py +0 -0
  159. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/postgres.py +0 -0
  160. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/prql.py +0 -0
  161. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/python.py +0 -0
  162. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/risingwave.py +0 -0
  163. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/solr.py +0 -0
  164. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/spark.py +0 -0
  165. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/spark2.py +0 -0
  166. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/sqlite.py +0 -0
  167. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/starrocks.py +0 -0
  168. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/tableau.py +0 -0
  169. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/teradata.py +0 -0
  170. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/trino.py +0 -0
  171. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/generators/tsql.py +0 -0
  172. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/helper.py +0 -0
  173. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/jsonpath.py +0 -0
  174. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/canonicalize.py +0 -0
  175. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/eliminate_ctes.py +0 -0
  176. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/eliminate_subqueries.py +0 -0
  177. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/isolate_table_selects.py +0 -0
  178. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/merge_subqueries.py +0 -0
  179. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/normalize_identifiers.py +0 -0
  180. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/optimizer.py +0 -0
  181. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/pushdown_projections.py +0 -0
  182. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/qualify.py +0 -0
  183. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/optimizer/simplify.py +0 -0
  184. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/__init__.py +0 -0
  185. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/athena.py +0 -0
  186. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/base.py +0 -0
  187. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/bigquery.py +0 -0
  188. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/clickhouse.py +0 -0
  189. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/databricks.py +0 -0
  190. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/doris.py +0 -0
  191. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/dremio.py +0 -0
  192. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/drill.py +0 -0
  193. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/druid.py +0 -0
  194. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/dune.py +0 -0
  195. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/fabric.py +0 -0
  196. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/materialize.py +0 -0
  197. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/postgres.py +0 -0
  198. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/presto.py +0 -0
  199. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/risingwave.py +0 -0
  200. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/singlestore.py +0 -0
  201. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/solr.py +0 -0
  202. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/spark.py +0 -0
  203. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/sqlite.py +0 -0
  204. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/starrocks.py +0 -0
  205. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/tableau.py +0 -0
  206. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/teradata.py +0 -0
  207. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/trino.py +0 -0
  208. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/parsers/tsql.py +0 -0
  209. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/planner.py +0 -0
  210. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/py.typed +0 -0
  211. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/serde.py +0 -0
  212. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/time.py +0 -0
  213. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/transforms.py +0 -0
  214. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/trie.py +0 -0
  215. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/typing/clickhouse.py +0 -0
  216. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/typing/duckdb.py +0 -0
  217. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/typing/mysql.py +0 -0
  218. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/typing/presto.py +0 -0
  219. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/typing/redshift.py +0 -0
  220. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/typing/spark.py +0 -0
  221. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/typing/spark2.py +0 -0
  222. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot/typing/tsql.py +0 -0
  223. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot.egg-info/dependency_links.txt +0 -0
  224. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot.egg-info/top_level.txt +0 -0
  225. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglot.png +0 -0
  226. {sqlglot-30.6.0 → sqlglot-30.7.0}/sqlglotc/MANIFEST.in +0 -0
  227. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/__init__.py +0 -0
  228. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/__init__.py +0 -0
  229. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_athena.py +0 -0
  230. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_databricks.py +0 -0
  231. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_doris.py +0 -0
  232. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_dremio.py +0 -0
  233. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_drill.py +0 -0
  234. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_druid.py +0 -0
  235. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_dune.py +0 -0
  236. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_fabric.py +0 -0
  237. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_materialize.py +0 -0
  238. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_pipe_syntax.py +0 -0
  239. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_prql.py +0 -0
  240. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_risingwave.py +0 -0
  241. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_singlestore.py +0 -0
  242. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_solr.py +0 -0
  243. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_sqlite.py +0 -0
  244. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_starrocks.py +0 -0
  245. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_tableau.py +0 -0
  246. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_teradata.py +0 -0
  247. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_trino.py +0 -0
  248. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/dialects/test_tsql.py +0 -0
  249. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/identity.sql +0 -0
  250. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/jsonpath/LICENSE +0 -0
  251. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/jsonpath/cts.json +0 -0
  252. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/canonicalize.sql +0 -0
  253. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/eliminate_ctes.sql +0 -0
  254. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/eliminate_joins.sql +0 -0
  255. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/eliminate_subqueries.sql +0 -0
  256. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/isolate_table_selects.sql +0 -0
  257. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/merge_subqueries.sql +0 -0
  258. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/normalize.sql +0 -0
  259. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/normalize_identifiers.sql +0 -0
  260. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/optimize_joins.sql +0 -0
  261. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/optimizer.sql +0 -0
  262. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/pushdown_cte_alias_columns.sql +0 -0
  263. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/pushdown_predicates.sql +0 -0
  264. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/pushdown_projections.sql +0 -0
  265. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/qualify_columns__invalid.sql +0 -0
  266. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/qualify_columns__with_invisible.sql +0 -0
  267. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/qualify_columns_ddl.sql +0 -0
  268. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/quote_identifiers.sql +0 -0
  269. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/simplify.sql +0 -0
  270. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/call_center.csv.gz +0 -0
  271. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/catalog_page.csv.gz +0 -0
  272. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/catalog_returns.csv.gz +0 -0
  273. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/catalog_sales.csv.gz +0 -0
  274. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/customer.csv.gz +0 -0
  275. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/customer_address.csv.gz +0 -0
  276. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/customer_demographics.csv.gz +0 -0
  277. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/date_dim.csv.gz +0 -0
  278. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/household_demographics.csv.gz +0 -0
  279. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/income_band.csv.gz +0 -0
  280. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/inventory.csv.gz +0 -0
  281. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/item.csv.gz +0 -0
  282. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/promotion.csv.gz +0 -0
  283. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/reason.csv.gz +0 -0
  284. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/ship_mode.csv.gz +0 -0
  285. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/store.csv.gz +0 -0
  286. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/store_returns.csv.gz +0 -0
  287. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/store_sales.csv.gz +0 -0
  288. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/time_dim.csv.gz +0 -0
  289. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/tpc-ds.sql +0 -0
  290. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/warehouse.csv.gz +0 -0
  291. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/web_page.csv.gz +0 -0
  292. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/web_returns.csv.gz +0 -0
  293. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/web_sales.csv.gz +0 -0
  294. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-ds/web_site.csv.gz +0 -0
  295. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-h/customer.csv.gz +0 -0
  296. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-h/lineitem.csv.gz +0 -0
  297. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-h/nation.csv.gz +0 -0
  298. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-h/orders.csv.gz +0 -0
  299. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-h/part.csv.gz +0 -0
  300. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-h/partsupp.csv.gz +0 -0
  301. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-h/region.csv.gz +0 -0
  302. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-h/supplier.csv.gz +0 -0
  303. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/tpc-h/tpc-h.sql +0 -0
  304. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/optimizer/unnest_subqueries.sql +0 -0
  305. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/partial.sql +0 -0
  306. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/fixtures/pretty.sql +0 -0
  307. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/gen_fixtures.py +0 -0
  308. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/helpers.py +0 -0
  309. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/sqlglot/__init__.py +0 -0
  310. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_build.py +0 -0
  311. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_dialect_entry_points.py +0 -0
  312. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_dialect_imports.py +0 -0
  313. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_diff.py +0 -0
  314. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_docs.py +0 -0
  315. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_errors.py +0 -0
  316. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_executor.py +0 -0
  317. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_expressions.py +0 -0
  318. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_generator.py +0 -0
  319. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_helper.py +0 -0
  320. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_integration_loader.py +0 -0
  321. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_jsonpath.py +0 -0
  322. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_parser.py +0 -0
  323. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_schema.py +0 -0
  324. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_serde.py +0 -0
  325. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_time.py +0 -0
  326. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_tokens.py +0 -0
  327. {sqlglot-30.6.0 → sqlglot-30.7.0}/tests/test_transforms.py +0 -0
@@ -1,6 +1,23 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ ## [v30.6.0] - 2026-04-20
5
+ ### :boom: BREAKING CHANGES
6
+ - due to [`dcf9ed5`](https://github.com/tobymao/sqlglot/commit/dcf9ed58303bf320f3e3498618bd95639037efde) - compile python generator *(PR [#7528](https://github.com/tobymao/sqlglot/pull/7528) by [@georgesittas](https://github.com/georgesittas))*:
7
+
8
+ compile python generator (#7528)
9
+
10
+
11
+ ### :sparkles: New Features
12
+ - [`dcf9ed5`](https://github.com/tobymao/sqlglot/commit/dcf9ed58303bf320f3e3498618bd95639037efde) - **mypyc**: compile python generator *(PR [#7528](https://github.com/tobymao/sqlglot/pull/7528) by [@georgesittas](https://github.com/georgesittas))*
13
+
14
+ ### :bug: Bug Fixes
15
+ - [`8e5e255`](https://github.com/tobymao/sqlglot/commit/8e5e2557c7f40c61fcf08d22141a3dd94b3a2ccb) - **postgres**: dotted function calls in create trigger ddls closes [#7527](https://github.com/tobymao/sqlglot/pull/7527) *(commit by [@georgesittas](https://github.com/georgesittas))*
16
+
17
+ ### :wrench: Chores
18
+ - [`08ea329`](https://github.com/tobymao/sqlglot/commit/08ea3293631ba930d01bbb2b62cca969354f8134) - avoid git submodule errors when publishing API docs *(PR [#7526](https://github.com/tobymao/sqlglot/pull/7526) by [@georgesittas](https://github.com/georgesittas))*
19
+
20
+
4
21
  ## [v30.5.0] - 2026-04-20
5
22
  ### :boom: BREAKING CHANGES
6
23
  - 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))*:
@@ -14226,3 +14243,4 @@ pip install "sqlglot[c]" # compiled — faster, but no subclassing
14226
14243
  [v30.4.2]: https://github.com/tobymao/sqlglot/compare/v30.4.1...v30.4.2
14227
14244
  [v30.4.3]: https://github.com/tobymao/sqlglot/compare/v30.4.2...v30.4.3
14228
14245
  [v30.5.0]: https://github.com/tobymao/sqlglot/compare/v30.4.3...v30.5.0
14246
+ [v30.6.0]: https://github.com/tobymao/sqlglot/compare/v30.5.0...v30.6.0
@@ -1,4 +1,4 @@
1
- .PHONY: install install-dev install-devc install-devc-release install-pre-commit bench bench-parse bench-transpile bench-optimize test test-fast unit testc unitc style check docs docs-serve hidec showc clean resolve-integration-conflicts update-fixtures
1
+ .PHONY: install install-dev install-devc install-devc-release install-pre-commit bench bench-parse bench-transpile bench-optimize test test-fast unit testc unitc leakcheck style check docs docs-serve hidec showc clean resolve-integration-conflicts update-fixtures
2
2
 
3
3
  ifdef UV
4
4
  PIP := uv pip
@@ -8,6 +8,7 @@ endif
8
8
 
9
9
  SO_BACKUP := /tmp/sqlglot_so_backup
10
10
  FIND_SO := find sqlglot -name "*.so"
11
+ NPROC := $(shell python -c "import os; print(os.cpu_count() or 1)")
11
12
 
12
13
  hidec:
13
14
  rm -rf $(SO_BACKUP) && $(FIND_SO) | tar cf $(SO_BACKUP) -T - 2>/dev/null && $(FIND_SO) -delete; true
@@ -37,11 +38,23 @@ install-dev:
37
38
  fi; \
38
39
  fi
39
40
 
41
+ # sqlglotc requires Python 3.10+ (sqlglot-mypy 1.20+ dropped 3.9). On 3.9
42
+ # we skip the C build; tests fall back to pure-Python sqlglot.
43
+ PY_GE_310 := $(shell python -c "import sys; print(int(sys.version_info >= (3, 10)))")
44
+
40
45
  install-devc:
41
- cd sqlglotc && MYPYC_OPT=0 python setup.py build_ext --inplace
46
+ @if [ "$(PY_GE_310)" = "1" ]; then \
47
+ cd sqlglotc && MYPYC_OPT=0 python setup.py build_ext --inplace -j $(NPROC); \
48
+ else \
49
+ echo "Skipping sqlglotc build: requires Python 3.10+"; \
50
+ fi
42
51
 
43
52
  install-devc-release: clean
44
- cd sqlglotc && python setup.py build_ext --inplace
53
+ @if [ "$(PY_GE_310)" = "1" ]; then \
54
+ cd sqlglotc && python setup.py build_ext --inplace -j $(NPROC); \
55
+ else \
56
+ echo "Skipping sqlglotc build: requires Python 3.10+"; \
57
+ fi
45
58
 
46
59
  install-pre-commit:
47
60
  pre-commit install
@@ -77,6 +90,9 @@ testc: install-devc
77
90
  unitc: install-devc
78
91
  SKIP_INTEGRATION=1 python -m unittest
79
92
 
93
+ leakcheck: install-devc
94
+ python -m tests.leakcheck
95
+
80
96
  style:
81
97
  pre-commit run --all-files
82
98
  @if [ -f sqlglot-integration-tests/Makefile ]; then $(MAKE) -C sqlglot-integration-tests check-submodule; fi
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlglot
3
- Version: 30.6.0
3
+ Version: 30.7.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
@@ -19,7 +19,8 @@ Description-Content-Type: text/markdown
19
19
  License-File: LICENSE
20
20
  Provides-Extra: dev
21
21
  Requires-Dist: duckdb>=0.6; extra == "dev"
22
- Requires-Dist: sqlglot-mypy; extra == "dev"
22
+ Requires-Dist: sqlglot-mypy>=1.20.0.post6; python_version >= "3.10" and extra == "dev"
23
+ Requires-Dist: mypy; python_version < "3.10" and extra == "dev"
23
24
  Requires-Dist: setuptools_scm; extra == "dev"
24
25
  Requires-Dist: pandas; extra == "dev"
25
26
  Requires-Dist: pandas-stubs; extra == "dev"
@@ -33,10 +34,10 @@ Requires-Dist: types-pytz; extra == "dev"
33
34
  Requires-Dist: typing_extensions; extra == "dev"
34
35
  Requires-Dist: pyperf; extra == "dev"
35
36
  Provides-Extra: c
36
- Requires-Dist: sqlglotc==30.6.0; extra == "c"
37
+ Requires-Dist: sqlglotc==30.7.0; python_version >= "3.10" and extra == "c"
37
38
  Provides-Extra: rs
38
39
  Requires-Dist: sqlglotrs==0.13.0; extra == "rs"
39
- Requires-Dist: sqlglotc==30.6.0; extra == "rs"
40
+ Requires-Dist: sqlglotc==30.7.0; python_version >= "3.10" and extra == "rs"
40
41
  Dynamic: license-file
41
42
  Dynamic: provides-extra
42
43
 
@@ -0,0 +1,34 @@
1
+ from setuptools import setup
2
+ from setuptools_scm import get_version
3
+
4
+ version = get_version(local_scheme="no-local-version")
5
+
6
+ setup(
7
+ extras_require={
8
+ "dev": [
9
+ "duckdb>=0.6",
10
+ # sqlglot-mypy 1.20+ is the build dep for sqlglotc and only ships
11
+ # for py3.10+; on py3.9 just use upstream mypy for type checking.
12
+ "sqlglot-mypy >= 1.20.0.post6; python_version >= '3.10'",
13
+ "mypy; python_version < '3.10'",
14
+ "setuptools_scm",
15
+ "pandas",
16
+ "pandas-stubs",
17
+ "python-dateutil",
18
+ "pytz",
19
+ "pdoc",
20
+ "pre-commit",
21
+ "ruff==0.15.6",
22
+ "types-python-dateutil",
23
+ "types-pytz",
24
+ "typing_extensions",
25
+ "pyperf",
26
+ ],
27
+ # Compiles from source on the user's machine. Requires Python 3.10+
28
+ # because the build dep (sqlglot-mypy 1.20+) dropped 3.9; on 3.9
29
+ # `pip install sqlglot[c]` is a no-op and you just get pure-Python sqlglot.
30
+ "c": [f"sqlglotc=={version}; python_version >= '3.10'"],
31
+ # Deprecated: the Rust tokenizer has been replaced by sqlglotc.
32
+ "rs": ["sqlglotrs==0.13.0", f"sqlglotc=={version}; python_version >= '3.10'"],
33
+ },
34
+ )
@@ -1,4 +1,4 @@
1
- # ruff: noqa: F401, E402
1
+ # ruff: noqa: F401
2
2
  """
3
3
  .. include:: ../README.md
4
4
 
@@ -7,25 +7,9 @@
7
7
 
8
8
  from __future__ import annotations
9
9
 
10
- # bootstrap mypyc runtime: compiled .so modules do a top-level `import HASH__mypyc`,
11
- # but the runtime .so lives inside sqlglot/. Pre-load it into sys.modules.
12
- # this is only needed for editable builds
13
10
  from collections.abc import Collection
14
- import sys
15
- from pathlib import Path
16
11
  from builtins import type as Type
17
12
 
18
- for path in Path(__file__).parent.glob("*__mypyc*.so"):
19
- name = path.stem.split(".")[0]
20
- if name not in sys.modules:
21
- import importlib.util
22
-
23
- spec = importlib.util.spec_from_file_location(name, path)
24
- if spec and spec.loader:
25
- mod = importlib.util.module_from_spec(spec)
26
- sys.modules[name] = mod
27
- spec.loader.exec_module(mod)
28
-
29
13
  import logging
30
14
  import typing as t
31
15
 
@@ -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.6.0'
22
- __version_tuple__ = version_tuple = (30, 6, 0)
21
+ __version__ = version = '30.7.0'
22
+ __version_tuple__ = version_tuple = (30, 7, 0)
23
23
 
24
- __commit_id__ = commit_id = 'gdcf9ed583'
24
+ __commit_id__ = commit_id = 'g693f4ed6d'
@@ -399,6 +399,9 @@ class Dialect(metaclass=_Dialect):
399
399
  CONCAT_COALESCE = False
400
400
  """A `NULL` arg in `CONCAT` yields `NULL` by default, but in some dialects it yields an empty string."""
401
401
 
402
+ CONCAT_WS_COALESCE = False
403
+ """A `NULL` arg in `CONCAT_WS` yields `NULL` by default, but in some dialects it is skipped."""
404
+
402
405
  HEX_LOWERCASE = False
403
406
  """Whether the `HEX` function returns a lowercase hexadecimal string."""
404
407
 
@@ -1761,15 +1764,16 @@ def count_if_to_sum(self: Generator, expression: exp.CountIf) -> str:
1761
1764
 
1762
1765
 
1763
1766
  def trim_sql(self: Generator, expression: exp.Trim, default_trim_type: str = "") -> str:
1764
- target = self.sql(expression, "this")
1765
- trim_type = self.sql(expression, "position") or default_trim_type
1766
1767
  remove_chars = self.sql(expression, "expression")
1767
- collation = self.sql(expression, "collation")
1768
1768
 
1769
1769
  # Use TRIM/LTRIM/RTRIM syntax if the expression isn't database-specific
1770
1770
  if not remove_chars:
1771
1771
  return self.trim_sql(expression)
1772
1772
 
1773
+ target = self.sql(expression, "this")
1774
+ trim_type = self.sql(expression, "position") or default_trim_type
1775
+ collation = self.sql(expression, "collation")
1776
+
1773
1777
  trim_type = f"{trim_type} " if trim_type else ""
1774
1778
  remove_chars = f"{remove_chars} " if remove_chars else ""
1775
1779
  from_part = "FROM " if trim_type or remove_chars else ""
@@ -1827,7 +1831,7 @@ def pivot_column_names(aggregations: Iterable[exp.Expr], dialect: DialectType) -
1827
1831
  be quoted in the base parser's `_parse_pivot` method, due to `to_identifier`.
1828
1832
  Otherwise, we'd end up with `col_avg(`foo`)` (notice the double quotes).
1829
1833
  """
1830
- agg_all_unquoted = agg.transform(
1834
+ agg_all_unquoted: exp.Expr = agg.transform(
1831
1835
  lambda node: (
1832
1836
  exp.Identifier(this=node.name, quoted=False)
1833
1837
  if isinstance(node, exp.Identifier)
@@ -2236,7 +2240,7 @@ def build_default_decimal_type(
2236
2240
  return dtype
2237
2241
 
2238
2242
  params = f"{precision}{f', {scale}' if scale is not None else ''}"
2239
- return exp.DataType.build(f"DECIMAL({params})")
2243
+ return exp.DataType.from_str(f"DECIMAL({params})")
2240
2244
 
2241
2245
  return _builder
2242
2246
 
@@ -9,6 +9,7 @@ from sqlglot.parsers.dremio import DremioParser
9
9
  class Dremio(Dialect):
10
10
  SUPPORTS_USER_DEFINED_TYPES = False
11
11
  CONCAT_COALESCE = True
12
+ CONCAT_WS_COALESCE = True
12
13
  TYPED_DIVISION = True
13
14
  NULL_ORDERING = "nulls_are_last"
14
15
  SUPPORTS_VALUES_DEFAULT = False
@@ -17,6 +17,7 @@ class Drill(Dialect):
17
17
  SUPPORTS_USER_DEFINED_TYPES = False
18
18
  TYPED_DIVISION = True
19
19
  CONCAT_COALESCE = True
20
+ CONCAT_WS_COALESCE = True
20
21
 
21
22
  TIME_MAPPING = {
22
23
  "y": "%Y",
@@ -19,10 +19,12 @@ class DuckDB(Dialect):
19
19
  SAFE_DIVISION = True
20
20
  INDEX_OFFSET = 1
21
21
  CONCAT_COALESCE = True
22
+ CONCAT_WS_COALESCE = True
22
23
  SUPPORTS_ORDER_BY_ALL = True
23
24
  SUPPORTS_FIXED_SIZE_ARRAYS = True
24
25
  STRICT_JSON_PATH_SYNTAX = False
25
26
  NUMBERS_CAN_BE_UNDERSCORE_SEPARATED = True
27
+ UUID_IS_STRING_TYPE = False
26
28
 
27
29
  # https://duckdb.org/docs/sql/introduction.html#creating-a-new-table
28
30
  NORMALIZATION_STRATEGY = NormalizationStrategy.CASE_INSENSITIVE
@@ -20,6 +20,7 @@ class Hive(Dialect):
20
20
  IDENTIFIERS_CAN_START_WITH_DIGIT = True
21
21
  SUPPORTS_USER_DEFINED_TYPES = False
22
22
  SAFE_DIVISION = True
23
+ CONCAT_WS_COALESCE = True
23
24
  ARRAY_AGG_INCLUDES_NULLS = None
24
25
  REGEXP_EXTRACT_DEFAULT_GROUP = 1
25
26
  ALTER_TABLE_SUPPORTS_CASCADE = True
@@ -11,6 +11,7 @@ class Postgres(Dialect):
11
11
  INDEX_OFFSET = 1
12
12
  TYPED_DIVISION = True
13
13
  CONCAT_COALESCE = True
14
+ CONCAT_WS_COALESCE = True
14
15
  NULL_ORDERING = "nulls_are_large"
15
16
  TIME_FORMAT = "'YYYY-MM-DD HH24:MI:SS'"
16
17
  TABLESAMPLE_SIZE_IS_PERCENT = True
@@ -24,6 +24,7 @@ class Presto(Dialect):
24
24
  LOG_BASE_FIRST: bool | None = None
25
25
  SUPPORTS_VALUES_DEFAULT = False
26
26
  LEAST_GREATEST_IGNORES_NULLS = False
27
+ UUID_IS_STRING_TYPE = False
27
28
 
28
29
  TIME_MAPPING = MySQL.TIME_MAPPING
29
30
 
@@ -28,6 +28,7 @@ class Snowflake(Dialect):
28
28
  TRY_CAST_REQUIRES_STRING = True
29
29
  SUPPORTS_ALIAS_REFS_IN_JOIN_CONDITIONS = True
30
30
  LEAST_GREATEST_IGNORES_NULLS = False
31
+ UUID_IS_STRING_TYPE = True
31
32
 
32
33
  EXPRESSION_METADATA = EXPRESSION_METADATA.copy()
33
34
 
@@ -9,6 +9,7 @@ from sqlglot.tokens import TokenType
9
9
  class Trino(Presto):
10
10
  SUPPORTS_USER_DEFINED_TYPES = False
11
11
  LOG_BASE_FIRST = True
12
+ CONCAT_WS_COALESCE = True
12
13
 
13
14
  class Tokenizer(Presto.Tokenizer):
14
15
  KEYWORDS = {
@@ -15,6 +15,7 @@ class TSQL(Dialect):
15
15
  LOG_BASE_FIRST = False
16
16
  TYPED_DIVISION = True
17
17
  CONCAT_COALESCE = True
18
+ CONCAT_WS_COALESCE = True
18
19
  NORMALIZATION_STRATEGY = NormalizationStrategy.CASE_INSENSITIVE
19
20
  ALTER_TABLE_ADD_REQUIRED_FOR_EACH_COLUMN = False
20
21
 
@@ -189,7 +189,11 @@ class Flatten(Expression, Func):
189
189
 
190
190
  class StringToArray(Expression, Func):
191
191
  arg_types = {"this": True, "expression": False, "null": False}
192
- _sql_names = ["STRING_TO_ARRAY", "SPLIT_BY_STRING", "STRTOK_TO_ARRAY"]
192
+ _sql_names = ["STRING_TO_ARRAY", "SPLIT_BY_STRING"]
193
+
194
+
195
+ class StrtokToArray(Expression, Func):
196
+ arg_types = {"this": True, "expression": False}
193
197
 
194
198
 
195
199
  # Higher-order / lambda