sqlglot 30.7.0__tar.gz → 30.9.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 (328) hide show
  1. {sqlglot-30.7.0 → sqlglot-30.9.0}/CHANGELOG.md +223 -0
  2. {sqlglot-30.7.0 → sqlglot-30.9.0}/Makefile +24 -2
  3. {sqlglot-30.7.0/sqlglot.egg-info → sqlglot-30.9.0}/PKG-INFO +4 -4
  4. {sqlglot-30.7.0 → sqlglot-30.9.0}/setup.py +1 -1
  5. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/_typing.py +11 -2
  6. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/_version.py +3 -3
  7. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/bigquery.py +10 -0
  8. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/dialect.py +23 -13
  9. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/duckdb.py +1 -0
  10. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/oracle.py +2 -0
  11. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/postgres.py +4 -0
  12. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/presto.py +1 -0
  13. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/redshift.py +9 -2
  14. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/spark.py +1 -0
  15. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/expressions/aggregate.py +1 -1
  16. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/expressions/array.py +1 -1
  17. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/expressions/core.py +35 -14
  18. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/expressions/datatypes.py +18 -5
  19. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/expressions/ddl.py +9 -1
  20. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/expressions/dml.py +1 -0
  21. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/expressions/functions.py +13 -1
  22. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/expressions/query.py +29 -6
  23. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/expressions/string.py +2 -5
  24. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generator.py +239 -17
  25. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/bigquery.py +1 -0
  26. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/clickhouse.py +1 -1
  27. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/duckdb.py +46 -7
  28. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/exasol.py +27 -18
  29. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/hive.py +5 -4
  30. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/mysql.py +38 -0
  31. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/oracle.py +10 -2
  32. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/postgres.py +3 -0
  33. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/redshift.py +30 -0
  34. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/singlestore.py +6 -1
  35. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/snowflake.py +1 -0
  36. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/spark.py +8 -2
  37. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/sqlite.py +39 -10
  38. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/tsql.py +19 -7
  39. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/jsonpath.py +2 -1
  40. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/annotate_types.py +121 -39
  41. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/canonicalize.py +1 -1
  42. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/eliminate_joins.py +8 -8
  43. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/eliminate_subqueries.py +7 -5
  44. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/normalize.py +20 -10
  45. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/optimize_joins.py +4 -3
  46. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/pushdown_predicates.py +39 -19
  47. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/pushdown_projections.py +13 -1
  48. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/qualify.py +3 -2
  49. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/qualify_columns.py +3 -3
  50. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/scope.py +13 -0
  51. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/simplify.py +31 -3
  52. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/unnest_subqueries.py +12 -2
  53. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parser.py +207 -24
  54. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/bigquery.py +37 -16
  55. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/clickhouse.py +20 -8
  56. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/databricks.py +1 -3
  57. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/dremio.py +2 -2
  58. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/drill.py +1 -1
  59. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/duckdb.py +9 -3
  60. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/exasol.py +1 -1
  61. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/hive.py +26 -17
  62. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/mysql.py +13 -3
  63. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/oracle.py +26 -4
  64. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/postgres.py +7 -4
  65. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/presto.py +8 -4
  66. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/redshift.py +26 -1
  67. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/singlestore.py +3 -3
  68. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/snowflake.py +21 -5
  69. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/spark2.py +3 -2
  70. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/tsql.py +72 -10
  71. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/planner.py +36 -43
  72. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/schema.py +19 -13
  73. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/serde.py +11 -7
  74. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/time.py +6 -5
  75. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/tokenizer_core.py +3 -0
  76. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/tokens.py +1 -0
  77. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/transforms.py +68 -57
  78. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/typing/__init__.py +17 -2
  79. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/typing/bigquery.py +0 -9
  80. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/typing/clickhouse.py +5 -0
  81. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/typing/duckdb.py +1 -0
  82. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/typing/hive.py +8 -0
  83. sqlglot-30.9.0/sqlglot/typing/postgres.py +11 -0
  84. sqlglot-30.9.0/sqlglot/typing/redshift.py +17 -0
  85. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/typing/snowflake.py +5 -1
  86. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/typing/spark.py +4 -0
  87. sqlglot-30.9.0/sqlglot/typing/spark2.py +81 -0
  88. {sqlglot-30.7.0 → sqlglot-30.9.0/sqlglot.egg-info}/PKG-INFO +4 -4
  89. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot.egg-info/SOURCES.txt +1 -0
  90. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot.egg-info/requires.txt +3 -3
  91. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglotc/pyproject.toml +2 -2
  92. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_bigquery.py +80 -0
  93. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_clickhouse.py +8 -6
  94. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_databricks.py +11 -3
  95. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_dialect.py +30 -0
  96. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_duckdb.py +46 -2
  97. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_exasol.py +20 -0
  98. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_mysql.py +69 -1
  99. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_oracle.py +13 -0
  100. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_pipe_syntax.py +24 -8
  101. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_postgres.py +81 -4
  102. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_spark.py +17 -3
  103. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_sqlite.py +21 -0
  104. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_tsql.py +120 -0
  105. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/annotate_functions.sql +218 -0
  106. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/normalize.sql +3 -0
  107. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/optimizer.sql +2 -2
  108. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/pushdown_projections.sql +43 -0
  109. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-h/tpc-h.sql +9 -14
  110. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/unnest_subqueries.sql +12 -0
  111. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/leakcheck.py +5 -1
  112. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_expressions.py +6 -1
  113. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_jsonpath.py +8 -0
  114. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_optimizer.py +25 -0
  115. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_parser.py +29 -0
  116. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_transpile.py +44 -1
  117. sqlglot-30.7.0/sqlglot/typing/redshift.py +0 -11
  118. sqlglot-30.7.0/sqlglot/typing/spark2.py +0 -86
  119. {sqlglot-30.7.0 → sqlglot-30.9.0}/.gitignore +0 -0
  120. {sqlglot-30.7.0 → sqlglot-30.9.0}/.gitmodules +0 -0
  121. {sqlglot-30.7.0 → sqlglot-30.9.0}/.gitpod.yml +0 -0
  122. {sqlglot-30.7.0 → sqlglot-30.9.0}/.pre-commit-config.yaml +0 -0
  123. {sqlglot-30.7.0 → sqlglot-30.9.0}/AGENTS.md +0 -0
  124. {sqlglot-30.7.0 → sqlglot-30.9.0}/CLAUDE.md +0 -0
  125. {sqlglot-30.7.0 → sqlglot-30.9.0}/CONTRIBUTING.md +0 -0
  126. {sqlglot-30.7.0 → sqlglot-30.9.0}/LICENSE +0 -0
  127. {sqlglot-30.7.0 → sqlglot-30.9.0}/MANIFEST.in +0 -0
  128. {sqlglot-30.7.0 → sqlglot-30.9.0}/README.md +0 -0
  129. {sqlglot-30.7.0 → sqlglot-30.9.0}/pyproject.toml +0 -0
  130. {sqlglot-30.7.0 → sqlglot-30.9.0}/setup.cfg +0 -0
  131. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/__init__.py +0 -0
  132. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/__main__.py +0 -0
  133. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/__init__.py +0 -0
  134. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/athena.py +0 -0
  135. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/clickhouse.py +0 -0
  136. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/databricks.py +0 -0
  137. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/doris.py +0 -0
  138. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/dremio.py +0 -0
  139. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/drill.py +0 -0
  140. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/druid.py +0 -0
  141. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/dune.py +0 -0
  142. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/exasol.py +0 -0
  143. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/fabric.py +0 -0
  144. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/hive.py +0 -0
  145. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/materialize.py +0 -0
  146. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/mysql.py +0 -0
  147. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/prql.py +0 -0
  148. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/risingwave.py +0 -0
  149. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/singlestore.py +0 -0
  150. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/snowflake.py +0 -0
  151. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/solr.py +0 -0
  152. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/spark2.py +0 -0
  153. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/sqlite.py +0 -0
  154. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/starrocks.py +0 -0
  155. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/tableau.py +0 -0
  156. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/teradata.py +0 -0
  157. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/trino.py +0 -0
  158. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/dialects/tsql.py +0 -0
  159. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/diff.py +0 -0
  160. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/errors.py +0 -0
  161. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/executor/__init__.py +0 -0
  162. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/executor/context.py +0 -0
  163. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/executor/env.py +0 -0
  164. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/executor/python.py +0 -0
  165. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/executor/table.py +0 -0
  166. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/expressions/__init__.py +0 -0
  167. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/expressions/builders.py +0 -0
  168. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/expressions/constraints.py +0 -0
  169. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/expressions/json.py +0 -0
  170. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/expressions/math.py +0 -0
  171. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/expressions/properties.py +0 -0
  172. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/expressions/temporal.py +0 -0
  173. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/__init__.py +0 -0
  174. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/athena.py +0 -0
  175. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/databricks.py +0 -0
  176. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/doris.py +0 -0
  177. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/dremio.py +0 -0
  178. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/drill.py +0 -0
  179. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/druid.py +0 -0
  180. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/dune.py +0 -0
  181. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/fabric.py +0 -0
  182. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/materialize.py +0 -0
  183. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/presto.py +0 -0
  184. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/prql.py +0 -0
  185. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/python.py +0 -0
  186. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/risingwave.py +0 -0
  187. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/solr.py +0 -0
  188. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/spark2.py +0 -0
  189. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/starrocks.py +0 -0
  190. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/tableau.py +0 -0
  191. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/teradata.py +0 -0
  192. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/generators/trino.py +0 -0
  193. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/helper.py +0 -0
  194. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/lineage.py +0 -0
  195. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/__init__.py +0 -0
  196. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/canonicalize_internal_names.py +0 -0
  197. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/eliminate_ctes.py +0 -0
  198. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/isolate_table_selects.py +0 -0
  199. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/merge_subqueries.py +0 -0
  200. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/normalize_identifiers.py +0 -0
  201. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/optimizer.py +0 -0
  202. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/qualify_tables.py +0 -0
  203. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/optimizer/resolver.py +0 -0
  204. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/__init__.py +0 -0
  205. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/athena.py +0 -0
  206. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/base.py +0 -0
  207. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/doris.py +0 -0
  208. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/druid.py +0 -0
  209. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/dune.py +0 -0
  210. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/fabric.py +0 -0
  211. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/materialize.py +0 -0
  212. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/prql.py +0 -0
  213. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/risingwave.py +0 -0
  214. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/solr.py +0 -0
  215. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/spark.py +0 -0
  216. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/sqlite.py +0 -0
  217. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/starrocks.py +0 -0
  218. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/tableau.py +0 -0
  219. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/teradata.py +0 -0
  220. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/parsers/trino.py +0 -0
  221. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/py.typed +0 -0
  222. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/trie.py +0 -0
  223. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/typing/mysql.py +0 -0
  224. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/typing/presto.py +0 -0
  225. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot/typing/tsql.py +0 -0
  226. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot.egg-info/dependency_links.txt +0 -0
  227. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot.egg-info/top_level.txt +0 -0
  228. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglot.png +0 -0
  229. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglotc/MANIFEST.in +0 -0
  230. {sqlglot-30.7.0 → sqlglot-30.9.0}/sqlglotc/setup.py +0 -0
  231. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/__init__.py +0 -0
  232. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/__init__.py +0 -0
  233. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_athena.py +0 -0
  234. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_doris.py +0 -0
  235. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_dremio.py +0 -0
  236. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_drill.py +0 -0
  237. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_druid.py +0 -0
  238. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_dune.py +0 -0
  239. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_fabric.py +0 -0
  240. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_hive.py +0 -0
  241. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_materialize.py +0 -0
  242. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_presto.py +0 -0
  243. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_prql.py +0 -0
  244. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_redshift.py +0 -0
  245. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_risingwave.py +0 -0
  246. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_singlestore.py +0 -0
  247. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_snowflake.py +0 -0
  248. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_solr.py +0 -0
  249. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_starrocks.py +0 -0
  250. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_tableau.py +0 -0
  251. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_teradata.py +0 -0
  252. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/dialects/test_trino.py +0 -0
  253. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/identity.sql +0 -0
  254. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/jsonpath/LICENSE +0 -0
  255. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/jsonpath/cts.json +0 -0
  256. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/annotate_types.sql +0 -0
  257. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/canonicalize.sql +0 -0
  258. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/canonicalize_internal_names.sql +0 -0
  259. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/eliminate_ctes.sql +0 -0
  260. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/eliminate_joins.sql +0 -0
  261. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/eliminate_subqueries.sql +0 -0
  262. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/isolate_table_selects.sql +0 -0
  263. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/merge_subqueries.sql +0 -0
  264. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/normalize_identifiers.sql +0 -0
  265. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/optimize_joins.sql +0 -0
  266. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/pushdown_cte_alias_columns.sql +0 -0
  267. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/pushdown_predicates.sql +0 -0
  268. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/qualify_columns.sql +0 -0
  269. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/qualify_columns__invalid.sql +0 -0
  270. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/qualify_columns__with_invisible.sql +0 -0
  271. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/qualify_columns_ddl.sql +0 -0
  272. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/qualify_tables.sql +0 -0
  273. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/quote_identifiers.sql +0 -0
  274. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/simplify.sql +0 -0
  275. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/call_center.csv.gz +0 -0
  276. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/catalog_page.csv.gz +0 -0
  277. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/catalog_returns.csv.gz +0 -0
  278. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/catalog_sales.csv.gz +0 -0
  279. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/customer.csv.gz +0 -0
  280. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/customer_address.csv.gz +0 -0
  281. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/customer_demographics.csv.gz +0 -0
  282. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/date_dim.csv.gz +0 -0
  283. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/household_demographics.csv.gz +0 -0
  284. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/income_band.csv.gz +0 -0
  285. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/inventory.csv.gz +0 -0
  286. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/item.csv.gz +0 -0
  287. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/promotion.csv.gz +0 -0
  288. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/reason.csv.gz +0 -0
  289. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/ship_mode.csv.gz +0 -0
  290. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/store.csv.gz +0 -0
  291. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/store_returns.csv.gz +0 -0
  292. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/store_sales.csv.gz +0 -0
  293. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/time_dim.csv.gz +0 -0
  294. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/tpc-ds.sql +0 -0
  295. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/warehouse.csv.gz +0 -0
  296. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/web_page.csv.gz +0 -0
  297. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/web_returns.csv.gz +0 -0
  298. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/web_sales.csv.gz +0 -0
  299. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-ds/web_site.csv.gz +0 -0
  300. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-h/customer.csv.gz +0 -0
  301. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-h/lineitem.csv.gz +0 -0
  302. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-h/nation.csv.gz +0 -0
  303. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-h/orders.csv.gz +0 -0
  304. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-h/part.csv.gz +0 -0
  305. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-h/partsupp.csv.gz +0 -0
  306. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-h/region.csv.gz +0 -0
  307. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/optimizer/tpc-h/supplier.csv.gz +0 -0
  308. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/partial.sql +0 -0
  309. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/fixtures/pretty.sql +0 -0
  310. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/gen_fixtures.py +0 -0
  311. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/helpers.py +0 -0
  312. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/sqlglot/__init__.py +0 -0
  313. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_build.py +0 -0
  314. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_dialect_entry_points.py +0 -0
  315. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_dialect_imports.py +0 -0
  316. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_diff.py +0 -0
  317. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_docs.py +0 -0
  318. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_errors.py +0 -0
  319. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_executor.py +0 -0
  320. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_generator.py +0 -0
  321. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_helper.py +0 -0
  322. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_integration_loader.py +0 -0
  323. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_lineage.py +0 -0
  324. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_schema.py +0 -0
  325. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_serde.py +0 -0
  326. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_time.py +0 -0
  327. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_tokens.py +0 -0
  328. {sqlglot-30.7.0 → sqlglot-30.9.0}/tests/test_transforms.py +0 -0
