sqlglot 27.16.1__tar.gz → 27.16.3__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 (226) hide show
  1. {sqlglot-27.16.1 → sqlglot-27.16.3}/CHANGELOG.md +12 -0
  2. {sqlglot-27.16.1 → sqlglot-27.16.3}/PKG-INFO +1 -1
  3. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/_version.py +3 -3
  4. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/postgres.py +10 -6
  5. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/optimizer/annotate_types.py +9 -0
  6. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/parser.py +1 -1
  7. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot.egg-info/PKG-INFO +1 -1
  8. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/test_postgres.py +4 -0
  9. {sqlglot-27.16.1 → sqlglot-27.16.3}/.gitignore +0 -0
  10. {sqlglot-27.16.1 → sqlglot-27.16.3}/.gitpod.yml +0 -0
  11. {sqlglot-27.16.1 → sqlglot-27.16.3}/.pre-commit-config.yaml +0 -0
  12. {sqlglot-27.16.1 → sqlglot-27.16.3}/CONTRIBUTING.md +0 -0
  13. {sqlglot-27.16.1 → sqlglot-27.16.3}/LICENSE +0 -0
  14. {sqlglot-27.16.1 → sqlglot-27.16.3}/MANIFEST.in +0 -0
  15. {sqlglot-27.16.1 → sqlglot-27.16.3}/Makefile +0 -0
  16. {sqlglot-27.16.1 → sqlglot-27.16.3}/README.md +0 -0
  17. {sqlglot-27.16.1 → sqlglot-27.16.3}/pyproject.toml +0 -0
  18. {sqlglot-27.16.1 → sqlglot-27.16.3}/setup.cfg +0 -0
  19. {sqlglot-27.16.1 → sqlglot-27.16.3}/setup.py +0 -0
  20. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/__init__.py +0 -0
  21. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/__main__.py +0 -0
  22. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/_typing.py +0 -0
  23. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/__init__.py +0 -0
  24. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/athena.py +0 -0
  25. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/bigquery.py +0 -0
  26. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/clickhouse.py +0 -0
  27. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/databricks.py +0 -0
  28. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/dialect.py +0 -0
  29. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/doris.py +0 -0
  30. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/dremio.py +0 -0
  31. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/drill.py +0 -0
  32. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/druid.py +0 -0
  33. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/duckdb.py +0 -0
  34. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/dune.py +0 -0
  35. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/exasol.py +0 -0
  36. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/fabric.py +0 -0
  37. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/hive.py +0 -0
  38. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/materialize.py +0 -0
  39. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/mysql.py +0 -0
  40. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/oracle.py +0 -0
  41. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/presto.py +0 -0
  42. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/prql.py +0 -0
  43. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/redshift.py +0 -0
  44. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/risingwave.py +0 -0
  45. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/singlestore.py +0 -0
  46. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/snowflake.py +0 -0
  47. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/spark.py +0 -0
  48. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/spark2.py +0 -0
  49. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/sqlite.py +0 -0
  50. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/starrocks.py +0 -0
  51. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/tableau.py +0 -0
  52. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/teradata.py +0 -0
  53. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/trino.py +0 -0
  54. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/dialects/tsql.py +0 -0
  55. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/diff.py +0 -0
  56. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/errors.py +0 -0
  57. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/executor/__init__.py +0 -0
  58. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/executor/context.py +0 -0
  59. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/executor/env.py +0 -0
  60. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/executor/python.py +0 -0
  61. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/executor/table.py +0 -0
  62. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/expressions.py +0 -0
  63. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/generator.py +0 -0
  64. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/helper.py +0 -0
  65. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/jsonpath.py +0 -0
  66. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/lineage.py +0 -0
  67. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/optimizer/__init__.py +0 -0
  68. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/optimizer/canonicalize.py +0 -0
  69. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/optimizer/eliminate_ctes.py +0 -0
  70. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/optimizer/eliminate_joins.py +0 -0
  71. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/optimizer/eliminate_subqueries.py +0 -0
  72. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/optimizer/isolate_table_selects.py +0 -0
  73. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/optimizer/merge_subqueries.py +0 -0
  74. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/optimizer/normalize.py +0 -0
  75. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/optimizer/normalize_identifiers.py +0 -0
  76. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/optimizer/optimize_joins.py +0 -0
  77. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/optimizer/optimizer.py +0 -0
  78. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/optimizer/pushdown_predicates.py +0 -0
  79. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/optimizer/pushdown_projections.py +0 -0
  80. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/optimizer/qualify.py +0 -0
  81. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/optimizer/qualify_columns.py +0 -0
  82. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/optimizer/qualify_tables.py +0 -0
  83. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/optimizer/scope.py +0 -0
  84. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/optimizer/simplify.py +0 -0
  85. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/optimizer/unnest_subqueries.py +0 -0
  86. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/planner.py +0 -0
  87. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/py.typed +0 -0
  88. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/schema.py +0 -0
  89. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/serde.py +0 -0
  90. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/time.py +0 -0
  91. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/tokens.py +0 -0
  92. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/transforms.py +0 -0
  93. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot/trie.py +0 -0
  94. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot.egg-info/SOURCES.txt +0 -0
  95. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot.egg-info/dependency_links.txt +0 -0
  96. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot.egg-info/requires.txt +0 -0
  97. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot.egg-info/top_level.txt +0 -0
  98. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglot.png +0 -0
  99. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglotrs/Cargo.lock +0 -0
  100. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglotrs/Cargo.toml +0 -0
  101. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglotrs/benches/dialect_settings.json +0 -0
  102. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglotrs/benches/long.rs +0 -0
  103. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglotrs/benches/token_type_settings.json +0 -0
  104. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglotrs/benches/tokenizer_dialect_settings.json +0 -0
  105. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglotrs/benches/tokenizer_settings.json +0 -0
  106. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglotrs/pyproject.toml +0 -0
  107. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglotrs/src/lib.rs +0 -0
  108. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglotrs/src/settings.rs +0 -0
  109. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglotrs/src/token.rs +0 -0
  110. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglotrs/src/tokenizer.rs +0 -0
  111. {sqlglot-27.16.1 → sqlglot-27.16.3}/sqlglotrs/src/trie.rs +0 -0
  112. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/__init__.py +0 -0
  113. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/__init__.py +0 -0
  114. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/test_athena.py +0 -0
  115. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/test_bigquery.py +0 -0
  116. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/test_clickhouse.py +0 -0
  117. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/test_databricks.py +0 -0
  118. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/test_dialect.py +0 -0
  119. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/test_doris.py +0 -0
  120. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/test_dremio.py +0 -0
  121. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/test_drill.py +0 -0
  122. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/test_druid.py +0 -0
  123. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/test_duckdb.py +0 -0
  124. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/test_dune.py +0 -0
  125. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/test_exasol.py +0 -0
  126. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/test_fabric.py +0 -0
  127. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/test_hive.py +0 -0
  128. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/test_materialize.py +0 -0
  129. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/test_mysql.py +0 -0
  130. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/test_oracle.py +0 -0
  131. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/test_pipe_syntax.py +0 -0
  132. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/test_presto.py +0 -0
  133. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/test_prql.py +0 -0
  134. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/test_redshift.py +0 -0
  135. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/test_risingwave.py +0 -0
  136. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/test_singlestore.py +0 -0
  137. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/test_snowflake.py +0 -0
  138. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/test_spark.py +0 -0
  139. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/test_sqlite.py +0 -0
  140. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/test_starrocks.py +0 -0
  141. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/test_tableau.py +0 -0
  142. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/test_teradata.py +0 -0
  143. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/test_trino.py +0 -0
  144. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/dialects/test_tsql.py +0 -0
  145. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/identity.sql +0 -0
  146. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/jsonpath/LICENSE +0 -0
  147. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/jsonpath/cts.json +0 -0
  148. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/annotate_functions.sql +0 -0
  149. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/annotate_types.sql +0 -0
  150. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/canonicalize.sql +0 -0
  151. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/eliminate_ctes.sql +0 -0
  152. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/eliminate_joins.sql +0 -0
  153. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/eliminate_subqueries.sql +0 -0
  154. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/isolate_table_selects.sql +0 -0
  155. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/merge_subqueries.sql +0 -0
  156. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/normalize.sql +0 -0
  157. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/normalize_identifiers.sql +0 -0
  158. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/optimize_joins.sql +0 -0
  159. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/optimizer.sql +0 -0
  160. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/pushdown_cte_alias_columns.sql +0 -0
  161. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/pushdown_predicates.sql +0 -0
  162. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/pushdown_projections.sql +0 -0
  163. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/qualify_columns.sql +0 -0
  164. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/qualify_columns__invalid.sql +0 -0
  165. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/qualify_columns__with_invisible.sql +0 -0
  166. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/qualify_columns_ddl.sql +0 -0
  167. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/qualify_tables.sql +0 -0
  168. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/quote_identifiers.sql +0 -0
  169. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/simplify.sql +0 -0
  170. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-ds/call_center.csv.gz +0 -0
  171. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-ds/catalog_page.csv.gz +0 -0
  172. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-ds/catalog_returns.csv.gz +0 -0
  173. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-ds/catalog_sales.csv.gz +0 -0
  174. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-ds/customer.csv.gz +0 -0
  175. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-ds/customer_address.csv.gz +0 -0
  176. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-ds/customer_demographics.csv.gz +0 -0
  177. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-ds/date_dim.csv.gz +0 -0
  178. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-ds/household_demographics.csv.gz +0 -0
  179. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-ds/income_band.csv.gz +0 -0
  180. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-ds/inventory.csv.gz +0 -0
  181. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-ds/item.csv.gz +0 -0
  182. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-ds/promotion.csv.gz +0 -0
  183. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-ds/reason.csv.gz +0 -0
  184. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-ds/ship_mode.csv.gz +0 -0
  185. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-ds/store.csv.gz +0 -0
  186. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-ds/store_returns.csv.gz +0 -0
  187. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-ds/store_sales.csv.gz +0 -0
  188. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-ds/time_dim.csv.gz +0 -0
  189. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-ds/tpc-ds.sql +0 -0
  190. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-ds/warehouse.csv.gz +0 -0
  191. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-ds/web_page.csv.gz +0 -0
  192. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-ds/web_returns.csv.gz +0 -0
  193. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-ds/web_sales.csv.gz +0 -0
  194. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-ds/web_site.csv.gz +0 -0
  195. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-h/customer.csv.gz +0 -0
  196. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-h/lineitem.csv.gz +0 -0
  197. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-h/nation.csv.gz +0 -0
  198. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-h/orders.csv.gz +0 -0
  199. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-h/part.csv.gz +0 -0
  200. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-h/partsupp.csv.gz +0 -0
  201. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-h/region.csv.gz +0 -0
  202. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-h/supplier.csv.gz +0 -0
  203. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/tpc-h/tpc-h.sql +0 -0
  204. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/optimizer/unnest_subqueries.sql +0 -0
  205. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/partial.sql +0 -0
  206. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/fixtures/pretty.sql +0 -0
  207. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/gen_fixtures.py +0 -0
  208. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/helpers.py +0 -0
  209. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/test_build.py +0 -0
  210. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/test_dialect_imports.py +0 -0
  211. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/test_diff.py +0 -0
  212. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/test_docs.py +0 -0
  213. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/test_executor.py +0 -0
  214. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/test_expressions.py +0 -0
  215. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/test_generator.py +0 -0
  216. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/test_helper.py +0 -0
  217. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/test_jsonpath.py +0 -0
  218. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/test_lineage.py +0 -0
  219. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/test_optimizer.py +0 -0
  220. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/test_parser.py +0 -0
  221. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/test_schema.py +0 -0
  222. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/test_serde.py +0 -0
  223. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/test_time.py +0 -0
  224. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/test_tokens.py +0 -0
  225. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/test_transforms.py +0 -0
  226. {sqlglot-27.16.1 → sqlglot-27.16.3}/tests/test_transpile.py +0 -0
