Merging upstream version 26.11.1.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
913e13699d
commit
0b9b4fe8cb
52 changed files with 14319 additions and 14244 deletions
33
CHANGELOG.md
33
CHANGELOG.md
|
@ -1,6 +1,37 @@
|
|||
Changelog
|
||||
=========
|
||||
|
||||
## [v26.11.0] - 2025-03-17
|
||||
### :boom: BREAKING CHANGES
|
||||
- due to [`ac3d311`](https://github.com/tobymao/sqlglot/commit/ac3d311c4184ca2ced603a100588e3e7435ce352) - do not expand having expressions if they conflict with a projection *(PR [#4881](https://github.com/tobymao/sqlglot/pull/4881) by [@tobymao](https://github.com/tobymao))*:
|
||||
|
||||
do not expand having expressions if they conflict with a projection (#4881)
|
||||
|
||||
- due to [`081994e`](https://github.com/tobymao/sqlglot/commit/081994ea85c7aa1cbbbc40a24857dba4fd6c1c61) - Fix parsing multi-part format name *(PR [#4885](https://github.com/tobymao/sqlglot/pull/4885) by [@VaggelisD](https://github.com/VaggelisD))*:
|
||||
|
||||
Fix parsing multi-part format name (#4885)
|
||||
|
||||
- due to [`491c407`](https://github.com/tobymao/sqlglot/commit/491c407d48a24b6d4093e9c9bfdc3d8c27c29e4c) - parse parameter key as Var instead of Identifier *(PR [#4888](https://github.com/tobymao/sqlglot/pull/4888) by [@georgesittas](https://github.com/georgesittas))*:
|
||||
|
||||
parse parameter key as Var instead of Identifier (#4888)
|
||||
|
||||
|
||||
### :bug: Bug Fixes
|
||||
- [`ac3d311`](https://github.com/tobymao/sqlglot/commit/ac3d311c4184ca2ced603a100588e3e7435ce352) - do not expand having expressions if they conflict with a projection *(PR [#4881](https://github.com/tobymao/sqlglot/pull/4881) by [@tobymao](https://github.com/tobymao))*
|
||||
- [`44b7b09`](https://github.com/tobymao/sqlglot/commit/44b7b09deca881e274ad03068eee5d4d594c8ca8) - **parser**: Fix separator generation for STRING_AGG *(PR [#4887](https://github.com/tobymao/sqlglot/pull/4887) by [@VaggelisD](https://github.com/VaggelisD))*
|
||||
- [`081994e`](https://github.com/tobymao/sqlglot/commit/081994ea85c7aa1cbbbc40a24857dba4fd6c1c61) - **snowflake**: Fix parsing multi-part format name *(PR [#4885](https://github.com/tobymao/sqlglot/pull/4885) by [@VaggelisD](https://github.com/VaggelisD))*
|
||||
- :arrow_lower_right: *fixes issue [#4882](https://github.com/tobymao/sqlglot/issues/4882) opened by [@kharigardner](https://github.com/kharigardner)*
|
||||
- [`38111a5`](https://github.com/tobymao/sqlglot/commit/38111a5eaa6bde640e25aa408ff7ea9ea6864c0b) - apply unpivot alias string conversion only for UNPIVOT *(PR [#4886](https://github.com/tobymao/sqlglot/pull/4886) by [@georgesittas](https://github.com/georgesittas))*
|
||||
- :arrow_lower_right: *fixes issue [#4003](https://github.com/TobikoData/sqlmesh/issues/4003) opened by [@lucargir](https://github.com/lucargir)*
|
||||
- [`491c407`](https://github.com/tobymao/sqlglot/commit/491c407d48a24b6d4093e9c9bfdc3d8c27c29e4c) - **clickhouse**: parse parameter key as Var instead of Identifier *(PR [#4888](https://github.com/tobymao/sqlglot/pull/4888) by [@georgesittas](https://github.com/georgesittas))*
|
||||
- :arrow_lower_right: *fixes issue [#4002](https://github.com/TobikoData/sqlmesh/issues/4002) opened by [@petrjanda](https://github.com/petrjanda)*
|
||||
|
||||
|
||||
## [v26.10.1] - 2025-03-13
|
||||
### :bug: Bug Fixes
|
||||
- [`2b3824f`](https://github.com/tobymao/sqlglot/commit/2b3824f0bac5dae48ea7eecbe2168afe79038d06) - **duckdb**: revert timestamp/datetime -> timestampntz parsing temporarily *(PR [#4878](https://github.com/tobymao/sqlglot/pull/4878) by [@georgesittas](https://github.com/georgesittas))*
|
||||
|
||||
|
||||
## [v26.10.0] - 2025-03-13
|
||||
### :boom: BREAKING CHANGES
|
||||
- due to [`c0bfcc6`](https://github.com/tobymao/sqlglot/commit/c0bfcc66b97ce667a1ead608c4fbbee69db633fa) - postgres case insesitive formats closes [#4860](https://github.com/tobymao/sqlglot/pull/4860) *(commit by [@tobymao](https://github.com/tobymao))*:
|
||||
|
@ -6145,3 +6176,5 @@ Changelog
|
|||
[v26.8.0]: https://github.com/tobymao/sqlglot/compare/v26.7.0...v26.8.0
|
||||
[v26.9.0]: https://github.com/tobymao/sqlglot/compare/v26.8.0...v26.9.0
|
||||
[v26.10.0]: https://github.com/tobymao/sqlglot/compare/v26.9.0...v26.10.0
|
||||
[v26.10.1]: https://github.com/tobymao/sqlglot/compare/v26.10.0...v26.10.1
|
||||
[v26.11.0]: https://github.com/tobymao/sqlglot/compare/v26.10.1...v26.11.0
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -84,8 +84,8 @@
|
|||
</span><span id="L-17"><a href="#L-17"><span class="linenos">17</span></a><span class="n">__version_tuple__</span><span class="p">:</span> <span class="n">VERSION_TUPLE</span>
|
||||
</span><span id="L-18"><a href="#L-18"><span class="linenos">18</span></a><span class="n">version_tuple</span><span class="p">:</span> <span class="n">VERSION_TUPLE</span>
|
||||
</span><span id="L-19"><a href="#L-19"><span class="linenos">19</span></a>
|
||||
</span><span id="L-20"><a href="#L-20"><span class="linenos">20</span></a><span class="n">__version__</span> <span class="o">=</span> <span class="n">version</span> <span class="o">=</span> <span class="s1">'26.10.0'</span>
|
||||
</span><span id="L-21"><a href="#L-21"><span class="linenos">21</span></a><span class="n">__version_tuple__</span> <span class="o">=</span> <span class="n">version_tuple</span> <span class="o">=</span> <span class="p">(</span><span class="mi">26</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
||||
</span><span id="L-20"><a href="#L-20"><span class="linenos">20</span></a><span class="n">__version__</span> <span class="o">=</span> <span class="n">version</span> <span class="o">=</span> <span class="s1">'26.11.0'</span>
|
||||
</span><span id="L-21"><a href="#L-21"><span class="linenos">21</span></a><span class="n">__version_tuple__</span> <span class="o">=</span> <span class="n">version_tuple</span> <span class="o">=</span> <span class="p">(</span><span class="mi">26</span><span class="p">,</span> <span class="mi">11</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -93,7 +93,7 @@
|
|||
<section id="__version__">
|
||||
<div class="attr variable">
|
||||
<span class="name">__version__</span><span class="annotation">: str</span> =
|
||||
<span class="default_value">'26.10.0'</span>
|
||||
<span class="default_value">'26.11.0'</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -105,7 +105,7 @@
|
|||
<section id="__version_tuple__">
|
||||
<div class="attr variable">
|
||||
<span class="name">__version_tuple__</span><span class="annotation">: object</span> =
|
||||
<span class="default_value">(26, 10, 0)</span>
|
||||
<span class="default_value">(26, 11, 0)</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -117,7 +117,7 @@
|
|||
<section id="version">
|
||||
<div class="attr variable">
|
||||
<span class="name">version</span><span class="annotation">: str</span> =
|
||||
<span class="default_value">'26.10.0'</span>
|
||||
<span class="default_value">'26.11.0'</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -129,7 +129,7 @@
|
|||
<section id="version_tuple">
|
||||
<div class="attr variable">
|
||||
<span class="name">version_tuple</span><span class="annotation">: object</span> =
|
||||
<span class="default_value">(26, 10, 0)</span>
|
||||
<span class="default_value">(26, 11, 0)</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
|
@ -355,7 +355,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Athena">
|
||||
<div class="attr variable">
|
||||
<span class="name">Athena</span> =
|
||||
<span class="default_value"><MagicMock id='140374168101040'></span>
|
||||
<span class="default_value"><MagicMock id='139764207005664'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -367,7 +367,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="BigQuery">
|
||||
<div class="attr variable">
|
||||
<span class="name">BigQuery</span> =
|
||||
<span class="default_value"><MagicMock id='140374175098928'></span>
|
||||
<span class="default_value"><MagicMock id='139764203079664'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -379,7 +379,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="ClickHouse">
|
||||
<div class="attr variable">
|
||||
<span class="name">ClickHouse</span> =
|
||||
<span class="default_value"><MagicMock id='140374175096432'></span>
|
||||
<span class="default_value"><MagicMock id='139764203085856'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -391,7 +391,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Databricks">
|
||||
<div class="attr variable">
|
||||
<span class="name">Databricks</span> =
|
||||
<span class="default_value"><MagicMock id='140374171297936'></span>
|
||||
<span class="default_value"><MagicMock id='139764212168112'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -403,7 +403,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Doris">
|
||||
<div class="attr variable">
|
||||
<span class="name">Doris</span> =
|
||||
<span class="default_value"><MagicMock id='140374165470464'></span>
|
||||
<span class="default_value"><MagicMock id='139764212159760'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -415,7 +415,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Drill">
|
||||
<div class="attr variable">
|
||||
<span class="name">Drill</span> =
|
||||
<span class="default_value"><MagicMock id='140374165462544'></span>
|
||||
<span class="default_value"><MagicMock id='139764197326704'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -427,7 +427,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Druid">
|
||||
<div class="attr variable">
|
||||
<span class="name">Druid</span> =
|
||||
<span class="default_value"><MagicMock id='140374177410560'></span>
|
||||
<span class="default_value"><MagicMock id='139764196429584'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -439,7 +439,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="DuckDB">
|
||||
<div class="attr variable">
|
||||
<span class="name">DuckDB</span> =
|
||||
<span class="default_value"><MagicMock id='140374178503920'></span>
|
||||
<span class="default_value"><MagicMock id='139764196433520'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -451,7 +451,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Dune">
|
||||
<div class="attr variable">
|
||||
<span class="name">Dune</span> =
|
||||
<span class="default_value"><MagicMock id='140374178278336'></span>
|
||||
<span class="default_value"><MagicMock id='139764210494832'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -463,7 +463,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Hive">
|
||||
<div class="attr variable">
|
||||
<span class="name">Hive</span> =
|
||||
<span class="default_value"><MagicMock id='140374178270944'></span>
|
||||
<span class="default_value"><MagicMock id='139764202200064'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -475,7 +475,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Materialize">
|
||||
<div class="attr variable">
|
||||
<span class="name">Materialize</span> =
|
||||
<span class="default_value"><MagicMock id='140374170434768'></span>
|
||||
<span class="default_value"><MagicMock id='139764203072496'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -487,7 +487,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="MySQL">
|
||||
<div class="attr variable">
|
||||
<span class="name">MySQL</span> =
|
||||
<span class="default_value"><MagicMock id='140374171265744'></span>
|
||||
<span class="default_value"><MagicMock id='139764206147552'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -499,7 +499,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Oracle">
|
||||
<div class="attr variable">
|
||||
<span class="name">Oracle</span> =
|
||||
<span class="default_value"><MagicMock id='140374174224432'></span>
|
||||
<span class="default_value"><MagicMock id='139764211952192'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -511,7 +511,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Postgres">
|
||||
<div class="attr variable">
|
||||
<span class="name">Postgres</span> =
|
||||
<span class="default_value"><MagicMock id='140374178654640'></span>
|
||||
<span class="default_value"><MagicMock id='139764211236048'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -523,7 +523,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Presto">
|
||||
<div class="attr variable">
|
||||
<span class="name">Presto</span> =
|
||||
<span class="default_value"><MagicMock id='140374178120560'></span>
|
||||
<span class="default_value"><MagicMock id='139764211236576'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -535,7 +535,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="PRQL">
|
||||
<div class="attr variable">
|
||||
<span class="name">PRQL</span> =
|
||||
<span class="default_value"><MagicMock id='140374178123344'></span>
|
||||
<span class="default_value"><MagicMock id='139764206347136'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -547,7 +547,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Redshift">
|
||||
<div class="attr variable">
|
||||
<span class="name">Redshift</span> =
|
||||
<span class="default_value"><MagicMock id='140374174402832'></span>
|
||||
<span class="default_value"><MagicMock id='139764211600640'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -559,7 +559,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="RisingWave">
|
||||
<div class="attr variable">
|
||||
<span class="name">RisingWave</span> =
|
||||
<span class="default_value"><MagicMock id='140374178167248'></span>
|
||||
<span class="default_value"><MagicMock id='139764211253360'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -571,7 +571,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Snowflake">
|
||||
<div class="attr variable">
|
||||
<span class="name">Snowflake</span> =
|
||||
<span class="default_value"><MagicMock id='140374166107808'></span>
|
||||
<span class="default_value"><MagicMock id='139764197062160'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -583,7 +583,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Spark">
|
||||
<div class="attr variable">
|
||||
<span class="name">Spark</span> =
|
||||
<span class="default_value"><MagicMock id='140374166109728'></span>
|
||||
<span class="default_value"><MagicMock id='139764197064368'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -595,7 +595,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Spark2">
|
||||
<div class="attr variable">
|
||||
<span class="name">Spark2</span> =
|
||||
<span class="default_value"><MagicMock id='140374175510016'></span>
|
||||
<span class="default_value"><MagicMock id='139764207440400'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -607,7 +607,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="SQLite">
|
||||
<div class="attr variable">
|
||||
<span class="name">SQLite</span> =
|
||||
<span class="default_value"><MagicMock id='140374175508432'></span>
|
||||
<span class="default_value"><MagicMock id='139764207446016'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -619,7 +619,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="StarRocks">
|
||||
<div class="attr variable">
|
||||
<span class="name">StarRocks</span> =
|
||||
<span class="default_value"><MagicMock id='140374167923072'></span>
|
||||
<span class="default_value"><MagicMock id='139764198852688'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -631,7 +631,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Tableau">
|
||||
<div class="attr variable">
|
||||
<span class="name">Tableau</span> =
|
||||
<span class="default_value"><MagicMock id='140374167915392'></span>
|
||||
<span class="default_value"><MagicMock id='139764198853984'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -643,7 +643,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Teradata">
|
||||
<div class="attr variable">
|
||||
<span class="name">Teradata</span> =
|
||||
<span class="default_value"><MagicMock id='140374163754768'></span>
|
||||
<span class="default_value"><MagicMock id='139764194709360'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -655,7 +655,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Trino">
|
||||
<div class="attr variable">
|
||||
<span class="name">Trino</span> =
|
||||
<span class="default_value"><MagicMock id='140374163762640'></span>
|
||||
<span class="default_value"><MagicMock id='139764194717232'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -667,7 +667,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="TSQL">
|
||||
<div class="attr variable">
|
||||
<span class="name">TSQL</span> =
|
||||
<span class="default_value"><MagicMock id='140374163787008'></span>
|
||||
<span class="default_value"><MagicMock id='139764194741600'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -679,7 +679,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Dialect">
|
||||
<div class="attr variable">
|
||||
<span class="name">Dialect</span> =
|
||||
<span class="default_value"><MagicMock id='140374163794928'></span>
|
||||
<span class="default_value"><MagicMock id='139764194749520'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -691,7 +691,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Dialects">
|
||||
<div class="attr variable">
|
||||
<span class="name">Dialects</span> =
|
||||
<span class="default_value"><MagicMock id='140374163802912'></span>
|
||||
<span class="default_value"><MagicMock id='139764194757504'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -61852,7 +61852,7 @@ Otherwise, this resets the expressions.</li>
|
|||
<div id="DataType.STRUCT_TYPES" class="classattr">
|
||||
<div class="attr variable">
|
||||
<span class="name">STRUCT_TYPES</span> =
|
||||
<span class="default_value">{<Type.OBJECT: 'OBJECT'>, <Type.STRUCT: 'STRUCT'>, <Type.UNION: 'UNION'>, <Type.NESTED: 'NESTED'>}</span>
|
||||
<span class="default_value">{<Type.NESTED: 'NESTED'>, <Type.UNION: 'UNION'>, <Type.STRUCT: 'STRUCT'>, <Type.OBJECT: 'OBJECT'>}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -61877,7 +61877,7 @@ Otherwise, this resets the expressions.</li>
|
|||
<div class="attr variable">
|
||||
<span class="name">NESTED_TYPES</span> =
|
||||
<input id="DataType.NESTED_TYPES-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||
<label class="view-value-button pdoc-button" for="DataType.NESTED_TYPES-view-value"></label><span class="default_value">{<Type.MAP: 'MAP'>, <Type.LIST: 'LIST'>, <Type.OBJECT: 'OBJECT'>, <Type.ARRAY: 'ARRAY'>, <Type.STRUCT: 'STRUCT'>, <Type.NESTED: 'NESTED'>, <Type.UNION: 'UNION'>}</span>
|
||||
<label class="view-value-button pdoc-button" for="DataType.NESTED_TYPES-view-value"></label><span class="default_value">{<Type.OBJECT: 'OBJECT'>, <Type.NESTED: 'NESTED'>, <Type.LIST: 'LIST'>, <Type.ARRAY: 'ARRAY'>, <Type.MAP: 'MAP'>, <Type.STRUCT: 'STRUCT'>, <Type.UNION: 'UNION'>}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -61890,7 +61890,7 @@ Otherwise, this resets the expressions.</li>
|
|||
<div class="attr variable">
|
||||
<span class="name">TEXT_TYPES</span> =
|
||||
<input id="DataType.TEXT_TYPES-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||
<label class="view-value-button pdoc-button" for="DataType.TEXT_TYPES-view-value"></label><span class="default_value">{<Type.CHAR: 'CHAR'>, <Type.TEXT: 'TEXT'>, <Type.NCHAR: 'NCHAR'>, <Type.NAME: 'NAME'>, <Type.NVARCHAR: 'NVARCHAR'>, <Type.VARCHAR: 'VARCHAR'>}</span>
|
||||
<label class="view-value-button pdoc-button" for="DataType.TEXT_TYPES-view-value"></label><span class="default_value">{<Type.NVARCHAR: 'NVARCHAR'>, <Type.VARCHAR: 'VARCHAR'>, <Type.TEXT: 'TEXT'>, <Type.NCHAR: 'NCHAR'>, <Type.CHAR: 'CHAR'>, <Type.NAME: 'NAME'>}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -61903,7 +61903,7 @@ Otherwise, this resets the expressions.</li>
|
|||
<div class="attr variable">
|
||||
<span class="name">SIGNED_INTEGER_TYPES</span> =
|
||||
<input id="DataType.SIGNED_INTEGER_TYPES-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||
<label class="view-value-button pdoc-button" for="DataType.SIGNED_INTEGER_TYPES-view-value"></label><span class="default_value">{<Type.BIGINT: 'BIGINT'>, <Type.INT256: 'INT256'>, <Type.INT128: 'INT128'>, <Type.MEDIUMINT: 'MEDIUMINT'>, <Type.INT: 'INT'>, <Type.SMALLINT: 'SMALLINT'>, <Type.TINYINT: 'TINYINT'>}</span>
|
||||
<label class="view-value-button pdoc-button" for="DataType.SIGNED_INTEGER_TYPES-view-value"></label><span class="default_value">{<Type.SMALLINT: 'SMALLINT'>, <Type.BIGINT: 'BIGINT'>, <Type.INT128: 'INT128'>, <Type.MEDIUMINT: 'MEDIUMINT'>, <Type.TINYINT: 'TINYINT'>, <Type.INT256: 'INT256'>, <Type.INT: 'INT'>}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -61916,7 +61916,7 @@ Otherwise, this resets the expressions.</li>
|
|||
<div class="attr variable">
|
||||
<span class="name">UNSIGNED_INTEGER_TYPES</span> =
|
||||
<input id="DataType.UNSIGNED_INTEGER_TYPES-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||
<label class="view-value-button pdoc-button" for="DataType.UNSIGNED_INTEGER_TYPES-view-value"></label><span class="default_value">{<Type.UMEDIUMINT: 'UMEDIUMINT'>, <Type.UINT128: 'UINT128'>, <Type.UINT: 'UINT'>, <Type.USMALLINT: 'USMALLINT'>, <Type.UINT256: 'UINT256'>, <Type.UBIGINT: 'UBIGINT'>, <Type.UTINYINT: 'UTINYINT'>}</span>
|
||||
<label class="view-value-button pdoc-button" for="DataType.UNSIGNED_INTEGER_TYPES-view-value"></label><span class="default_value">{<Type.UINT: 'UINT'>, <Type.USMALLINT: 'USMALLINT'>, <Type.UTINYINT: 'UTINYINT'>, <Type.UMEDIUMINT: 'UMEDIUMINT'>, <Type.UBIGINT: 'UBIGINT'>, <Type.UINT256: 'UINT256'>, <Type.UINT128: 'UINT128'>}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -61929,7 +61929,7 @@ Otherwise, this resets the expressions.</li>
|
|||
<div class="attr variable">
|
||||
<span class="name">INTEGER_TYPES</span> =
|
||||
<input id="DataType.INTEGER_TYPES-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||
<label class="view-value-button pdoc-button" for="DataType.INTEGER_TYPES-view-value"></label><span class="default_value">{<Type.UMEDIUMINT: 'UMEDIUMINT'>, <Type.UINT128: 'UINT128'>, <Type.BIGINT: 'BIGINT'>, <Type.BIT: 'BIT'>, <Type.INT128: 'INT128'>, <Type.INT256: 'INT256'>, <Type.UINT: 'UINT'>, <Type.MEDIUMINT: 'MEDIUMINT'>, <Type.USMALLINT: 'USMALLINT'>, <Type.UTINYINT: 'UTINYINT'>, <Type.INT: 'INT'>, <Type.SMALLINT: 'SMALLINT'>, <Type.UINT256: 'UINT256'>, <Type.UBIGINT: 'UBIGINT'>, <Type.TINYINT: 'TINYINT'>}</span>
|
||||
<label class="view-value-button pdoc-button" for="DataType.INTEGER_TYPES-view-value"></label><span class="default_value">{<Type.UINT: 'UINT'>, <Type.SMALLINT: 'SMALLINT'>, <Type.BIGINT: 'BIGINT'>, <Type.INT128: 'INT128'>, <Type.USMALLINT: 'USMALLINT'>, <Type.UTINYINT: 'UTINYINT'>, <Type.MEDIUMINT: 'MEDIUMINT'>, <Type.TINYINT: 'TINYINT'>, <Type.INT256: 'INT256'>, <Type.BIT: 'BIT'>, <Type.UMEDIUMINT: 'UMEDIUMINT'>, <Type.INT: 'INT'>, <Type.UBIGINT: 'UBIGINT'>, <Type.UINT256: 'UINT256'>, <Type.UINT128: 'UINT128'>}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -61954,7 +61954,7 @@ Otherwise, this resets the expressions.</li>
|
|||
<div class="attr variable">
|
||||
<span class="name">REAL_TYPES</span> =
|
||||
<input id="DataType.REAL_TYPES-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||
<label class="view-value-button pdoc-button" for="DataType.REAL_TYPES-view-value"></label><span class="default_value">{<Type.MONEY: 'MONEY'>, <Type.SMALLMONEY: 'SMALLMONEY'>, <Type.UDOUBLE: 'UDOUBLE'>, <Type.DECIMAL32: 'DECIMAL32'>, <Type.UDECIMAL: 'UDECIMAL'>, <Type.BIGDECIMAL: 'BIGDECIMAL'>, <Type.DOUBLE: 'DOUBLE'>, <Type.DECIMAL: 'DECIMAL'>, <Type.DECIMAL256: 'DECIMAL256'>, <Type.FLOAT: 'FLOAT'>, <Type.DECIMAL64: 'DECIMAL64'>, <Type.DECIMAL128: 'DECIMAL128'>}</span>
|
||||
<label class="view-value-button pdoc-button" for="DataType.REAL_TYPES-view-value"></label><span class="default_value">{<Type.FLOAT: 'FLOAT'>, <Type.DECIMAL64: 'DECIMAL64'>, <Type.DECIMAL32: 'DECIMAL32'>, <Type.DECIMAL128: 'DECIMAL128'>, <Type.UDECIMAL: 'UDECIMAL'>, <Type.DECIMAL256: 'DECIMAL256'>, <Type.BIGDECIMAL: 'BIGDECIMAL'>, <Type.UDOUBLE: 'UDOUBLE'>, <Type.SMALLMONEY: 'SMALLMONEY'>, <Type.DOUBLE: 'DOUBLE'>, <Type.MONEY: 'MONEY'>, <Type.DECIMAL: 'DECIMAL'>}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -61967,7 +61967,7 @@ Otherwise, this resets the expressions.</li>
|
|||
<div class="attr variable">
|
||||
<span class="name">NUMERIC_TYPES</span> =
|
||||
<input id="DataType.NUMERIC_TYPES-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||
<label class="view-value-button pdoc-button" for="DataType.NUMERIC_TYPES-view-value"></label><span class="default_value">{<Type.MONEY: 'MONEY'>, <Type.UINT128: 'UINT128'>, <Type.BIGINT: 'BIGINT'>, <Type.DECIMAL32: 'DECIMAL32'>, <Type.BIGDECIMAL: 'BIGDECIMAL'>, <Type.DOUBLE: 'DOUBLE'>, <Type.INT256: 'INT256'>, <Type.DECIMAL: 'DECIMAL'>, <Type.USMALLINT: 'USMALLINT'>, <Type.DECIMAL256: 'DECIMAL256'>, <Type.DECIMAL64: 'DECIMAL64'>, <Type.DECIMAL128: 'DECIMAL128'>, <Type.SMALLINT: 'SMALLINT'>, <Type.UTINYINT: 'UTINYINT'>, <Type.TINYINT: 'TINYINT'>, <Type.SMALLMONEY: 'SMALLMONEY'>, <Type.UMEDIUMINT: 'UMEDIUMINT'>, <Type.UDOUBLE: 'UDOUBLE'>, <Type.UDECIMAL: 'UDECIMAL'>, <Type.BIT: 'BIT'>, <Type.INT128: 'INT128'>, <Type.UINT: 'UINT'>, <Type.MEDIUMINT: 'MEDIUMINT'>, <Type.FLOAT: 'FLOAT'>, <Type.INT: 'INT'>, <Type.UINT256: 'UINT256'>, <Type.UBIGINT: 'UBIGINT'>}</span>
|
||||
<label class="view-value-button pdoc-button" for="DataType.NUMERIC_TYPES-view-value"></label><span class="default_value">{<Type.FLOAT: 'FLOAT'>, <Type.DECIMAL64: 'DECIMAL64'>, <Type.INT128: 'INT128'>, <Type.DECIMAL256: 'DECIMAL256'>, <Type.INT256: 'INT256'>, <Type.BIGDECIMAL: 'BIGDECIMAL'>, <Type.DECIMAL128: 'DECIMAL128'>, <Type.DOUBLE: 'DOUBLE'>, <Type.UINT: 'UINT'>, <Type.SMALLINT: 'SMALLINT'>, <Type.DECIMAL32: 'DECIMAL32'>, <Type.BIGINT: 'BIGINT'>, <Type.SMALLMONEY: 'SMALLMONEY'>, <Type.USMALLINT: 'USMALLINT'>, <Type.UTINYINT: 'UTINYINT'>, <Type.UDECIMAL: 'UDECIMAL'>, <Type.MEDIUMINT: 'MEDIUMINT'>, <Type.TINYINT: 'TINYINT'>, <Type.BIT: 'BIT'>, <Type.UDOUBLE: 'UDOUBLE'>, <Type.UMEDIUMINT: 'UMEDIUMINT'>, <Type.INT: 'INT'>, <Type.UBIGINT: 'UBIGINT'>, <Type.UINT256: 'UINT256'>, <Type.MONEY: 'MONEY'>, <Type.DECIMAL: 'DECIMAL'>, <Type.UINT128: 'UINT128'>}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -61980,7 +61980,7 @@ Otherwise, this resets the expressions.</li>
|
|||
<div class="attr variable">
|
||||
<span class="name">TEMPORAL_TYPES</span> =
|
||||
<input id="DataType.TEMPORAL_TYPES-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||
<label class="view-value-button pdoc-button" for="DataType.TEMPORAL_TYPES-view-value"></label><span class="default_value">{<Type.TIMESTAMPLTZ: 'TIMESTAMPLTZ'>, <Type.DATETIME: 'DATETIME'>, <Type.TIMESTAMP_S: 'TIMESTAMP_S'>, <Type.TIMESTAMP: 'TIMESTAMP'>, <Type.TIMESTAMPTZ: 'TIMESTAMPTZ'>, <Type.SMALLDATETIME: 'SMALLDATETIME'>, <Type.DATE32: 'DATE32'>, <Type.TIMESTAMP_NS: 'TIMESTAMP_NS'>, <Type.DATE: 'DATE'>, <Type.TIMESTAMPNTZ: 'TIMESTAMPNTZ'>, <Type.TIMESTAMP_MS: 'TIMESTAMP_MS'>, <Type.TIMETZ: 'TIMETZ'>, <Type.TIME: 'TIME'>, <Type.DATETIME64: 'DATETIME64'>, <Type.DATETIME2: 'DATETIME2'>}</span>
|
||||
<label class="view-value-button pdoc-button" for="DataType.TEMPORAL_TYPES-view-value"></label><span class="default_value">{<Type.SMALLDATETIME: 'SMALLDATETIME'>, <Type.TIMESTAMPLTZ: 'TIMESTAMPLTZ'>, <Type.DATETIME2: 'DATETIME2'>, <Type.TIMETZ: 'TIMETZ'>, <Type.TIMESTAMPNTZ: 'TIMESTAMPNTZ'>, <Type.DATETIME: 'DATETIME'>, <Type.TIMESTAMP_NS: 'TIMESTAMP_NS'>, <Type.TIME: 'TIME'>, <Type.TIMESTAMP_S: 'TIMESTAMP_S'>, <Type.DATE32: 'DATE32'>, <Type.DATETIME64: 'DATETIME64'>, <Type.TIMESTAMPTZ: 'TIMESTAMPTZ'>, <Type.TIMESTAMP_MS: 'TIMESTAMP_MS'>, <Type.DATE: 'DATE'>, <Type.TIMESTAMP: 'TIMESTAMP'>}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1920,7 +1920,7 @@ belong to some totally-ordered set.</p>
|
|||
<section id="DATE_UNITS">
|
||||
<div class="attr variable">
|
||||
<span class="name">DATE_UNITS</span> =
|
||||
<span class="default_value">{'year_month', 'year', 'quarter', 'day', 'week', 'month'}</span>
|
||||
<span class="default_value">{'year', 'week', 'year_month', 'month', 'quarter', 'day'}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
|
@ -641,7 +641,7 @@
|
|||
<div class="attr variable">
|
||||
<span class="name">ALL_JSON_PATH_PARTS</span> =
|
||||
<input id="ALL_JSON_PATH_PARTS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||
<label class="view-value-button pdoc-button" for="ALL_JSON_PATH_PARTS-view-value"></label><span class="default_value">{<class '<a href="expressions.html#JSONPathRoot">sqlglot.expressions.JSONPathRoot</a>'>, <class '<a href="expressions.html#JSONPathRecursive">sqlglot.expressions.JSONPathRecursive</a>'>, <class '<a href="expressions.html#JSONPathKey">sqlglot.expressions.JSONPathKey</a>'>, <class '<a href="expressions.html#JSONPathWildcard">sqlglot.expressions.JSONPathWildcard</a>'>, <class '<a href="expressions.html#JSONPathFilter">sqlglot.expressions.JSONPathFilter</a>'>, <class '<a href="expressions.html#JSONPathUnion">sqlglot.expressions.JSONPathUnion</a>'>, <class '<a href="expressions.html#JSONPathSubscript">sqlglot.expressions.JSONPathSubscript</a>'>, <class '<a href="expressions.html#JSONPathSelector">sqlglot.expressions.JSONPathSelector</a>'>, <class '<a href="expressions.html#JSONPathSlice">sqlglot.expressions.JSONPathSlice</a>'>, <class '<a href="expressions.html#JSONPathScript">sqlglot.expressions.JSONPathScript</a>'>}</span>
|
||||
<label class="view-value-button pdoc-button" for="ALL_JSON_PATH_PARTS-view-value"></label><span class="default_value">{<class '<a href="expressions.html#JSONPathSubscript">sqlglot.expressions.JSONPathSubscript</a>'>, <class '<a href="expressions.html#JSONPathSelector">sqlglot.expressions.JSONPathSelector</a>'>, <class '<a href="expressions.html#JSONPathSlice">sqlglot.expressions.JSONPathSlice</a>'>, <class '<a href="expressions.html#JSONPathScript">sqlglot.expressions.JSONPathScript</a>'>, <class '<a href="expressions.html#JSONPathUnion">sqlglot.expressions.JSONPathUnion</a>'>, <class '<a href="expressions.html#JSONPathRoot">sqlglot.expressions.JSONPathRoot</a>'>, <class '<a href="expressions.html#JSONPathRecursive">sqlglot.expressions.JSONPathRecursive</a>'>, <class '<a href="expressions.html#JSONPathKey">sqlglot.expressions.JSONPathKey</a>'>, <class '<a href="expressions.html#JSONPathWildcard">sqlglot.expressions.JSONPathWildcard</a>'>, <class '<a href="expressions.html#JSONPathFilter">sqlglot.expressions.JSONPathFilter</a>'>}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -581,7 +581,7 @@ queries if it would result in multiple table selects in a single query:</p>
|
|||
<div class="attr variable">
|
||||
<span class="name">UNMERGABLE_ARGS</span> =
|
||||
<input id="UNMERGABLE_ARGS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||
<label class="view-value-button pdoc-button" for="UNMERGABLE_ARGS-view-value"></label><span class="default_value">{'operation_modifiers', 'sample', 'windows', 'pivots', 'offset', 'format', 'kind', 'match', 'distinct', 'prewhere', 'having', 'limit', 'into', 'connect', 'settings', 'qualify', 'group', 'with', 'options', 'cluster', 'distribute', 'locks', 'sort', 'laterals'}</span>
|
||||
<label class="view-value-button pdoc-button" for="UNMERGABLE_ARGS-view-value"></label><span class="default_value">{'offset', 'sample', 'kind', 'qualify', 'cluster', 'options', 'locks', 'operation_modifiers', 'match', 'laterals', 'connect', 'distinct', 'group', 'distribute', 'into', 'prewhere', 'with', 'settings', 'format', 'pivots', 'sort', 'limit', 'windows', 'having'}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -3250,7 +3250,7 @@ prefix are statically known.</p>
|
|||
<div class="attr variable">
|
||||
<span class="name">DATETRUNC_COMPARISONS</span> =
|
||||
<input id="DATETRUNC_COMPARISONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||
<label class="view-value-button pdoc-button" for="DATETRUNC_COMPARISONS-view-value"></label><span class="default_value">{<class '<a href="../expressions.html#GT">sqlglot.expressions.GT</a>'>, <class '<a href="../expressions.html#In">sqlglot.expressions.In</a>'>, <class '<a href="../expressions.html#LT">sqlglot.expressions.LT</a>'>, <class '<a href="../expressions.html#NEQ">sqlglot.expressions.NEQ</a>'>, <class '<a href="../expressions.html#EQ">sqlglot.expressions.EQ</a>'>, <class '<a href="../expressions.html#GTE">sqlglot.expressions.GTE</a>'>, <class '<a href="../expressions.html#LTE">sqlglot.expressions.LTE</a>'>}</span>
|
||||
<label class="view-value-button pdoc-button" for="DATETRUNC_COMPARISONS-view-value"></label><span class="default_value">{<class '<a href="../expressions.html#LTE">sqlglot.expressions.LTE</a>'>, <class '<a href="../expressions.html#GT">sqlglot.expressions.GT</a>'>, <class '<a href="../expressions.html#In">sqlglot.expressions.In</a>'>, <class '<a href="../expressions.html#LT">sqlglot.expressions.LT</a>'>, <class '<a href="../expressions.html#EQ">sqlglot.expressions.EQ</a>'>, <class '<a href="../expressions.html#NEQ">sqlglot.expressions.NEQ</a>'>, <class '<a href="../expressions.html#GTE">sqlglot.expressions.GTE</a>'>}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -3334,7 +3334,7 @@ prefix are statically known.</p>
|
|||
<section id="JOINS">
|
||||
<div class="attr variable">
|
||||
<span class="name">JOINS</span> =
|
||||
<span class="default_value">{('RIGHT', 'OUTER'), ('RIGHT', ''), ('', 'INNER'), ('', '')}</span>
|
||||
<span class="default_value">{('', ''), ('RIGHT', ''), ('', 'INNER'), ('RIGHT', 'OUTER')}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -9400,7 +9400,7 @@
|
|||
<div class="attr variable">
|
||||
<span class="name">TOKENS_PRECEDING_HINT</span> =
|
||||
<input id="Tokenizer.TOKENS_PRECEDING_HINT-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||
<label class="view-value-button pdoc-button" for="Tokenizer.TOKENS_PRECEDING_HINT-view-value"></label><span class="default_value">{<<a href="#TokenType.INSERT">TokenType.INSERT</a>: 'INSERT'>, <<a href="#TokenType.SELECT">TokenType.SELECT</a>: 'SELECT'>, <<a href="#TokenType.UPDATE">TokenType.UPDATE</a>: 'UPDATE'>, <<a href="#TokenType.DELETE">TokenType.DELETE</a>: 'DELETE'>}</span>
|
||||
<label class="view-value-button pdoc-button" for="Tokenizer.TOKENS_PRECEDING_HINT-view-value"></label><span class="default_value">{<<a href="#TokenType.DELETE">TokenType.DELETE</a>: 'DELETE'>, <<a href="#TokenType.INSERT">TokenType.INSERT</a>: 'INSERT'>, <<a href="#TokenType.UPDATE">TokenType.UPDATE</a>: 'UPDATE'>, <<a href="#TokenType.SELECT">TokenType.SELECT</a>: 'SELECT'>}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -9439,7 +9439,7 @@
|
|||
<div class="attr variable">
|
||||
<span class="name">COMMANDS</span> =
|
||||
<input id="Tokenizer.COMMANDS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||
<label class="view-value-button pdoc-button" for="Tokenizer.COMMANDS-view-value"></label><span class="default_value">{<<a href="#TokenType.RENAME">TokenType.RENAME</a>: 'RENAME'>, <<a href="#TokenType.FETCH">TokenType.FETCH</a>: 'FETCH'>, <<a href="#TokenType.EXECUTE">TokenType.EXECUTE</a>: 'EXECUTE'>, <<a href="#TokenType.COMMAND">TokenType.COMMAND</a>: 'COMMAND'>, <<a href="#TokenType.SHOW">TokenType.SHOW</a>: 'SHOW'>}</span>
|
||||
<label class="view-value-button pdoc-button" for="Tokenizer.COMMANDS-view-value"></label><span class="default_value">{<<a href="#TokenType.COMMAND">TokenType.COMMAND</a>: 'COMMAND'>, <<a href="#TokenType.EXECUTE">TokenType.EXECUTE</a>: 'EXECUTE'>, <<a href="#TokenType.RENAME">TokenType.RENAME</a>: 'RENAME'>, <<a href="#TokenType.FETCH">TokenType.FETCH</a>: 'FETCH'>, <<a href="#TokenType.SHOW">TokenType.SHOW</a>: 'SHOW'>}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -9451,7 +9451,7 @@
|
|||
<div id="Tokenizer.COMMAND_PREFIX_TOKENS" class="classattr">
|
||||
<div class="attr variable">
|
||||
<span class="name">COMMAND_PREFIX_TOKENS</span> =
|
||||
<span class="default_value">{<<a href="#TokenType.BEGIN">TokenType.BEGIN</a>: 'BEGIN'>, <<a href="#TokenType.SEMICOLON">TokenType.SEMICOLON</a>: 'SEMICOLON'>}</span>
|
||||
<span class="default_value">{<<a href="#TokenType.SEMICOLON">TokenType.SEMICOLON</a>: 'SEMICOLON'>, <<a href="#TokenType.BEGIN">TokenType.BEGIN</a>: 'BEGIN'>}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
|
@ -355,7 +355,6 @@ class BigQuery(Dialect):
|
|||
LOG_BASE_FIRST = False
|
||||
HEX_LOWERCASE = True
|
||||
FORCE_EARLY_ALIAS_REF_EXPANSION = True
|
||||
EXPAND_ALIAS_REFS_EARLY_ONLY_IN_GROUP_BY = True
|
||||
PRESERVE_ORIGINAL_NAMES = True
|
||||
HEX_STRING_IS_INTEGER_TYPE = True
|
||||
|
||||
|
|
|
@ -609,6 +609,9 @@ class ClickHouse(Dialect):
|
|||
elif not self._match(TokenType.R_BRACE):
|
||||
self.raise_error("Expecting }")
|
||||
|
||||
if isinstance(this, exp.Identifier) and not this.quoted:
|
||||
this = exp.var(this.name)
|
||||
|
||||
return self.expression(exp.Placeholder, this=this, kind=kind)
|
||||
|
||||
def _parse_bracket(
|
||||
|
|
|
@ -1836,7 +1836,7 @@ def groupconcat_sql(
|
|||
on_overflow: bool = False,
|
||||
) -> str:
|
||||
this = expression.this
|
||||
separator = expression.args.get("separator") or exp.Literal.string(sep)
|
||||
separator = self.sql(expression.args.get("separator") or exp.Literal.string(sep))
|
||||
|
||||
on_overflow_sql = self.sql(expression, "on_overflow")
|
||||
on_overflow_sql = f" ON OVERFLOW {on_overflow_sql}" if (on_overflow and on_overflow_sql) else ""
|
||||
|
|
|
@ -3120,6 +3120,10 @@ class Generator(metaclass=_Generator):
|
|||
def pivotalias_sql(self, expression: exp.PivotAlias) -> str:
|
||||
alias = expression.args["alias"]
|
||||
|
||||
parent = expression.parent
|
||||
pivot = parent and parent.parent
|
||||
|
||||
if isinstance(pivot, exp.Pivot) and pivot.unpivot:
|
||||
identifier_alias = isinstance(alias, exp.Identifier)
|
||||
literal_alias = isinstance(alias, exp.Literal)
|
||||
|
||||
|
|
|
@ -237,7 +237,7 @@ def to_node(
|
|||
# Find all columns that went into creating this one to list their lineage nodes.
|
||||
source_columns = set(find_all_in_scope(select, exp.Column))
|
||||
|
||||
# If the source is a UDTF find columns used in the UTDF to generate the table
|
||||
# If the source is a UDTF find columns used in the UDTF to generate the table
|
||||
if isinstance(source, exp.UDTF):
|
||||
source_columns |= set(source.find_all(exp.Column))
|
||||
derived_tables = [
|
||||
|
|
|
@ -223,7 +223,7 @@ class TypeAnnotator(metaclass=_TypeAnnotator):
|
|||
values = [expression.this.this]
|
||||
elif isinstance(expression, exp.Unnest):
|
||||
values = [expression]
|
||||
else:
|
||||
elif not isinstance(expression, exp.TableFromRows):
|
||||
values = expression.expressions[0].expressions
|
||||
|
||||
if not values:
|
||||
|
|
|
@ -55,14 +55,13 @@ def qualify_columns(
|
|||
infer_schema = schema.empty if infer_schema is None else infer_schema
|
||||
dialect = Dialect.get_or_raise(schema.dialect)
|
||||
pseudocolumns = dialect.PSEUDOCOLUMNS
|
||||
|
||||
snowflake_or_oracle = dialect in ("oracle", "snowflake")
|
||||
bigquery = dialect == "bigquery"
|
||||
|
||||
for scope in traverse_scope(expression):
|
||||
scope_expression = scope.expression
|
||||
is_select = isinstance(scope_expression, exp.Select)
|
||||
|
||||
if is_select and snowflake_or_oracle and scope_expression.args.get("connect"):
|
||||
if is_select and scope_expression.args.get("connect"):
|
||||
# In Snowflake / Oracle queries that have a CONNECT BY clause, one can use the LEVEL
|
||||
# pseudocolumn, which doesn't belong to a table, so we change it into an identifier
|
||||
scope_expression.transform(
|
||||
|
@ -81,7 +80,7 @@ def qualify_columns(
|
|||
scope,
|
||||
resolver,
|
||||
dialect,
|
||||
expand_only_groupby=dialect.EXPAND_ALIAS_REFS_EARLY_ONLY_IN_GROUP_BY,
|
||||
expand_only_groupby=bigquery,
|
||||
)
|
||||
|
||||
_convert_columns_to_dots(scope, resolver)
|
||||
|
@ -107,7 +106,7 @@ def qualify_columns(
|
|||
# https://www.postgresql.org/docs/current/sql-select.html#SQL-DISTINCT
|
||||
_expand_order_by_and_distinct_on(scope, resolver)
|
||||
|
||||
if dialect == "bigquery":
|
||||
if bigquery:
|
||||
annotator.annotate_scope(scope)
|
||||
|
||||
return expression
|
||||
|
@ -277,11 +276,13 @@ def _expand_alias_refs(
|
|||
return
|
||||
|
||||
alias_to_expression: t.Dict[str, t.Tuple[exp.Expression, int]] = {}
|
||||
projections = {s.alias_or_name for s in expression.selects}
|
||||
|
||||
def replace_columns(
|
||||
node: t.Optional[exp.Expression], resolve_table: bool = False, literal_index: bool = False
|
||||
) -> None:
|
||||
is_group_by = isinstance(node, exp.Group)
|
||||
is_having = isinstance(node, exp.Having)
|
||||
if not node or (expand_only_groupby and not is_group_by):
|
||||
return
|
||||
|
||||
|
@ -296,23 +297,29 @@ def _expand_alias_refs(
|
|||
if expand_only_groupby and is_group_by and column.parent is not node:
|
||||
continue
|
||||
|
||||
skip_replace = False
|
||||
table = resolver.get_table(column.name) if resolve_table and not column.table else None
|
||||
alias_expr, i = alias_to_expression.get(column.name, (None, 1))
|
||||
double_agg = (
|
||||
(
|
||||
|
||||
if alias_expr:
|
||||
skip_replace = bool(
|
||||
alias_expr.find(exp.AggFunc)
|
||||
and (
|
||||
column.find_ancestor(exp.AggFunc)
|
||||
and column.find_ancestor(exp.AggFunc)
|
||||
and not isinstance(column.find_ancestor(exp.Window, exp.Select), exp.Window)
|
||||
)
|
||||
)
|
||||
if alias_expr
|
||||
else False
|
||||
|
||||
# BigQuery's having clause gets confused if an alias matches a source.
|
||||
# SELECT x.a, max(x.b) as x FROM x GROUP BY 1 HAVING x > 1;
|
||||
# If HAVING x is expanded to max(x.b), bigquery treats x as the new projection x instead of the table
|
||||
if is_having and dialect == "bigquery":
|
||||
skip_replace = skip_replace or any(
|
||||
node.parts[0].name in projections
|
||||
for node in alias_expr.find_all(exp.Column)
|
||||
)
|
||||
|
||||
if table and (not alias_expr or double_agg):
|
||||
if table and (not alias_expr or skip_replace):
|
||||
column.set("table", table)
|
||||
elif not column.table and alias_expr and not double_agg:
|
||||
elif not column.table and alias_expr and not skip_replace:
|
||||
if isinstance(alias_expr, exp.Literal) and (literal_index or resolve_table):
|
||||
if literal_index:
|
||||
column.replace(exp.Literal.number(i))
|
||||
|
|
|
@ -7897,10 +7897,9 @@ class Parser(metaclass=_Parser):
|
|||
opts: t.List[t.Optional[exp.Expression]] = []
|
||||
while self._curr and not self._match(TokenType.R_PAREN):
|
||||
if self._match_text_seq("FORMAT_NAME", "="):
|
||||
# The FORMAT_NAME can be set to an identifier for Snowflake and T-SQL,
|
||||
# so we parse it separately to use _parse_field()
|
||||
# The FORMAT_NAME can be set to an identifier for Snowflake and T-SQL
|
||||
prop = self.expression(
|
||||
exp.Property, this=exp.var("FORMAT_NAME"), value=self._parse_field()
|
||||
exp.Property, this=exp.var("FORMAT_NAME"), value=self._parse_table_parts()
|
||||
)
|
||||
opts.append(prop)
|
||||
else:
|
||||
|
|
|
@ -196,6 +196,9 @@ LANGUAGE js AS
|
|||
self.validate_identity("CAST(x AS TIMESTAMPTZ)", "CAST(x AS TIMESTAMP)")
|
||||
self.validate_identity("CAST(x AS RECORD)", "CAST(x AS STRUCT)")
|
||||
self.validate_identity("SELECT * FROM x WHERE x.y >= (SELECT MAX(a) FROM b-c) - 20")
|
||||
self.validate_identity(
|
||||
"SELECT cars, apples FROM some_table PIVOT(SUM(total_counts) FOR products IN ('general.cars' AS cars, 'food.apples' AS apples))"
|
||||
)
|
||||
self.validate_identity(
|
||||
"MERGE INTO dataset.NewArrivals USING (SELECT * FROM UNNEST([('microwave', 10, 'warehouse #1'), ('dryer', 30, 'warehouse #1'), ('oven', 20, 'warehouse #2')])) ON FALSE WHEN NOT MATCHED THEN INSERT ROW WHEN NOT MATCHED BY SOURCE THEN DELETE"
|
||||
)
|
||||
|
@ -2346,6 +2349,7 @@ OPTIONS (
|
|||
self.validate_identity("STRING_AGG(a, ' & ')")
|
||||
self.validate_identity("STRING_AGG(DISTINCT a, ' & ')")
|
||||
self.validate_identity("STRING_AGG(a, ' & ' ORDER BY LENGTH(a))")
|
||||
self.validate_identity("STRING_AGG(foo, b'|' ORDER BY bar)")
|
||||
|
||||
self.validate_identity("STRING_AGG(a)", "STRING_AGG(a, ',')")
|
||||
self.validate_identity(
|
||||
|
|
|
@ -3,6 +3,7 @@ from sqlglot import exp, parse_one
|
|||
from sqlglot.dialects import ClickHouse
|
||||
from sqlglot.expressions import convert
|
||||
from sqlglot.optimizer import traverse_scope
|
||||
from sqlglot.optimizer.qualify_columns import quote_identifiers
|
||||
from tests.dialects.test_dialect import Validator
|
||||
from sqlglot.errors import ErrorLevel
|
||||
|
||||
|
@ -11,6 +12,9 @@ class TestClickhouse(Validator):
|
|||
dialect = "clickhouse"
|
||||
|
||||
def test_clickhouse(self):
|
||||
expr = quote_identifiers(self.parse_one("{start_date:String}"), dialect="clickhouse")
|
||||
self.assertEqual(expr.sql("clickhouse"), "{start_date: String}")
|
||||
|
||||
for string_type_enum in ClickHouse.Generator.STRING_TYPE_MAPPING:
|
||||
self.validate_identity(f"CAST(x AS {string_type_enum.value})", "CAST(x AS String)")
|
||||
|
||||
|
|
|
@ -2326,6 +2326,9 @@ STORAGE_ALLOWED_LOCATIONS=('s3://mybucket1/path1/', 's3://mybucket2/path2/')""",
|
|||
self.validate_identity(
|
||||
"""COPY INTO @my_stage/result/data FROM (SELECT * FROM orderstiny) FILE_FORMAT = (TYPE='csv')"""
|
||||
)
|
||||
self.validate_identity(
|
||||
"""COPY INTO MY_DATABASE.MY_SCHEMA.MY_TABLE FROM @MY_DATABASE.MY_SCHEMA.MY_STAGE/my_path FILE_FORMAT = (FORMAT_NAME=MY_DATABASE.MY_SCHEMA.MY_FILE_FORMAT)"""
|
||||
)
|
||||
self.validate_all(
|
||||
"""COPY INTO 's3://example/data.csv'
|
||||
FROM EXTRA.EXAMPLE.TABLE
|
||||
|
|
|
@ -659,6 +659,15 @@ SELECT :with,WITH :expressions,CTE :this,UNION :this,SELECT :expressions,1,:expr
|
|||
"WITH data AS (SELECT 1 AS id) SELECT FUNC(data.id) AS id FROM data GROUP BY FUNC(data.id)",
|
||||
)
|
||||
|
||||
sql = "SELECT x.a, max(x.b) as x FROM x AS x GROUP BY 1 HAVING x > 1"
|
||||
self.assertEqual(
|
||||
optimizer.qualify_columns.qualify_columns(
|
||||
parse_one(sql, dialect="bigquery"),
|
||||
schema=MappingSchema(schema=unused_schema, dialect="bigquery"),
|
||||
).sql(),
|
||||
"SELECT x.a AS a, MAX(x.b) AS x FROM x AS x GROUP BY 1 HAVING x > 1",
|
||||
)
|
||||
|
||||
def test_optimize_joins(self):
|
||||
self.check_file(
|
||||
"optimize_joins",
|
||||
|
@ -1425,6 +1434,16 @@ FROM READ_CSV('tests/fixtures/optimizer/tpc-h/nation.csv.gz', 'delimiter', '|')
|
|||
"""
|
||||
self.assertEqual(optimizer.optimize(sql).selects[0].type.this, exp.DataType.Type.VARCHAR)
|
||||
|
||||
def test_udtf_annotation(self):
|
||||
table_udtf = parse_one(
|
||||
"SELECT * FROM TABLE(GENERATOR(ROWCOUNT => 100000))",
|
||||
read="snowflake",
|
||||
)
|
||||
self.assertEqual(
|
||||
annotate_types(table_udtf, dialect="snowflake").sql("snowflake"),
|
||||
"SELECT * FROM TABLE(GENERATOR(ROWCOUNT => 100000))",
|
||||
)
|
||||
|
||||
def test_recursive_cte(self):
|
||||
query = parse_one(
|
||||
"""
|
||||
|
|
Loading…
Add table
Reference in a new issue