sqlglot 30.12.0__tar.gz → 30.14.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 (337) hide show
  1. {sqlglot-30.12.0 → sqlglot-30.14.0}/CHANGELOG.md +439 -0
  2. {sqlglot-30.12.0 → sqlglot-30.14.0}/CONTRIBUTING.md +34 -0
  3. {sqlglot-30.12.0/sqlglot.egg-info → sqlglot-30.14.0}/PKG-INFO +38 -29
  4. {sqlglot-30.12.0 → sqlglot-30.14.0}/README.md +34 -25
  5. {sqlglot-30.12.0 → sqlglot-30.14.0}/setup.py +1 -1
  6. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/_version.py +3 -3
  7. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/__init__.py +1 -0
  8. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/clickhouse.py +1 -0
  9. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/databricks.py +2 -0
  10. sqlglot-30.14.0/sqlglot/dialects/dax.py +20 -0
  11. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/dialect.py +81 -7
  12. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/dremio.py +6 -0
  13. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/hive.py +8 -6
  14. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/materialize.py +2 -0
  15. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/postgres.py +8 -0
  16. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/redshift.py +2 -0
  17. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/risingwave.py +2 -0
  18. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/snowflake.py +1 -0
  19. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/spark.py +11 -0
  20. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/spark2.py +11 -0
  21. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/expressions/aggregate.py +5 -4
  22. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/expressions/array.py +4 -0
  23. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/expressions/constraints.py +5 -0
  24. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/expressions/core.py +1 -1
  25. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/expressions/ddl.py +1 -1
  26. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/expressions/math.py +8 -0
  27. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/expressions/string.py +11 -0
  28. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/expressions/temporal.py +14 -3
  29. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generator.py +36 -20
  30. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/bigquery.py +30 -0
  31. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/databricks.py +13 -0
  32. sqlglot-30.14.0/sqlglot/generators/dax.py +7 -0
  33. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/dremio.py +8 -0
  34. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/drill.py +17 -1
  35. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/duckdb.py +89 -59
  36. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/hive.py +87 -27
  37. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/oracle.py +1 -0
  38. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/postgres.py +8 -2
  39. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/presto.py +64 -5
  40. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/python.py +3 -1
  41. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/snowflake.py +57 -1
  42. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/spark.py +0 -1
  43. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/spark2.py +23 -0
  44. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/sqlite.py +6 -1
  45. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/trino.py +1 -0
  46. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/tsql.py +8 -4
  47. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/jsonpath.py +4 -4
  48. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/optimizer/annotate_types.py +22 -8
  49. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/optimizer/canonicalize_internal_names.py +21 -7
  50. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/optimizer/merge_subqueries.py +165 -61
  51. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/optimizer/pushdown_predicates.py +4 -0
  52. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/optimizer/pushdown_projections.py +18 -0
  53. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/optimizer/qualify.py +1 -1
  54. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/optimizer/qualify_columns.py +136 -27
  55. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/optimizer/resolver.py +23 -10
  56. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/optimizer/scope.py +4 -2
  57. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/optimizer/simplify.py +13 -8
  58. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parser.py +167 -55
  59. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/bigquery.py +32 -18
  60. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/clickhouse.py +10 -1
  61. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/databricks.py +15 -0
  62. sqlglot-30.14.0/sqlglot/parsers/dax.py +48 -0
  63. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/drill.py +8 -0
  64. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/duckdb.py +5 -0
  65. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/exasol.py +1 -1
  66. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/hive.py +2 -18
  67. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/mysql.py +3 -0
  68. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/oracle.py +5 -2
  69. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/presto.py +6 -2
  70. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/snowflake.py +5 -4
  71. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/spark2.py +1 -1
  72. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/tsql.py +10 -0
  73. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/time.py +23 -23
  74. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/tokenizer_core.py +12 -3
  75. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/tokens.py +8 -24
  76. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/typing/__init__.py +1 -0
  77. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/typing/clickhouse.py +5 -0
  78. sqlglot-30.14.0/sqlglot/typing/databricks.py +38 -0
  79. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/typing/duckdb.py +8 -0
  80. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/typing/hive.py +5 -1
  81. sqlglot-30.14.0/sqlglot/typing/mysql.py +96 -0
  82. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/typing/snowflake.py +0 -1
  83. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/typing/spark2.py +7 -0
  84. {sqlglot-30.12.0 → sqlglot-30.14.0/sqlglot.egg-info}/PKG-INFO +38 -29
  85. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot.egg-info/SOURCES.txt +5 -0
  86. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot.egg-info/requires.txt +3 -3
  87. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot.egg-info/scm_file_list.json +319 -314
  88. sqlglot-30.14.0/sqlglot.egg-info/scm_version.json +8 -0
  89. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglotc/pyproject.toml +2 -2
  90. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglotc/setup.py +7 -0
  91. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/test_bigquery.py +130 -17
  92. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/test_clickhouse.py +25 -0
  93. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/test_databricks.py +10 -0
  94. sqlglot-30.14.0/tests/dialects/test_dax.py +55 -0
  95. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/test_dialect.py +93 -9
  96. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/test_dremio.py +33 -0
  97. sqlglot-30.14.0/tests/dialects/test_drill.py +65 -0
  98. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/test_duckdb.py +73 -3
  99. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/test_exasol.py +8 -8
  100. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/test_hive.py +9 -4
  101. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/test_mysql.py +10 -1
  102. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/test_oracle.py +23 -1
  103. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/test_postgres.py +68 -2
  104. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/test_presto.py +53 -6
  105. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/test_redshift.py +6 -4
  106. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/test_singlestore.py +1 -1
  107. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/test_snowflake.py +58 -2
  108. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/test_spark.py +102 -3
  109. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/test_sqlite.py +14 -0
  110. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/test_teradata.py +2 -2
  111. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/test_trino.py +11 -0
  112. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/test_tsql.py +8 -3
  113. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/identity.sql +25 -3
  114. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/annotate_functions.sql +488 -1
  115. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/canonicalize_internal_names.sql +8 -0
  116. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/merge_subqueries.sql +81 -2
  117. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/optimizer.sql +1 -1
  118. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/pushdown_predicates.sql +12 -0
  119. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/pushdown_projections.sql +4 -4
  120. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/qualify_columns.sql +61 -2
  121. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/simplify.sql +30 -0
  122. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/test_jsonpath.py +11 -0
  123. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/test_optimizer.py +276 -5
  124. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/test_parser.py +103 -0
  125. sqlglot-30.14.0/tests/test_time.py +77 -0
  126. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/test_transpile.py +16 -0
  127. sqlglot-30.12.0/sqlglot/typing/mysql.py +0 -36
  128. sqlglot-30.12.0/sqlglot.egg-info/scm_version.json +0 -8
  129. sqlglot-30.12.0/tests/dialects/test_drill.py +0 -25
  130. sqlglot-30.12.0/tests/test_time.py +0 -34
  131. {sqlglot-30.12.0 → sqlglot-30.14.0}/.gitignore +0 -0
  132. {sqlglot-30.12.0 → sqlglot-30.14.0}/.gitmodules +0 -0
  133. {sqlglot-30.12.0 → sqlglot-30.14.0}/.gitpod.yml +0 -0
  134. {sqlglot-30.12.0 → sqlglot-30.14.0}/.pre-commit-config.yaml +0 -0
  135. {sqlglot-30.12.0 → sqlglot-30.14.0}/AGENTS.md +0 -0
  136. {sqlglot-30.12.0 → sqlglot-30.14.0}/CLAUDE.md +0 -0
  137. {sqlglot-30.12.0 → sqlglot-30.14.0}/LICENSE +0 -0
  138. {sqlglot-30.12.0 → sqlglot-30.14.0}/MANIFEST.in +0 -0
  139. {sqlglot-30.12.0 → sqlglot-30.14.0}/Makefile +0 -0
  140. {sqlglot-30.12.0 → sqlglot-30.14.0}/pyproject.toml +0 -0
  141. {sqlglot-30.12.0 → sqlglot-30.14.0}/setup.cfg +0 -0
  142. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/__init__.py +0 -0
  143. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/__main__.py +0 -0
  144. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/_typing.py +0 -0
  145. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/athena.py +0 -0
  146. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/bigquery.py +0 -0
  147. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/doris.py +0 -0
  148. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/drill.py +0 -0
  149. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/druid.py +0 -0
  150. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/duckdb.py +0 -0
  151. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/dune.py +0 -0
  152. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/exasol.py +0 -0
  153. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/fabric.py +0 -0
  154. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/mysql.py +0 -0
  155. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/oracle.py +0 -0
  156. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/presto.py +0 -0
  157. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/prql.py +0 -0
  158. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/singlestore.py +0 -0
  159. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/solr.py +0 -0
  160. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/sqlite.py +0 -0
  161. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/starrocks.py +0 -0
  162. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/tableau.py +0 -0
  163. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/teradata.py +0 -0
  164. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/trino.py +0 -0
  165. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/dialects/tsql.py +0 -0
  166. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/diff.py +0 -0
  167. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/errors.py +0 -0
  168. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/executor/__init__.py +0 -0
  169. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/executor/context.py +0 -0
  170. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/executor/env.py +0 -0
  171. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/executor/python.py +0 -0
  172. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/executor/table.py +0 -0
  173. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/expressions/__init__.py +0 -0
  174. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/expressions/builders.py +0 -0
  175. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/expressions/datatypes.py +0 -0
  176. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/expressions/dml.py +0 -0
  177. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/expressions/functions.py +0 -0
  178. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/expressions/json.py +0 -0
  179. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/expressions/properties.py +0 -0
  180. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/expressions/query.py +0 -0
  181. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/__init__.py +0 -0
  182. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/athena.py +0 -0
  183. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/clickhouse.py +0 -0
  184. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/doris.py +0 -0
  185. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/druid.py +0 -0
  186. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/dune.py +0 -0
  187. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/exasol.py +0 -0
  188. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/fabric.py +0 -0
  189. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/materialize.py +0 -0
  190. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/mysql.py +0 -0
  191. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/prql.py +0 -0
  192. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/redshift.py +0 -0
  193. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/risingwave.py +0 -0
  194. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/singlestore.py +0 -0
  195. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/solr.py +0 -0
  196. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/starrocks.py +0 -0
  197. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/tableau.py +0 -0
  198. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/generators/teradata.py +0 -0
  199. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/helper.py +0 -0
  200. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/lineage.py +0 -0
  201. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/optimizer/__init__.py +0 -0
  202. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/optimizer/canonicalize.py +0 -0
  203. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/optimizer/eliminate_ctes.py +0 -0
  204. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/optimizer/eliminate_joins.py +0 -0
  205. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/optimizer/eliminate_subqueries.py +0 -0
  206. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/optimizer/isolate_table_selects.py +0 -0
  207. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/optimizer/normalize.py +0 -0
  208. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/optimizer/normalize_identifiers.py +0 -0
  209. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/optimizer/optimize_joins.py +0 -0
  210. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/optimizer/optimizer.py +0 -0
  211. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/optimizer/qualify_tables.py +0 -0
  212. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/optimizer/unnest_subqueries.py +0 -0
  213. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/__init__.py +0 -0
  214. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/athena.py +0 -0
  215. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/base.py +0 -0
  216. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/doris.py +0 -0
  217. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/dremio.py +0 -0
  218. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/druid.py +0 -0
  219. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/dune.py +0 -0
  220. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/fabric.py +0 -0
  221. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/materialize.py +0 -0
  222. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/postgres.py +0 -0
  223. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/prql.py +0 -0
  224. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/redshift.py +0 -0
  225. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/risingwave.py +0 -0
  226. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/singlestore.py +0 -0
  227. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/solr.py +0 -0
  228. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/spark.py +0 -0
  229. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/sqlite.py +0 -0
  230. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/starrocks.py +0 -0
  231. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/tableau.py +0 -0
  232. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/teradata.py +0 -0
  233. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/parsers/trino.py +0 -0
  234. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/planner.py +0 -0
  235. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/py.typed +0 -0
  236. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/schema.py +0 -0
  237. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/serde.py +0 -0
  238. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/transforms.py +0 -0
  239. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/trie.py +0 -0
  240. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/typing/bigquery.py +0 -0
  241. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/typing/postgres.py +0 -0
  242. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/typing/presto.py +0 -0
  243. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/typing/redshift.py +0 -0
  244. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/typing/spark.py +0 -0
  245. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot/typing/tsql.py +0 -0
  246. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot.egg-info/dependency_links.txt +0 -0
  247. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot.egg-info/top_level.txt +0 -0
  248. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglot.png +0 -0
  249. {sqlglot-30.12.0 → sqlglot-30.14.0}/sqlglotc/MANIFEST.in +0 -0
  250. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/__init__.py +0 -0
  251. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/__init__.py +0 -0
  252. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/test_athena.py +0 -0
  253. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/test_doris.py +0 -0
  254. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/test_druid.py +0 -0
  255. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/test_dune.py +0 -0
  256. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/test_fabric.py +0 -0
  257. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/test_materialize.py +0 -0
  258. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/test_pipe_syntax.py +0 -0
  259. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/test_prql.py +0 -0
  260. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/test_risingwave.py +0 -0
  261. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/test_solr.py +0 -0
  262. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/test_starrocks.py +0 -0
  263. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/dialects/test_tableau.py +0 -0
  264. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/jsonpath/LICENSE +0 -0
  265. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/jsonpath/cts.json +0 -0
  266. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/annotate_types.sql +0 -0
  267. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/canonicalize.sql +0 -0
  268. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/eliminate_ctes.sql +0 -0
  269. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/eliminate_joins.sql +0 -0
  270. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/eliminate_subqueries.sql +0 -0
  271. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/isolate_table_selects.sql +0 -0
  272. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/normalize.sql +0 -0
  273. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/normalize_identifiers.sql +0 -0
  274. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/optimize_joins.sql +0 -0
  275. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/pushdown_cte_alias_columns.sql +0 -0
  276. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/qualify_columns__invalid.sql +0 -0
  277. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/qualify_columns__with_invisible.sql +0 -0
  278. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/qualify_columns_ddl.sql +0 -0
  279. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/qualify_tables.sql +0 -0
  280. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/quote_identifiers.sql +0 -0
  281. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/call_center.csv.gz +0 -0
  282. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/catalog_page.csv.gz +0 -0
  283. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/catalog_returns.csv.gz +0 -0
  284. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/catalog_sales.csv.gz +0 -0
  285. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/customer.csv.gz +0 -0
  286. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/customer_address.csv.gz +0 -0
  287. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/customer_demographics.csv.gz +0 -0
  288. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/date_dim.csv.gz +0 -0
  289. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/household_demographics.csv.gz +0 -0
  290. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/income_band.csv.gz +0 -0
  291. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/inventory.csv.gz +0 -0
  292. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/item.csv.gz +0 -0
  293. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/promotion.csv.gz +0 -0
  294. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/reason.csv.gz +0 -0
  295. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/ship_mode.csv.gz +0 -0
  296. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/store.csv.gz +0 -0
  297. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/store_returns.csv.gz +0 -0
  298. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/store_sales.csv.gz +0 -0
  299. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/time_dim.csv.gz +0 -0
  300. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/tpc-ds.sql +0 -0
  301. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/warehouse.csv.gz +0 -0
  302. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/web_page.csv.gz +0 -0
  303. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/web_returns.csv.gz +0 -0
  304. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/web_sales.csv.gz +0 -0
  305. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-ds/web_site.csv.gz +0 -0
  306. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-h/customer.csv.gz +0 -0
  307. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-h/lineitem.csv.gz +0 -0
  308. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-h/nation.csv.gz +0 -0
  309. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-h/orders.csv.gz +0 -0
  310. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-h/part.csv.gz +0 -0
  311. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-h/partsupp.csv.gz +0 -0
  312. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-h/region.csv.gz +0 -0
  313. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-h/supplier.csv.gz +0 -0
  314. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/tpc-h/tpc-h.sql +0 -0
  315. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/optimizer/unnest_subqueries.sql +0 -0
  316. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/partial.sql +0 -0
  317. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/fixtures/pretty.sql +0 -0
  318. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/gen_fixtures.py +0 -0
  319. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/helpers.py +0 -0
  320. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/leakcheck.py +0 -0
  321. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/sqlglot/__init__.py +0 -0
  322. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/test_build.py +0 -0
  323. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/test_dialect_entry_points.py +0 -0
  324. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/test_dialect_imports.py +0 -0
  325. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/test_diff.py +0 -0
  326. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/test_docs.py +0 -0
  327. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/test_errors.py +0 -0
  328. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/test_executor.py +0 -0
  329. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/test_expressions.py +0 -0
  330. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/test_generator.py +0 -0
  331. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/test_helper.py +0 -0
  332. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/test_integration_loader.py +0 -0
  333. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/test_lineage.py +0 -0
  334. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/test_schema.py +0 -0
  335. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/test_serde.py +0 -0
  336. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/test_tokens.py +0 -0
  337. {sqlglot-30.12.0 → sqlglot-30.14.0}/tests/test_transforms.py +0 -0
