sqlglot 26.26.0__tar.gz → 26.27.1__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 (216) hide show
  1. {sqlglot-26.26.0 → sqlglot-26.27.1}/CHANGELOG.md +46 -0
  2. {sqlglot-26.26.0 → sqlglot-26.27.1}/PKG-INFO +1 -1
  3. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/_version.py +2 -2
  4. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/hive.py +1 -0
  5. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/mysql.py +25 -0
  6. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/postgres.py +12 -0
  7. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/snowflake.py +8 -1
  8. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/sqlite.py +2 -0
  9. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/expressions.py +14 -8
  10. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/generator.py +4 -0
  11. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/parser.py +204 -143
  12. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/transforms.py +87 -78
  13. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot.egg-info/PKG-INFO +1 -1
  14. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_bigquery.py +1 -0
  15. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_dialect.py +106 -25
  16. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_hive.py +11 -3
  17. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_mysql.py +14 -0
  18. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_postgres.py +11 -0
  19. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_snowflake.py +7 -0
  20. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_spark.py +2 -0
  21. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_sqlite.py +6 -2
  22. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_tsql.py +1 -1
  23. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/identity.sql +3 -1
  24. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_parser.py +6 -0
  25. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_transforms.py +38 -1
  26. {sqlglot-26.26.0 → sqlglot-26.27.1}/.gitignore +0 -0
  27. {sqlglot-26.26.0 → sqlglot-26.27.1}/.gitpod.yml +0 -0
  28. {sqlglot-26.26.0 → sqlglot-26.27.1}/.pre-commit-config.yaml +0 -0
  29. {sqlglot-26.26.0 → sqlglot-26.27.1}/CONTRIBUTING.md +0 -0
  30. {sqlglot-26.26.0 → sqlglot-26.27.1}/LICENSE +0 -0
  31. {sqlglot-26.26.0 → sqlglot-26.27.1}/MANIFEST.in +0 -0
  32. {sqlglot-26.26.0 → sqlglot-26.27.1}/Makefile +0 -0
  33. {sqlglot-26.26.0 → sqlglot-26.27.1}/README.md +0 -0
  34. {sqlglot-26.26.0 → sqlglot-26.27.1}/pyproject.toml +0 -0
  35. {sqlglot-26.26.0 → sqlglot-26.27.1}/setup.cfg +0 -0
  36. {sqlglot-26.26.0 → sqlglot-26.27.1}/setup.py +0 -0
  37. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/__init__.py +0 -0
  38. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/__main__.py +0 -0
  39. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/_typing.py +0 -0
  40. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/__init__.py +0 -0
  41. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/athena.py +0 -0
  42. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/bigquery.py +0 -0
  43. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/clickhouse.py +0 -0
  44. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/databricks.py +0 -0
  45. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/dialect.py +0 -0
  46. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/doris.py +0 -0
  47. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/drill.py +0 -0
  48. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/druid.py +0 -0
  49. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/duckdb.py +0 -0
  50. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/dune.py +0 -0
  51. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/materialize.py +0 -0
  52. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/oracle.py +0 -0
  53. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/presto.py +0 -0
  54. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/prql.py +0 -0
  55. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/redshift.py +0 -0
  56. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/risingwave.py +0 -0
  57. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/spark.py +0 -0
  58. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/spark2.py +0 -0
  59. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/starrocks.py +0 -0
  60. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/tableau.py +0 -0
  61. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/teradata.py +0 -0
  62. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/trino.py +0 -0
  63. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/dialects/tsql.py +0 -0
  64. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/diff.py +0 -0
  65. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/errors.py +0 -0
  66. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/executor/__init__.py +0 -0
  67. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/executor/context.py +0 -0
  68. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/executor/env.py +0 -0
  69. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/executor/python.py +0 -0
  70. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/executor/table.py +0 -0
  71. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/helper.py +0 -0
  72. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/jsonpath.py +0 -0
  73. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/lineage.py +0 -0
  74. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/__init__.py +0 -0
  75. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/annotate_types.py +0 -0
  76. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/canonicalize.py +0 -0
  77. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/eliminate_ctes.py +0 -0
  78. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/eliminate_joins.py +0 -0
  79. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/eliminate_subqueries.py +0 -0
  80. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/isolate_table_selects.py +0 -0
  81. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/merge_subqueries.py +0 -0
  82. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/normalize.py +0 -0
  83. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/normalize_identifiers.py +0 -0
  84. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/optimize_joins.py +0 -0
  85. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/optimizer.py +0 -0
  86. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/pushdown_predicates.py +0 -0
  87. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/pushdown_projections.py +0 -0
  88. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/qualify.py +0 -0
  89. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/qualify_columns.py +0 -0
  90. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/qualify_tables.py +0 -0
  91. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/scope.py +0 -0
  92. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/simplify.py +0 -0
  93. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/optimizer/unnest_subqueries.py +0 -0
  94. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/planner.py +0 -0
  95. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/py.typed +0 -0
  96. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/schema.py +0 -0
  97. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/serde.py +0 -0
  98. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/time.py +0 -0
  99. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/tokens.py +0 -0
  100. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot/trie.py +0 -0
  101. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot.egg-info/SOURCES.txt +0 -0
  102. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot.egg-info/dependency_links.txt +0 -0
  103. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot.egg-info/requires.txt +0 -0
  104. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot.egg-info/top_level.txt +0 -0
  105. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglot.png +0 -0
  106. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglotrs/Cargo.lock +0 -0
  107. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglotrs/Cargo.toml +0 -0
  108. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglotrs/benches/dialect_settings.json +0 -0
  109. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglotrs/benches/long.rs +0 -0
  110. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglotrs/benches/token_type_settings.json +0 -0
  111. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglotrs/benches/tokenizer_dialect_settings.json +0 -0
  112. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglotrs/benches/tokenizer_settings.json +0 -0
  113. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglotrs/pyproject.toml +0 -0
  114. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglotrs/src/lib.rs +0 -0
  115. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglotrs/src/settings.rs +0 -0
  116. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglotrs/src/token.rs +0 -0
  117. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglotrs/src/tokenizer.rs +0 -0
  118. {sqlglot-26.26.0 → sqlglot-26.27.1}/sqlglotrs/src/trie.rs +0 -0
  119. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/__init__.py +0 -0
  120. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/__init__.py +0 -0
  121. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_athena.py +0 -0
  122. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_clickhouse.py +0 -0
  123. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_databricks.py +0 -0
  124. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_doris.py +0 -0
  125. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_drill.py +0 -0
  126. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_druid.py +0 -0
  127. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_duckdb.py +0 -0
  128. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_dune.py +0 -0
  129. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_materialize.py +0 -0
  130. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_oracle.py +0 -0
  131. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_presto.py +0 -0
  132. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_prql.py +0 -0
  133. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_redshift.py +0 -0
  134. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_risingwave.py +0 -0
  135. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_starrocks.py +0 -0
  136. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_tableau.py +0 -0
  137. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_teradata.py +0 -0
  138. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/dialects/test_trino.py +0 -0
  139. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/jsonpath/LICENSE +0 -0
  140. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/jsonpath/cts.json +0 -0
  141. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/annotate_functions.sql +0 -0
  142. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/annotate_types.sql +0 -0
  143. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/canonicalize.sql +0 -0
  144. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/eliminate_ctes.sql +0 -0
  145. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/eliminate_joins.sql +0 -0
  146. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/eliminate_subqueries.sql +0 -0
  147. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/isolate_table_selects.sql +0 -0
  148. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/merge_subqueries.sql +0 -0
  149. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/normalize.sql +0 -0
  150. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/normalize_identifiers.sql +0 -0
  151. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/optimize_joins.sql +0 -0
  152. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/optimizer.sql +0 -0
  153. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/pushdown_cte_alias_columns.sql +0 -0
  154. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/pushdown_predicates.sql +0 -0
  155. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/pushdown_projections.sql +0 -0
  156. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/qualify_columns.sql +0 -0
  157. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/qualify_columns__invalid.sql +0 -0
  158. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/qualify_columns__with_invisible.sql +0 -0
  159. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/qualify_columns_ddl.sql +0 -0
  160. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/qualify_tables.sql +0 -0
  161. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/quote_identifiers.sql +0 -0
  162. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/simplify.sql +0 -0
  163. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/call_center.csv.gz +0 -0
  164. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/catalog_page.csv.gz +0 -0
  165. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/catalog_returns.csv.gz +0 -0
  166. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/catalog_sales.csv.gz +0 -0
  167. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/customer.csv.gz +0 -0
  168. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/customer_address.csv.gz +0 -0
  169. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/customer_demographics.csv.gz +0 -0
  170. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/date_dim.csv.gz +0 -0
  171. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/household_demographics.csv.gz +0 -0
  172. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/income_band.csv.gz +0 -0
  173. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/inventory.csv.gz +0 -0
  174. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/item.csv.gz +0 -0
  175. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/promotion.csv.gz +0 -0
  176. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/reason.csv.gz +0 -0
  177. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/ship_mode.csv.gz +0 -0
  178. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/store.csv.gz +0 -0
  179. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/store_returns.csv.gz +0 -0
  180. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/store_sales.csv.gz +0 -0
  181. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/time_dim.csv.gz +0 -0
  182. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/tpc-ds.sql +0 -0
  183. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/warehouse.csv.gz +0 -0
  184. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/web_page.csv.gz +0 -0
  185. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/web_returns.csv.gz +0 -0
  186. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/web_sales.csv.gz +0 -0
  187. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-ds/web_site.csv.gz +0 -0
  188. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-h/customer.csv.gz +0 -0
  189. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-h/lineitem.csv.gz +0 -0
  190. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-h/nation.csv.gz +0 -0
  191. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-h/orders.csv.gz +0 -0
  192. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-h/part.csv.gz +0 -0
  193. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-h/partsupp.csv.gz +0 -0
  194. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-h/region.csv.gz +0 -0
  195. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-h/supplier.csv.gz +0 -0
  196. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/tpc-h/tpc-h.sql +0 -0
  197. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/optimizer/unnest_subqueries.sql +0 -0
  198. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/partial.sql +0 -0
  199. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/fixtures/pretty.sql +0 -0
  200. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/gen_fixtures.py +0 -0
  201. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/helpers.py +0 -0
  202. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_build.py +0 -0
  203. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_diff.py +0 -0
  204. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_docs.py +0 -0
  205. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_executor.py +0 -0
  206. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_expressions.py +0 -0
  207. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_generator.py +0 -0
  208. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_helper.py +0 -0
  209. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_jsonpath.py +0 -0
  210. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_lineage.py +0 -0
  211. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_optimizer.py +0 -0
  212. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_schema.py +0 -0
  213. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_serde.py +0 -0
  214. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_time.py +0 -0
  215. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_tokens.py +0 -0
  216. {sqlglot-26.26.0 → sqlglot-26.27.1}/tests/test_transpile.py +0 -0
@@ -1,6 +1,51 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ ## [v26.26.0] - 2025-06-09
5
+ ### :boom: BREAKING CHANGES
6
+ - due to [`434c45b`](https://github.com/tobymao/sqlglot/commit/434c45b547c3a5ea155dc8d7da2baab326eb6d4f) - improve support for ENDSWITH closes [#5170](https://github.com/tobymao/sqlglot/pull/5170) *(commit by [@georgesittas](https://github.com/georgesittas))*:
7
+
8
+ improve support for ENDSWITH closes #5170
9
+
10
+ - due to [`bc001ce`](https://github.com/tobymao/sqlglot/commit/bc001cef4c907d8fa421d3190b4fa91865d9ff6c) - Add support for ANY_VALUE for versions 16+ *(PR [#5179](https://github.com/tobymao/sqlglot/pull/5179) by [@VaggelisD](https://github.com/VaggelisD))*:
11
+
12
+ Add support for ANY_VALUE for versions 16+ (#5179)
13
+
14
+ - due to [`6a2cb39`](https://github.com/tobymao/sqlglot/commit/6a2cb39d0ceec091dc4fc228f26d4f457729a3cf) - virtual column with AS(expr) as ComputedColumnConstraint *(PR [#5180](https://github.com/tobymao/sqlglot/pull/5180) by [@geooo109](https://github.com/geooo109))*:
15
+
16
+ virtual column with AS(expr) as ComputedColumnConstraint (#5180)
17
+
18
+ - due to [`29e2f1d`](https://github.com/tobymao/sqlglot/commit/29e2f1d89c095c9fab0944a6962c99bd745c2c91) - Array_intersection transpilation support *(PR [#5186](https://github.com/tobymao/sqlglot/pull/5186) by [@HarishRavi96](https://github.com/HarishRavi96))*:
19
+
20
+ Array_intersection transpilation support (#5186)
21
+
22
+
23
+ ### :sparkles: New Features
24
+ - [`434c45b`](https://github.com/tobymao/sqlglot/commit/434c45b547c3a5ea155dc8d7da2baab326eb6d4f) - improve support for ENDSWITH closes [#5170](https://github.com/tobymao/sqlglot/pull/5170) *(commit by [@georgesittas](https://github.com/georgesittas))*
25
+ - [`63f9cb4`](https://github.com/tobymao/sqlglot/commit/63f9cb4b158b88574136b32241ee60254352c9e6) - **sqlglotrs**: match the Python implementation of __repr__ for tokens *(PR [#5172](https://github.com/tobymao/sqlglot/pull/5172) by [@georgesittas](https://github.com/georgesittas))*
26
+ - [`c007afa`](https://github.com/tobymao/sqlglot/commit/c007afa23831e9bd86f401d85260e15edf00328f) - support Star instance as first arg of exp.column helper *(PR [#5177](https://github.com/tobymao/sqlglot/pull/5177) by [@georgesittas](https://github.com/georgesittas))*
27
+ - [`bc001ce`](https://github.com/tobymao/sqlglot/commit/bc001cef4c907d8fa421d3190b4fa91865d9ff6c) - **postgres**: Add support for ANY_VALUE for versions 16+ *(PR [#5179](https://github.com/tobymao/sqlglot/pull/5179) by [@VaggelisD](https://github.com/VaggelisD))*
28
+ - :arrow_lower_right: *addresses issue [#4674](https://github.com/TobikoData/sqlmesh/issues/4674) opened by [@petrikoro](https://github.com/petrikoro)*
29
+ - [`ba05ff6`](https://github.com/tobymao/sqlglot/commit/ba05ff67127e056d567fc2c1d3bcc8e3dcce7b7e) - **parser**: AGGREGATE with GROUP AND ORDER BY pipe syntax *(PR [#5171](https://github.com/tobymao/sqlglot/pull/5171) by [@geooo109](https://github.com/geooo109))*
30
+ - [`26077a4`](https://github.com/tobymao/sqlglot/commit/26077a47d9db750f44ab1baf9a434596b5bb613b) - make to_table more lenient *(PR [#5183](https://github.com/tobymao/sqlglot/pull/5183) by [@georgesittas](https://github.com/georgesittas))*
31
+ - [`29e2f1d`](https://github.com/tobymao/sqlglot/commit/29e2f1d89c095c9fab0944a6962c99bd745c2c91) - Array_intersection transpilation support *(PR [#5186](https://github.com/tobymao/sqlglot/pull/5186) by [@HarishRavi96](https://github.com/HarishRavi96))*
32
+ - [`d86a114`](https://github.com/tobymao/sqlglot/commit/d86a1147aeb866ed0ab2c342914ecf8cbfadac8a) - **sqlite**: implement RESPECT/IGNORE NULLS in first_value() *(PR [#5185](https://github.com/tobymao/sqlglot/pull/5185) by [@NickCrews](https://github.com/NickCrews))*
33
+ - [`1d50fca`](https://github.com/tobymao/sqlglot/commit/1d50fca8ffc34e4acbc1b791c4cdf5f184a748db) - improve transpilation of st_point and st_distance *(PR [#5194](https://github.com/tobymao/sqlglot/pull/5194) by [@georgesittas](https://github.com/georgesittas))*
34
+ - [`756ec3b`](https://github.com/tobymao/sqlglot/commit/756ec3b65db1eb2572d017a3ac12ece6bb44c726) - **parser**: SET OPERATORS with pipe syntax *(PR [#5184](https://github.com/tobymao/sqlglot/pull/5184) by [@geooo109](https://github.com/geooo109))*
35
+
36
+ ### :bug: Bug Fixes
37
+ - [`6a2cb39`](https://github.com/tobymao/sqlglot/commit/6a2cb39d0ceec091dc4fc228f26d4f457729a3cf) - **parser**: virtual column with AS(expr) as ComputedColumnConstraint *(PR [#5180](https://github.com/tobymao/sqlglot/pull/5180) by [@geooo109](https://github.com/geooo109))*
38
+ - :arrow_lower_right: *fixes issue [#5173](https://github.com/tobymao/sqlglot/issues/5173) opened by [@suyah](https://github.com/suyah)*
39
+ - [`c87ae02`](https://github.com/tobymao/sqlglot/commit/c87ae02aa263be8463ca7283ebd090385a4bfd59) - **sqlite**: Add REPLACE to command tokens *(PR [#5192](https://github.com/tobymao/sqlglot/pull/5192) by [@VaggelisD](https://github.com/VaggelisD))*
40
+ - :arrow_lower_right: *fixes issue [#5187](https://github.com/tobymao/sqlglot/issues/5187) opened by [@stefanmalanik](https://github.com/stefanmalanik)*
41
+ - [`4b89afd`](https://github.com/tobymao/sqlglot/commit/4b89afdcc0063e70cbc64165c7f1f5102afaa87c) - **starrocks**: array_agg_transpilation_fix *(PR [#5190](https://github.com/tobymao/sqlglot/pull/5190) by [@Swathiraj23](https://github.com/Swathiraj23))*
42
+ - [`461b054`](https://github.com/tobymao/sqlglot/commit/461b0548832ab8d916c3a6638f27a49f681109fe) - **postgres**: support use_spheroid argument in ST_DISTANCE *(commit by [@georgesittas](https://github.com/georgesittas))*
43
+
44
+ ### :wrench: Chores
45
+ - [`83de4e1`](https://github.com/tobymao/sqlglot/commit/83de4e11bc1547aa22b275b20c0326dfbe43b2b8) - improve benchmark result displaying *(PR [#5176](https://github.com/tobymao/sqlglot/pull/5176) by [@georgesittas](https://github.com/georgesittas))*
46
+ - [`5d5dc2f`](https://github.com/tobymao/sqlglot/commit/5d5dc2fa471bd53730e03ac8039804221949f843) - Clean up exp.ArrayIntersect PR *(PR [#5193](https://github.com/tobymao/sqlglot/pull/5193) by [@VaggelisD](https://github.com/VaggelisD))*
47
+
48
+
4
49
  ## [v26.25.3] - 2025-06-04
5
50
  ### :sparkles: New Features
6
51
  - [`964b4a1`](https://github.com/tobymao/sqlglot/commit/964b4a1e367e00e243b80edf677cd48d453ed31e) - add line/col position for Star *(commit by [@georgesittas](https://github.com/georgesittas))*
@@ -4794,3 +4839,4 @@ Changelog
4794
4839
  [v26.25.1]: https://github.com/tobymao/sqlglot/compare/v26.25.0...v26.25.1
4795
4840
  [v26.25.2]: https://github.com/tobymao/sqlglot/compare/v26.25.1...v26.25.2
4796
4841
  [v26.25.3]: https://github.com/tobymao/sqlglot/compare/v26.25.2...v26.25.3
4842
+ [v26.26.0]: https://github.com/tobymao/sqlglot/compare/v26.25.3...v26.26.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlglot
3
- Version: 26.26.0
3
+ Version: 26.27.1
4
4
  Summary: An easily customizable SQL parser and transpiler
5
5
  Author-email: Toby Mao <toby.mao@gmail.com>
6
6
  License: MIT License
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '26.26.0'
21
- __version_tuple__ = version_tuple = (26, 26, 0)
20
+ __version__ = version = '26.27.1'
21
+ __version_tuple__ = version_tuple = (26, 27, 1)
@@ -557,6 +557,7 @@ class Hive(Dialect):
557
557
  exp.GenerateDateArray: sequence_sql,
558
558
  exp.If: if_sql(),
559
559
  exp.ILike: no_ilike_sql,
560
+ exp.IntDiv: lambda self, e: self.binary(e, "DIV"),
560
561
  exp.IsNan: rename_func("ISNAN"),
561
562
  exp.JSONExtract: lambda self, e: self.func("GET_JSON_OBJECT", e.this, e.expression),
562
563
  exp.JSONExtractScalar: lambda self, e: self.func(
@@ -489,6 +489,27 @@ class MySQL(Dialect):
489
489
  VALUES_FOLLOWED_BY_PAREN = False
490
490
  SUPPORTS_PARTITION_SELECTION = True
491
491
 
492
+ def _parse_generated_as_identity(
493
+ self,
494
+ ) -> (
495
+ exp.GeneratedAsIdentityColumnConstraint
496
+ | exp.ComputedColumnConstraint
497
+ | exp.GeneratedAsRowColumnConstraint
498
+ ):
499
+ this = super()._parse_generated_as_identity()
500
+
501
+ if self._match_texts(("STORED", "VIRTUAL")):
502
+ persisted = self._prev.text.upper() == "STORED"
503
+
504
+ if isinstance(this, exp.ComputedColumnConstraint):
505
+ this.set("persisted", persisted)
506
+ elif isinstance(this, exp.GeneratedAsIdentityColumnConstraint):
507
+ this = self.expression(
508
+ exp.ComputedColumnConstraint, this=this.expression, persisted=persisted
509
+ )
510
+
511
+ return this
512
+
492
513
  def _parse_primary_key_part(self) -> t.Optional[exp.Expression]:
493
514
  this = self._parse_id_var()
494
515
  if not self._match(TokenType.L_PAREN):
@@ -1154,6 +1175,10 @@ class MySQL(Dialect):
1154
1175
  "zerofill",
1155
1176
  }
1156
1177
 
1178
+ def computedcolumnconstraint_sql(self, expression: exp.ComputedColumnConstraint) -> str:
1179
+ persisted = "STORED" if expression.args.get("persisted") else "VIRTUAL"
1180
+ return f"GENERATED ALWAYS AS ({self.sql(expression.this.unnest())}) {persisted}"
1181
+
1157
1182
  def array_sql(self, expression: exp.Array) -> str:
1158
1183
  self.unsupported("Arrays are not supported by MySQL")
1159
1184
  return self.function_fallback_sql(expression)
@@ -512,6 +512,18 @@ class Postgres(Dialect):
512
512
 
513
513
  return this
514
514
 
515
+ def _parse_user_defined_type(
516
+ self, identifier: exp.Identifier
517
+ ) -> t.Optional[exp.Expression]:
518
+ udt_type: exp.Identifier | exp.Dot = identifier
519
+
520
+ while self._match(TokenType.DOT):
521
+ part = self._parse_id_var()
522
+ if part:
523
+ udt_type = exp.Dot(this=udt_type, expression=part)
524
+
525
+ return exp.DataType.build(udt_type, udt=True)
526
+
515
527
  class Generator(generator.Generator):
516
528
  SINGLE_STRING_INTERVAL = True
517
529
  RENAME_TABLE_WITH_DB = False
@@ -863,8 +863,14 @@ class Snowflake(Dialect):
863
863
  properties=self._parse_properties(),
864
864
  )
865
865
 
866
- def _parse_get(self) -> exp.Get | exp.Command:
866
+ def _parse_get(self) -> t.Optional[exp.Expression]:
867
867
  start = self._prev
868
+
869
+ # If we detect GET( then we need to parse a function, not a statement
870
+ if self._match(TokenType.L_PAREN):
871
+ self._retreat(self._index - 2)
872
+ return self._parse_expression()
873
+
868
874
  target = self._parse_location_path()
869
875
 
870
876
  # Parse as command if unquoted file path
@@ -1100,6 +1106,7 @@ class Snowflake(Dialect):
1100
1106
  self, e, func_name="CHARINDEX", supports_position=True
1101
1107
  ),
1102
1108
  exp.StrToDate: lambda self, e: self.func("DATE", e.this, self.format_time(e)),
1109
+ exp.StringToArray: rename_func("STRTOK_TO_ARRAY"),
1103
1110
  exp.Stuff: rename_func("INSERT"),
1104
1111
  exp.StPoint: rename_func("ST_MAKEPOINT"),
1105
1112
  exp.TimeAdd: date_delta_sql("TIMEADD"),
@@ -109,7 +109,9 @@ class SQLite(Dialect):
109
109
  "DATETIME": lambda args: exp.Anonymous(this="DATETIME", expressions=args),
110
110
  "TIME": lambda args: exp.Anonymous(this="TIME", expressions=args),
111
111
  }
112
+
112
113
  STRING_ALIASES = True
114
+ ALTER_RENAME_REQUIRES_COLUMN = False
113
115
 
114
116
  def _parse_unique(self) -> exp.UniqueColumnConstraint:
115
117
  # Do not consume more tokens if UNIQUE is used as a standalone constraint, e.g:
@@ -1724,15 +1724,15 @@ class Column(Condition):
1724
1724
  if self.args.get(part)
1725
1725
  ]
1726
1726
 
1727
- def to_dot(self) -> Dot | Identifier:
1727
+ def to_dot(self, include_dots: bool = True) -> Dot | Identifier:
1728
1728
  """Converts the column into a dot expression."""
1729
1729
  parts = self.parts
1730
1730
  parent = self.parent
1731
1731
 
1732
- while parent:
1733
- if isinstance(parent, Dot):
1732
+ if include_dots:
1733
+ while isinstance(parent, Dot):
1734
1734
  parts.append(parent.expression)
1735
- parent = parent.parent
1735
+ parent = parent.parent
1736
1736
 
1737
1737
  return Dot.build(deepcopy(parts)) if len(parts) > 1 else parts[0]
1738
1738
 
@@ -4753,6 +4753,8 @@ class DataType(Expression):
4753
4753
  if udt:
4754
4754
  return DataType(this=DataType.Type.USERDEFINED, kind=dtype, **kwargs)
4755
4755
  raise
4756
+ elif isinstance(dtype, (Identifier, Dot)) and udt:
4757
+ return DataType(this=DataType.Type.USERDEFINED, kind=dtype, **kwargs)
4756
4758
  elif isinstance(dtype, DataType.Type):
4757
4759
  data_type_exp = DataType(this=dtype)
4758
4760
  elif isinstance(dtype, DataType):
@@ -4794,9 +4796,6 @@ class DataType(Expression):
4794
4796
  return False
4795
4797
 
4796
4798
 
4797
- DATA_TYPE = t.Union[str, DataType, DataType.Type]
4798
-
4799
-
4800
4799
  # https://www.postgresql.org/docs/15/datatype-pseudo.html
4801
4800
  class PseudoType(DataType):
4802
4801
  arg_types = {"this": True}
@@ -4926,6 +4925,10 @@ class AddConstraint(Expression):
4926
4925
  arg_types = {"expressions": True}
4927
4926
 
4928
4927
 
4928
+ class AddPartition(Expression):
4929
+ arg_types = {"this": True, "exists": False}
4930
+
4931
+
4929
4932
  class AttachOption(Expression):
4930
4933
  arg_types = {"this": True, "expression": False}
4931
4934
 
@@ -5026,6 +5029,9 @@ class Dot(Binary):
5026
5029
  return parts
5027
5030
 
5028
5031
 
5032
+ DATA_TYPE = t.Union[str, Identifier, Dot, DataType, DataType.Type]
5033
+
5034
+
5029
5035
  class DPipe(Binary):
5030
5036
  arg_types = {"this": True, "expression": True, "safe": False}
5031
5037
 
@@ -5587,7 +5593,7 @@ class String(Func):
5587
5593
 
5588
5594
 
5589
5595
  class StringToArray(Func):
5590
- arg_types = {"this": True, "expression": True, "null": False}
5596
+ arg_types = {"this": True, "expression": False, "null": False}
5591
5597
  _sql_names = ["STRING_TO_ARRAY", "SPLIT_BY_STRING", "STRTOK_TO_ARRAY"]
5592
5598
 
5593
5599
 
@@ -3498,6 +3498,10 @@ class Generator(metaclass=_Generator):
3498
3498
  def addconstraint_sql(self, expression: exp.AddConstraint) -> str:
3499
3499
  return f"ADD {self.expressions(expression)}"
3500
3500
 
3501
+ def addpartition_sql(self, expression: exp.AddPartition) -> str:
3502
+ exists = "IF NOT EXISTS " if expression.args.get("exists") else ""
3503
+ return f"ADD {exists}{self.sql(expression.this)}"
3504
+
3501
3505
  def distinct_sql(self, expression: exp.Distinct) -> str:
3502
3506
  this = self.expressions(expression, flat=True)
3503
3507