@@ -1,6 +1,227 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ ## [v30.8.0] - 2026-05-13
5
+ ### :boom: BREAKING CHANGES
6
+ - due to [`6944a6c`](https://github.com/tobymao/sqlglot/commit/6944a6c3ff5a9d18f31ddab53239cbce2e702055) - Improve typing annotations for planner, schema, serde, and transforms modules *(PR [#7579](https://github.com/tobymao/sqlglot/pull/7579) by [@OutSquareCapital](https://github.com/OutSquareCapital))*:
7
+
8
+ Improve typing annotations for planner, schema, serde, and transforms modules (#7579)
9
+
10
+ - due to [`9d84348`](https://github.com/tobymao/sqlglot/commit/9d843482f1765f449dd21a4dcccff14aa0837ffe) - annotate MD5 for clickhouse *(PR [#7602](https://github.com/tobymao/sqlglot/pull/7602) by [@AbhishekASLK](https://github.com/AbhishekASLK))*:
11
+
12
+ annotate MD5 for clickhouse (#7602)
13
+
14
+ - due to [`d1147b6`](https://github.com/tobymao/sqlglot/commit/d1147b6ec3e97c55ee27fa8dc8079175328b16e3) - roundtrip for ST_MAKEPOINT / 4 parameters *(PR [#7605](https://github.com/tobymao/sqlglot/pull/7605) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*:
15
+
16
+ roundtrip for ST_MAKEPOINT / 4 parameters (#7605)
17
+
18
+ - due to [`4bd7d1d`](https://github.com/tobymao/sqlglot/commit/4bd7d1d02d35cc83a94d8a7ed5edbbff1d409483) - preserve NOT LIKE quantifiers during generation *(PR [#7611](https://github.com/tobymao/sqlglot/pull/7611) by [@bialkou](https://github.com/bialkou))*:
19
+
20
+ preserve NOT LIKE quantifiers during generation (#7611)
21
+
22
+ - due to [`fc6b87a`](https://github.com/tobymao/sqlglot/commit/fc6b87a3a533ab105f38f9f43abea4949de4e24e) - parse `CONVERT` into `Cast` instead of `TryCast` *(PR [#7609](https://github.com/tobymao/sqlglot/pull/7609) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*:
23
+
24
+ parse `CONVERT` into `Cast` instead of `TryCast` (#7609)
25
+
26
+ - due to [`b6d2c76`](https://github.com/tobymao/sqlglot/commit/b6d2c760b7cf3d965fef6d5809d87d07a1cc230a) - avoid pushdown projections for column dependent funcs *(PR [#7614](https://github.com/tobymao/sqlglot/pull/7614) by [@geooo109](https://github.com/geooo109))*:
27
+
28
+ avoid pushdown projections for column dependent funcs (#7614)
29
+
30
+ - due to [`a16f7d0`](https://github.com/tobymao/sqlglot/commit/a16f7d0aa2b5b6a505b65788d0a84bcfef4d3c8c) - disambiguate 2-arg date_add from 3-arg dateadd [CLAUDE] *(PR [#7588](https://github.com/tobymao/sqlglot/pull/7588) by [@RichardHughes-amp](https://github.com/RichardHughes-amp))*:
31
+
32
+ disambiguate 2-arg date_add from 3-arg dateadd [CLAUDE] (#7588)
33
+
34
+ - due to [`ae58fd1`](https://github.com/tobymao/sqlglot/commit/ae58fd10c33b05f4f5ae631d6b1ee0b88ba64e0a) - parse CREATE TYPE statements *(PR [#7616](https://github.com/tobymao/sqlglot/pull/7616) by [@devfros](https://github.com/devfros))*:
35
+
36
+ parse CREATE TYPE statements (#7616)
37
+
38
+ - due to [`8dcb2d3`](https://github.com/tobymao/sqlglot/commit/8dcb2d3599c5637dfa6a8438df8148d6706a5217) - register First and Last in Hive typing *(PR [#7623](https://github.com/tobymao/sqlglot/pull/7623) by [@RichardHughes-amp](https://github.com/RichardHughes-amp))*:
39
+
40
+ register First and Last in Hive typing (#7623)
41
+
42
+ - due to [`8ce7d78`](https://github.com/tobymao/sqlglot/commit/8ce7d78901994870b6569361dffaa4b9fd6dec54) - PIVOT qualify with alias + type annotation *(PR [#7586](https://github.com/tobymao/sqlglot/pull/7586) by [@geooo109](https://github.com/geooo109))*:
43
+
44
+ PIVOT qualify with alias + type annotation (#7586)
45
+
46
+ - due to [`c876570`](https://github.com/tobymao/sqlglot/commit/c8765701e0d4c87293409e5e0fe5d605f2286b3c) - roundtrip for HH12 time mapping *(PR [#7626](https://github.com/tobymao/sqlglot/pull/7626) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*:
47
+
48
+ roundtrip for HH12 time mapping (#7626)
49
+
50
+ - due to [`87cc106`](https://github.com/tobymao/sqlglot/commit/87cc1069e7703b77a5adde652154fcade16b8c26) - roundtrip support for CURRENT_USER_ID and USER *(PR [#7633](https://github.com/tobymao/sqlglot/pull/7633) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*:
51
+
52
+ roundtrip support for CURRENT_USER_ID and USER (#7633)
53
+
54
+ - due to [`c6615a9`](https://github.com/tobymao/sqlglot/commit/c6615a910953f8e07a9d4ec2269bb537c83f40ea) - propagate type through IgnoreNulls/RespectNulls wrappers [CLAUDE] *(PR [#7636](https://github.com/tobymao/sqlglot/pull/7636) by [@RichardHughes-amp](https://github.com/RichardHughes-amp))*:
55
+
56
+ propagate type through IgnoreNulls/RespectNulls wrappers [CLAUDE] (#7636)
57
+
58
+ - due to [`9e37283`](https://github.com/tobymao/sqlglot/commit/9e37283ab01b089c9b50b5cd59b3a1eaf24e98a1) - case-insensitive alias matching for LOCAL. prefix *(PR [#7631](https://github.com/tobymao/sqlglot/pull/7631) by [@antonireus](https://github.com/antonireus))*:
59
+
60
+ case-insensitive alias matching for LOCAL. prefix (#7631)
61
+
62
+
63
+ ### :sparkles: New Features
64
+ - [`af5dc38`](https://github.com/tobymao/sqlglot/commit/af5dc38762552e7627e6f85e86345a5242855ed3) - **duckdb**: Add transpilation support for HEX_DECODE_STRING *(PR [#7590](https://github.com/tobymao/sqlglot/pull/7590) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
65
+ - [`9507aad`](https://github.com/tobymao/sqlglot/commit/9507aad7ba8ddef02adbe7fdf3098ead9c7ba1d6) - **duckdb**: Consolidate HEX_ENCODE_ into HEX function *(PR [#7603](https://github.com/tobymao/sqlglot/pull/7603) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
66
+ - [`9d84348`](https://github.com/tobymao/sqlglot/commit/9d843482f1765f449dd21a4dcccff14aa0837ffe) - **optimizer**: annotate MD5 for clickhouse *(PR [#7602](https://github.com/tobymao/sqlglot/pull/7602) by [@AbhishekASLK](https://github.com/AbhishekASLK))*
67
+ - [`ae58fd1`](https://github.com/tobymao/sqlglot/commit/ae58fd10c33b05f4f5ae631d6b1ee0b88ba64e0a) - **postgres**: parse CREATE TYPE statements *(PR [#7616](https://github.com/tobymao/sqlglot/pull/7616) by [@devfros](https://github.com/devfros))*
68
+ - :arrow_lower_right: *addresses issue [#7612](https://github.com/tobymao/sqlglot/issues/7612) opened by [@devfros](https://github.com/devfros)*
69
+ - [`80e0929`](https://github.com/tobymao/sqlglot/commit/80e0929cc1f105fbd060493ed094d4308e946063) - **parser**: handle `COLLATE` in nested types and `CAST` closes [#7624](https://github.com/tobymao/sqlglot/pull/7624) *(PR [#7630](https://github.com/tobymao/sqlglot/pull/7630) by [@georgesittas](https://github.com/georgesittas))*
70
+ - [`8ce7d78`](https://github.com/tobymao/sqlglot/commit/8ce7d78901994870b6569361dffaa4b9fd6dec54) - **optimizer**: PIVOT qualify with alias + type annotation *(PR [#7586](https://github.com/tobymao/sqlglot/pull/7586) by [@geooo109](https://github.com/geooo109))*
71
+ - [`cbd3576`](https://github.com/tobymao/sqlglot/commit/cbd3576a4b93e37148da4b93bcabe84fdd9f31c0) - **mysql**: Support `CHANGE COLUMN`. *(PR [#7638](https://github.com/tobymao/sqlglot/pull/7638) by [@burnison](https://github.com/burnison))*
72
+
73
+ ### :bug: Bug Fixes
74
+ - [`593d5a3`](https://github.com/tobymao/sqlglot/commit/593d5a3691990182d69f2c790c8d1b3d23635502) - **redshift**: support ALL in aggregate funcs *(PR [#7592](https://github.com/tobymao/sqlglot/pull/7592) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
75
+ - [`b8bf13e`](https://github.com/tobymao/sqlglot/commit/b8bf13ef775551ebd1c5e4a46ca4f21bb3689679) - **redshift**: support OBJECT_TRANSFORM function *(PR [#7601](https://github.com/tobymao/sqlglot/pull/7601) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
76
+ - [`1206bea`](https://github.com/tobymao/sqlglot/commit/1206bea7715f3af8c6e65dbe8641002720217782) - **redshift**: parser issue for TOP N DISTINCT *(PR [#7594](https://github.com/tobymao/sqlglot/pull/7594) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
77
+ - [`d1147b6`](https://github.com/tobymao/sqlglot/commit/d1147b6ec3e97c55ee27fa8dc8079175328b16e3) - **redshift**: roundtrip for ST_MAKEPOINT / 4 parameters *(PR [#7605](https://github.com/tobymao/sqlglot/pull/7605) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
78
+ - [`b9f18ee`](https://github.com/tobymao/sqlglot/commit/b9f18eea6762f8ce03ff5a426db8195db375f455) - **sqlite**: support named CTE columns closes [#7617](https://github.com/tobymao/sqlglot/pull/7617) *(commit by [@georgesittas](https://github.com/georgesittas))*
79
+ - [`c8b19aa`](https://github.com/tobymao/sqlglot/commit/c8b19aafe3e8b90ae7c67d816c1bedca86300192) - Parametrized bigdecimal mapping was being concatenated with params *(PR [#7584](https://github.com/tobymao/sqlglot/pull/7584) by [@themisvaltinos](https://github.com/themisvaltinos))*
80
+ - [`4bd7d1d`](https://github.com/tobymao/sqlglot/commit/4bd7d1d02d35cc83a94d8a7ed5edbbff1d409483) - **postgres**: preserve NOT LIKE quantifiers during generation *(PR [#7611](https://github.com/tobymao/sqlglot/pull/7611) by [@bialkou](https://github.com/bialkou))*
81
+ - [`fc6b87a`](https://github.com/tobymao/sqlglot/commit/fc6b87a3a533ab105f38f9f43abea4949de4e24e) - **redshift**: parse `CONVERT` into `Cast` instead of `TryCast` *(PR [#7609](https://github.com/tobymao/sqlglot/pull/7609) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
82
+ - [`b6d2c76`](https://github.com/tobymao/sqlglot/commit/b6d2c760b7cf3d965fef6d5809d87d07a1cc230a) - **optimizer**: avoid pushdown projections for column dependent funcs *(PR [#7614](https://github.com/tobymao/sqlglot/pull/7614) by [@geooo109](https://github.com/geooo109))*
83
+ - :arrow_lower_right: *fixes issue [#7607](https://github.com/tobymao/sqlglot/issues/7607) opened by [@ligfx](https://github.com/ligfx)*
84
+ - [`a16f7d0`](https://github.com/tobymao/sqlglot/commit/a16f7d0aa2b5b6a505b65788d0a84bcfef4d3c8c) - **databricks**: disambiguate 2-arg date_add from 3-arg dateadd [CLAUDE] *(PR [#7588](https://github.com/tobymao/sqlglot/pull/7588) by [@RichardHughes-amp](https://github.com/RichardHughes-amp))*
85
+ - [`6931eec`](https://github.com/tobymao/sqlglot/commit/6931eece4ec56f8b31d2026be41ebb071804adc9) - **redshift**: roundtrip fix ARRAY_CONTAINS *(PR [#7606](https://github.com/tobymao/sqlglot/pull/7606) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
86
+ - [`8dcb2d3`](https://github.com/tobymao/sqlglot/commit/8dcb2d3599c5637dfa6a8438df8148d6706a5217) - **annotate**: register First and Last in Hive typing *(PR [#7623](https://github.com/tobymao/sqlglot/pull/7623) by [@RichardHughes-amp](https://github.com/RichardHughes-amp))*
87
+ - [`a1fa154`](https://github.com/tobymao/sqlglot/commit/a1fa1546c926b2858cfc5adcfbd186731de40eba) - **parser**: from-first duckdb syntax improvement for pivot fixes [#7628](https://github.com/tobymao/sqlglot/pull/7628) *(commit by [@georgesittas](https://github.com/georgesittas))*
88
+ - [`e7e1fb0`](https://github.com/tobymao/sqlglot/commit/e7e1fb0d3d16054c1076e9f0570b336643b371d8) - **parser**: issue with no parenthesis functions *(PR [#7621](https://github.com/tobymao/sqlglot/pull/7621) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
89
+ - [`b1aa0c5`](https://github.com/tobymao/sqlglot/commit/b1aa0c5fe951a6a2efb7f90c4ef2ed7a4c5ac200) - **redshift**: try_cast roundtrip *(PR [#7622](https://github.com/tobymao/sqlglot/pull/7622) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
90
+ - [`5525f3f`](https://github.com/tobymao/sqlglot/commit/5525f3fdec3c68ad374f39e8c30cdd38ee9b573b) - **sqlite**: prevent ALTER TABLE RENAME TO from falling back to Command *(PR [#7629](https://github.com/tobymao/sqlglot/pull/7629) by [@dedyoc](https://github.com/dedyoc))*
91
+ - :arrow_lower_right: *fixes issue [#7427](https://github.com/tobymao/sqlglot/issues/7427) opened by [@ppacac](https://github.com/ppacac)*
92
+ - [`c876570`](https://github.com/tobymao/sqlglot/commit/c8765701e0d4c87293409e5e0fe5d605f2286b3c) - **redshift**: roundtrip for HH12 time mapping *(PR [#7626](https://github.com/tobymao/sqlglot/pull/7626) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
93
+ - [`87cc106`](https://github.com/tobymao/sqlglot/commit/87cc1069e7703b77a5adde652154fcade16b8c26) - **redshift**: roundtrip support for CURRENT_USER_ID and USER *(PR [#7633](https://github.com/tobymao/sqlglot/pull/7633) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
94
+ - [`6329684`](https://github.com/tobymao/sqlglot/commit/63296846f6a7a683af21683acb24aad7a63bb3f5) - **parser**: allow WINDOW clause without FROM *(PR [#7640](https://github.com/tobymao/sqlglot/pull/7640) by [@1fanwang](https://github.com/1fanwang))*
95
+ - :arrow_lower_right: *fixes issue [#7438](https://github.com/tobymao/sqlglot/issues/7438) opened by [@ppacac](https://github.com/ppacac)*
96
+ - [`c6615a9`](https://github.com/tobymao/sqlglot/commit/c6615a910953f8e07a9d4ec2269bb537c83f40ea) - **annotate_types**: propagate type through IgnoreNulls/RespectNulls wrappers [CLAUDE] *(PR [#7636](https://github.com/tobymao/sqlglot/pull/7636) by [@RichardHughes-amp](https://github.com/RichardHughes-amp))*
97
+ - [`9e37283`](https://github.com/tobymao/sqlglot/commit/9e37283ab01b089c9b50b5cd59b3a1eaf24e98a1) - **exasol**: case-insensitive alias matching for LOCAL. prefix *(PR [#7631](https://github.com/tobymao/sqlglot/pull/7631) by [@antonireus](https://github.com/antonireus))*
98
+
99
+ ### :recycle: Refactors
100
+ - [`6944a6c`](https://github.com/tobymao/sqlglot/commit/6944a6c3ff5a9d18f31ddab53239cbce2e702055) - Improve typing annotations for planner, schema, serde, and transforms modules *(PR [#7579](https://github.com/tobymao/sqlglot/pull/7579) by [@OutSquareCapital](https://github.com/OutSquareCapital))*
101
+ - [`a2a9ba5`](https://github.com/tobymao/sqlglot/commit/a2a9ba59c15f63b6831674481af1ceb8420dc4de) - **schema**: cache `find` lookups in schema *(PR [#7615](https://github.com/tobymao/sqlglot/pull/7615) by [@georgesittas](https://github.com/georgesittas))*
102
+ - [`958b27d`](https://github.com/tobymao/sqlglot/commit/958b27d0f8f983326a5a480be3962d066f7639f3) - improve `optimizer::pushdown_predicates` typing *(PR [#7613](https://github.com/tobymao/sqlglot/pull/7613) by [@OutSquareCapital](https://github.com/OutSquareCapital))*
103
+ - [`96716a6`](https://github.com/tobymao/sqlglot/commit/96716a6a2a2db13deed0749266ce449de5f9153d) - improve `optimizer::{eliminate_joins, eliminate_subqueries}` typing *(PR [#7618](https://github.com/tobymao/sqlglot/pull/7618) by [@OutSquareCapital](https://github.com/OutSquareCapital))*
104
+ - [`7e7cf8b`](https://github.com/tobymao/sqlglot/commit/7e7cf8b06397ed440921d079a39112e073bcfa80) - make dialect in build_formatted_time optional, fetch it from parser *(PR [#7639](https://github.com/tobymao/sqlglot/pull/7639) by [@georgesittas](https://github.com/georgesittas))*
105
+
106
+
107
+ ## [v30.7.0] - 2026-05-04
108
+ ### :boom: BREAKING CHANGES
109
+ - due to [`68861d9`](https://github.com/tobymao/sqlglot/commit/68861d9f3aaa6c9ae405dacfa22117fb64a1d803) - support `DROP PRIMARY KEY`. *(PR [#7530](https://github.com/tobymao/sqlglot/pull/7530) by [@burnison](https://github.com/burnison))*:
110
+
111
+ support `DROP PRIMARY KEY`. (#7530)
112
+
113
+ - due to [`8669e55`](https://github.com/tobymao/sqlglot/commit/8669e55f385eb759bbf5ea1ec095e63ec48cfa91) - mark DECOMPRESS_STRING as unsupported [CLAUDE] *(PR [#7545](https://github.com/tobymao/sqlglot/pull/7545) by [@fivetran-ashashankar](https://github.com/fivetran-ashashankar))*:
114
+
115
+ mark DECOMPRESS_STRING as unsupported [CLAUDE] (#7545)
116
+
117
+ - due to [`b334dcc`](https://github.com/tobymao/sqlglot/commit/b334dccb7f94993e71fa4f0e59d984a3f0d351d0) - mark DECOMPRESS_BINARY as unsupported *(PR [#7546](https://github.com/tobymao/sqlglot/pull/7546) by [@fivetran-ashashankar](https://github.com/fivetran-ashashankar))*:
118
+
119
+ mark DECOMPRESS_BINARY as unsupported (#7546)
120
+
121
+ - due to [`8f572f8`](https://github.com/tobymao/sqlglot/commit/8f572f8656c9a5a5e45ac25607af6204bca58773) - qualify UNPIVOT on CTE sources *(PR [#7550](https://github.com/tobymao/sqlglot/pull/7550) by [@georgesittas](https://github.com/georgesittas))*:
122
+
123
+ qualify UNPIVOT on CTE sources (#7550)
124
+
125
+ - due to [`b4dea8c`](https://github.com/tobymao/sqlglot/commit/b4dea8c7e4c9e598e33efc56f007a0ab6dab9b5d) - Transpilation support for UUID_STRING *(commit by [@fivetran-ashashankar](https://github.com/fivetran-ashashankar))*:
126
+
127
+ Transpilation support for UUID_STRING
128
+
129
+ - due to [`e883b0b`](https://github.com/tobymao/sqlglot/commit/e883b0b39ebdeeab408743786f66d62dd92b3267) - map duckdb `LIST` to `ArrayAgg` *(PR [#7552](https://github.com/tobymao/sqlglot/pull/7552) by [@georgesittas](https://github.com/georgesittas))*:
130
+
131
+ map duckdb `LIST` to `ArrayAgg` (#7552)
132
+
133
+ - due to [`ded89c2`](https://github.com/tobymao/sqlglot/commit/ded89c2e8edc6eee14f9fabb3d6fd036cced284a) - Add transpilation support for STRTOK_TO_ARRAY function *(PR [#7536](https://github.com/tobymao/sqlglot/pull/7536) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*:
134
+
135
+ Add transpilation support for STRTOK_TO_ARRAY function (#7536)
136
+
137
+ - due to [`f743755`](https://github.com/tobymao/sqlglot/commit/f743755e7b9ad45839c9c6f651d199bd5441b661) - register NAMED_STRUCT in parser so struct fields annotate CLAUDE *(PR [#7561](https://github.com/tobymao/sqlglot/pull/7561) by [@RichardHughes-amp](https://github.com/RichardHughes-amp))*:
138
+
139
+ register NAMED_STRUCT in parser so struct fields annotate CLAUDE (#7561)
140
+
141
+ - due to [`4cca3a0`](https://github.com/tobymao/sqlglot/commit/4cca3a017955f310b83988e36be31337859ba9fa) - support arbitrarily many args in JSONArray [CLAUDE] *(PR [#7559](https://github.com/tobymao/sqlglot/pull/7559) by [@maxa-jonathan-hallee](https://github.com/maxa-jonathan-hallee))*:
142
+
143
+ support arbitrarily many args in JSONArray [CLAUDE] (#7559)
144
+
145
+ - due to [`206e2f8`](https://github.com/tobymao/sqlglot/commit/206e2f8926458162ceb124bba651b07e14d43bc0) - full `MODIFY COLUMN` support. *(PR [#7562](https://github.com/tobymao/sqlglot/pull/7562) by [@burnison](https://github.com/burnison))*:
146
+
147
+ full `MODIFY COLUMN` support. (#7562)
148
+
149
+ - due to [`fd48100`](https://github.com/tobymao/sqlglot/commit/fd4810018e2ea602e1c59994ebe517b1c06d7f49) - generate "SUBSTR" instead of "SUBSTRING" for Substr expr *(PR [#7583](https://github.com/tobymao/sqlglot/pull/7583) by [@georgesittas](https://github.com/georgesittas))*:
150
+
151
+ generate "SUBSTR" instead of "SUBSTRING" for Substr expr (#7583)
152
+
153
+ - due to [`17432c6`](https://github.com/tobymao/sqlglot/commit/17432c61175194ee0f56f0703393e8c5fdc9e81f) - do not indent newlines within identifiers in pretty mode fixes [#7953](https://github.com/tobymao/sqlglot/pull/7953) *(commit by [@georgesittas](https://github.com/georgesittas))*:
154
+
155
+ do not indent newlines within identifiers in pretty mode fixes #7953
156
+
157
+
158
+ ### :sparkles: New Features
159
+ - [`cf1c9b7`](https://github.com/tobymao/sqlglot/commit/cf1c9b7c9d6fe5f4b6919e7599182869426f527a) - **tests**: add leakcheck harness for sqlglot[c] *(PR [#7533](https://github.com/tobymao/sqlglot/pull/7533) by [@VaggelisD](https://github.com/VaggelisD))*
160
+ - [`68861d9`](https://github.com/tobymao/sqlglot/commit/68861d9f3aaa6c9ae405dacfa22117fb64a1d803) - **mysql**: support `DROP PRIMARY KEY`. *(PR [#7530](https://github.com/tobymao/sqlglot/pull/7530) by [@burnison](https://github.com/burnison))*
161
+ - [`8669e55`](https://github.com/tobymao/sqlglot/commit/8669e55f385eb759bbf5ea1ec095e63ec48cfa91) - **duckdb**: mark DECOMPRESS_STRING as unsupported [CLAUDE] *(PR [#7545](https://github.com/tobymao/sqlglot/pull/7545) by [@fivetran-ashashankar](https://github.com/fivetran-ashashankar))*
162
+ - [`b334dcc`](https://github.com/tobymao/sqlglot/commit/b334dccb7f94993e71fa4f0e59d984a3f0d351d0) - **duckdb**: mark DECOMPRESS_BINARY as unsupported *(PR [#7546](https://github.com/tobymao/sqlglot/pull/7546) by [@fivetran-ashashankar](https://github.com/fivetran-ashashankar))*
163
+ - [`234198a`](https://github.com/tobymao/sqlglot/commit/234198a311c56085b58f72f2871ec42103ff9a19) - **exasol**: transpile USE/OPEN SCHEMA and SHOW TABLES to system-table query *(PR [#7538](https://github.com/tobymao/sqlglot/pull/7538) by [@mkcorneli](https://github.com/mkcorneli))*
164
+ - [`e3fee4d`](https://github.com/tobymao/sqlglot/commit/e3fee4d2dc33b770622831490d2980a837718475) - **snowflake**: transpile DuckDB list() and list_distinct() [CLAUDE] *(PR [#7551](https://github.com/tobymao/sqlglot/pull/7551) by [@maxa-jonathan-hallee](https://github.com/maxa-jonathan-hallee))*
165
+ - [`92aea6b`](https://github.com/tobymao/sqlglot/commit/92aea6bb80902cd1381f5a01dc75fd71c6071296) - **duckdb**: Add UUID v5 unsupported error for Snowflake UUID_STRING transpilation *(commit by [@fivetran-ashashankar](https://github.com/fivetran-ashashankar))*
166
+ - [`b4dea8c`](https://github.com/tobymao/sqlglot/commit/b4dea8c7e4c9e598e33efc56f007a0ab6dab9b5d) - **snowflake**: Transpilation support for UUID_STRING *(commit by [@fivetran-ashashankar](https://github.com/fivetran-ashashankar))*
167
+ - [`b828e30`](https://github.com/tobymao/sqlglot/commit/b828e304485fcf9d8696dc7fcf503ccbc78ade99) - **snowflake**: add UUID_IS_STRING_TYPE flag and UUID_STRING parser *(commit by [@fivetran-ashashankar](https://github.com/fivetran-ashashankar))*
168
+ - [`ded89c2`](https://github.com/tobymao/sqlglot/commit/ded89c2e8edc6eee14f9fabb3d6fd036cced284a) - **duckdb**: Add transpilation support for STRTOK_TO_ARRAY function *(PR [#7536](https://github.com/tobymao/sqlglot/pull/7536) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
169
+ - [`f743755`](https://github.com/tobymao/sqlglot/commit/f743755e7b9ad45839c9c6f651d199bd5441b661) - **hive**: register NAMED_STRUCT in parser so struct fields annotate CLAUDE *(PR [#7561](https://github.com/tobymao/sqlglot/pull/7561) by [@RichardHughes-amp](https://github.com/RichardHughes-amp))*
170
+ - [`4cca3a0`](https://github.com/tobymao/sqlglot/commit/4cca3a017955f310b83988e36be31337859ba9fa) - **duckdb**: support arbitrarily many args in JSONArray [CLAUDE] *(PR [#7559](https://github.com/tobymao/sqlglot/pull/7559) by [@maxa-jonathan-hallee](https://github.com/maxa-jonathan-hallee))*
171
+ - [`3bc8f38`](https://github.com/tobymao/sqlglot/commit/3bc8f3846871d630338fb75761117151cbd9162b) - **oracle**: support `LISTAGG(... ON OVERFLOW ...)` *(PR [#7565](https://github.com/tobymao/sqlglot/pull/7565) by [@galunto](https://github.com/galunto))*
172
+ - [`1a10806`](https://github.com/tobymao/sqlglot/commit/1a10806505db181737065898458fdc669e4a7ce5) - **mypyc**: Enable incremental compilation, deprecate Python 3.9 *(PR [#7574](https://github.com/tobymao/sqlglot/pull/7574) by [@VaggelisD](https://github.com/VaggelisD))*
173
+ - [`d146dcd`](https://github.com/tobymao/sqlglot/commit/d146dcd6efab5f77c2eb1801b1eb882052c2f273) - **lineage**: support all-columns mode and on_node callback *(PR [#7575](https://github.com/tobymao/sqlglot/pull/7575) by [@georgesittas](https://github.com/georgesittas))*
174
+ - [`25552ee`](https://github.com/tobymao/sqlglot/commit/25552eea658e3931a420fca35e186573ac66927b) - **optimizer**: canonicalize internal query names *(PR [#7580](https://github.com/tobymao/sqlglot/pull/7580) by [@georgesittas](https://github.com/georgesittas))*
175
+ - [`fab6ccf`](https://github.com/tobymao/sqlglot/commit/fab6ccf6ec525bc4d78c185068493e26d5e941df) - **duckdb**: Add transpilation support for HEX_ENCODE function *(PR [#7591](https://github.com/tobymao/sqlglot/pull/7591) by [@fivetran-amrutabhimsenayachit](https://github.com/fivetran-amrutabhimsenayachit))*
176
+
177
+ ### :bug: Bug Fixes
178
+ - [`8583c2d`](https://github.com/tobymao/sqlglot/commit/8583c2dc2b0b29089faf4376f0782e9db2ea5f27) - correctly handle follow-tokens for unit-less intervals *(PR [#7529](https://github.com/tobymao/sqlglot/pull/7529) by [@jvstein](https://github.com/jvstein))*
179
+ - [`daca12a`](https://github.com/tobymao/sqlglot/commit/daca12a51564199b71a3947dd77e5c5be0c3d60d) - **mysql**: accept quoted charset in `USING`. *(PR [#7522](https://github.com/tobymao/sqlglot/pull/7522) by [@burnison](https://github.com/burnison))*
180
+ - [`6053db6`](https://github.com/tobymao/sqlglot/commit/6053db6a98ceecce937f731ad2cdb560ddd8bcda) - **optimizer**: robust scope for UDTF *(PR [#7535](https://github.com/tobymao/sqlglot/pull/7535) by [@geooo109](https://github.com/geooo109))*
181
+ - [`a88dfce`](https://github.com/tobymao/sqlglot/commit/a88dfce091a0fc61c1a8efbd1b35616f22b387ff) - **mysql**: support SHOW TABLES IN <schema> parsing *(PR [#7537](https://github.com/tobymao/sqlglot/pull/7537) by [@mkcorneli](https://github.com/mkcorneli))*
182
+ - [`0bd0c46`](https://github.com/tobymao/sqlglot/commit/0bd0c46505636355926a84158d4d2f60145f0faf) - **optimizer**: handle ColumnDef in typed table alias columns *(PR [#7542](https://github.com/tobymao/sqlglot/pull/7542) by [@tobymao](https://github.com/tobymao))*
183
+ - [`f387112`](https://github.com/tobymao/sqlglot/commit/f3871121d5f61e3c12dd47cfa700c4452f4fd807) - **parser**: robust CONCAT_WS *(PR [#7544](https://github.com/tobymao/sqlglot/pull/7544) by [@geooo109](https://github.com/geooo109))*
184
+ - :arrow_lower_right: *fixes issue [#7540](https://github.com/tobymao/sqlglot/issues/7540) opened by [@nickhand](https://github.com/nickhand)*
185
+ - [`5351ca1`](https://github.com/tobymao/sqlglot/commit/5351ca128bc48caeb557996ab577d2e89775200f) - **optimizer**: EXPLODE qualify and annotate *(PR [#7549](https://github.com/tobymao/sqlglot/pull/7549) by [@geooo109](https://github.com/geooo109))*
186
+ - :arrow_lower_right: *fixes issue [#7541](https://github.com/tobymao/sqlglot/issues/7541) opened by [@catlynkong](https://github.com/catlynkong)*
187
+ - [`8f572f8`](https://github.com/tobymao/sqlglot/commit/8f572f8656c9a5a5e45ac25607af6204bca58773) - **optimizer**: qualify UNPIVOT on CTE sources *(PR [#7550](https://github.com/tobymao/sqlglot/pull/7550) by [@georgesittas](https://github.com/georgesittas))*
188
+ - [`cf0ffd9`](https://github.com/tobymao/sqlglot/commit/cf0ffd99ef27a4a4764104feb9b1dd2af1c544ce) - **optimizer**: qualify (UN)PIVOT on CTE sources *(PR [#7560](https://github.com/tobymao/sqlglot/pull/7560) by [@georgesittas](https://github.com/georgesittas))*
189
+ - [`2c1a90c`](https://github.com/tobymao/sqlglot/commit/2c1a90ccf82cb8d3c43703bc9698e3872a4166e9) - **clickhouse**: apply version-aware unit lowercase to DateTrunc [CLAUDE] *(PR [#7564](https://github.com/tobymao/sqlglot/pull/7564) by [@markcheney1](https://github.com/markcheney1))*
190
+ - [`206e2f8`](https://github.com/tobymao/sqlglot/commit/206e2f8926458162ceb124bba651b07e14d43bc0) - **mysql**: full `MODIFY COLUMN` support. *(PR [#7562](https://github.com/tobymao/sqlglot/pull/7562) by [@burnison](https://github.com/burnison))*
191
+ - [`6110de6`](https://github.com/tobymao/sqlglot/commit/6110de6b24a2ab37b031d46e319a22c0db6ed27d) - **lineage**: avoid self-loops from cached non-owned upstream nodes *(commit by [@georgesittas](https://github.com/georgesittas))*
192
+ - [`e078e5d`](https://github.com/tobymao/sqlglot/commit/e078e5db72a7ee5fd6011e1e21285e4692befdbd) - **postgres**: TRIM with UNNEST and ORDINALITY *(PR [#7573](https://github.com/tobymao/sqlglot/pull/7573) by [@geooo109](https://github.com/geooo109))*
193
+ - :arrow_lower_right: *fixes issue [#7566](https://github.com/tobymao/sqlglot/issues/7566) opened by [@CPAPI-104](https://github.com/CPAPI-104)*
194
+ - [`a20ec0e`](https://github.com/tobymao/sqlglot/commit/a20ec0ee493bc0836ab44439ef7d0ed68f91f674) - **optimizer**: unpivot annotate types *(PR [#7543](https://github.com/tobymao/sqlglot/pull/7543) by [@geooo109](https://github.com/geooo109))*
195
+ - [`fd48100`](https://github.com/tobymao/sqlglot/commit/fd4810018e2ea602e1c59994ebe517b1c06d7f49) - **presto**: generate "SUBSTR" instead of "SUBSTRING" for Substr expr *(PR [#7583](https://github.com/tobymao/sqlglot/pull/7583) by [@georgesittas](https://github.com/georgesittas))*
196
+ - :arrow_lower_right: *fixes issue [#7581](https://github.com/tobymao/sqlglot/issues/7581) opened by [@cyber-jessie](https://github.com/cyber-jessie)*
197
+ - [`1cf31d6`](https://github.com/tobymao/sqlglot/commit/1cf31d6bd00a1c5ce3fe6722e7ed87c900074ad0) - **annotate**: register typing for FirstValue and RegexpExtract *(commit by [@RichardHughes-amp](https://github.com/RichardHughes-amp))*
198
+ - [`9f169ab`](https://github.com/tobymao/sqlglot/commit/9f169ab17a8ada0a53e2d88c035196db673e37c4) - **redshift**: support `APPROXIMATE PERCENTILE_DISC` round-trip *(PR [#7585](https://github.com/tobymao/sqlglot/pull/7585) by [@fivetran-kwoodbeck](https://github.com/fivetran-kwoodbeck))*
199
+ - [`17432c6`](https://github.com/tobymao/sqlglot/commit/17432c61175194ee0f56f0703393e8c5fdc9e81f) - **generator**: do not indent newlines within identifiers in pretty mode fixes [#7953](https://github.com/tobymao/sqlglot/pull/7953) *(commit by [@georgesittas](https://github.com/georgesittas))*
200
+ - [`e550d00`](https://github.com/tobymao/sqlglot/commit/e550d008cc6ffa72b046d6406911b256c4a75f8b) - **parser**: FROM with JOIN subqueries *(PR [#7597](https://github.com/tobymao/sqlglot/pull/7597) by [@geooo109](https://github.com/geooo109))*
201
+ - :arrow_lower_right: *fixes issue [#7596](https://github.com/tobymao/sqlglot/issues/7596) opened by [@vietspaceanh](https://github.com/vietspaceanh)*
202
+
203
+ ### :zap: Performance Improvements
204
+ - [`63f8dc6`](https://github.com/tobymao/sqlglot/commit/63f8dc6dfc19d4ae14984d393bc63532c1085e07) - **tokens**: cache TokenizerCore per thread *(PR [#7547](https://github.com/tobymao/sqlglot/pull/7547) by [@tobymao](https://github.com/tobymao))*
205
+ - [`9b65c91`](https://github.com/tobymao/sqlglot/commit/9b65c91f8d510682af203015b561d92ce8a2e477) - **build**: parallelize mypyc compile with -j $(NPROC) *(PR [#7554](https://github.com/tobymao/sqlglot/pull/7554) by [@tobymao](https://github.com/tobymao))*
206
+ - [`fc6e7cb`](https://github.com/tobymao/sqlglot/commit/fc6e7cb093583d44ac4863d770b583e75d45f365) - **parser**: short-circuit _parse_pivots when next token isn't PIVOT/UNPIVOT *(PR [#7557](https://github.com/tobymao/sqlglot/pull/7557) by [@tobymao](https://github.com/tobymao))*
207
+
208
+ ### :recycle: Refactors
209
+ - [`38b8986`](https://github.com/tobymao/sqlglot/commit/38b89860020d4bb7fc7be8408b67852f8cf380ae) - simplify uuid_sql using @unsupported_args decorator *(commit by [@fivetran-ashashankar](https://github.com/fivetran-ashashankar))*
210
+ - [`49787a5`](https://github.com/tobymao/sqlglot/commit/49787a59dcbcaca97a49cd504c4e35f8db1408a3) - remove redundant CAST from UUID_V5_TEMPLATE *(commit by [@fivetran-ashashankar](https://github.com/fivetran-ashashankar))*
211
+ - [`e883b0b`](https://github.com/tobymao/sqlglot/commit/e883b0b39ebdeeab408743786f66d62dd92b3267) - map duckdb `LIST` to `ArrayAgg` *(PR [#7552](https://github.com/tobymao/sqlglot/pull/7552) by [@georgesittas](https://github.com/georgesittas))*
212
+ - [`1d976e6`](https://github.com/tobymao/sqlglot/commit/1d976e665a8687e7ca2411a9a2a5139eb5698849) - raise if a projection is unnamed in lineage *(commit by [@georgesittas](https://github.com/georgesittas))*
213
+ - [`b3fa159`](https://github.com/tobymao/sqlglot/commit/b3fa15979866947adbb600ae9b1d24e048997dad) - **optimizer**: continuation on typing coverage improvements *(PR [#7572](https://github.com/tobymao/sqlglot/pull/7572) by [@OutSquareCapital](https://github.com/OutSquareCapital))*
214
+
215
+ ### :white_check_mark: Tests
216
+ - [`9bc9ef2`](https://github.com/tobymao/sqlglot/commit/9bc9ef2e7dfd98a5340167012fa0ea782cca1264) - update UUID_STRING test for removed CAST *(commit by [@fivetran-ashashankar](https://github.com/fivetran-ashashankar))*
217
+
218
+ ### :wrench: Chores
219
+ - [`fc99ddc`](https://github.com/tobymao/sqlglot/commit/fc99ddc936c095fb813e56cfe10006701ece9893) - update integration tests submodule *(commit by [@fivetran-ashashankar](https://github.com/fivetran-ashashankar))*
220
+ - [`e4a2fdc`](https://github.com/tobymao/sqlglot/commit/e4a2fdcdaf3e8ac423884e482191e002ab677235) - **exasol**: test GROUP BY alias rewrite via _add_local_prefix_for_aliases *(PR [#7569](https://github.com/tobymao/sqlglot/pull/7569) by [@mkcorneli](https://github.com/mkcorneli))*
221
+ - [`43be379`](https://github.com/tobymao/sqlglot/commit/43be379b75f6e3d8ea66ac3849f4fb5c55736145) - bump sqlglot-mypy to 1.20.0.post6 *(PR [#7598](https://github.com/tobymao/sqlglot/pull/7598) by [@VaggelisD](https://github.com/VaggelisD))*
222
+ - [`9bd7e7c`](https://github.com/tobymao/sqlglot/commit/9bd7e7c83ff1e3c73f6d071a7bd47ec208e25ca4) - **publish**: Do not build sqlglotc wheels for 3.9 *(PR [#7600](https://github.com/tobymao/sqlglot/pull/7600) by [@VaggelisD](https://github.com/VaggelisD))*
223
+
224
+
4
225
  ## [v30.6.0] - 2026-04-20
5
226
  ### :boom: BREAKING CHANGES
6
227
  - due to [`dcf9ed5`](https://github.com/tobymao/sqlglot/commit/dcf9ed58303bf320f3e3498618bd95639037efde) - compile python generator *(PR [#7528](https://github.com/tobymao/sqlglot/pull/7528) by [@georgesittas](https://github.com/georgesittas))*:
@@ -14244,3 +14465,5 @@ pip install "sqlglot[c]" # compiled — faster, but no subclassing
14244
14465
  [v30.4.3]: https://github.com/tobymao/sqlglot/compare/v30.4.2...v30.4.3
14245
14466
  [v30.5.0]: https://github.com/tobymao/sqlglot/compare/v30.4.3...v30.5.0
14246
14467
  [v30.6.0]: https://github.com/tobymao/sqlglot/compare/v30.5.0...v30.6.0
14468
+ [v30.7.0]: https://github.com/tobymao/sqlglot/compare/v30.6.0...v30.7.0
14469
+ [v30.8.0]: https://github.com/tobymao/sqlglot/compare/v30.7.0...v30.8.0
@@ -1,4 +1,4 @@
1
- .PHONY: install install-dev install-devc install-devc-release install-pre-commit bench bench-parse bench-transpile bench-optimize test test-fast unit testc unitc leakcheck style check docs docs-serve hidec showc clean resolve-integration-conflicts update-fixtures
1
+ .PHONY: install install-dev install-devc install-devc-release install-pre-commit bench bench-parse bench-transpile bench-optimize test test-fast test-branch unit testc unitc leakcheck style check docs docs-serve hidec showc clean resolve-integration-conflicts update-fixtures
2
2
 
3
3
  ifdef UV
4
4
  PIP := uv pip
@@ -81,6 +81,25 @@ test: hidec
81
81
  test-fast:
82
82
  python -m unittest --failfast
83
83
 
84
+ BRANCH_BASE ?= main
85
+
86
+ test-branch:
87
+ @changed_main=$$({ git diff origin/$(BRANCH_BASE)...HEAD --name-only 2>/dev/null; git diff HEAD --name-only; git diff --cached --name-only; } \
88
+ | sort -u | grep '^tests/.*\.py$$' | grep -v '__init__' | sed 's/\.py$$//' | tr '/' '.'); \
89
+ changed_int=$$({ git -C sqlglot-integration-tests log --name-only --format='' origin/HEAD..HEAD 2>/dev/null; git -C sqlglot-integration-tests diff HEAD --name-only 2>/dev/null; } \
90
+ | sort -u | grep '^tests/sqlglot/.*\.py$$' | grep -v '__init__'); \
91
+ if [ -z "$$changed_main" ] && [ -z "$$changed_int" ]; then \
92
+ echo "No test files changed vs $(BRANCH_BASE)"; exit 0; \
93
+ fi; \
94
+ if [ -n "$$changed_main" ]; then \
95
+ echo "Main tests:"; echo "$$changed_main" | tr ' ' '\n' | sed 's/^/ /'; \
96
+ python -m unittest $$changed_main || exit 1; \
97
+ fi; \
98
+ if [ -n "$$changed_int" ]; then \
99
+ echo "Integration tests:"; echo "$$changed_int" | tr ' ' '\n' | sed 's/^/ /'; \
100
+ cd sqlglot-integration-tests && PYTHONPATH=. pytest $$changed_int; \
101
+ fi
102
+
84
103
  unit: hidec
85
104
  trap '$(MAKE) showc' EXIT; SKIP_INTEGRATION=1 python -m unittest
86
105
 
@@ -95,7 +114,10 @@ leakcheck: install-devc
95
114
 
96
115
  style:
97
116
  pre-commit run --all-files
98
- @if [ -f sqlglot-integration-tests/Makefile ]; then $(MAKE) -C sqlglot-integration-tests check-submodule; fi
117
+ @if [ -f sqlglot-integration-tests/Makefile ]; then \
118
+ MYPYPATH=$(abspath .) $(MAKE) -C sqlglot-integration-tests style && \
119
+ $(MAKE) -C sqlglot-integration-tests check-submodule; \
120
+ fi
99
121
 
100
122
  check: style test testc
101
123
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlglot
3
- Version: 30.7.0
3
+ Version: 30.9.0
4
4
  Summary: An easily customizable SQL parser and transpiler
5
5
  Author-email: Toby Mao <toby.mao@gmail.com>
6
6
  License-Expression: MIT
@@ -19,7 +19,7 @@ Description-Content-Type: text/markdown
19
19
  License-File: LICENSE
20
20
  Provides-Extra: dev
21
21
  Requires-Dist: duckdb>=0.6; extra == "dev"
22
- Requires-Dist: sqlglot-mypy>=1.20.0.post6; python_version >= "3.10" and extra == "dev"
22
+ Requires-Dist: sqlglot-mypy>=2.1.0.post2; python_version >= "3.10" and extra == "dev"
23
23
  Requires-Dist: mypy; python_version < "3.10" and extra == "dev"
24
24
  Requires-Dist: setuptools_scm; extra == "dev"
25
25
  Requires-Dist: pandas; extra == "dev"
@@ -34,10 +34,10 @@ Requires-Dist: types-pytz; extra == "dev"
34
34
  Requires-Dist: typing_extensions; extra == "dev"
35
35
  Requires-Dist: pyperf; extra == "dev"
36
36
  Provides-Extra: c
37
- Requires-Dist: sqlglotc==30.7.0; python_version >= "3.10" and extra == "c"
37
+ Requires-Dist: sqlglotc==30.9.0; python_version >= "3.10" and extra == "c"
38
38
  Provides-Extra: rs
39
39
  Requires-Dist: sqlglotrs==0.13.0; extra == "rs"
40
- Requires-Dist: sqlglotc==30.7.0; python_version >= "3.10" and extra == "rs"
40
+ Requires-Dist: sqlglotc==30.9.0; python_version >= "3.10" and extra == "rs"
41
41
  Dynamic: license-file
42
42
  Dynamic: provides-extra
43
43
 
@@ -9,7 +9,7 @@ setup(
9
9
  "duckdb>=0.6",
10
10
  # sqlglot-mypy 1.20+ is the build dep for sqlglotc and only ships
11
11
  # for py3.10+; on py3.9 just use upstream mypy for type checking.
12
- "sqlglot-mypy >= 1.20.0.post6; python_version >= '3.10'",
12
+ "sqlglot-mypy >= 2.1.0.post2; python_version >= '3.10'",
13
13
  "mypy; python_version < '3.10'",
14
14
  "setuptools_scm",
15
15
  "pandas",
@@ -4,9 +4,9 @@ import typing as t
4
4
  from collections.abc import Mapping, Sequence
5
5
 
6
6
  if t.TYPE_CHECKING:
7
- from typing_extensions import ParamSpec
8
-
9
7
  import sqlglot
8
+ from sqlglot import exp
9
+ from typing_extensions import ParamSpec
10
10
  from sqlglot.dialects.dialect import DialectType
11
11
  from sqlglot.errors import ErrorLevel
12
12
 
@@ -32,6 +32,15 @@ class ParserNoDialectArgs(t.TypedDict, total=False):
32
32
  max_nodes: int
33
33
 
34
34
 
35
+ class DataTypeArgs(ParserNoDialectArgs, total=False):
36
+ expressions: list[exp.Expr] | None
37
+ nested: bool
38
+ values: list[exp.Expr] | None
39
+ kind: exp.Expr | str
40
+ nullable: bool
41
+ collate: exp.Identifier | exp.Column
42
+
43
+
35
44
  class ParserArgs(ParserNoDialectArgs, _DialectArg, total=False):
36
45
  pass
37
46
 
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '30.7.0'
22
- __version_tuple__ = version_tuple = (30, 7, 0)
21
+ __version__ = version = '30.9.0'
22
+ __version_tuple__ = version_tuple = (30, 9, 0)
23
23
 
24
- __commit_id__ = commit_id = 'g693f4ed6d'
24
+ __commit_id__ = commit_id = 'g2f6434e2b'
@@ -72,18 +72,28 @@ class BigQuery(Dialect):
72
72
  }
73
73
 
74
74
  FORMAT_MAPPING = {
75
+ "dd": "%d",
75
76
  "DD": "%d",
77
+ "mm": "%m",
76
78
  "MM": "%m",
79
+ "mon": "%b",
77
80
  "MON": "%b",
81
+ "month": "%B",
78
82
  "MONTH": "%B",
83
+ "yyyy": "%Y",
79
84
  "YYYY": "%Y",
85
+ "yy": "%y",
80
86
  "YY": "%y",
81
87
  "HH": "%I",
82
88
  "HH12": "%I",
89
+ "hh24": "%H",
83
90
  "HH24": "%H",
91
+ "mi": "%M",
84
92
  "MI": "%M",
93
+ "ss": "%S",
85
94
  "SS": "%S",
86
95
  "SSSSS": "%f",
96
+ "tzh": "%z",
87
97
  "TZH": "%z",
88
98
  }
89
99
 
@@ -525,6 +525,11 @@ class Dialect(metaclass=_Dialect):
525
525
  Whether ORDER BY ALL is supported (expands to all the selected columns) as in DuckDB, Spark3/Databricks
526
526
  """
527
527
 
528
+ SUPPORTS_LIMIT_ALL = False
529
+ """
530
+ Whether LIMIT ALL is supported (equivalent to no limit) as in Postgres.
531
+ """
532
+
528
533
  PROJECTION_ALIASES_SHADOW_SOURCE_NAMES = False
529
534
  """
530
535
  Whether projection alias names can shadow table/source names in GROUP BY and HAVING clauses.
@@ -1219,7 +1224,9 @@ def inline_array_unless_query(self: Generator, expression: exp.Expr) -> str:
1219
1224
  def no_ilike_sql(self: Generator, expression: exp.ILike) -> str:
1220
1225
  return self.like_sql(
1221
1226
  exp.Like(
1222
- this=exp.Lower(this=expression.this), expression=exp.Lower(this=expression.expression)
1227
+ this=exp.Lower(this=expression.this),
1228
+ expression=exp.Lower(this=expression.expression),
1229
+ negate=expression.args.get("negate"),
1223
1230
  )
1224
1231
  )
1225
1232
 
@@ -1538,28 +1545,32 @@ def months_between_sql(self: Generator, expression: exp.MonthsBetween) -> str:
1538
1545
 
1539
1546
 
1540
1547
  def build_formatted_time(
1541
- exp_class: Type[E], dialect: str, default: bool | str | None = None
1542
- ) -> t.Callable[[BuilderArgs], E]:
1548
+ exp_class: Type[E], dialect_override: str | None = None, default: bool | str | None = None
1549
+ ) -> t.Callable[[BuilderArgs, Dialect], E]:
1543
1550
  """Helper used for time expressions.
1544
1551
 
1545
1552
  Args:
1546
1553
  exp_class: the expression class to instantiate.
1547
- dialect: target sql dialect.
1554
+ dialect_override: optional sql dialect to override the parser's one.
1548
1555
  default: the default format, True being time.
1549
1556
 
1550
1557
  Returns:
1551
1558
  A callable that can be used to return the appropriately formatted time expression.
1552
1559
  """
1553
1560
 
1554
- def _builder(args: BuilderArgs) -> E:
1555
- return exp_class(
1556
- this=seq_get(args, 0),
1557
- format=Dialect[dialect].format_time(
1558
- seq_get(args, 1)
1559
- or (Dialect[dialect].TIME_FORMAT if default is True else default or None)
1560
- ),
1561
+ def _builder(args: BuilderArgs, dialect: Dialect) -> E:
1562
+ target_dialect = (
1563
+ t.cast(Dialect, Dialect[dialect_override])
1564
+ if isinstance(dialect_override, str)
1565
+ else dialect
1561
1566
  )
1562
1567
 
1568
+ fmt = seq_get(args, 1)
1569
+ if not fmt:
1570
+ fmt = target_dialect.TIME_FORMAT if default is True else default or None
1571
+
1572
+ return exp_class(this=seq_get(args, 0), format=target_dialect.format_time(fmt))
1573
+
1563
1574
  return _builder
1564
1575
 
1565
1576
 
@@ -2463,8 +2474,7 @@ def build_timetostr_or_tochar(
2463
2474
  annotate_types(this, dialect=dialect)
2464
2475
 
2465
2476
  if this.is_type(*exp.DataType.TEMPORAL_TYPES):
2466
- dialect_name = dialect.__class__.__name__.lower()
2467
- return build_formatted_time(exp.TimeToStr, dialect_name, default=True)(args)
2477
+ return build_formatted_time(exp.TimeToStr, default=True)(args, t.cast(Dialect, dialect))
2468
2478
 
2469
2479
  return exp.ToChar.from_arg_list(args)
2470
2480
 
@@ -21,6 +21,7 @@ class DuckDB(Dialect):
21
21
  CONCAT_COALESCE = True
22
22
  CONCAT_WS_COALESCE = True
23
23
  SUPPORTS_ORDER_BY_ALL = True
24
+ SUPPORTS_LIMIT_ALL = True
24
25
  SUPPORTS_FIXED_SIZE_ARRAYS = True
25
26
  STRICT_JSON_PATH_SYNTAX = False
26
27
  NUMBERS_CAN_BE_UNDERSCORE_SEPARATED = True
@@ -70,6 +70,8 @@ class Oracle(Dialect):
70
70
  KEYWORDS = {
71
71
  **tokens.Tokenizer.KEYWORDS,
72
72
  "(+)": TokenType.JOIN_MARKER,
73
+ # https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/Comparison-Conditions.html
74
+ "^=": TokenType.NEQ,
73
75
  "BINARY_DOUBLE": TokenType.DOUBLE,
74
76
  "BINARY_FLOAT": TokenType.FLOAT,
75
77
  "BULK COLLECT INTO": TokenType.BULK_COLLECT_INTO,
@@ -5,14 +5,17 @@ from sqlglot.dialects.dialect import Dialect
5
5
  from sqlglot.generators.postgres import PostgresGenerator
6
6
  from sqlglot.parsers.postgres import PostgresParser
7
7
  from sqlglot.tokens import TokenType
8
+ from sqlglot.typing.postgres import EXPRESSION_METADATA
8
9
 
9
10
 
10
11
  class Postgres(Dialect):
12
+ EXPRESSION_METADATA = EXPRESSION_METADATA.copy()
11
13
  INDEX_OFFSET = 1
12
14
  TYPED_DIVISION = True
13
15
  CONCAT_COALESCE = True
14
16
  CONCAT_WS_COALESCE = True
15
17
  NULL_ORDERING = "nulls_are_large"
18
+ SUPPORTS_LIMIT_ALL = True
16
19
  TIME_FORMAT = "'YYYY-MM-DD HH24:MI:SS'"
17
20
  TABLESAMPLE_SIZE_IS_PERCENT = True
18
21
  TABLES_REFERENCEABLE_AS_COLUMNS = True
@@ -98,6 +101,7 @@ class Postgres(Dialect):
98
101
  "SERIAL": TokenType.SERIAL,
99
102
  "SMALLSERIAL": TokenType.SMALLSERIAL,
100
103
  "TEMP": TokenType.TEMPORARY,
104
+ "TYPE": TokenType.TYPE,
101
105
  "REGCLASS": TokenType.OBJECT_IDENTIFIER,
102
106
  "REGCOLLATION": TokenType.OBJECT_IDENTIFIER,
103
107
  "REGCONFIG": TokenType.OBJECT_IDENTIFIER,
@@ -22,6 +22,7 @@ class Presto(Dialect):
22
22
  TYPED_DIVISION = True
23
23
  TABLESAMPLE_SIZE_IS_PERCENT = True
24
24
  LOG_BASE_FIRST: bool | None = None
25
+ SUPPORTS_LIMIT_ALL = True
25
26
  SUPPORTS_VALUES_DEFAULT = False
26
27
  LEAST_GREATEST_IGNORES_NULLS = False
27
28
  UUID_IS_STRING_TYPE = False
@@ -24,7 +24,12 @@ class Redshift(Postgres):
24
24
 
25
25
  # ref: https://docs.aws.amazon.com/redshift/latest/dg/r_FORMAT_strings.html
26
26
  TIME_FORMAT = "'YYYY-MM-DD HH24:MI:SS'"
27
- TIME_MAPPING = {**Postgres.TIME_MAPPING, "MON": "%b", "HH24": "%H", "HH": "%I"}
27
+
28
+ TIME_MAPPING = {
29
+ **Postgres.TIME_MAPPING,
30
+ "MON": "%b",
31
+ "MONTH": "%B",
32
+ }
28
33
 
29
34
  Parser = RedshiftParser
30
35
 
@@ -36,13 +41,15 @@ class Redshift(Postgres):
36
41
  KEYWORDS = {
37
42
  **Postgres.Tokenizer.KEYWORDS,
38
43
  "(+)": TokenType.JOIN_MARKER,
44
+ "BINARY VARYING": TokenType.VARBINARY,
45
+ "CURRENT_USER_ID": TokenType.CURRENT_USER_ID,
39
46
  "HLLSKETCH": TokenType.HLLSKETCH,
40
47
  "MINUS": TokenType.EXCEPT,
41
48
  "SUPER": TokenType.SUPER,
42
49
  "TOP": TokenType.TOP,
43
50
  "UNLOAD": TokenType.COMMAND,
51
+ "USER": TokenType.CURRENT_USER,
44
52
  "VARBYTE": TokenType.VARBINARY,
45
- "BINARY VARYING": TokenType.VARBINARY,
46
53
  }
47
54
  KEYWORDS.pop("VALUES")
48
55
 
@@ -11,6 +11,7 @@ from sqlglot.typing.spark import EXPRESSION_METADATA
11
11
 
12
12
  class Spark(Spark2):
13
13
  SUPPORTS_ORDER_BY_ALL = True
14
+ SUPPORTS_LIMIT_ALL = True
14
15
  SUPPORTS_NULL_TYPE = True
15
16
  ARRAY_FUNCS_PROPAGATES_NULLS = True
16
17
  EXPRESSION_METADATA = EXPRESSION_METADATA.copy()
@@ -208,7 +208,7 @@ class NthValue(Expression, AggFunc):
208
208
 
209
209
 
210
210
  class ObjectAgg(Expression, AggFunc):
211
- arg_types = {"this": True, "expression": True}
211
+ arg_types = {"this": True, "expression": False}
212
212
 
213
213
 
214
214
  class PercentileCont(Expression, AggFunc):
@@ -365,5 +365,5 @@ class StDistance(Expression, Func):
365
365
 
366
366
 
367
367
  class StPoint(Expression, Func):
368
- arg_types = {"this": True, "expression": True, "null": False}
368
+ arg_types = {"this": True, "expression": True, "z": False, "m": False}
369
369
  _sql_names = ["ST_POINT", "ST_MAKEPOINT"]