@@ -1,6 +1,16 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ ## [v27.16.2] - 2025-09-18
5
+ ### :wrench: Chores
6
+ - [`837890c`](https://github.com/tobymao/sqlglot/commit/837890c7e8bcc3695541bbe32fd8088eee70fea3) - handle badly formed binary expressions gracefully in type inference *(commit by [@georgesittas](https://github.com/georgesittas))*
7
+
8
+
9
+ ## [v27.16.1] - 2025-09-18
10
+ ### :bug: Bug Fixes
11
+ - [`0e256b3`](https://github.com/tobymao/sqlglot/commit/0e256b3f864bc2d026817bd08e89ee89f44ad256) - edge case with parsing `interval` as identifier *(commit by [@georgesittas](https://github.com/georgesittas))*
12
+
13
+
4
14
  ## [v27.16.0] - 2025-09-18
5
15
  ### :boom: BREAKING CHANGES
6
16
  - due to [`5a973e9`](https://github.com/tobymao/sqlglot/commit/5a973e9a88fa7f522a9bf91dc60fb0f6effef53d) - annotate types for Snowflake AI_CLASSIFY function *(PR [#5909](https://github.com/tobymao/sqlglot/pull/5909) by [@fivetran-BradfordPaskewitz](https://github.com/fivetran-BradfordPaskewitz))*:
@@ -7375,3 +7385,5 @@ Changelog
7375
7385
  [v27.15.2]: https://github.com/tobymao/sqlglot/compare/v27.15.1...v27.15.2
7376
7386
  [v27.15.3]: https://github.com/tobymao/sqlglot/compare/v27.15.2...v27.15.3
7377
7387
  [v27.16.0]: https://github.com/tobymao/sqlglot/compare/v27.15.3...v27.16.0
7388
+ [v27.16.1]: https://github.com/tobymao/sqlglot/compare/v27.16.0...v27.16.1
7389
+ [v27.16.2]: https://github.com/tobymao/sqlglot/compare/v27.16.1...v27.16.2
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlglot
3
- Version: 27.16.1
3
+ Version: 27.16.3
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
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '27.16.1'
32
- __version_tuple__ = version_tuple = (27, 16, 1)
31
+ __version__ = version = '27.16.3'
32
+ __version_tuple__ = version_tuple = (27, 16, 3)
33
33
 
34
- __commit_id__ = commit_id = 'g0e256b3f8'
34
+ __commit_id__ = commit_id = 'gd1270517c'
@@ -459,12 +459,16 @@ class Postgres(Dialect):
459
459
 
460
460
  COLUMN_OPERATORS = {
461
461
  **parser.Parser.COLUMN_OPERATORS,
462
- TokenType.ARROW: lambda self, this, path: build_json_extract_path(
463
- exp.JSONExtract, arrow_req_json_type=self.JSON_ARROWS_REQUIRE_JSON_TYPE
464
- )([this, path]),
465
- TokenType.DARROW: lambda self, this, path: build_json_extract_path(
466
- exp.JSONExtractScalar, arrow_req_json_type=self.JSON_ARROWS_REQUIRE_JSON_TYPE
467
- )([this, path]),
462
+ TokenType.ARROW: lambda self, this, path: self.validate_expression(
463
+ build_json_extract_path(
464
+ exp.JSONExtract, arrow_req_json_type=self.JSON_ARROWS_REQUIRE_JSON_TYPE
465
+ )([this, path])
466
+ ),
467
+ TokenType.DARROW: lambda self, this, path: self.validate_expression(
468
+ build_json_extract_path(
469
+ exp.JSONExtractScalar, arrow_req_json_type=self.JSON_ARROWS_REQUIRE_JSON_TYPE
470
+ )([this, path])
471
+ ),
468
472
  }
469
473
 
470
474
  def _parse_query_parameter(self) -> t.Optional[exp.Expression]:
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import functools
4
+ import logging
4
5
  import typing as t
5
6
 
6
7
  from sqlglot import exp
@@ -26,6 +27,8 @@ if t.TYPE_CHECKING:
26
27
 
27
28
  from sqlglot.dialects.dialect import DialectType, AnnotatorsType
28
29
 
30
+ logger = logging.getLogger("sqlglot")
31
+
29
32
 
30
33
  def annotate_types(
31
34
  expression: E,
@@ -424,6 +427,12 @@ class TypeAnnotator(metaclass=_TypeAnnotator):
424
427
  self._annotate_args(expression)
425
428
 
426
429
  left, right = expression.left, expression.right
430
+ if not left or not right:
431
+ expression_sql = expression.sql(self.schema.dialect)
432
+ logger.warning(f"Failed to annotate badly formed binary expression: {expression_sql}")
433
+ self._set_type(expression, None)
434
+ return expression
435
+
427
436
  left_type, right_type = left.type.this, right.type.this # type: ignore
428
437
 
429
438
  if isinstance(expression, (exp.Connector, exp.Predicate)):
@@ -5691,7 +5691,7 @@ class Parser(metaclass=_Parser):
5691
5691
  if not field:
5692
5692
  self.raise_error("Expected type")
5693
5693
  elif op and self._curr:
5694
- field = self._parse_column_reference() or self._parse_bracket()
5694
+ field = self._parse_column_reference() or self._parse_bitwise()
5695
5695
  if isinstance(field, exp.Column) and self._match(TokenType.DOT, advance=False):
5696
5696
  field = self._parse_column_ops(field)
5697
5697
  else:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlglot
3
- Version: 27.16.1
3
+ Version: 27.16.3
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
@@ -161,6 +161,10 @@ class TestPostgres(Validator):
161
161
  "pg_catalog.PG_TABLE_IS_VISIBLE(c.oid) "
162
162
  "ORDER BY 2, 3"
163
163
  )
164
+ self.validate_identity(
165
+ "x::JSON -> 'duration' ->> -1",
166
+ "JSON_EXTRACT_PATH_TEXT(CAST(x AS JSON) -> 'duration', -1)",
167
+ ).assert_is(exp.JSONExtractScalar).this.assert_is(exp.JSONExtract)
164
168
  self.validate_identity(
165
169
  "SELECT SUBSTRING('Thomas' FOR 3 FROM 2)",
166
170
  "SELECT SUBSTRING('Thomas' FROM 2 FOR 3)",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes