sqlglot 27.4.0__tar.gz → 27.5.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 (228) hide show
  1. {sqlglot-27.4.0 → sqlglot-27.5.0}/CHANGELOG.md +32 -0
  2. {sqlglot-27.4.0 → sqlglot-27.5.0}/LICENSE +1 -1
  3. {sqlglot-27.4.0 → sqlglot-27.5.0}/PKG-INFO +1 -24
  4. {sqlglot-27.4.0 → sqlglot-27.5.0}/pyproject.toml +4 -5
  5. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/_version.py +2 -2
  6. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/bigquery.py +4 -2
  7. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/duckdb.py +1 -0
  8. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/exasol.py +44 -3
  9. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/materialize.py +1 -0
  10. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/oracle.py +0 -4
  11. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/postgres.py +0 -2
  12. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/redshift.py +1 -0
  13. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/risingwave.py +1 -0
  14. sqlglot-27.5.0/sqlglot/dialects/singlestore.py +1146 -0
  15. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/snowflake.py +0 -8
  16. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/expressions.py +1 -8
  17. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/generator.py +37 -10
  18. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/eliminate_joins.py +3 -0
  19. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/scope.py +6 -0
  20. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/parser.py +24 -8
  21. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/tokens.py +5 -2
  22. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/transforms.py +1 -1
  23. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot.egg-info/PKG-INFO +1 -24
  24. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_dialect.py +64 -12
  25. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_exasol.py +29 -0
  26. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_mysql.py +4 -0
  27. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_oracle.py +13 -1
  28. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_postgres.py +6 -0
  29. sqlglot-27.5.0/tests/dialects/test_singlestore.py +51 -0
  30. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_snowflake.py +3 -5
  31. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/identity.sql +2 -0
  32. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/eliminate_ctes.sql +28 -1
  33. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/eliminate_joins.sql +19 -0
  34. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_optimizer.py +14 -0
  35. sqlglot-27.4.0/sqlglot/dialects/singlestore.py +0 -5
  36. sqlglot-27.4.0/tests/dialects/test_singlestore.py +0 -20
  37. {sqlglot-27.4.0 → sqlglot-27.5.0}/.gitignore +0 -0
  38. {sqlglot-27.4.0 → sqlglot-27.5.0}/.gitpod.yml +0 -0
  39. {sqlglot-27.4.0 → sqlglot-27.5.0}/.pre-commit-config.yaml +0 -0
  40. {sqlglot-27.4.0 → sqlglot-27.5.0}/CONTRIBUTING.md +0 -0
  41. {sqlglot-27.4.0 → sqlglot-27.5.0}/MANIFEST.in +0 -0
  42. {sqlglot-27.4.0 → sqlglot-27.5.0}/Makefile +0 -0
  43. {sqlglot-27.4.0 → sqlglot-27.5.0}/README.md +0 -0
  44. {sqlglot-27.4.0 → sqlglot-27.5.0}/setup.cfg +0 -0
  45. {sqlglot-27.4.0 → sqlglot-27.5.0}/setup.py +0 -0
  46. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/__init__.py +0 -0
  47. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/__main__.py +0 -0
  48. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/_typing.py +0 -0
  49. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/__init__.py +0 -0
  50. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/athena.py +0 -0
  51. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/clickhouse.py +0 -0
  52. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/databricks.py +0 -0
  53. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/dialect.py +0 -0
  54. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/doris.py +0 -0
  55. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/dremio.py +0 -0
  56. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/drill.py +0 -0
  57. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/druid.py +0 -0
  58. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/dune.py +0 -0
  59. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/fabric.py +0 -0
  60. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/hive.py +0 -0
  61. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/mysql.py +0 -0
  62. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/presto.py +0 -0
  63. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/prql.py +0 -0
  64. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/spark.py +0 -0
  65. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/spark2.py +0 -0
  66. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/sqlite.py +0 -0
  67. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/starrocks.py +0 -0
  68. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/tableau.py +0 -0
  69. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/teradata.py +0 -0
  70. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/trino.py +0 -0
  71. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/dialects/tsql.py +0 -0
  72. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/diff.py +0 -0
  73. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/errors.py +0 -0
  74. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/executor/__init__.py +0 -0
  75. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/executor/context.py +0 -0
  76. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/executor/env.py +0 -0
  77. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/executor/python.py +0 -0
  78. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/executor/table.py +0 -0
  79. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/helper.py +0 -0
  80. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/jsonpath.py +0 -0
  81. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/lineage.py +0 -0
  82. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/__init__.py +0 -0
  83. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/annotate_types.py +0 -0
  84. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/canonicalize.py +0 -0
  85. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/eliminate_ctes.py +0 -0
  86. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/eliminate_subqueries.py +0 -0
  87. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/isolate_table_selects.py +0 -0
  88. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/merge_subqueries.py +0 -0
  89. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/normalize.py +0 -0
  90. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/normalize_identifiers.py +0 -0
  91. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/optimize_joins.py +0 -0
  92. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/optimizer.py +0 -0
  93. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/pushdown_predicates.py +0 -0
  94. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/pushdown_projections.py +0 -0
  95. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/qualify.py +0 -0
  96. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/qualify_columns.py +0 -0
  97. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/qualify_tables.py +0 -0
  98. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/simplify.py +0 -0
  99. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/optimizer/unnest_subqueries.py +0 -0
  100. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/planner.py +0 -0
  101. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/py.typed +0 -0
  102. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/schema.py +0 -0
  103. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/serde.py +0 -0
  104. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/time.py +0 -0
  105. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot/trie.py +0 -0
  106. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot.egg-info/SOURCES.txt +0 -0
  107. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot.egg-info/dependency_links.txt +0 -0
  108. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot.egg-info/requires.txt +0 -0
  109. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot.egg-info/top_level.txt +0 -0
  110. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglot.png +0 -0
  111. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglotrs/Cargo.lock +0 -0
  112. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglotrs/Cargo.toml +0 -0
  113. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglotrs/benches/dialect_settings.json +0 -0
  114. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglotrs/benches/long.rs +0 -0
  115. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglotrs/benches/token_type_settings.json +0 -0
  116. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglotrs/benches/tokenizer_dialect_settings.json +0 -0
  117. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglotrs/benches/tokenizer_settings.json +0 -0
  118. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglotrs/pyproject.toml +0 -0
  119. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglotrs/src/lib.rs +0 -0
  120. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglotrs/src/settings.rs +0 -0
  121. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglotrs/src/token.rs +0 -0
  122. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglotrs/src/tokenizer.rs +0 -0
  123. {sqlglot-27.4.0 → sqlglot-27.5.0}/sqlglotrs/src/trie.rs +0 -0
  124. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/__init__.py +0 -0
  125. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/__init__.py +0 -0
  126. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_athena.py +0 -0
  127. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_bigquery.py +0 -0
  128. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_clickhouse.py +0 -0
  129. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_databricks.py +0 -0
  130. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_doris.py +0 -0
  131. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_dremio.py +0 -0
  132. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_drill.py +0 -0
  133. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_druid.py +0 -0
  134. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_duckdb.py +0 -0
  135. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_dune.py +0 -0
  136. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_fabric.py +0 -0
  137. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_hive.py +0 -0
  138. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_materialize.py +0 -0
  139. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_pipe_syntax.py +0 -0
  140. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_presto.py +0 -0
  141. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_prql.py +0 -0
  142. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_redshift.py +0 -0
  143. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_risingwave.py +0 -0
  144. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_spark.py +0 -0
  145. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_sqlite.py +0 -0
  146. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_starrocks.py +0 -0
  147. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_tableau.py +0 -0
  148. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_teradata.py +0 -0
  149. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_trino.py +0 -0
  150. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/dialects/test_tsql.py +0 -0
  151. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/jsonpath/LICENSE +0 -0
  152. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/jsonpath/cts.json +0 -0
  153. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/annotate_functions.sql +0 -0
  154. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/annotate_types.sql +0 -0
  155. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/canonicalize.sql +0 -0
  156. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/eliminate_subqueries.sql +0 -0
  157. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/isolate_table_selects.sql +0 -0
  158. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/merge_subqueries.sql +0 -0
  159. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/normalize.sql +0 -0
  160. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/normalize_identifiers.sql +0 -0
  161. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/optimize_joins.sql +0 -0
  162. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/optimizer.sql +0 -0
  163. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/pushdown_cte_alias_columns.sql +0 -0
  164. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/pushdown_predicates.sql +0 -0
  165. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/pushdown_projections.sql +0 -0
  166. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/qualify_columns.sql +0 -0
  167. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/qualify_columns__invalid.sql +0 -0
  168. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/qualify_columns__with_invisible.sql +0 -0
  169. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/qualify_columns_ddl.sql +0 -0
  170. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/qualify_tables.sql +0 -0
  171. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/quote_identifiers.sql +0 -0
  172. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/simplify.sql +0 -0
  173. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/call_center.csv.gz +0 -0
  174. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/catalog_page.csv.gz +0 -0
  175. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/catalog_returns.csv.gz +0 -0
  176. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/catalog_sales.csv.gz +0 -0
  177. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/customer.csv.gz +0 -0
  178. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/customer_address.csv.gz +0 -0
  179. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/customer_demographics.csv.gz +0 -0
  180. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/date_dim.csv.gz +0 -0
  181. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/household_demographics.csv.gz +0 -0
  182. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/income_band.csv.gz +0 -0
  183. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/inventory.csv.gz +0 -0
  184. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/item.csv.gz +0 -0
  185. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/promotion.csv.gz +0 -0
  186. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/reason.csv.gz +0 -0
  187. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/ship_mode.csv.gz +0 -0
  188. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/store.csv.gz +0 -0
  189. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/store_returns.csv.gz +0 -0
  190. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/store_sales.csv.gz +0 -0
  191. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/time_dim.csv.gz +0 -0
  192. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/tpc-ds.sql +0 -0
  193. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/warehouse.csv.gz +0 -0
  194. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/web_page.csv.gz +0 -0
  195. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/web_returns.csv.gz +0 -0
  196. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/web_sales.csv.gz +0 -0
  197. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-ds/web_site.csv.gz +0 -0
  198. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-h/customer.csv.gz +0 -0
  199. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-h/lineitem.csv.gz +0 -0
  200. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-h/nation.csv.gz +0 -0
  201. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-h/orders.csv.gz +0 -0
  202. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-h/part.csv.gz +0 -0
  203. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-h/partsupp.csv.gz +0 -0
  204. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-h/region.csv.gz +0 -0
  205. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-h/supplier.csv.gz +0 -0
  206. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/tpc-h/tpc-h.sql +0 -0
  207. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/optimizer/unnest_subqueries.sql +0 -0
  208. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/partial.sql +0 -0
  209. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/fixtures/pretty.sql +0 -0
  210. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/gen_fixtures.py +0 -0
  211. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/helpers.py +0 -0
  212. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_build.py +0 -0
  213. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_dialect_imports.py +0 -0
  214. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_diff.py +0 -0
  215. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_docs.py +0 -0
  216. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_executor.py +0 -0
  217. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_expressions.py +0 -0
  218. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_generator.py +0 -0
  219. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_helper.py +0 -0
  220. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_jsonpath.py +0 -0
  221. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_lineage.py +0 -0
  222. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_parser.py +0 -0
  223. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_schema.py +0 -0
  224. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_serde.py +0 -0
  225. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_time.py +0 -0
  226. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_tokens.py +0 -0
  227. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_transforms.py +0 -0
  228. {sqlglot-27.4.0 → sqlglot-27.5.0}/tests/test_transpile.py +0 -0