@@ -1,6 +1,443 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ ## [v30.13.0] - 2026-07-20
5
+ ### :boom: BREAKING CHANGES
6
+ - due to [`58f5bf9`](https://github.com/tobymao/sqlglot/commit/58f5bf9b40dda34784bcb2d3bf0a04f02490de12) - databricks type annotation for REGEXP_COUNT, REGEXP_EXTRACT_ALL *(PR [#7797](https://github.com/tobymao/sqlglot/pull/7797) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*:
7
+
8
+ databricks type annotation for REGEXP_COUNT, REGEXP_EXTRACT_ALL (#7797)
9
+
10
+ - due to [`fd6d4d6`](https://github.com/tobymao/sqlglot/commit/fd6d4d61c25e7918118fc22c5579098a86a58e10) - annotate repeat function *(PR [#7803](https://github.com/tobymao/sqlglot/pull/7803) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
11
+
12
+ annotate repeat function (#7803)
13
+
14
+ - due to [`93802ce`](https://github.com/tobymao/sqlglot/commit/93802ce4d0c8c0b960be6b7b84785fa3556c0310) - annotate type for REGEXP_REPLACE hive chain *(PR [#7804](https://github.com/tobymao/sqlglot/pull/7804) by [@vishvambhar-ranoshe](https://github.com/vishvambhar-ranoshe))*:
15
+
16
+ annotate type for REGEXP_REPLACE hive chain (#7804)
17
+
18
+ - due to [`cbc9206`](https://github.com/tobymao/sqlglot/commit/cbc9206e0603ffa7d0e2e72c0bf84ebc77cdb8e5) - annotate `to_json` for hive-like dialects *(PR [#7814](https://github.com/tobymao/sqlglot/pull/7814) by [@vishvambhar-ranoshe](https://github.com/vishvambhar-ranoshe))*:
19
+
20
+ annotate `to_json` for hive-like dialects (#7814)
21
+
22
+ - due to [`85fea2c`](https://github.com/tobymao/sqlglot/commit/85fea2cf4375de4fd99c5d036d8ccfac2965a753) - more robust date formats *(PR [#7813](https://github.com/tobymao/sqlglot/pull/7813) by [@geooo109](https://github.com/geooo109))*:
23
+
24
+ more robust date formats (#7813)
25
+
26
+ - due to [`abdac97`](https://github.com/tobymao/sqlglot/commit/abdac971b68f0914801bda4784860c04258a22e8) - annotate str_to_map for hive-like dialects *(PR [#7822](https://github.com/tobymao/sqlglot/pull/7822) by [@vishvambhar-ranoshe](https://github.com/vishvambhar-ranoshe))*:
27
+
28
+ annotate str_to_map for hive-like dialects (#7822)
29
+
30
+ - due to [`79d1061`](https://github.com/tobymao/sqlglot/commit/79d1061ca838101ec6baaf399a8e7fd3410df926) - add databricks type inference for REGEXP_INSTR, REGEXP_LIKE, REGEXP_SUBSTR, REGR_AVGX *(PR [#7815](https://github.com/tobymao/sqlglot/pull/7815) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*:
31
+
32
+ add databricks type inference for REGEXP_INSTR, REGEXP_LIKE, REGEXP_SUBSTR, REGR_AVGX (#7815)
33
+
34
+ - due to [`aeb2711`](https://github.com/tobymao/sqlglot/commit/aeb2711f3be05bdcfa39a5e7479a0bedb0ca03f7) - parse regexp extract (and variants) correctly *(commit by [@georgesittas](https://github.com/georgesittas))*:
35
+
36
+ parse regexp extract (and variants) correctly
37
+
38
+ - due to [`b29ef61`](https://github.com/tobymao/sqlglot/commit/b29ef618b5db539f7bd4685e49b72ea08730daa5) - true/null in t.true/null should be identifiers *(PR [#7831](https://github.com/tobymao/sqlglot/pull/7831) by [@georgesittas](https://github.com/georgesittas))*:
39
+
40
+ true/null in t.true/null should be identifiers (#7831)
41
+
42
+ - due to [`a5ab08b`](https://github.com/tobymao/sqlglot/commit/a5ab08bbbbed61567913eda8a95ccc6094036027) - preserve SHA256/SHA512 digest semantics, render SHA2 as hex string *(PR [#7824](https://github.com/tobymao/sqlglot/pull/7824) by [@Pawansingh3889](https://github.com/Pawansingh3889))*:
43
+
44
+ preserve SHA256/SHA512 digest semantics, render SHA2 as hex string (#7824)
45
+
46
+ - due to [`e9b0140`](https://github.com/tobymao/sqlglot/commit/e9b014074b47ddb85aca93fac43d431e28add9f1) - normalization of synthesized output aliases *(PR [#7816](https://github.com/tobymao/sqlglot/pull/7816) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*:
47
+
48
+ normalization of synthesized output aliases (#7816)
49
+
50
+ - due to [`94e82ff`](https://github.com/tobymao/sqlglot/commit/94e82ffa116660838f11073395ecf9b3ecc6662a) - map native SHA512 to SHA2Digest, mirroring SHA256 *(PR [#7832](https://github.com/tobymao/sqlglot/pull/7832) by [@Pawansingh3889](https://github.com/Pawansingh3889))*:
51
+
52
+ map native SHA512 to SHA2Digest, mirroring SHA256 (#7832)
53
+
54
+ - due to [`c2fac5d`](https://github.com/tobymao/sqlglot/commit/c2fac5dd987118a04633f36e8bd0de5447ff694a) - annotate insert for mysql *(PR [#7836](https://github.com/tobymao/sqlglot/pull/7836) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
55
+
56
+ annotate insert for mysql (#7836)
57
+
58
+ - due to [`f37c71e`](https://github.com/tobymao/sqlglot/commit/f37c71e762321625350f16c1c358e12e28fa6380) - use a dedicated token for PROJECTION closes [#7837](https://github.com/tobymao/sqlglot/pull/7837) *(commit by [@georgesittas](https://github.com/georgesittas))*:
59
+
60
+ use a dedicated token for PROJECTION closes #7837
61
+
62
+ - due to [`0ce4063`](https://github.com/tobymao/sqlglot/commit/0ce4063ae9c2de1e05e4597d08b5e546c5d2a43c) - annotate hex for mysql *(PR [#7841](https://github.com/tobymao/sqlglot/pull/7841) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
63
+
64
+ annotate hex for mysql (#7841)
65
+
66
+ - due to [`da55602`](https://github.com/tobymao/sqlglot/commit/da55602dea6e70de54c500d072a0bff5ecfb3d6d) - delimited text incorrectly consumed by _match_texts, _match_text_seq *(PR [#7843](https://github.com/tobymao/sqlglot/pull/7843) by [@georgesittas](https://github.com/georgesittas))*:
67
+
68
+ delimited text incorrectly consumed by _match_texts, _match_text_seq (#7843)
69
+
70
+ - due to [`77c7814`](https://github.com/tobymao/sqlglot/commit/77c78147fc6a83bd4126c247c149df7205424010) - annotate type for databricks REGR_AVGY, REGR_COUNT, REGR_INTERCEPT, REGR_R2, REGR_SLOPE *(PR [#7820](https://github.com/tobymao/sqlglot/pull/7820) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*:
71
+
72
+ annotate type for databricks REGR_AVGY, REGR_COUNT, REGR_INTERCEPT, REGR_R2, REGR_SLOPE (#7820)
73
+
74
+ - due to [`ab77e9f`](https://github.com/tobymao/sqlglot/commit/ab77e9f0d78e945324bcbb857780a728378cc2d7) - annotate lpad for mysql *(PR [#7846](https://github.com/tobymao/sqlglot/pull/7846) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
75
+
76
+ annotate lpad for mysql (#7846)
77
+
78
+ - due to [`93d1659`](https://github.com/tobymao/sqlglot/commit/93d16591dbde9f548b3693f8a48ef2c73e8ff983) - annotate left for mysql *(PR [#7848](https://github.com/tobymao/sqlglot/pull/7848) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
79
+
80
+ annotate left for mysql (#7848)
81
+
82
+ - due to [`122b44f`](https://github.com/tobymao/sqlglot/commit/122b44f5836bd21a1bae5df3a388d397df180ca5) - merge window issue *(PR [#7845](https://github.com/tobymao/sqlglot/pull/7845) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*:
83
+
84
+ merge window issue (#7845)
85
+
86
+ - due to [`3ec3506`](https://github.com/tobymao/sqlglot/commit/3ec35068e1b54f338ebf6585cb1f8eab8c7a12eb) - annotate localtimestamp for mysql *(PR [#7850](https://github.com/tobymao/sqlglot/pull/7850) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
87
+
88
+ annotate localtimestamp for mysql (#7850)
89
+
90
+ - due to [`fdb1b86`](https://github.com/tobymao/sqlglot/commit/fdb1b86bcd86a79175d5a459a80e4d15785e8472) - annotate format for mysql *(PR [#7858](https://github.com/tobymao/sqlglot/pull/7858) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
91
+
92
+ annotate format for mysql (#7858)
93
+
94
+ - due to [`88a0143`](https://github.com/tobymao/sqlglot/commit/88a0143e486e78d273e5b760b022909f25f3bbbb) - annotate corr for clickhouse *(PR [#7860](https://github.com/tobymao/sqlglot/pull/7860) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*:
95
+
96
+ annotate corr for clickhouse (#7860)
97
+
98
+ - due to [`c2e935f`](https://github.com/tobymao/sqlglot/commit/c2e935f2fbe75f94a671187f3aa68710c210ce70) - preserve leading zeros in subsecond_precision *(PR [#7854](https://github.com/tobymao/sqlglot/pull/7854) by [@c-tonneslan](https://github.com/c-tonneslan))*:
99
+
100
+ preserve leading zeros in subsecond_precision (#7854)
101
+
102
+ - due to [`70c0a18`](https://github.com/tobymao/sqlglot/commit/70c0a18927a49df5a3df68c41ed45431922526f5) - `merge_subqueries` issue with numeric literal `ORDER BY` *(PR [#7856](https://github.com/tobymao/sqlglot/pull/7856) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*:
103
+
104
+ `merge_subqueries` issue with numeric literal `ORDER BY` (#7856)
105
+
106
+ - due to [`adb29c7`](https://github.com/tobymao/sqlglot/commit/adb29c73c5631992dfe903a379d5698aded073aa) - annotate minute for mysql *(PR [#7863](https://github.com/tobymao/sqlglot/pull/7863) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
107
+
108
+ annotate minute for mysql (#7863)
109
+
110
+ - due to [`79fb3af`](https://github.com/tobymao/sqlglot/commit/79fb3afaf644a540cd6dae567b2e4d4580db9131) - annotate right for mysql *(PR [#7862](https://github.com/tobymao/sqlglot/pull/7862) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
111
+
112
+ annotate right for mysql (#7862)
113
+
114
+ - due to [`21ebde8`](https://github.com/tobymao/sqlglot/commit/21ebde8eb11b324b2d8459a6bcc77e6db4ad6ea1) - type annotation for databricks REGR_SXX, REGR_SXY, REGR_SYY *(PR [#7851](https://github.com/tobymao/sqlglot/pull/7851) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*:
115
+
116
+ type annotation for databricks REGR_SXX, REGR_SXY, REGR_SYY (#7851)
117
+
118
+ - due to [`26123c1`](https://github.com/tobymao/sqlglot/commit/26123c1a1b05b5d1e469313b41a591bae833b326) - incorrect handling of negated (i)like operator closes [#7866](https://github.com/tobymao/sqlglot/pull/7866) *(PR [#7867](https://github.com/tobymao/sqlglot/pull/7867) by [@georgesittas](https://github.com/georgesittas))*:
119
+
120
+ incorrect handling of negated (i)like operator closes #7866 (#7867)
121
+
122
+ - due to [`e17ab30`](https://github.com/tobymao/sqlglot/commit/e17ab302340feee60b097b1732f91f5d3d348875) - evict mutated projections from the annotator cache *(PR [#7868](https://github.com/tobymao/sqlglot/pull/7868) by [@georgesittas](https://github.com/georgesittas))*:
123
+
124
+ evict mutated projections from the annotator cache (#7868)
125
+
126
+ - due to [`8c7941f`](https://github.com/tobymao/sqlglot/commit/8c7941fb1e87f2b6fb4ea50477c73f86311d591d) - handle escaped quote before closing multi-char delimiter, preserve escapes in raw strings *(PR [#7870](https://github.com/tobymao/sqlglot/pull/7870) by [@georgesittas](https://github.com/georgesittas))*:
127
+
128
+ handle escaped quote before closing multi-char delimiter, preserve escapes in raw strings (#7870)
129
+
130
+ - due to [`f617f30`](https://github.com/tobymao/sqlglot/commit/f617f30cc4dea9c35f867ca6462279f1e04b642b) - type annotation for databricks RINT *(PR [#7869](https://github.com/tobymao/sqlglot/pull/7869) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*:
131
+
132
+ type annotation for databricks RINT (#7869)
133
+
134
+ - due to [`a62c4d9`](https://github.com/tobymao/sqlglot/commit/a62c4d9aa562ff02776199c070296bd1d952c025) - annotate reverse for mysql *(PR [#7861](https://github.com/tobymao/sqlglot/pull/7861) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
135
+
136
+ annotate reverse for mysql (#7861)
137
+
138
+ - due to [`6581f8c`](https://github.com/tobymao/sqlglot/commit/6581f8c38b8d4812b6a4287b51aa971f81458470) - parse month/day without leading 0 *(PR [#7773](https://github.com/tobymao/sqlglot/pull/7773) by [@deepyaman](https://github.com/deepyaman))*:
139
+
140
+ parse month/day without leading 0 (#7773)
141
+
142
+ - due to [`0a374bf`](https://github.com/tobymao/sqlglot/commit/0a374bf421f874d4c0618a2c710aaca14086c74f) - simplify lax/strict %m, %d transpilation to hive hierarchy *(PR [#7873](https://github.com/tobymao/sqlglot/pull/7873) by [@georgesittas](https://github.com/georgesittas))*:
143
+
144
+ simplify lax/strict %m, %d transpilation to hive hierarchy (#7873)
145
+
146
+ - due to [`559b2c1`](https://github.com/tobymao/sqlglot/commit/559b2c1e0dfb3be5c816d9d7976615023753f4ad) - transpile `DATEDIFF` with day from MySQL correctly *(commit by [@georgesittas](https://github.com/georgesittas))*:
147
+
148
+ transpile `DATEDIFF` with day from MySQL correctly
149
+
150
+ - due to [`91a284b`](https://github.com/tobymao/sqlglot/commit/91a284b7c55f11cf7454b405a6458ea39379e7ff) - parse camelCase dateTrunc, not just date_trunc [CLAUDE] *(PR [#7876](https://github.com/tobymao/sqlglot/pull/7876) by [@chuenchen309](https://github.com/chuenchen309))*:
151
+
152
+ parse camelCase dateTrunc, not just date_trunc [CLAUDE] (#7876)
153
+
154
+ - due to [`5e08bb9`](https://github.com/tobymao/sqlglot/commit/5e08bb934c3441a97e908594a045cae6b8c65904) - preserve UNPIVOT IN-list literal labels [CLAUDE] *(PR [#7877](https://github.com/tobymao/sqlglot/pull/7877) by [@chuenchen309](https://github.com/chuenchen309))*:
155
+
156
+ preserve UNPIVOT IN-list literal labels [CLAUDE] (#7877)
157
+
158
+ - due to [`618804c`](https://github.com/tobymao/sqlglot/commit/618804ce12b09b563147a31c37734725928f34c6) - resolve NATURAL JOIN common columns in qualify [CLAUDE] *(PR [#7880](https://github.com/tobymao/sqlglot/pull/7880) by [@chuenchen309](https://github.com/chuenchen309))*:
159
+
160
+ resolve NATURAL JOIN common columns in qualify [CLAUDE] (#7880)
161
+
162
+ - due to [`72a125e`](https://github.com/tobymao/sqlglot/commit/72a125e101a199e72d24498c8211cafba552ef05) - type annotation for databricks RTRIM, SEARCH *(PR [#7886](https://github.com/tobymao/sqlglot/pull/7886) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*:
163
+
164
+ type annotation for databricks RTRIM, SEARCH (#7886)
165
+
166
+ - due to [`2f9c628`](https://github.com/tobymao/sqlglot/commit/2f9c6280b7942f130aca5c70b45e732a5e904f13) - improve generator of FILTER() *(PR [#7889](https://github.com/tobymao/sqlglot/pull/7889) by [@georgesittas](https://github.com/georgesittas))*:
167
+
168
+ improve generator of FILTER() (#7889)
169
+
170
+ - due to [`a85eeff`](https://github.com/tobymao/sqlglot/commit/a85eeff2124af1279e6979c970a6d1ae175adb07) - properly support VALUES as a set operation operand *(PR [#7897](https://github.com/tobymao/sqlglot/pull/7897) by [@georgesittas](https://github.com/georgesittas))*:
171
+
172
+ properly support VALUES as a set operation operand (#7897)
173
+
174
+ - due to [`812294b`](https://github.com/tobymao/sqlglot/commit/812294bfce534f3a70c9db4b275178c05e36a786) - annotate decode for duckdb *(PR [#7910](https://github.com/tobymao/sqlglot/pull/7910) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*:
175
+
176
+ annotate decode for duckdb (#7910)
177
+
178
+ - due to [`ae702b1`](https://github.com/tobymao/sqlglot/commit/ae702b184d6b67beaa3cc7adfcf8a82da7a306b2) - don't push predicates into a subquery with LIMIT/OFFSET [CLAUDE] *(PR [#7901](https://github.com/tobymao/sqlglot/pull/7901) by [@chuenchen309](https://github.com/chuenchen309))*:
179
+
180
+ don't push predicates into a subquery with LIMIT/OFFSET [CLAUDE] (#7901)
181
+
182
+ - due to [`199547a`](https://github.com/tobymao/sqlglot/commit/199547a5304449f2f4b061e15caf63dc52964704) - keep columns a recursive CTE reads from itself [CLAUDE] *(PR [#7899](https://github.com/tobymao/sqlglot/pull/7899) by [@isaka1022](https://github.com/isaka1022))*:
183
+
184
+ keep columns a recursive CTE reads from itself [CLAUDE] (#7899)
185
+
186
+ - due to [`24d6d73`](https://github.com/tobymao/sqlglot/commit/24d6d735c1ae3607ee3a0f29fe87f41e1ea64d74) - respect date part boundary semantics in DATE_DIFF transpilation *(PR [#7911](https://github.com/tobymao/sqlglot/pull/7911) by [@georgesittas](https://github.com/georgesittas))*:
187
+
188
+ respect date part boundary semantics in DATE_DIFF transpilation (#7911)
189
+
190
+ - due to [`da43c5c`](https://github.com/tobymao/sqlglot/commit/da43c5c14d196faa03e2e4d0fcc110d08ee58ef1) - annotate truncate for mysql *(PR [#7914](https://github.com/tobymao/sqlglot/pull/7914) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
191
+
192
+ annotate truncate for mysql (#7914)
193
+
194
+ - due to [`b110593`](https://github.com/tobymao/sqlglot/commit/b1105933ba90fb9cb6dfc2c60bbf090f4c742b89) - annotate encode for duckdb *(PR [#7915](https://github.com/tobymao/sqlglot/pull/7915) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*:
195
+
196
+ annotate encode for duckdb (#7915)
197
+
198
+ - due to [`755e95e`](https://github.com/tobymao/sqlglot/commit/755e95e48f82f4abfacd3812f9c2371cc2ad1d3d) - preserve `ILIKE` roundtrip *(commit by [@georgesittas](https://github.com/georgesittas))*:
199
+
200
+ preserve `ILIKE` roundtrip
201
+
202
+ - due to [`c933fe3`](https://github.com/tobymao/sqlglot/commit/c933fe330472ae216786eff3837bcc5233ab6d08) - canonicalize numeric-literal GROUP BY to positional ordinal on merge *(PR [#7883](https://github.com/tobymao/sqlglot/pull/7883) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*:
203
+
204
+ canonicalize numeric-literal GROUP BY to positional ordinal on merge (#7883)
205
+
206
+
207
+ ### :sparkles: New Features
208
+ - [`58f5bf9`](https://github.com/tobymao/sqlglot/commit/58f5bf9b40dda34784bcb2d3bf0a04f02490de12) - **optimizer**: databricks type annotation for REGEXP_COUNT, REGEXP_EXTRACT_ALL *(PR [#7797](https://github.com/tobymao/sqlglot/pull/7797) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
209
+ - [`fd6d4d6`](https://github.com/tobymao/sqlglot/commit/fd6d4d61c25e7918118fc22c5579098a86a58e10) - **optimizer**: annotate repeat function *(PR [#7803](https://github.com/tobymao/sqlglot/pull/7803) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
210
+ - [`cbc9206`](https://github.com/tobymao/sqlglot/commit/cbc9206e0603ffa7d0e2e72c0bf84ebc77cdb8e5) - **optimizer**: annotate `to_json` for hive-like dialects *(PR [#7814](https://github.com/tobymao/sqlglot/pull/7814) by [@vishvambhar-ranoshe](https://github.com/vishvambhar-ranoshe))*
211
+ - [`abdac97`](https://github.com/tobymao/sqlglot/commit/abdac971b68f0914801bda4784860c04258a22e8) - **typing**: annotate str_to_map for hive-like dialects *(PR [#7822](https://github.com/tobymao/sqlglot/pull/7822) by [@vishvambhar-ranoshe](https://github.com/vishvambhar-ranoshe))*
212
+ - [`79d1061`](https://github.com/tobymao/sqlglot/commit/79d1061ca838101ec6baaf399a8e7fd3410df926) - **typing**: add databricks type inference for REGEXP_INSTR, REGEXP_LIKE, REGEXP_SUBSTR, REGR_AVGX *(PR [#7815](https://github.com/tobymao/sqlglot/pull/7815) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
213
+ - [`c2fac5d`](https://github.com/tobymao/sqlglot/commit/c2fac5dd987118a04633f36e8bd0de5447ff694a) - **optimizer**: annotate insert for mysql *(PR [#7836](https://github.com/tobymao/sqlglot/pull/7836) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
214
+ - [`ce1aab9`](https://github.com/tobymao/sqlglot/commit/ce1aab9f5fbee6207017ff5f429e2663154f0446) - **duckdb**: transpile snowflake count_if all-null semantics closes [#7833](https://github.com/tobymao/sqlglot/pull/7833) *(commit by [@georgesittas](https://github.com/georgesittas))*
215
+ - [`0ce4063`](https://github.com/tobymao/sqlglot/commit/0ce4063ae9c2de1e05e4597d08b5e546c5d2a43c) - **optimizer**: annotate hex for mysql *(PR [#7841](https://github.com/tobymao/sqlglot/pull/7841) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
216
+ - [`ab77e9f`](https://github.com/tobymao/sqlglot/commit/ab77e9f0d78e945324bcbb857780a728378cc2d7) - **optimizer**: annotate lpad for mysql *(PR [#7846](https://github.com/tobymao/sqlglot/pull/7846) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
217
+ - [`93d1659`](https://github.com/tobymao/sqlglot/commit/93d16591dbde9f548b3693f8a48ef2c73e8ff983) - **optimizer**: annotate left for mysql *(PR [#7848](https://github.com/tobymao/sqlglot/pull/7848) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
218
+ - [`3ec3506`](https://github.com/tobymao/sqlglot/commit/3ec35068e1b54f338ebf6585cb1f8eab8c7a12eb) - **optimizer**: annotate localtimestamp for mysql *(PR [#7850](https://github.com/tobymao/sqlglot/pull/7850) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
219
+ - [`fdb1b86`](https://github.com/tobymao/sqlglot/commit/fdb1b86bcd86a79175d5a459a80e4d15785e8472) - **optimizer**: annotate format for mysql *(PR [#7858](https://github.com/tobymao/sqlglot/pull/7858) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
220
+ - [`88a0143`](https://github.com/tobymao/sqlglot/commit/88a0143e486e78d273e5b760b022909f25f3bbbb) - **optimizer**: annotate corr for clickhouse *(PR [#7860](https://github.com/tobymao/sqlglot/pull/7860) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*
221
+ - [`adb29c7`](https://github.com/tobymao/sqlglot/commit/adb29c73c5631992dfe903a379d5698aded073aa) - **optimizer**: annotate minute for mysql *(PR [#7863](https://github.com/tobymao/sqlglot/pull/7863) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
222
+ - [`79fb3af`](https://github.com/tobymao/sqlglot/commit/79fb3afaf644a540cd6dae567b2e4d4580db9131) - **optimizer**: annotate right for mysql *(PR [#7862](https://github.com/tobymao/sqlglot/pull/7862) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
223
+ - [`21ebde8`](https://github.com/tobymao/sqlglot/commit/21ebde8eb11b324b2d8459a6bcc77e6db4ad6ea1) - **optimizer**: type annotation for databricks REGR_SXX, REGR_SXY, REGR_SYY *(PR [#7851](https://github.com/tobymao/sqlglot/pull/7851) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
224
+ - [`f617f30`](https://github.com/tobymao/sqlglot/commit/f617f30cc4dea9c35f867ca6462279f1e04b642b) - **optimizer**: type annotation for databricks RINT *(PR [#7869](https://github.com/tobymao/sqlglot/pull/7869) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
225
+ - [`a62c4d9`](https://github.com/tobymao/sqlglot/commit/a62c4d9aa562ff02776199c070296bd1d952c025) - **optimizer**: annotate reverse for mysql *(PR [#7861](https://github.com/tobymao/sqlglot/pull/7861) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
226
+ - [`31bc57e`](https://github.com/tobymao/sqlglot/commit/31bc57e7f14bc5ff97527e8027463d47d98a17fb) - **dremio**: support AT SNAPSHOT and AT TIMESTAMP time travel [CLAUDE] *(PR [#7888](https://github.com/tobymao/sqlglot/pull/7888) by [@nruia-penn](https://github.com/nruia-penn))*
227
+ - [`72a125e`](https://github.com/tobymao/sqlglot/commit/72a125e101a199e72d24498c8211cafba552ef05) - **optimizer**: type annotation for databricks RTRIM, SEARCH *(PR [#7886](https://github.com/tobymao/sqlglot/pull/7886) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
228
+ - [`19983a7`](https://github.com/tobymao/sqlglot/commit/19983a7b364aa0cb67943c1228215c5919f834d0) - **databricks**: support timeseries pk constraints closes [#7887](https://github.com/tobymao/sqlglot/pull/7887) *(commit by [@georgesittas](https://github.com/georgesittas))*
229
+ - [`a60ec81`](https://github.com/tobymao/sqlglot/commit/a60ec8136fc3ffc7ef5c15c0348dc189a0fd1048) - dax scaffolding *(PR [#7890](https://github.com/tobymao/sqlglot/pull/7890) by [@tobymao](https://github.com/tobymao))*
230
+ - [`812294b`](https://github.com/tobymao/sqlglot/commit/812294bfce534f3a70c9db4b275178c05e36a786) - **optimizer**: annotate decode for duckdb *(PR [#7910](https://github.com/tobymao/sqlglot/pull/7910) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*
231
+ - [`da43c5c`](https://github.com/tobymao/sqlglot/commit/da43c5c14d196faa03e2e4d0fcc110d08ee58ef1) - **optimizer**: annotate truncate for mysql *(PR [#7914](https://github.com/tobymao/sqlglot/pull/7914) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
232
+ - [`b110593`](https://github.com/tobymao/sqlglot/commit/b1105933ba90fb9cb6dfc2c60bbf090f4c742b89) - **optimizer**: annotate encode for duckdb *(PR [#7915](https://github.com/tobymao/sqlglot/pull/7915) by [@vaishnavi-polekar](https://github.com/vaishnavi-polekar))*
233
+
234
+ ### :bug: Bug Fixes
235
+ - [`93802ce`](https://github.com/tobymao/sqlglot/commit/93802ce4d0c8c0b960be6b7b84785fa3556c0310) - **optimizer**: annotate type for REGEXP_REPLACE hive chain *(PR [#7804](https://github.com/tobymao/sqlglot/pull/7804) by [@vishvambhar-ranoshe](https://github.com/vishvambhar-ranoshe))*
236
+ - [`287cc39`](https://github.com/tobymao/sqlglot/commit/287cc3916ff8f3d851ad91ac58eae5e765fd360b) - **parser**: prioritize parsing parenthesized expressions as Tuple when multi-expression CSV exists *(PR [#7807](https://github.com/tobymao/sqlglot/pull/7807) by [@Hasnaathussain](https://github.com/Hasnaathussain))*
237
+ - :arrow_lower_right: *fixes issue [#7805](https://github.com/tobymao/sqlglot/issues/7805) opened by [@VLDB2026](https://github.com/VLDB2026)*
238
+ - [`4e271fb`](https://github.com/tobymao/sqlglot/commit/4e271fbe3e24223bb7761b46a89b3405a3b4df09) - **duckdb**: default missing year to 1970 for BigQuery PARSE_DATE/PARSE_TIMESTAMP *(PR [#7800](https://github.com/tobymao/sqlglot/pull/7800) by [@greymoth-jp](https://github.com/greymoth-jp))*
239
+ - [`cf7e4bf`](https://github.com/tobymao/sqlglot/commit/cf7e4bf4a57d331e4a6e5f4933cb7daf0e503c3b) - **parser**: parse chained range operators (IN/LIKE) instead of raising [CLAUDE] *(PR [#7809](https://github.com/tobymao/sqlglot/pull/7809) by [@jichaowang02-lang](https://github.com/jichaowang02-lang))*
240
+ - :arrow_lower_right: *fixes issue [#7806](https://github.com/tobymao/sqlglot/issues/7806) opened by [@VLDB2026](https://github.com/VLDB2026)*
241
+ - [`e17d918`](https://github.com/tobymao/sqlglot/commit/e17d91898457a2e3fcdb3f4c4b00dad79772dd7e) - **trino**: transpile FROM_ISO8601_TIMESTAMP_NANOS to cast *(PR [#7808](https://github.com/tobymao/sqlglot/pull/7808) by [@greymoth-jp](https://github.com/greymoth-jp))*
242
+ - [`85fea2c`](https://github.com/tobymao/sqlglot/commit/85fea2cf4375de4fd99c5d036d8ccfac2965a753) - **postgres**: more robust date formats *(PR [#7813](https://github.com/tobymao/sqlglot/pull/7813) by [@geooo109](https://github.com/geooo109))*
243
+ - [`52b8f4a`](https://github.com/tobymao/sqlglot/commit/52b8f4a93fcb7a8baffeba1727dc3e0ebcb88525) - **hive**: PARSE_JSON and TO_JSON roundtrip *(PR [#7818](https://github.com/tobymao/sqlglot/pull/7818) by [@geooo109](https://github.com/geooo109))*
244
+ - [`ed70375`](https://github.com/tobymao/sqlglot/commit/ed70375d5317c8075c7deab26a3197ae2df8d607) - **optimizer**: incorrect canonical names for certain qualified star queries *(PR [#7819](https://github.com/tobymao/sqlglot/pull/7819) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
245
+ - [`aeb2711`](https://github.com/tobymao/sqlglot/commit/aeb2711f3be05bdcfa39a5e7479a0bedb0ca03f7) - **clickhouse**: parse regexp extract (and variants) correctly *(commit by [@georgesittas](https://github.com/georgesittas))*
246
+ - [`faf15e6`](https://github.com/tobymao/sqlglot/commit/faf15e65e9059248c82564ab29de2bd4c492392e) - **generator**: emit LIMIT 1 for countless FETCH FIRST ROWS ONLY CLAUDE *(PR [#7825](https://github.com/tobymao/sqlglot/pull/7825) by [@gaoflow](https://github.com/gaoflow))*
247
+ - [`a66104f`](https://github.com/tobymao/sqlglot/commit/a66104f52aca450087524f84b76e29173971e656) - **bigquery**: mypyc generation bug due to wrong type hints closes [#7826](https://github.com/tobymao/sqlglot/pull/7826) *(commit by [@georgesittas](https://github.com/georgesittas))*
248
+ - [`b29ef61`](https://github.com/tobymao/sqlglot/commit/b29ef618b5db539f7bd4685e49b72ea08730daa5) - true/null in t.true/null should be identifiers *(PR [#7831](https://github.com/tobymao/sqlglot/pull/7831) by [@georgesittas](https://github.com/georgesittas))*
249
+ - [`a5ab08b`](https://github.com/tobymao/sqlglot/commit/a5ab08bbbbed61567913eda8a95ccc6094036027) - **presto**: preserve SHA256/SHA512 digest semantics, render SHA2 as hex string *(PR [#7824](https://github.com/tobymao/sqlglot/pull/7824) by [@Pawansingh3889](https://github.com/Pawansingh3889))*
250
+ - [`e9b0140`](https://github.com/tobymao/sqlglot/commit/e9b014074b47ddb85aca93fac43d431e28add9f1) - **optimizer**: normalization of synthesized output aliases *(PR [#7816](https://github.com/tobymao/sqlglot/pull/7816) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
251
+ - [`94e82ff`](https://github.com/tobymao/sqlglot/commit/94e82ffa116660838f11073395ecf9b3ecc6662a) - **bigquery**: map native SHA512 to SHA2Digest, mirroring SHA256 *(PR [#7832](https://github.com/tobymao/sqlglot/pull/7832) by [@Pawansingh3889](https://github.com/Pawansingh3889))*
252
+ - [`bcc8b1c`](https://github.com/tobymao/sqlglot/commit/bcc8b1cd48593a7b8dfbabf43a5d9710eae19117) - **tsql**: parse EXEC return status parameter (CLAUDE) *(PR [#7835](https://github.com/tobymao/sqlglot/pull/7835) by [@AnayGarodia](https://github.com/AnayGarodia))*
253
+ - :arrow_lower_right: *fixes issue [#7834](https://github.com/tobymao/sqlglot/issues/7834) opened by [@guilherme-wisdom](https://github.com/guilherme-wisdom)*
254
+ - [`f37c71e`](https://github.com/tobymao/sqlglot/commit/f37c71e762321625350f16c1c358e12e28fa6380) - **clickhouse**: use a dedicated token for PROJECTION closes [#7837](https://github.com/tobymao/sqlglot/pull/7837) *(commit by [@georgesittas](https://github.com/georgesittas))*
255
+ - [`da55602`](https://github.com/tobymao/sqlglot/commit/da55602dea6e70de54c500d072a0bff5ecfb3d6d) - **parser**: delimited text incorrectly consumed by _match_texts, _match_text_seq *(PR [#7843](https://github.com/tobymao/sqlglot/pull/7843) by [@georgesittas](https://github.com/georgesittas))*
256
+ - [`77c7814`](https://github.com/tobymao/sqlglot/commit/77c78147fc6a83bd4126c247c149df7205424010) - **optimizer**: annotate type for databricks REGR_AVGY, REGR_COUNT, REGR_INTERCEPT, REGR_R2, REGR_SLOPE *(PR [#7820](https://github.com/tobymao/sqlglot/pull/7820) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
257
+ - [`122b44f`](https://github.com/tobymao/sqlglot/commit/122b44f5836bd21a1bae5df3a388d397df180ca5) - **optimizer**: merge window issue *(PR [#7845](https://github.com/tobymao/sqlglot/pull/7845) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
258
+ - [`c2e935f`](https://github.com/tobymao/sqlglot/commit/c2e935f2fbe75f94a671187f3aa68710c210ce70) - preserve leading zeros in subsecond_precision *(PR [#7854](https://github.com/tobymao/sqlglot/pull/7854) by [@c-tonneslan](https://github.com/c-tonneslan))*
259
+ - [`70c0a18`](https://github.com/tobymao/sqlglot/commit/70c0a18927a49df5a3df68c41ed45431922526f5) - **optimizer**: `merge_subqueries` issue with numeric literal `ORDER BY` *(PR [#7856](https://github.com/tobymao/sqlglot/pull/7856) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
260
+ - [`2d86a76`](https://github.com/tobymao/sqlglot/commit/2d86a76bc8db1bdf51c27b30f033d4623452b3df) - **bigquery**: transpile single projection GENERATE_SERIES from postgres *(PR [#7855](https://github.com/tobymao/sqlglot/pull/7855) by [@geooo109](https://github.com/geooo109))*
261
+ - :arrow_lower_right: *fixes issue [#7852](https://github.com/tobymao/sqlglot/issues/7852) opened by [@sb335c](https://github.com/sb335c)*
262
+ - [`26123c1`](https://github.com/tobymao/sqlglot/commit/26123c1a1b05b5d1e469313b41a591bae833b326) - **optimizer**: incorrect handling of negated (i)like operator closes [#7866](https://github.com/tobymao/sqlglot/pull/7866) *(PR [#7867](https://github.com/tobymao/sqlglot/pull/7867) by [@georgesittas](https://github.com/georgesittas))*
263
+ - [`e17ab30`](https://github.com/tobymao/sqlglot/commit/e17ab302340feee60b097b1732f91f5d3d348875) - **optimizer**: evict mutated projections from the annotator cache *(PR [#7868](https://github.com/tobymao/sqlglot/pull/7868) by [@georgesittas](https://github.com/georgesittas))*
264
+ - [`8c7941f`](https://github.com/tobymao/sqlglot/commit/8c7941fb1e87f2b6fb4ea50477c73f86311d591d) - **tokenizer**: handle escaped quote before closing multi-char delimiter, preserve escapes in raw strings *(PR [#7870](https://github.com/tobymao/sqlglot/pull/7870) by [@georgesittas](https://github.com/georgesittas))*
265
+ - [`6581f8c`](https://github.com/tobymao/sqlglot/commit/6581f8c38b8d4812b6a4287b51aa971f81458470) - **hive**: parse month/day without leading 0 *(PR [#7773](https://github.com/tobymao/sqlglot/pull/7773) by [@deepyaman](https://github.com/deepyaman))*
266
+ - [`7099d89`](https://github.com/tobymao/sqlglot/commit/7099d896d11f5d146afa97bb4844d7703082ade6) - **optimizer**: incorrect merge with literal alias collision *(PR [#7847](https://github.com/tobymao/sqlglot/pull/7847) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
267
+ - [`559b2c1`](https://github.com/tobymao/sqlglot/commit/559b2c1e0dfb3be5c816d9d7976615023753f4ad) - **postgres**: transpile `DATEDIFF` with day from MySQL correctly *(commit by [@georgesittas](https://github.com/georgesittas))*
268
+ - [`91a284b`](https://github.com/tobymao/sqlglot/commit/91a284b7c55f11cf7454b405a6458ea39379e7ff) - **clickhouse**: parse camelCase dateTrunc, not just date_trunc [CLAUDE] *(PR [#7876](https://github.com/tobymao/sqlglot/pull/7876) by [@chuenchen309](https://github.com/chuenchen309))*
269
+ - [`5e08bb9`](https://github.com/tobymao/sqlglot/commit/5e08bb934c3441a97e908594a045cae6b8c65904) - **oracle**: preserve UNPIVOT IN-list literal labels [CLAUDE] *(PR [#7877](https://github.com/tobymao/sqlglot/pull/7877) by [@chuenchen309](https://github.com/chuenchen309))*
270
+ - [`a7058d6`](https://github.com/tobymao/sqlglot/commit/a7058d6976e3a2439f55b9cfa208d03a4b888522) - **oracle**: unrecognized WITH hangs the parser [CLAUDE] *(PR [#7881](https://github.com/tobymao/sqlglot/pull/7881) by [@chuenchen309](https://github.com/chuenchen309))*
271
+ - [`618804c`](https://github.com/tobymao/sqlglot/commit/618804ce12b09b563147a31c37734725928f34c6) - **optimizer**: resolve NATURAL JOIN common columns in qualify [CLAUDE] *(PR [#7880](https://github.com/tobymao/sqlglot/pull/7880) by [@chuenchen309](https://github.com/chuenchen309))*
272
+ - :arrow_lower_right: *fixes issue [#7879](https://github.com/tobymao/sqlglot/issues/7879) opened by [@chuenchen309](https://github.com/chuenchen309)*
273
+ - [`b2c07a1`](https://github.com/tobymao/sqlglot/commit/b2c07a1ee4ea48fae2b0f1a08407d253cc798b9e) - **snowflake**: wrap FILTER condition inside DISTINCT/ORDER BY args [CLAUDE] *(PR [#7884](https://github.com/tobymao/sqlglot/pull/7884) by [@chuenchen309](https://github.com/chuenchen309))*
274
+ - [`2814421`](https://github.com/tobymao/sqlglot/commit/281442123ca0f617b1d877e8ebeacc4a7ad3cd2c) - **snowflake**: parse AUTOINCREMENT parts independently [CLAUDE] *(PR [#7885](https://github.com/tobymao/sqlglot/pull/7885) by [@chuenchen309](https://github.com/chuenchen309))*
275
+ - [`a85eeff`](https://github.com/tobymao/sqlglot/commit/a85eeff2124af1279e6979c970a6d1ae175adb07) - properly support VALUES as a set operation operand *(PR [#7897](https://github.com/tobymao/sqlglot/pull/7897) by [@georgesittas](https://github.com/georgesittas))*
276
+ - [`a247168`](https://github.com/tobymao/sqlglot/commit/a247168f955fda0a09915efc53e90af7eb4337b8) - use `.this` and `.expression` instead of `.left` and `.right` in more places *(commit by [@georgesittas](https://github.com/georgesittas))*
277
+ - [`a034db7`](https://github.com/tobymao/sqlglot/commit/a034db7f6d91626f044152245bc284776a154c6f) - **sqlite**: unwrap `INTERVAL` amount in `DATE_ADD` [CLAUDE] *(PR [#7908](https://github.com/tobymao/sqlglot/pull/7908) by [@chuenchen309](https://github.com/chuenchen309))*
278
+ - [`ae702b1`](https://github.com/tobymao/sqlglot/commit/ae702b184d6b67beaa3cc7adfcf8a82da7a306b2) - **optimizer**: don't push predicates into a subquery with LIMIT/OFFSET [CLAUDE] *(PR [#7901](https://github.com/tobymao/sqlglot/pull/7901) by [@chuenchen309](https://github.com/chuenchen309))*
279
+ - [`655876f`](https://github.com/tobymao/sqlglot/commit/655876fce7d7d26ef30f9df6d1fca60f03c36d80) - **optimizer**: don't push predicates into a subquery with QUALIFY *(commit by [@georgesittas](https://github.com/georgesittas))*
280
+ - [`199547a`](https://github.com/tobymao/sqlglot/commit/199547a5304449f2f4b061e15caf63dc52964704) - **optimizer**: keep columns a recursive CTE reads from itself [CLAUDE] *(PR [#7899](https://github.com/tobymao/sqlglot/pull/7899) by [@isaka1022](https://github.com/isaka1022))*
281
+ - [`47e255d`](https://github.com/tobymao/sqlglot/commit/47e255dda3a328277b7dbb28503f200aea26a429) - **snowflake**: rewrite COUNT(*) FILTER to COUNT_IF [CLAUDE] *(PR [#7900](https://github.com/tobymao/sqlglot/pull/7900) by [@chuenchen309](https://github.com/chuenchen309))*
282
+ - [`e4d2ea5`](https://github.com/tobymao/sqlglot/commit/e4d2ea50bdbbe8c38a2d69b43810bc21d48638b3) - **presto**: TIMESTAMP_DIFF/DATETIME_DIFF transpilation to Presto/Trino [CLAUDE] *(PR [#7895](https://github.com/tobymao/sqlglot/pull/7895) by [@winklemad](https://github.com/winklemad))*
283
+ - [`1bc99a9`](https://github.com/tobymao/sqlglot/commit/1bc99a9013e1cd942ad01203db4f6b47f0420777) - **snowflake**: more robust transpilation for duckdb COUNT(*) FILTER (WHERE) *(commit by [@geooo109](https://github.com/geooo109))*
284
+ - [`24d6d73`](https://github.com/tobymao/sqlglot/commit/24d6d735c1ae3607ee3a0f29fe87f41e1ea64d74) - **presto**: respect date part boundary semantics in DATE_DIFF transpilation *(PR [#7911](https://github.com/tobymao/sqlglot/pull/7911) by [@georgesittas](https://github.com/georgesittas))*
285
+ - [`6d29878`](https://github.com/tobymao/sqlglot/commit/6d2987879753e01683b4dc232df7c488d10a9aa2) - **drill**: generate native `ILIKE` function instead of invalid infix operator *(PR [#7913](https://github.com/tobymao/sqlglot/pull/7913) by [@vidigoat](https://github.com/vidigoat))*
286
+ - [`a1e3338`](https://github.com/tobymao/sqlglot/commit/a1e3338e31354496a3ef3bed5f3c5e0c4df4e0f6) - **postgres**: support unicode escape string literals U&'...' closes [#7898](https://github.com/tobymao/sqlglot/pull/7898) *(commit by [@georgesittas](https://github.com/georgesittas))*
287
+ - [`169b836`](https://github.com/tobymao/sqlglot/commit/169b8364b643c4285dcf073aa2f357c5b40831a6) - **duckdb**: position table alias correctly when combined with time-travel syntax closes [#7916](https://github.com/tobymao/sqlglot/pull/7916) *(commit by [@georgesittas](https://github.com/georgesittas))*
288
+ - [`c933fe3`](https://github.com/tobymao/sqlglot/commit/c933fe330472ae216786eff3837bcc5233ab6d08) - **optimizer**: canonicalize numeric-literal GROUP BY to positional ordinal on merge *(PR [#7883](https://github.com/tobymao/sqlglot/pull/7883) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
289
+
290
+ ### :zap: Performance Improvements
291
+ - [`693b3e3`](https://github.com/tobymao/sqlglot/commit/693b3e3efa5f6e5ec547e29a79cbbe2b84971f21) - **optimizer**: memoize UNNEST/EXPLODE column-type resolution [CLAUDE] *(PR [#7823](https://github.com/tobymao/sqlglot/pull/7823) by [@dvryaboy](https://github.com/dvryaboy))*
292
+ - :arrow_lower_right: *addresses issue [#7821](https://github.com/tobymao/sqlglot/issues/7821) opened by [@dvryaboy](https://github.com/dvryaboy)*
293
+ - [`e58f3cf`](https://github.com/tobymao/sqlglot/commit/e58f3cfb42d6da02a3c0b77f3bb5d01c0ceafd8f) - **tokens**: remove per-thread tokenizer core cache *(commit by [@tobymao](https://github.com/tobymao))*
294
+
295
+ ### :recycle: Refactors
296
+ - [`0a374bf`](https://github.com/tobymao/sqlglot/commit/0a374bf421f874d4c0618a2c710aaca14086c74f) - simplify lax/strict %m, %d transpilation to hive hierarchy *(PR [#7873](https://github.com/tobymao/sqlglot/pull/7873) by [@georgesittas](https://github.com/georgesittas))*
297
+ - [`2f9c628`](https://github.com/tobymao/sqlglot/commit/2f9c6280b7942f130aca5c70b45e732a5e904f13) - **snowflake**: improve generator of FILTER() *(PR [#7889](https://github.com/tobymao/sqlglot/pull/7889) by [@georgesittas](https://github.com/georgesittas))*
298
+ - [`bbb376d`](https://github.com/tobymao/sqlglot/commit/bbb376d26d68a27d047774516d00d2ab65eb0397) - tighten the self-referencing cte check in projection pushdown *(commit by [@georgesittas](https://github.com/georgesittas))*
299
+ - [`755e95e`](https://github.com/tobymao/sqlglot/commit/755e95e48f82f4abfacd3812f9c2371cc2ad1d3d) - **druid**: preserve `ILIKE` roundtrip *(commit by [@georgesittas](https://github.com/georgesittas))*
300
+
301
+ ### :white_check_mark: Tests
302
+ - [`b9051e7`](https://github.com/tobymao/sqlglot/commit/b9051e75e05491b1a8440d568efdce5d0e1a4de0) - **mysql**: add string input test for MAKETIME *(PR [#7859](https://github.com/tobymao/sqlglot/pull/7859) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
303
+
304
+ ### :wrench: Chores
305
+ - [`af73b1c`](https://github.com/tobymao/sqlglot/commit/af73b1c9a8f39a3e4e32bb7393c21e398d4679b1) - tests for REGEXP_REPLACE hive chain *(commit by [@geooo109](https://github.com/geooo109))*
306
+ - [`d5a01c4`](https://github.com/tobymao/sqlglot/commit/d5a01c4fa41892db8d237dd89a63a8d6dbc46dc1) - minor refactor for REGEXP_REPLACE tests *(commit by [@geooo109](https://github.com/geooo109))*
307
+ - [`6c1f081`](https://github.com/tobymao/sqlglot/commit/6c1f08191f2aa32540de960ffb8c1d72b05ec7c4) - improve sqlglotc detection in the tokenizer *(PR [#7812](https://github.com/tobymao/sqlglot/pull/7812) by [@georgesittas](https://github.com/georgesittas))*
308
+ - :arrow_lower_right: *addresses issue [#7810](https://github.com/tobymao/sqlglot/issues/7810) opened by [@wernerdaehn](https://github.com/wernerdaehn)*
309
+ - [`5d9c56e`](https://github.com/tobymao/sqlglot/commit/5d9c56e8799fad51ebf941984fd12f8087a64673) - add policy regarding LLM-assisted PRs *(PR [#7817](https://github.com/tobymao/sqlglot/pull/7817) by [@georgesittas](https://github.com/georgesittas))*
310
+ - [`aedf83a`](https://github.com/tobymao/sqlglot/commit/aedf83a2d4d375019f086813693c240e1564535d) - remove invalid CONCAT_WS redshift test *(commit by [@geooo109](https://github.com/geooo109))*
311
+ - [`daf9aeb`](https://github.com/tobymao/sqlglot/commit/daf9aeb2f0e3c9613ec9d0544ce7b1a006f655c7) - **ci**: cache sqlglotc versions *(PR [#7849](https://github.com/tobymao/sqlglot/pull/7849) by [@geooo109](https://github.com/geooo109))*
312
+ - [`b58dd66`](https://github.com/tobymao/sqlglot/commit/b58dd66286600ce0761a9ddc244cfb5412818edb) - extend LOCALTIMESTAMP annotation tests for mysql *(commit by [@geooo109](https://github.com/geooo109))*
313
+ - [`65491dc`](https://github.com/tobymao/sqlglot/commit/65491dc5b0bf5e139efd1177168320633ee96345) - mysql format 3 arg annotate test *(commit by [@geooo109](https://github.com/geooo109))*
314
+ - [`b83659b`](https://github.com/tobymao/sqlglot/commit/b83659ba03955ff8ddf8219540480745cb3d228f) - compile sqlglotc in parallel by default *(PR [#7865](https://github.com/tobymao/sqlglot/pull/7865) by [@georgesittas](https://github.com/georgesittas))*
315
+ - [`ceda825`](https://github.com/tobymao/sqlglot/commit/ceda825eaa50919123d30867a7d2d3451253397b) - clickhouse CORR type annotation clean up *(commit by [@geooo109](https://github.com/geooo109))*
316
+ - [`baf9534`](https://github.com/tobymao/sqlglot/commit/baf9534c0aab49f0c738139d9a1d1ae08cce2426) - minor annotate_functions.sql change *(commit by [@geooo109](https://github.com/geooo109))*
317
+ - [`a39ad08`](https://github.com/tobymao/sqlglot/commit/a39ad08e482c368c3ffeb8166252244aaab32fd0) - mysql type annotator clean up *(commit by [@geooo109](https://github.com/geooo109))*
318
+ - [`a6b71a5`](https://github.com/tobymao/sqlglot/commit/a6b71a5db632638edb0debf6ac1ecf7b64612b9a) - refactor REVERSE mysql annotation *(commit by [@geooo109](https://github.com/geooo109))*
319
+ - [`39333fc`](https://github.com/tobymao/sqlglot/commit/39333fcbe7857ed7b762c4a12b530bcd121a99ca) - **mypyc**: Bump sqlglot-mypy to post8 *(PR [#7878](https://github.com/tobymao/sqlglot/pull/7878) by [@VaggelisD](https://github.com/VaggelisD))*
320
+ - [`154df7c`](https://github.com/tobymao/sqlglot/commit/154df7cba590941247612c9822fb65c6a2a8d490) - remove stray raise in simplify *(PR [#7882](https://github.com/tobymao/sqlglot/pull/7882) by [@georgesittas](https://github.com/georgesittas))*
321
+ - [`c8e56e4`](https://github.com/tobymao/sqlglot/commit/c8e56e4ee0336d02991bc6d39bf942c322067f5d) - **mypyc**: Bump sqlglot-mypy to post9 *(PR [#7894](https://github.com/tobymao/sqlglot/pull/7894) by [@geooo109](https://github.com/geooo109))*
322
+ - [`2965ee5`](https://github.com/tobymao/sqlglot/commit/2965ee57ef8d4ad2270e6f160cd4575d48ed4697) - refactor DISTINCT agg func parsing + duckdb support *(PR [#7875](https://github.com/tobymao/sqlglot/pull/7875) by [@geooo109](https://github.com/geooo109))*
323
+
324
+
325
+ ## [v30.12.0] - 2026-06-26
326
+ ### :boom: BREAKING CHANGES
327
+ - due to [`d0ebc83`](https://github.com/tobymao/sqlglot/commit/d0ebc8353a3be4eb3258a9e078cc5e124c0e8c78) - Annotate MINUTE function *(PR [#7747](https://github.com/tobymao/sqlglot/pull/7747) by [@vishvambhar-ranoshe](https://github.com/vishvambhar-ranoshe))*:
328
+
329
+ Annotate MINUTE function (#7747)
330
+
331
+ - due to [`2e7f8b7`](https://github.com/tobymao/sqlglot/commit/2e7f8b7e6eea5301a902bacf09e00f853e6c77b5) - add UNDROP support for all Snowflake Time Travel object types *(PR [#7735](https://github.com/tobymao/sqlglot/pull/7735) by [@Danielhaiman](https://github.com/Danielhaiman))*:
332
+
333
+ add UNDROP support for all Snowflake Time Travel object types (#7735)
334
+
335
+ - due to [`87b1da8`](https://github.com/tobymao/sqlglot/commit/87b1da8f32bbdf6e5c8d5b6b3bdf454e42835740) - json extract with : roundtrip *(PR [#7750](https://github.com/tobymao/sqlglot/pull/7750) by [@geooo109](https://github.com/geooo109))*:
336
+
337
+ json extract with : roundtrip (#7750)
338
+
339
+ - due to [`dbc83df`](https://github.com/tobymao/sqlglot/commit/dbc83df5ed89be8576e6b93a34312b73b0673c43) - JSON path key quote granularity *(PR [#7758](https://github.com/tobymao/sqlglot/pull/7758) by [@geooo109](https://github.com/geooo109))*:
340
+
341
+ JSON path key quote granularity (#7758)
342
+
343
+ - due to [`5ad2add`](https://github.com/tobymao/sqlglot/commit/5ad2addd1ca4cd057c297519a5e5f5fe9c17131d) - preserve line breaks between consecutive comments in pretty mode *(PR [#7770](https://github.com/tobymao/sqlglot/pull/7770) by [@tobymao](https://github.com/tobymao))*:
344
+
345
+ preserve line breaks between consecutive comments in pretty mode (#7770)
346
+
347
+ - due to [`719a34c`](https://github.com/tobymao/sqlglot/commit/719a34cea6f90dae270d1f28c526ad1c0bd72354) - annotate replace for mysql *(PR [#7774](https://github.com/tobymao/sqlglot/pull/7774) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*:
348
+
349
+ annotate replace for mysql (#7774)
350
+
351
+ - due to [`4d621b2`](https://github.com/tobymao/sqlglot/commit/4d621b2d7e3c27bc95136fa6d7d0d54f96e9ff94) - Annotate Typeof for Spark/DBX *(PR [#7772](https://github.com/tobymao/sqlglot/pull/7772) by [@Anuja006](https://github.com/Anuja006))*:
352
+
353
+ Annotate Typeof for Spark/DBX (#7772)
354
+
355
+ - due to [`0971a28`](https://github.com/tobymao/sqlglot/commit/0971a287e86c46183a39f8af9b6821daa482c441) - annotate `TYPEOF` as string globally *(PR [#7781](https://github.com/tobymao/sqlglot/pull/7781) by [@georgesittas](https://github.com/georgesittas))*:
356
+
357
+ annotate `TYPEOF` as string globally (#7781)
358
+
359
+ - due to [`91a781b`](https://github.com/tobymao/sqlglot/commit/91a781b9cbe5fb1a3f401464b6ef76aab0715188) - coerce bigquery date function arg types [CLAUDE] *(PR [#7790](https://github.com/tobymao/sqlglot/pull/7790) by [@etonlels](https://github.com/etonlels))*:
360
+
361
+ coerce bigquery date function arg types [CLAUDE] (#7790)
362
+
363
+ - due to [`075eaf5`](https://github.com/tobymao/sqlglot/commit/075eaf5d8a67e24f85d282f5b8f9ba912f21025f) - annotate DIV for Hive/Spark/DBX *(PR [#7788](https://github.com/tobymao/sqlglot/pull/7788) by [@AbhishekASLK](https://github.com/AbhishekASLK))*:
364
+
365
+ annotate DIV for Hive/Spark/DBX (#7788)
366
+
367
+ - due to [`b1a0070`](https://github.com/tobymao/sqlglot/commit/b1a0070ca9989e76e30ab512f206423d5d6de0bc) - resolve lateral subquery columns *(PR [#7802](https://github.com/tobymao/sqlglot/pull/7802) by [@georgesittas](https://github.com/georgesittas))*:
368
+
369
+ resolve lateral subquery columns (#7802)
370
+
371
+ - due to [`64e268a`](https://github.com/tobymao/sqlglot/commit/64e268a5d95cd84a87ad74ef569fc9bf356fd3fb) - support arrayMap and arrayFilter roundtrips [CODEX] *(PR [#7794](https://github.com/tobymao/sqlglot/pull/7794) by [@gaoflow](https://github.com/gaoflow))*:
372
+
373
+ support arrayMap and arrayFilter roundtrips [CODEX] (#7794)
374
+
375
+
376
+ ### :sparkles: New Features
377
+ - [`a288150`](https://github.com/tobymao/sqlglot/commit/a288150655bb9ba612a299937bf451143b9869b4) - **duckdb**: Add transpilation support for TRY_CAST INTERVAL *(PR [#7731](https://github.com/tobymao/sqlglot/pull/7731) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
378
+ - [`d0ebc83`](https://github.com/tobymao/sqlglot/commit/d0ebc8353a3be4eb3258a9e078cc5e124c0e8c78) - **optimizer**: Annotate MINUTE function *(PR [#7747](https://github.com/tobymao/sqlglot/pull/7747) by [@vishvambhar-ranoshe](https://github.com/vishvambhar-ranoshe))*
379
+ - [`2e7f8b7`](https://github.com/tobymao/sqlglot/commit/2e7f8b7e6eea5301a902bacf09e00f853e6c77b5) - **snowflake**: add UNDROP support for all Snowflake Time Travel object types *(PR [#7735](https://github.com/tobymao/sqlglot/pull/7735) by [@Danielhaiman](https://github.com/Danielhaiman))*
380
+ - :arrow_lower_right: *addresses issue [#7734](https://github.com/tobymao/sqlglot/issues/7734) opened by [@Danielhaiman](https://github.com/Danielhaiman)*
381
+ - [`4804de4`](https://github.com/tobymao/sqlglot/commit/4804de4087caa73016a07daa2c2de6965c83f872) - **snowflake**: support `RENAME TO` clause in `UNDROP` statement *(commit by [@georgesittas](https://github.com/georgesittas))*
382
+ - [`72e6796`](https://github.com/tobymao/sqlglot/commit/72e6796bb8d7bdb6229ec2d1f352ba4d96ff3c71) - **duckdb**: Fix and updates tests for pivot subquery string lietral column names *(PR [#7757](https://github.com/tobymao/sqlglot/pull/7757) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
383
+ - [`78c5cf9`](https://github.com/tobymao/sqlglot/commit/78c5cf92f262b0743470d91b3a24c0bb462a4183) - **snowflake**: transpile Snowflake IDENTIFIER function to DuckDB *(PR [#7723](https://github.com/tobymao/sqlglot/pull/7723) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
384
+ - [`12eba76`](https://github.com/tobymao/sqlglot/commit/12eba761aa5839d1bfeb454abfacf9130723dae7) - **duckdb**: Add transpilation support for Snowflake STARTS WITH ... CONNECT BY *(PR [#7709](https://github.com/tobymao/sqlglot/pull/7709) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
385
+ - [`5ad2add`](https://github.com/tobymao/sqlglot/commit/5ad2addd1ca4cd057c297519a5e5f5fe9c17131d) - preserve line breaks between consecutive comments in pretty mode *(PR [#7770](https://github.com/tobymao/sqlglot/pull/7770) by [@tobymao](https://github.com/tobymao))*
386
+ - :arrow_lower_right: *addresses issue [#7764](https://github.com/tobymao/sqlglot/issues/7764) opened by [@betodealmeida](https://github.com/betodealmeida)*
387
+ - [`719a34c`](https://github.com/tobymao/sqlglot/commit/719a34cea6f90dae270d1f28c526ad1c0bd72354) - **optimizer**: annotate replace for mysql *(PR [#7774](https://github.com/tobymao/sqlglot/pull/7774) by [@PiyaDaswadkar](https://github.com/PiyaDaswadkar))*
388
+ - [`d4c74a2`](https://github.com/tobymao/sqlglot/commit/d4c74a2b62c64589a0b1261bbf623ca89da8c687) - **bigquery**: reject connected adjacent string literals closes [#7780](https://github.com/tobymao/sqlglot/pull/7780) *(commit by [@georgesittas](https://github.com/georgesittas))*
389
+ - [`4d621b2`](https://github.com/tobymao/sqlglot/commit/4d621b2d7e3c27bc95136fa6d7d0d54f96e9ff94) - **optimizer**: Annotate Typeof for Spark/DBX *(PR [#7772](https://github.com/tobymao/sqlglot/pull/7772) by [@Anuja006](https://github.com/Anuja006))*
390
+ - [`eaa3f98`](https://github.com/tobymao/sqlglot/commit/eaa3f982d435d3d0aea27019be5d1a4a9fd47fa2) - **optimizer**: move typeof annotator to hive instead of spark *(commit by [@georgesittas](https://github.com/georgesittas))*
391
+ - [`0971a28`](https://github.com/tobymao/sqlglot/commit/0971a287e86c46183a39f8af9b6821daa482c441) - **optimizer**: annotate `TYPEOF` as string globally *(PR [#7781](https://github.com/tobymao/sqlglot/pull/7781) by [@georgesittas](https://github.com/georgesittas))*
392
+ - [`2ecdfe5`](https://github.com/tobymao/sqlglot/commit/2ecdfe5cf9e0817bb2be9b2d83895e298dfbfe8a) - **duckdb**: transpile CONNECT_BY_ROOT *(commit by [@georgesittas](https://github.com/georgesittas))*
393
+ - [`6dbcf81`](https://github.com/tobymao/sqlglot/commit/6dbcf818b4cc938786c0d79f446ef9e9543f5e0e) - **optimizer**: Annotate types tests for spark2, spark, databricks ABS function *(PR [#7789](https://github.com/tobymao/sqlglot/pull/7789) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
394
+ - [`9f18b77`](https://github.com/tobymao/sqlglot/commit/9f18b7705833c54478ce990c3319d2153ecb8be9) - **parser**: support `CALLED ON NULL INPUT` function property *(PR [#7792](https://github.com/tobymao/sqlglot/pull/7792) by [@eruditmorina](https://github.com/eruditmorina))*
395
+ - :arrow_lower_right: *addresses issue [#4916](https://github.com/tobymao/sqlglot/issues/4916) opened by [@florian-ernst-alan](https://github.com/florian-ernst-alan)*
396
+ - [`523f7c2`](https://github.com/tobymao/sqlglot/commit/523f7c2551906ffc37a03b8dae0fea3a0fca783d) - **snowflake**: support properties before column definitions in `CREATE` statements *(PR [#7787](https://github.com/tobymao/sqlglot/pull/7787) by [@eruditmorina](https://github.com/eruditmorina))*
397
+ - [`075eaf5`](https://github.com/tobymao/sqlglot/commit/075eaf5d8a67e24f85d282f5b8f9ba912f21025f) - **optimizer**: annotate DIV for Hive/Spark/DBX *(PR [#7788](https://github.com/tobymao/sqlglot/pull/7788) by [@AbhishekASLK](https://github.com/AbhishekASLK))*
398
+ - [`7a0a9ab`](https://github.com/tobymao/sqlglot/commit/7a0a9abc516fd3280382f26b89adfc1547c10098) - **snowflake**: support invoking dynamically-resolved functions via `IDENTIFIER()` *(PR [#7796](https://github.com/tobymao/sqlglot/pull/7796) by [@eruditmorina](https://github.com/eruditmorina))*
399
+
400
+ ### :bug: Bug Fixes
401
+ - [`8889df9`](https://github.com/tobymao/sqlglot/commit/8889df9017160f3e72af562f5387cca9b4e6606e) - **transpile-bug**: update core, generator, optimizer, and parser files for select-star-ilike-rename *(PR [#7720](https://github.com/tobymao/sqlglot/pull/7720) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
402
+ - [`bd7a989`](https://github.com/tobymao/sqlglot/commit/bd7a9895e47781f3c7d0a66cd89bf1568f313a83) - **parser**: add single quotes escape for hive hierarchy *(PR [#7741](https://github.com/tobymao/sqlglot/pull/7741) by [@cchambers-rdi](https://github.com/cchambers-rdi))*
403
+ - [`56390d6`](https://github.com/tobymao/sqlglot/commit/56390d682ca7db5f0c6003fc15187385bea9c9b9) - **parser**: revert single quote escape for hive hierarchy *(commit by [@geooo109](https://github.com/geooo109))*
404
+ - [`27aee3e`](https://github.com/tobymao/sqlglot/commit/27aee3e66434fe50c744cfbb7bd344bfe8d69a5b) - **duckdb**: add ParseDatetime transpilation for BigQuery to DuckDB *(PR [#7704](https://github.com/tobymao/sqlglot/pull/7704) by [@william-goode](https://github.com/william-goode))*
405
+ - [`9bebfd2`](https://github.com/tobymao/sqlglot/commit/9bebfd283cb766eb5f3f2b8ccfd0ad345681f9c8) - **optimizer**: unwrap parens less aggressively in `qualify_tables` *(PR [#7742](https://github.com/tobymao/sqlglot/pull/7742) by [@georgesittas](https://github.com/georgesittas))*
406
+ - [`4c2cd15`](https://github.com/tobymao/sqlglot/commit/4c2cd15c7a66bb240a8508517bb492aa7ed6c84a) - **clickhouse**: `SETTINGS` cannot act as an alias token closes [#7749](https://github.com/tobymao/sqlglot/pull/7749) *(commit by [@georgesittas](https://github.com/georgesittas))*
407
+ - [`87b1da8`](https://github.com/tobymao/sqlglot/commit/87b1da8f32bbdf6e5c8d5b6b3bdf454e42835740) - **databricks**: json extract with : roundtrip *(PR [#7750](https://github.com/tobymao/sqlglot/pull/7750) by [@geooo109](https://github.com/geooo109))*
408
+ - [`da26192`](https://github.com/tobymao/sqlglot/commit/da261928a85d2996f77965450c710cc024505d68) - `_KEYWORD_TRIE` type annotation: keys are `str | int` *(PR [#7753](https://github.com/tobymao/sqlglot/pull/7753) by [@tobymao](https://github.com/tobymao))*
409
+ - [`8375e06`](https://github.com/tobymao/sqlglot/commit/8375e0674fc355448877c302a7e8d96eb3d27536) - **bigquery**: extend PROJECTION_ALIASES_SHADOW_SOURCE_NAMES to QUALIFY clause *(commit by [@tobymao](https://github.com/tobymao))*
410
+ - [`4ada15a`](https://github.com/tobymao/sqlglot/commit/4ada15a4291c110a6bd7c42cfa298fff0cfd4c6d) - **parser**: more robust ON CONFLICT *(PR [#7760](https://github.com/tobymao/sqlglot/pull/7760) by [@geooo109](https://github.com/geooo109))*
411
+ - :arrow_lower_right: *fixes issue [#7759](https://github.com/tobymao/sqlglot/issues/7759) opened by [@SherAndrei](https://github.com/SherAndrei)*
412
+ - [`dbc83df`](https://github.com/tobymao/sqlglot/commit/dbc83df5ed89be8576e6b93a34312b73b0673c43) - **parser**: JSON path key quote granularity *(PR [#7758](https://github.com/tobymao/sqlglot/pull/7758) by [@geooo109](https://github.com/geooo109))*
413
+ - [`02e2469`](https://github.com/tobymao/sqlglot/commit/02e24696524013da632cfd2e35f83da28b5e2947) - **postgres**: support jsonpath @? operator CODEX *(PR [#7766](https://github.com/tobymao/sqlglot/pull/7766) by [@fpatz](https://github.com/fpatz))*
414
+ - [`82f700e`](https://github.com/tobymao/sqlglot/commit/82f700e2aa8c7d9281063b889129e555f23b786d) - **postgres**: preserve ARRAY roundtrip for SET OPS *(PR [#7765](https://github.com/tobymao/sqlglot/pull/7765) by [@geooo109](https://github.com/geooo109))*
415
+ - [`bc71151`](https://github.com/tobymao/sqlglot/commit/bc7115100ec3e1a839b2a8a08813c4606826399a) - **postgres**: 1 arg UUID roundtrip *(PR [#7767](https://github.com/tobymao/sqlglot/pull/7767) by [@geooo109](https://github.com/geooo109))*
416
+ - [`31cee10`](https://github.com/tobymao/sqlglot/commit/31cee10b187359597aef88976d46233d25642d02) - **druid**: add JSON_VALUE RETURNING support *(PR [#7771](https://github.com/tobymao/sqlglot/pull/7771) by [@sitelight](https://github.com/sitelight))*
417
+ - [`499d132`](https://github.com/tobymao/sqlglot/commit/499d1321d85d99b09f62ec97a0730c61b5464e6b) - **postgres**: preserve contained-by operator direction CODEX *(PR [#7768](https://github.com/tobymao/sqlglot/pull/7768) by [@fpatz](https://github.com/fpatz))*
418
+ - [`7db4d25`](https://github.com/tobymao/sqlglot/commit/7db4d2515435ba3d0651f2bd467fca1a747be265) - **snowflake**: transpile FROM_ISO8601_TIMESTAMP to cast [CLAUDE] *(PR [#7776](https://github.com/tobymao/sqlglot/pull/7776) by [@baruchoxman](https://github.com/baruchoxman))*
419
+ - :arrow_lower_right: *fixes issue [#7775](https://github.com/tobymao/sqlglot/issues/7775) opened by [@baruchoxman](https://github.com/baruchoxman)*
420
+ - [`43a3d9f`](https://github.com/tobymao/sqlglot/commit/43a3d9fc9503e667d1979dba6131feb8851a588b) - **presto**: transpile FROM_ISO8601_DATE to cast [CLAUDE] *(PR [#7778](https://github.com/tobymao/sqlglot/pull/7778) by [@baruchoxman](https://github.com/baruchoxman))*
421
+ - :arrow_lower_right: *fixes issue [#7777](https://github.com/tobymao/sqlglot/issues/7777) opened by [@baruchoxman](https://github.com/baruchoxman)*
422
+ - [`2637c56`](https://github.com/tobymao/sqlglot/commit/2637c5696e4ce34d54600154376f400ba06d1860) - **snowflake**: preserve PATTERN clause on staged files without FILE_FORMAT *(PR [#7783](https://github.com/tobymao/sqlglot/pull/7783) by [@eruditmorina](https://github.com/eruditmorina))*
423
+ - :arrow_lower_right: *fixes issue [#7782](https://github.com/tobymao/sqlglot/issues/7782) opened by [@eruditmorina](https://github.com/eruditmorina)*
424
+ - [`9222960`](https://github.com/tobymao/sqlglot/commit/9222960cb1dfca49c4b18eb139d5a2c843f133a6) - **duckdb**: Fix lexical backslash handling *(PR [#7769](https://github.com/tobymao/sqlglot/pull/7769) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
425
+ - [`9385433`](https://github.com/tobymao/sqlglot/commit/9385433d96765650246d9d851d4f6197e8c958c7) - **optimizer**: stacked decorators bug *(PR [#7784](https://github.com/tobymao/sqlglot/pull/7784) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
426
+ - [`6de030d`](https://github.com/tobymao/sqlglot/commit/6de030d5f39ecc16911fbca9a41ac029e9541d21) - **optimizer**: add timestamp sub-day unit support *(PR [#7785](https://github.com/tobymao/sqlglot/pull/7785) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
427
+ - [`52fe296`](https://github.com/tobymao/sqlglot/commit/52fe2966081d430ab22d4eaf52f6d9c8cdb21248) - **exasol**: robust LISTAGG support CLAUDE *(PR [#7786](https://github.com/tobymao/sqlglot/pull/7786) by [@gaoflow](https://github.com/gaoflow))*
428
+ - [`e16a179`](https://github.com/tobymao/sqlglot/commit/e16a179a4226e7049e050f5cc86d63ace9c60b40) - **optimizer**: handle non-commutative subtraction in simplify_equality *(PR [#7791](https://github.com/tobymao/sqlglot/pull/7791) by [@code-alexander](https://github.com/code-alexander))*
429
+ - [`91a781b`](https://github.com/tobymao/sqlglot/commit/91a781b9cbe5fb1a3f401464b6ef76aab0715188) - **annotate_types**: coerce bigquery date function arg types [CLAUDE] *(PR [#7790](https://github.com/tobymao/sqlglot/pull/7790) by [@etonlels](https://github.com/etonlels))*
430
+ - [`b1a0070`](https://github.com/tobymao/sqlglot/commit/b1a0070ca9989e76e30ab512f206423d5d6de0bc) - **optimizer**: resolve lateral subquery columns *(PR [#7802](https://github.com/tobymao/sqlglot/pull/7802) by [@georgesittas](https://github.com/georgesittas))*
431
+ - :arrow_lower_right: *fixes issue [#7799](https://github.com/tobymao/sqlglot/issues/7799) opened by [@EhabEasee](https://github.com/EhabEasee)*
432
+ - [`64e268a`](https://github.com/tobymao/sqlglot/commit/64e268a5d95cd84a87ad74ef569fc9bf356fd3fb) - **clickhouse**: support arrayMap and arrayFilter roundtrips [CODEX] *(PR [#7794](https://github.com/tobymao/sqlglot/pull/7794) by [@gaoflow](https://github.com/gaoflow))*
433
+
434
+ ### :wrench: Chores
435
+ - [`6f4a990`](https://github.com/tobymao/sqlglot/commit/6f4a990356a49f27d4b056ed9a86d69a22206ab4) - **parser**: PARSE_DATETIME uses year as default *(PR [#7743](https://github.com/tobymao/sqlglot/pull/7743) by [@geooo109](https://github.com/geooo109))*
436
+ - [`62a0ba5`](https://github.com/tobymao/sqlglot/commit/62a0ba5bec243be6f1988261a0835cff60c4acfe) - **duckdb**: Add transpilation tests for ilike-replace *(PR [#7744](https://github.com/tobymao/sqlglot/pull/7744) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
437
+ - [`6f99d4e`](https://github.com/tobymao/sqlglot/commit/6f99d4e06d09e576f32f4243caabcbcb44c33a38) - fix makefile to install integration tests *(commit by [@tobymao](https://github.com/tobymao))*
438
+ - [`07fe98b`](https://github.com/tobymao/sqlglot/commit/07fe98bc446b4acde121ae88260294e89e469583) - LISTAGG refactor for exasol *(commit by [@geooo109](https://github.com/geooo109))*
439
+
440
+
4
441
  ## [v30.11.0] - 2026-06-11
5
442
  ### :boom: BREAKING CHANGES
6
443
  - due to [`df507aa`](https://github.com/tobymao/sqlglot/commit/df507aac2887d79e229cbc6003ed206e8528449c) - GET_JSON_OBJECT roundtrip *(PR [#7728](https://github.com/tobymao/sqlglot/pull/7728) by [@geooo109](https://github.com/geooo109))*:
@@ -14639,3 +15076,5 @@ pip install "sqlglot[c]" # compiled — faster, but no subclassing
14639
15076
  [v30.9.0]: https://github.com/tobymao/sqlglot/compare/v30.8.0...v30.9.0
14640
15077
  [v30.10.0]: https://github.com/tobymao/sqlglot/compare/v30.9.0...v30.10.0
14641
15078
  [v30.11.0]: https://github.com/tobymao/sqlglot/compare/v30.10.0...v30.11.0
15079
+ [v30.12.0]: https://github.com/tobymao/sqlglot/compare/v30.11.0...v30.12.0
15080
+ [v30.13.0]: https://github.com/tobymao/sqlglot/compare/v30.12.0...v30.13.0
@@ -45,6 +45,32 @@ Note: make sure to follow the [Conventional Commits](https://www.conventionalcom
45
45
 
46
46
  Each pull request should focus on a single, well-defined change. Avoid bundling multiple unrelated fixes or features in one PR. This makes code review faster and more effective, increases the likelihood of acceptance, and helps maintain a clean git history.
47
47
 
48
+ ## LLM-assisted contributions
49
+
50
+ Like many open source projects, SQLGlot has recently seen a surge of pull requests that are largely
51
+ generated by LLMs (ChatGPT, Claude, Cursor, Copilot, etc.) with little human review. These tools can
52
+ be useful, but low-effort, AI-generated PRs can create problems for the project:
53
+
54
+ - Descriptions are often padded with boilerplate AI slop that obscures what actually changed and why.
55
+ - The code frequently misses subtle nuances and edge cases that the author never took the time to understand.
56
+ - Reviewing them carefully consumes a disproportionate amount of maintainer time, often more than it
57
+ would take a maintainer to implement the change correctly from scratch.
58
+
59
+ Our policy:
60
+
61
+ - **You are fully responsible for every line you submit.** "An LLM wrote it" is not an acceptable answer
62
+ to a review question. If you cannot explain why a change is correct, do not open the PR.
63
+ - **Disclose LLM use.** Human contributors who used an LLM are encouraged to mention it in a disclaimer.
64
+ - **Write the PR description yourself.** Keep it concise and human-written; a few clear sentences without
65
+ emojis summaries and restatements of the diff are worth more than a wall of text.
66
+ - **If you are a new contributor, prefer opening an issue over a PR.** We are interested in growing
67
+ long-term contributors who genuinely understand the codebase. If you have found a bug or have a fix in
68
+ mind, open a well-written issue with a reproducible example (see below). The core team can usually
69
+ address it faster and more accurately than it takes to review an AI-generated PR.
70
+ - **Low-effort PRs that are mostly LLM-generated with little human input will be closed** without a
71
+ detailed review, with a pointer to this policy. This is not a judgment of you as a contributor, it is
72
+ simply how we keep review bandwidth focused on changes that move the project forward.
73
+
48
74
  ## Report bugs using GitHub's [issues](https://github.com/tobymao/sqlglot/issues)
49
75
 
50
76
  We use GitHub issues to track public bugs. Report a bug by opening a new issue.
@@ -66,6 +92,14 @@ We use GitHub issues to track public bugs. Report a bug by opening a new issue.
66
92
  of the code. If you want to propose a new feature, this is the right place to do it. Just start a discussion, and
67
93
  let us know why you think this feature would be a good addition to SQLGlot (by possibly including some usage examples).
68
94
 
95
+ ## Deployment (maintainers only)
96
+
97
+ To deploy a new SQLGlot version, follow these steps:
98
+
99
+ 1. Run `git pull` to make sure the local git repo is at the head of the main branch
100
+ 2. Do a `git tag` operation to bump the SQLGlot version, e.g. `git tag v28.5.0`
101
+ 3. Run `git push && git push --tags` to deploy the new version
102
+
69
103
  ## [License](https://github.com/tobymao/sqlglot/blob/main/LICENSE)
70
104
 
71
105
  By contributing, you agree that your contributions will be licensed under its MIT License.