@@ -1,6 +1,36 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ ## [v27.4.1] - 2025-07-27
5
+ ### :bug: Bug Fixes
6
+ - [`ba2b3e2`](https://github.com/tobymao/sqlglot/commit/ba2b3e21ca5454402808b68697ea4eb62963d341) - **bigquery**: make exp.Array type inference more robust *(PR [#5483](https://github.com/tobymao/sqlglot/pull/5483) by [@georgesittas](https://github.com/georgesittas))*
7
+
8
+
9
+ ## [v27.4.0] - 2025-07-25
10
+ ### :boom: BREAKING CHANGES
11
+ - due to [`4f348bd`](https://github.com/tobymao/sqlglot/commit/4f348bddda21b18841fd2d728fe486e95cdaa549) - store Query schemas in meta dict instead of type attr *(PR [#5480](https://github.com/tobymao/sqlglot/pull/5480) by [@georgesittas](https://github.com/georgesittas))*:
12
+
13
+ store Query schemas in meta dict instead of type attr (#5480)
14
+
15
+
16
+ ### :sparkles: New Features
17
+ - [`7961ece`](https://github.com/tobymao/sqlglot/commit/7961ece058f3771364aad5beedba9484e3a2e27c) - **exasol**: Add support for HASH_SHA1 function *(PR [#5468](https://github.com/tobymao/sqlglot/pull/5468) by [@nnamdi16](https://github.com/nnamdi16))*
18
+ - [`406815d`](https://github.com/tobymao/sqlglot/commit/406815de21f0fdc9874ff46155d4ee0274aa6337) - **exasol**: support HASH_SHA1 *(commit by [@georgesittas](https://github.com/georgesittas))*
19
+ - [`e6f4fc9`](https://github.com/tobymao/sqlglot/commit/e6f4fc9c6d59d96777b2a2ec5dcc360e53639f8d) - **sqlite**: support ATTACH/DETACH DATABASE *(PR [#5469](https://github.com/tobymao/sqlglot/pull/5469) by [@geooo109](https://github.com/geooo109))*
20
+ - :arrow_lower_right: *addresses issue [#5459](https://github.com/tobymao/sqlglot/issues/5459) opened by [@mariofox](https://github.com/mariofox)*
21
+ - [`8aa3498`](https://github.com/tobymao/sqlglot/commit/8aa349890673dccdd4daa0aea6ca5fcb9fdaf46f) - **hive, spark**: Add support for LOCATION in ADD PARTITION *(PR [#5472](https://github.com/tobymao/sqlglot/pull/5472) by [@VaggelisD](https://github.com/VaggelisD))*
22
+ - :arrow_lower_right: *addresses issue [#5457](https://github.com/tobymao/sqlglot/issues/5457) opened by [@tsamaras](https://github.com/tsamaras)*
23
+ - [`44adfc0`](https://github.com/tobymao/sqlglot/commit/44adfc0e74da9d1b05a5a8a67b81fb7c67634c70) - **exasol**: add HASH_MD5 functionality to exasol dialect *(PR [#5473](https://github.com/tobymao/sqlglot/pull/5473) by [@nnamdi16](https://github.com/nnamdi16))*
24
+ - [`05e1c4d`](https://github.com/tobymao/sqlglot/commit/05e1c4dbf795915448173a894a89a33b289a3b5b) - **snowflake**: Transpile BQ's `STRUCT` dot access *(PR [#5471](https://github.com/tobymao/sqlglot/pull/5471) by [@VaggelisD](https://github.com/VaggelisD))*
25
+ - [`3c5ecdf`](https://github.com/tobymao/sqlglot/commit/3c5ecdf7f27629c01f0f3402e64a9dedf0583851) - **exasol**: Add HASHTYPE_MD5 functions to Exasol dialect *(PR [#5474](https://github.com/tobymao/sqlglot/pull/5474) by [@nnamdi16](https://github.com/nnamdi16))*
26
+ - [`1d640d2`](https://github.com/tobymao/sqlglot/commit/1d640d2278288b9a39a65b2532a13bc17e06c4e8) - **exasol**: add support for HASH_SHA256 and HASH_SHA512 hashing *(PR [#5475](https://github.com/tobymao/sqlglot/pull/5475) by [@nnamdi16](https://github.com/nnamdi16))*
27
+
28
+ ### :bug: Bug Fixes
29
+ - [`e1819d6`](https://github.com/tobymao/sqlglot/commit/e1819d6451fec0eb3a1f77c90fd8d5c5b0d89889) - only strip kind from joins when it is inner|outer *(PR [#5477](https://github.com/tobymao/sqlglot/pull/5477) by [@themattmorris](https://github.com/themattmorris))*
30
+ - :arrow_lower_right: *fixes issue [#5470](https://github.com/tobymao/sqlglot/issues/5470) opened by [@themattmorris](https://github.com/themattmorris)*
31
+ - [`4f348bd`](https://github.com/tobymao/sqlglot/commit/4f348bddda21b18841fd2d728fe486e95cdaa549) - **bigquery**: store Query schemas in meta dict instead of type attr *(PR [#5480](https://github.com/tobymao/sqlglot/pull/5480) by [@georgesittas](https://github.com/georgesittas))*
32
+
33
+
4
34
  ## [v27.3.1] - 2025-07-24
5
35
  ### :boom: BREAKING CHANGES
6
36
  - due to [`48703c4`](https://github.com/tobymao/sqlglot/commit/48703c4fadd9f24de151a63d1bfa74f4b8e71133) - temporarily move VARCHAR length inference logic to Fabric *(commit by [@georgesittas](https://github.com/georgesittas))*:
@@ -6306,3 +6336,5 @@ Changelog
6306
6336
  [v27.2.0]: https://github.com/tobymao/sqlglot/compare/v27.1.0...v27.2.0
6307
6337
  [v27.3.0]: https://github.com/tobymao/sqlglot/compare/v27.0.1...v27.3.0
6308
6338
  [v27.3.1]: https://github.com/tobymao/sqlglot/compare/v27.3.0...v27.3.1
6339
+ [v27.4.0]: https://github.com/tobymao/sqlglot/compare/v27.3.1...v27.4.0
6340
+ [v27.4.1]: https://github.com/tobymao/sqlglot/compare/v27.4.0...v27.4.1
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2023 Toby Mao
3
+ Copyright (c) 2025 Toby Mao
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,30 +1,8 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlglot
3
- Version: 27.4.0
3
+ Version: 27.5.0
4
4
  Summary: An easily customizable SQL parser and transpiler
5
5
  Author-email: Toby Mao <toby.mao@gmail.com>
6
- License: MIT License
7
-
8
- Copyright (c) 2023 Toby Mao
9
-
10
- Permission is hereby granted, free of charge, to any person obtaining a copy
11
- of this software and associated documentation files (the "Software"), to deal
12
- in the Software without restriction, including without limitation the rights
13
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14
- copies of the Software, and to permit persons to whom the Software is
15
- furnished to do so, subject to the following conditions:
16
-
17
- The above copyright notice and this permission notice shall be included in all
18
- copies or substantial portions of the Software.
19
-
20
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
- SOFTWARE.
27
-
28
6
  Project-URL: Homepage, https://sqlglot.com/
29
7
  Project-URL: Documentation, https://sqlglot.com/sqlglot.html
30
8
  Project-URL: Repository, https://github.com/tobymao/sqlglot
@@ -32,7 +10,6 @@ Project-URL: Issues, https://github.com/tobymao/sqlglot/issues
32
10
  Classifier: Development Status :: 5 - Production/Stable
33
11
  Classifier: Intended Audience :: Developers
34
12
  Classifier: Intended Audience :: Science/Research
35
- Classifier: License :: OSI Approved :: MIT License
36
13
  Classifier: Operating System :: OS Independent
37
14
  Classifier: Programming Language :: SQL
38
15
  Classifier: Programming Language :: Python :: 3 :: Only
@@ -4,13 +4,12 @@ dynamic = ["version", "optional-dependencies"]
4
4
  description = "An easily customizable SQL parser and transpiler"
5
5
  readme = "README.md"
6
6
  authors = [{ name = "Toby Mao", email = "toby.mao@gmail.com" }]
7
- license = { file = "LICENSE" }
7
+ license-files = ["LICENSE"]
8
8
  requires-python = ">= 3.9"
9
- classifiers=[
9
+ classifiers = [
10
10
  "Development Status :: 5 - Production/Stable",
11
11
  "Intended Audience :: Developers",
12
12
  "Intended Audience :: Science/Research",
13
- "License :: OSI Approved :: MIT License",
14
13
  "Operating System :: OS Independent",
15
14
  "Programming Language :: SQL",
16
15
  "Programming Language :: Python :: 3 :: Only",
@@ -35,7 +34,7 @@ fallback_version = "0.0.0"
35
34
  local_scheme = "no-local-version"
36
35
 
37
36
  [tool.setuptools.packages.find]
38
- include=["sqlglot", "sqlglot.*"]
37
+ include = ["sqlglot", "sqlglot.*"]
39
38
 
40
39
  [tool.setuptools.package-data]
41
- "*" = ["py.typed"]
40
+ "*" = ["py.typed"]
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '27.4.0'
21
- __version_tuple__ = version_tuple = (27, 4, 0)
20
+ __version__ = version = '27.5.0'
21
+ __version_tuple__ = version_tuple = (27, 5, 0)
@@ -378,11 +378,13 @@ def _annotate_array(self: TypeAnnotator, expression: exp.Array) -> exp.Array:
378
378
  and (query_type := select.meta.get("query_type")) is not None
379
379
  and query_type.is_type(exp.DataType.Type.STRUCT)
380
380
  and len(query_type.expressions) == 1
381
+ and isinstance(col_def := query_type.expressions[0], exp.ColumnDef)
382
+ and (projection_type := col_def.kind) is not None
383
+ and not projection_type.is_type(exp.DataType.Type.UNKNOWN)
381
384
  ):
382
- projection_type = query_type.expressions[0].kind.copy()
383
385
  array_type = exp.DataType(
384
386
  this=exp.DataType.Type.ARRAY,
385
- expressions=[projection_type],
387
+ expressions=[projection_type.copy()],
386
388
  nested=True,
387
389
  )
388
390
  return self._annotate_with_type(expression, array_type)
@@ -665,6 +665,7 @@ class DuckDB(Dialect):
665
665
  ARRAY_CONCAT_IS_VAR_LEN = False
666
666
  ARRAY_SIZE_DIM_REQUIRED = False
667
667
  NORMALIZE_EXTRACT_DATE_PARTS = True
668
+ SUPPORTS_LIKE_QUANTIFIERS = False
668
669
 
669
670
  TRANSFORMS = {
670
671
  **generator.Generator.TRANSFORMS,
@@ -1,17 +1,25 @@
1
1
  from __future__ import annotations
2
+
3
+ import typing as t
4
+
2
5
  from sqlglot import exp, generator, parser, tokens
6
+ from sqlglot.dialects.clickhouse import timestamptrunc_sql
3
7
  from sqlglot.dialects.dialect import (
4
8
  Dialect,
5
- rename_func,
6
9
  binary_from_function,
7
10
  build_formatted_time,
8
- timestrtotime_sql,
11
+ rename_func,
9
12
  strposition_sql,
13
+ timestrtotime_sql,
14
+ unit_to_str,
10
15
  )
11
- from sqlglot.helper import seq_get
12
16
  from sqlglot.generator import unsupported_args
17
+ from sqlglot.helper import seq_get
13
18
  from sqlglot.tokens import TokenType
14
19
 
20
+ if t.TYPE_CHECKING:
21
+ from sqlglot.dialects.dialect import DialectType
22
+
15
23
 
16
24
  def _sha2_sql(self: Exasol.Generator, expression: exp.SHA2) -> str:
17
25
  length = expression.text("length")
@@ -19,6 +27,25 @@ def _sha2_sql(self: Exasol.Generator, expression: exp.SHA2) -> str:
19
27
  return self.func(func_name, expression.this)
20
28
 
21
29
 
30
+ # https://docs.exasol.com/db/latest/sql_references/functions/alphabeticallistfunctions/trunc%5Bate%5D%20(datetime).htm
31
+ # https://docs.exasol.com/db/latest/sql_references/functions/alphabeticallistfunctions/trunc%5Bate%5D%20(number).htm
32
+ def _build_trunc(args: t.List[exp.Expression], dialect: DialectType) -> exp.Expression:
33
+ first, second = seq_get(args, 0), seq_get(args, 1)
34
+
35
+ if not first or not second:
36
+ return exp.Anonymous(this="TRUNC", expressions=args)
37
+
38
+ if not first.type:
39
+ from sqlglot.optimizer.annotate_types import annotate_types
40
+
41
+ first = annotate_types(first, dialect=dialect)
42
+
43
+ if first.is_type(exp.DataType.Type.DATE, exp.DataType.Type.TIMESTAMP) and second.is_string:
44
+ return exp.DateTrunc(this=first, unit=second)
45
+
46
+ return exp.Anonymous(this="TRUNC", expressions=args)
47
+
48
+
22
49
  class Exasol(Dialect):
23
50
  TIME_MAPPING = {
24
51
  "yyyy": "%Y",
@@ -63,12 +90,17 @@ class Exasol(Dialect):
63
90
  "BIT_NOT": lambda args: exp.BitwiseNot(this=seq_get(args, 0)),
64
91
  "BIT_LSHIFT": binary_from_function(exp.BitwiseLeftShift),
65
92
  "BIT_RSHIFT": binary_from_function(exp.BitwiseRightShift),
93
+ # https://docs.exasol.com/db/latest/sql_references/functions/alphabeticallistfunctions/date_trunc.htm#DATE_TRUNC
94
+ "DATE_TRUNC": lambda args: exp.TimestampTrunc(
95
+ this=seq_get(args, 1), unit=seq_get(args, 0)
96
+ ),
66
97
  "EVERY": lambda args: exp.All(this=seq_get(args, 0)),
67
98
  "EDIT_DISTANCE": exp.Levenshtein.from_arg_list,
68
99
  "HASH_SHA": exp.SHA.from_arg_list,
69
100
  "HASH_SHA1": exp.SHA.from_arg_list,
70
101
  "HASH_MD5": exp.MD5.from_arg_list,
71
102
  "HASHTYPE_MD5": exp.MD5Digest.from_arg_list,
103
+ "REGEXP_SUBSTR": exp.RegexpExtract.from_arg_list,
72
104
  "REGEXP_REPLACE": lambda args: exp.RegexpReplace(
73
105
  this=seq_get(args, 0),
74
106
  expression=seq_get(args, 1),
@@ -82,6 +114,8 @@ class Exasol(Dialect):
82
114
  "HASH_SHA512": lambda args: exp.SHA2(
83
115
  this=seq_get(args, 0), length=exp.Literal.number(512)
84
116
  ),
117
+ "TRUNC": _build_trunc,
118
+ "TRUNCATE": _build_trunc,
85
119
  "VAR_POP": exp.VariancePop.from_arg_list,
86
120
  "APPROXIMATE_COUNT_DISTINCT": exp.ApproxDistinct.from_arg_list,
87
121
  "TO_CHAR": build_formatted_time(exp.ToChar, "exasol"),
@@ -155,12 +189,18 @@ class Exasol(Dialect):
155
189
  exp.BitwiseXor: rename_func("BIT_XOR"),
156
190
  # https://docs.exasol.com/db/latest/sql_references/functions/alphabeticallistfunctions/every.htm
157
191
  exp.All: rename_func("EVERY"),
192
+ exp.DateTrunc: lambda self, e: self.func("TRUNC", e.this, unit_to_str(e)),
193
+ exp.DatetimeTrunc: timestamptrunc_sql(),
158
194
  # https://docs.exasol.com/db/latest/sql_references/functions/alphabeticallistfunctions/edit_distance.htm#EDIT_DISTANCE
159
195
  exp.Levenshtein: unsupported_args("ins_cost", "del_cost", "sub_cost", "max_dist")(
160
196
  rename_func("EDIT_DISTANCE")
161
197
  ),
162
198
  # https://docs.exasol.com/db/latest/sql_references/functions/alphabeticallistfunctions/mod.htm
163
199
  exp.Mod: rename_func("MOD"),
200
+ # https://docs.exasol.com/db/latest/sql_references/functions/alphabeticallistfunctions/regexp_substr.htm
201
+ exp.RegexpExtract: unsupported_args("parameters", "group")(
202
+ rename_func("REGEXP_SUBSTR")
203
+ ),
164
204
  # https://docs.exasol.com/db/latest/sql_references/functions/alphabeticallistfunctions/regexp_replace.htm
165
205
  exp.RegexpReplace: unsupported_args("modifiers")(rename_func("REGEXP_REPLACE")),
166
206
  # https://docs.exasol.com/db/latest/sql_references/functions/alphabeticallistfunctions/var_pop.htm
@@ -175,6 +215,7 @@ class Exasol(Dialect):
175
215
  exp.TsOrDsToDate: lambda self, e: self.func("TO_DATE", e.this, self.format_time(e)),
176
216
  exp.TimeToStr: lambda self, e: self.func("TO_CHAR", e.this, self.format_time(e)),
177
217
  exp.TimeStrToTime: timestrtotime_sql,
218
+ exp.TimestampTrunc: timestamptrunc_sql(),
178
219
  exp.StrToTime: lambda self, e: self.func("TO_DATE", e.this, self.format_time(e)),
179
220
  exp.CurrentUser: lambda *_: "CURRENT_USER",
180
221
  exp.AtTimeZone: lambda self, e: self.func(
@@ -51,6 +51,7 @@ class Materialize(Postgres):
51
51
 
52
52
  class Generator(Postgres.Generator):
53
53
  SUPPORTS_CREATE_TABLE_LIKE = False
54
+ SUPPORTS_BETWEEN_FLAGS = False
54
55
 
55
56
  TRANSFORMS = {
56
57
  **Postgres.Generator.TRANSFORMS,
@@ -52,10 +52,6 @@ class Oracle(Dialect):
52
52
  # https://docs.oracle.com/database/121/SQLRF/sql_elements004.htm#SQLRF00212
53
53
  # https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes
54
54
  TIME_MAPPING = {
55
- "AM": "%p", # Meridian indicator with or without periods
56
- "A.M.": "%p", # Meridian indicator with or without periods
57
- "PM": "%p", # Meridian indicator with or without periods
58
- "P.M.": "%p", # Meridian indicator with or without periods
59
55
  "D": "%u", # Day of week (1-7)
60
56
  "DAY": "%A", # name of day
61
57
  "DD": "%d", # day of month (1-31)
@@ -274,8 +274,6 @@ class Postgres(Dialect):
274
274
  TABLESAMPLE_SIZE_IS_PERCENT = True
275
275
 
276
276
  TIME_MAPPING = {
277
- "AM": "%p",
278
- "PM": "%p",
279
277
  "d": "%u", # 1-based day of week
280
278
  "D": "%u", # 1-based day of week
281
279
  "dd": "%d", # day of month
@@ -161,6 +161,7 @@ class Redshift(Postgres):
161
161
  SUPPORTS_MEDIAN = True
162
162
  ALTER_SET_TYPE = "TYPE"
163
163
  SUPPORTS_DECODE_CASE = True
164
+ SUPPORTS_BETWEEN_FLAGS = False
164
165
 
165
166
  # Redshift doesn't have `WITH` as part of their with_properties so we remove it
166
167
  WITH_PROPERTIES_PREFIX = " "
@@ -61,6 +61,7 @@ class RisingWave(Postgres):
61
61
 
62
62
  class Generator(Postgres.Generator):
63
63
  LOCKING_READS_SUPPORTED = False
64
+ SUPPORTS_BETWEEN_FLAGS = False
64
65
 
65
66
  TRANSFORMS = {
66
67
  **Postgres.Generator.TRANSFORMS,