Adding upstream version 26.17.1.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
4362133ee5
commit
873e685933
63 changed files with 16004 additions and 15816 deletions
|
@ -1,6 +1,14 @@
|
||||||
Changelog
|
Changelog
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
## [v26.16.4] - 2025-05-02
|
||||||
|
### :bug: Bug Fixes
|
||||||
|
- [`52e068f`](https://github.com/tobymao/sqlglot/commit/52e068f74bd6844d0273ddcc7637d249e6ed51c1) - **databricks**: Preserve colon operators in TRY_CAST *(PR [#5028](https://github.com/tobymao/sqlglot/pull/5028) by [@VaggelisD](https://github.com/VaggelisD))*
|
||||||
|
- :arrow_lower_right: *fixes issue [#5027](https://github.com/tobymao/sqlglot/issues/5027) opened by [@aersam](https://github.com/aersam)*
|
||||||
|
- [`91e5036`](https://github.com/tobymao/sqlglot/commit/91e5036831b87fd4670424e6a49e81efead432f2) - **parser**: Do not parse set ops if input expr is None *(PR [#5030](https://github.com/tobymao/sqlglot/pull/5030) by [@VaggelisD](https://github.com/VaggelisD))*
|
||||||
|
- [`8f77b30`](https://github.com/tobymao/sqlglot/commit/8f77b301a267eadb4c4792201e112159db554d1c) - **snowflake**: get function *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
|
||||||
|
|
||||||
## [v26.16.3] - 2025-05-01
|
## [v26.16.3] - 2025-05-01
|
||||||
### :boom: BREAKING CHANGES
|
### :boom: BREAKING CHANGES
|
||||||
- due to [`f5358d8`](https://github.com/tobymao/sqlglot/commit/f5358d8a3e2743b5ac0d540f10502d333ad4e082) - add support for GET statements *(PR [#5019](https://github.com/tobymao/sqlglot/pull/5019) by [@eruditmorina](https://github.com/eruditmorina))*:
|
- due to [`f5358d8`](https://github.com/tobymao/sqlglot/commit/f5358d8a3e2743b5ac0d540f10502d333ad4e082) - add support for GET statements *(PR [#5019](https://github.com/tobymao/sqlglot/pull/5019) by [@eruditmorina](https://github.com/eruditmorina))*:
|
||||||
|
@ -6487,3 +6495,4 @@ Changelog
|
||||||
[v26.16.1]: https://github.com/tobymao/sqlglot/compare/v26.16.0...v26.16.1
|
[v26.16.1]: https://github.com/tobymao/sqlglot/compare/v26.16.0...v26.16.1
|
||||||
[v26.16.2]: https://github.com/tobymao/sqlglot/compare/v26.16.1...v26.16.2
|
[v26.16.2]: https://github.com/tobymao/sqlglot/compare/v26.16.1...v26.16.2
|
||||||
[v26.16.3]: https://github.com/tobymao/sqlglot/compare/v26.16.2...v26.16.3
|
[v26.16.3]: https://github.com/tobymao/sqlglot/compare/v26.16.2...v26.16.3
|
||||||
|
[v26.16.4]: https://github.com/tobymao/sqlglot/compare/v26.16.3...v26.16.4
|
||||||
|
|
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-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-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-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.16.3'</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.16.4'</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">16</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</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">16</span><span class="p">,</span> <span class="mi">4</span><span class="p">)</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -93,7 +93,7 @@
|
||||||
<section id="__version__">
|
<section id="__version__">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">__version__</span><span class="annotation">: str</span> =
|
<span class="name">__version__</span><span class="annotation">: str</span> =
|
||||||
<span class="default_value">'26.16.3'</span>
|
<span class="default_value">'26.16.4'</span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -105,7 +105,7 @@
|
||||||
<section id="__version_tuple__">
|
<section id="__version_tuple__">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">__version_tuple__</span><span class="annotation">: object</span> =
|
<span class="name">__version_tuple__</span><span class="annotation">: object</span> =
|
||||||
<span class="default_value">(26, 16, 3)</span>
|
<span class="default_value">(26, 16, 4)</span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -117,7 +117,7 @@
|
||||||
<section id="version">
|
<section id="version">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">version</span><span class="annotation">: str</span> =
|
<span class="name">version</span><span class="annotation">: str</span> =
|
||||||
<span class="default_value">'26.16.3'</span>
|
<span class="default_value">'26.16.4'</span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -129,7 +129,7 @@
|
||||||
<section id="version_tuple">
|
<section id="version_tuple">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">version_tuple</span><span class="annotation">: object</span> =
|
<span class="name">version_tuple</span><span class="annotation">: object</span> =
|
||||||
<span class="default_value">(26, 16, 3)</span>
|
<span class="default_value">(26, 16, 4)</span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -359,7 +359,7 @@ dialect implementations in order to understand how their various components can
|
||||||
<section id="Athena">
|
<section id="Athena">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">Athena</span> =
|
<span class="name">Athena</span> =
|
||||||
<span class="default_value"><MagicMock id='140223654967424'></span>
|
<span class="default_value"><MagicMock id='139930512520240'></span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -371,7 +371,7 @@ dialect implementations in order to understand how their various components can
|
||||||
<section id="BigQuery">
|
<section id="BigQuery">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">BigQuery</span> =
|
<span class="name">BigQuery</span> =
|
||||||
<span class="default_value"><MagicMock id='140223656927360'></span>
|
<span class="default_value"><MagicMock id='139930514521152'></span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -383,7 +383,7 @@ dialect implementations in order to understand how their various components can
|
||||||
<section id="ClickHouse">
|
<section id="ClickHouse">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">ClickHouse</span> =
|
<span class="name">ClickHouse</span> =
|
||||||
<span class="default_value"><MagicMock id='140223660767264'></span>
|
<span class="default_value"><MagicMock id='139930519272080'></span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -395,7 +395,7 @@ dialect implementations in order to understand how their various components can
|
||||||
<section id="Databricks">
|
<section id="Databricks">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">Databricks</span> =
|
<span class="name">Databricks</span> =
|
||||||
<span class="default_value"><MagicMock id='140223662982864'></span>
|
<span class="default_value"><MagicMock id='139930516854800'></span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -407,7 +407,7 @@ dialect implementations in order to understand how their various components can
|
||||||
<section id="Doris">
|
<section id="Doris">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">Doris</span> =
|
<span class="name">Doris</span> =
|
||||||
<span class="default_value"><MagicMock id='140223660478944'></span>
|
<span class="default_value"><MagicMock id='139930519102672'></span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -419,7 +419,7 @@ dialect implementations in order to understand how their various components can
|
||||||
<section id="Drill">
|
<section id="Drill">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">Drill</span> =
|
<span class="name">Drill</span> =
|
||||||
<span class="default_value"><MagicMock id='140223666653216'></span>
|
<span class="default_value"><MagicMock id='139930524552784'></span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -431,7 +431,7 @@ dialect implementations in order to understand how their various components can
|
||||||
<section id="Druid">
|
<section id="Druid">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">Druid</span> =
|
<span class="name">Druid</span> =
|
||||||
<span class="default_value"><MagicMock id='140223666655952'></span>
|
<span class="default_value"><MagicMock id='139930524553696'></span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -443,7 +443,7 @@ dialect implementations in order to understand how their various components can
|
||||||
<section id="DuckDB">
|
<section id="DuckDB">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">DuckDB</span> =
|
<span class="name">DuckDB</span> =
|
||||||
<span class="default_value"><MagicMock id='140223670315872'></span>
|
<span class="default_value"><MagicMock id='139930527083072'></span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -455,7 +455,7 @@ dialect implementations in order to understand how their various components can
|
||||||
<section id="Dune">
|
<section id="Dune">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">Dune</span> =
|
<span class="name">Dune</span> =
|
||||||
<span class="default_value"><MagicMock id='140223670305216'></span>
|
<span class="default_value"><MagicMock id='139930527085136'></span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -467,7 +467,7 @@ dialect implementations in order to understand how their various components can
|
||||||
<section id="Hive">
|
<section id="Hive">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">Hive</span> =
|
<span class="name">Hive</span> =
|
||||||
<span class="default_value"><MagicMock id='140223657243648'></span>
|
<span class="default_value"><MagicMock id='139930514780800'></span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -479,7 +479,7 @@ dialect implementations in order to understand how their various components can
|
||||||
<section id="Materialize">
|
<section id="Materialize">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">Materialize</span> =
|
<span class="name">Materialize</span> =
|
||||||
<span class="default_value"><MagicMock id='140223657238608'></span>
|
<span class="default_value"><MagicMock id='139930514770240'></span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -491,7 +491,7 @@ dialect implementations in order to understand how their various components can
|
||||||
<section id="MySQL">
|
<section id="MySQL">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">MySQL</span> =
|
<span class="name">MySQL</span> =
|
||||||
<span class="default_value"><MagicMock id='140223665565472'></span>
|
<span class="default_value"><MagicMock id='139930523412528'></span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -503,7 +503,7 @@ dialect implementations in order to understand how their various components can
|
||||||
<section id="Oracle">
|
<section id="Oracle">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">Oracle</span> =
|
<span class="name">Oracle</span> =
|
||||||
<span class="default_value"><MagicMock id='140223662411296'></span>
|
<span class="default_value"><MagicMock id='139930520980592'></span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -515,7 +515,7 @@ dialect implementations in order to understand how their various components can
|
||||||
<section id="Postgres">
|
<section id="Postgres">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">Postgres</span> =
|
<span class="name">Postgres</span> =
|
||||||
<span class="default_value"><MagicMock id='140223661003184'></span>
|
<span class="default_value"><MagicMock id='139930519622016'></span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -527,7 +527,7 @@ dialect implementations in order to understand how their various components can
|
||||||
<section id="Presto">
|
<section id="Presto">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">Presto</span> =
|
<span class="name">Presto</span> =
|
||||||
<span class="default_value"><MagicMock id='140223666522720'></span>
|
<span class="default_value"><MagicMock id='139930524419936'></span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -539,7 +539,7 @@ dialect implementations in order to understand how their various components can
|
||||||
<section id="PRQL">
|
<section id="PRQL">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">PRQL</span> =
|
<span class="name">PRQL</span> =
|
||||||
<span class="default_value"><MagicMock id='140223666526416'></span>
|
<span class="default_value"><MagicMock id='139930524423920'></span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -551,7 +551,7 @@ dialect implementations in order to understand how their various components can
|
||||||
<section id="Redshift">
|
<section id="Redshift">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">Redshift</span> =
|
<span class="name">Redshift</span> =
|
||||||
<span class="default_value"><MagicMock id='140223669060368'></span>
|
<span class="default_value"><MagicMock id='139930527795088'></span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -563,7 +563,7 @@ dialect implementations in order to understand how their various components can
|
||||||
<section id="RisingWave">
|
<section id="RisingWave">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">RisingWave</span> =
|
<span class="name">RisingWave</span> =
|
||||||
<span class="default_value"><MagicMock id='140223669070016'></span>
|
<span class="default_value"><MagicMock id='139930520236048'></span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -575,7 +575,7 @@ dialect implementations in order to understand how their various components can
|
||||||
<section id="Snowflake">
|
<section id="Snowflake">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">Snowflake</span> =
|
<span class="name">Snowflake</span> =
|
||||||
<span class="default_value"><MagicMock id='140223661514208'></span>
|
<span class="default_value"><MagicMock id='139930520224528'></span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -587,7 +587,7 @@ dialect implementations in order to understand how their various components can
|
||||||
<section id="Spark">
|
<section id="Spark">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">Spark</span> =
|
<span class="name">Spark</span> =
|
||||||
<span class="default_value"><MagicMock id='140223668511184'></span>
|
<span class="default_value"><MagicMock id='139930527493296'></span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -599,7 +599,7 @@ dialect implementations in order to understand how their various components can
|
||||||
<section id="Spark2">
|
<section id="Spark2">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">Spark2</span> =
|
<span class="name">Spark2</span> =
|
||||||
<span class="default_value"><MagicMock id='140223668508640'></span>
|
<span class="default_value"><MagicMock id='139930527460000'></span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -611,7 +611,7 @@ dialect implementations in order to understand how their various components can
|
||||||
<section id="SQLite">
|
<section id="SQLite">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">SQLite</span> =
|
<span class="name">SQLite</span> =
|
||||||
<span class="default_value"><MagicMock id='140223670717072'></span>
|
<span class="default_value"><MagicMock id='139930527452656'></span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -623,7 +623,7 @@ dialect implementations in order to understand how their various components can
|
||||||
<section id="StarRocks">
|
<section id="StarRocks">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">StarRocks</span> =
|
<span class="name">StarRocks</span> =
|
||||||
<span class="default_value"><MagicMock id='140223665043152'></span>
|
<span class="default_value"><MagicMock id='139930527588624'></span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -635,7 +635,7 @@ dialect implementations in order to understand how their various components can
|
||||||
<section id="Tableau">
|
<section id="Tableau">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">Tableau</span> =
|
<span class="name">Tableau</span> =
|
||||||
<span class="default_value"><MagicMock id='140223670678480'></span>
|
<span class="default_value"><MagicMock id='139930522889920'></span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -647,7 +647,7 @@ dialect implementations in order to understand how their various components can
|
||||||
<section id="Teradata">
|
<section id="Teradata">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">Teradata</span> =
|
<span class="name">Teradata</span> =
|
||||||
<span class="default_value"><MagicMock id='140223661583152'></span>
|
<span class="default_value"><MagicMock id='139930520249984'></span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -659,7 +659,7 @@ dialect implementations in order to understand how their various components can
|
||||||
<section id="Trino">
|
<section id="Trino">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">Trino</span> =
|
<span class="name">Trino</span> =
|
||||||
<span class="default_value"><MagicMock id='140223661585888'></span>
|
<span class="default_value"><MagicMock id='139930520246240'></span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -671,7 +671,7 @@ dialect implementations in order to understand how their various components can
|
||||||
<section id="TSQL">
|
<section id="TSQL">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">TSQL</span> =
|
<span class="name">TSQL</span> =
|
||||||
<span class="default_value"><MagicMock id='140223666222752'></span>
|
<span class="default_value"><MagicMock id='139930524096960'></span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -683,7 +683,7 @@ dialect implementations in order to understand how their various components can
|
||||||
<section id="Dialect">
|
<section id="Dialect">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">Dialect</span> =
|
<span class="name">Dialect</span> =
|
||||||
<span class="default_value"><MagicMock id='140223657831024'></span>
|
<span class="default_value"><MagicMock id='139930515373024'></span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -695,7 +695,7 @@ dialect implementations in order to understand how their various components can
|
||||||
<section id="Dialects">
|
<section id="Dialects">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">Dialects</span> =
|
<span class="name">Dialects</span> =
|
||||||
<span class="default_value"><MagicMock id='140223657831648'></span>
|
<span class="default_value"><MagicMock id='139930515369760'></span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</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
|
@ -63109,7 +63109,7 @@ Otherwise, this resets the expressions.</li>
|
||||||
<div id="DataType.STRUCT_TYPES" class="classattr">
|
<div id="DataType.STRUCT_TYPES" class="classattr">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">STRUCT_TYPES</span> =
|
<span class="name">STRUCT_TYPES</span> =
|
||||||
<span class="default_value">{<Type.UNION: 'UNION'>, <Type.NESTED: 'NESTED'>, <Type.STRUCT: 'STRUCT'>, <Type.OBJECT: 'OBJECT'>}</span>
|
<span class="default_value">{<Type.NESTED: 'NESTED'>, <Type.UNION: 'UNION'>, <Type.OBJECT: 'OBJECT'>, <Type.STRUCT: 'STRUCT'>}</span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -63134,7 +63134,7 @@ Otherwise, this resets the expressions.</li>
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">NESTED_TYPES</span> =
|
<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">
|
<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.STRUCT: 'STRUCT'>, <Type.OBJECT: 'OBJECT'>, <Type.NESTED: 'NESTED'>, <Type.UNION: 'UNION'>, <Type.LIST: 'LIST'>, <Type.ARRAY: 'ARRAY'>, <Type.MAP: 'MAP'>}</span>
|
<label class="view-value-button pdoc-button" for="DataType.NESTED_TYPES-view-value"></label><span class="default_value">{<Type.NESTED: 'NESTED'>, <Type.LIST: 'LIST'>, <Type.OBJECT: 'OBJECT'>, <Type.STRUCT: 'STRUCT'>, <Type.UNION: 'UNION'>, <Type.ARRAY: 'ARRAY'>, <Type.MAP: 'MAP'>}</span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -63147,7 +63147,7 @@ Otherwise, this resets the expressions.</li>
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">TEXT_TYPES</span> =
|
<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">
|
<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.TEXT: 'TEXT'>, <Type.NAME: 'NAME'>, <Type.NCHAR: 'NCHAR'>, <Type.VARCHAR: 'VARCHAR'>, <Type.CHAR: 'CHAR'>, <Type.NVARCHAR: 'NVARCHAR'>}</span>
|
<label class="view-value-button pdoc-button" for="DataType.TEXT_TYPES-view-value"></label><span class="default_value">{<Type.CHAR: 'CHAR'>, <Type.NVARCHAR: 'NVARCHAR'>, <Type.NCHAR: 'NCHAR'>, <Type.TEXT: 'TEXT'>, <Type.VARCHAR: 'VARCHAR'>, <Type.NAME: 'NAME'>}</span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -63160,7 +63160,7 @@ Otherwise, this resets the expressions.</li>
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">SIGNED_INTEGER_TYPES</span> =
|
<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">
|
<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.SMALLINT: 'SMALLINT'>, <Type.MEDIUMINT: 'MEDIUMINT'>, <Type.INT: 'INT'>, <Type.BIGINT: 'BIGINT'>, <Type.INT128: 'INT128'>, <Type.INT256: 'INT256'>, <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.INT: 'INT'>, <Type.INT256: 'INT256'>, <Type.BIGINT: 'BIGINT'>, <Type.TINYINT: 'TINYINT'>, <Type.MEDIUMINT: 'MEDIUMINT'>, <Type.INT128: 'INT128'>}</span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -63173,7 +63173,7 @@ Otherwise, this resets the expressions.</li>
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">UNSIGNED_INTEGER_TYPES</span> =
|
<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">
|
<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.UTINYINT: 'UTINYINT'>, <Type.UINT256: 'UINT256'>, <Type.UBIGINT: 'UBIGINT'>, <Type.UMEDIUMINT: 'UMEDIUMINT'>, <Type.UINT: 'UINT'>, <Type.UINT128: 'UINT128'>, <Type.USMALLINT: 'USMALLINT'>}</span>
|
<label class="view-value-button pdoc-button" for="DataType.UNSIGNED_INTEGER_TYPES-view-value"></label><span class="default_value">{<Type.UINT256: 'UINT256'>, <Type.UINT: 'UINT'>, <Type.UBIGINT: 'UBIGINT'>, <Type.USMALLINT: 'USMALLINT'>, <Type.UTINYINT: 'UTINYINT'>, <Type.UMEDIUMINT: 'UMEDIUMINT'>, <Type.UINT128: 'UINT128'>}</span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -63186,7 +63186,7 @@ Otherwise, this resets the expressions.</li>
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">INTEGER_TYPES</span> =
|
<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">
|
<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.SMALLINT: 'SMALLINT'>, <Type.MEDIUMINT: 'MEDIUMINT'>, <Type.UTINYINT: 'UTINYINT'>, <Type.INT: 'INT'>, <Type.UINT256: 'UINT256'>, <Type.UBIGINT: 'UBIGINT'>, <Type.UMEDIUMINT: 'UMEDIUMINT'>, <Type.UINT: 'UINT'>, <Type.UINT128: 'UINT128'>, <Type.BIT: 'BIT'>, <Type.BIGINT: 'BIGINT'>, <Type.USMALLINT: 'USMALLINT'>, <Type.INT128: 'INT128'>, <Type.INT256: 'INT256'>, <Type.TINYINT: 'TINYINT'>}</span>
|
<label class="view-value-button pdoc-button" for="DataType.INTEGER_TYPES-view-value"></label><span class="default_value">{<Type.SMALLINT: 'SMALLINT'>, <Type.UINT256: 'UINT256'>, <Type.UINT: 'UINT'>, <Type.UINT128: 'UINT128'>, <Type.BIT: 'BIT'>, <Type.UBIGINT: 'UBIGINT'>, <Type.INT: 'INT'>, <Type.INT256: 'INT256'>, <Type.BIGINT: 'BIGINT'>, <Type.USMALLINT: 'USMALLINT'>, <Type.TINYINT: 'TINYINT'>, <Type.MEDIUMINT: 'MEDIUMINT'>, <Type.INT128: 'INT128'>, <Type.UMEDIUMINT: 'UMEDIUMINT'>, <Type.UTINYINT: 'UTINYINT'>}</span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -63211,7 +63211,7 @@ Otherwise, this resets the expressions.</li>
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">REAL_TYPES</span> =
|
<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">
|
<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.DECIMAL: 'DECIMAL'>, <Type.FLOAT: 'FLOAT'>, <Type.BIGDECIMAL: 'BIGDECIMAL'>, <Type.DECIMAL64: 'DECIMAL64'>, <Type.DECIMAL256: 'DECIMAL256'>, <Type.UDOUBLE: 'UDOUBLE'>, <Type.SMALLMONEY: 'SMALLMONEY'>, <Type.DOUBLE: 'DOUBLE'>, <Type.UDECIMAL: 'UDECIMAL'>, <Type.MONEY: 'MONEY'>, <Type.DECIMAL32: 'DECIMAL32'>, <Type.DECIMAL128: 'DECIMAL128'>}</span>
|
<label class="view-value-button pdoc-button" for="DataType.REAL_TYPES-view-value"></label><span class="default_value">{<Type.UDECIMAL: 'UDECIMAL'>, <Type.SMALLMONEY: 'SMALLMONEY'>, <Type.UDOUBLE: 'UDOUBLE'>, <Type.FLOAT: 'FLOAT'>, <Type.DECIMAL64: 'DECIMAL64'>, <Type.MONEY: 'MONEY'>, <Type.DECIMAL: 'DECIMAL'>, <Type.BIGDECIMAL: 'BIGDECIMAL'>, <Type.DECIMAL128: 'DECIMAL128'>, <Type.DECIMAL256: 'DECIMAL256'>, <Type.DECIMAL32: 'DECIMAL32'>, <Type.DOUBLE: 'DOUBLE'>}</span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -63224,7 +63224,7 @@ Otherwise, this resets the expressions.</li>
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">NUMERIC_TYPES</span> =
|
<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">
|
<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.SMALLINT: 'SMALLINT'>, <Type.UTINYINT: 'UTINYINT'>, <Type.BIGDECIMAL: 'BIGDECIMAL'>, <Type.DECIMAL64: 'DECIMAL64'>, <Type.INT: 'INT'>, <Type.UBIGINT: 'UBIGINT'>, <Type.UDOUBLE: 'UDOUBLE'>, <Type.SMALLMONEY: 'SMALLMONEY'>, <Type.DOUBLE: 'DOUBLE'>, <Type.UINT: 'UINT'>, <Type.UINT128: 'UINT128'>, <Type.UDECIMAL: 'UDECIMAL'>, <Type.BIGINT: 'BIGINT'>, <Type.DECIMAL32: 'DECIMAL32'>, <Type.DECIMAL128: 'DECIMAL128'>, <Type.MEDIUMINT: 'MEDIUMINT'>, <Type.DECIMAL: 'DECIMAL'>, <Type.FLOAT: 'FLOAT'>, <Type.UINT256: 'UINT256'>, <Type.DECIMAL256: 'DECIMAL256'>, <Type.UMEDIUMINT: 'UMEDIUMINT'>, <Type.MONEY: 'MONEY'>, <Type.USMALLINT: 'USMALLINT'>, <Type.BIT: 'BIT'>, <Type.INT256: 'INT256'>, <Type.TINYINT: 'TINYINT'>, <Type.INT128: 'INT128'>}</span>
|
<label class="view-value-button pdoc-button" for="DataType.NUMERIC_TYPES-view-value"></label><span class="default_value">{<Type.UDECIMAL: 'UDECIMAL'>, <Type.SMALLINT: 'SMALLINT'>, <Type.UINT256: 'UINT256'>, <Type.UDOUBLE: 'UDOUBLE'>, <Type.FLOAT: 'FLOAT'>, <Type.DECIMAL64: 'DECIMAL64'>, <Type.UBIGINT: 'UBIGINT'>, <Type.INT: 'INT'>, <Type.MONEY: 'MONEY'>, <Type.DECIMAL: 'DECIMAL'>, <Type.BIGDECIMAL: 'BIGDECIMAL'>, <Type.MEDIUMINT: 'MEDIUMINT'>, <Type.INT128: 'INT128'>, <Type.DECIMAL128: 'DECIMAL128'>, <Type.DECIMAL256: 'DECIMAL256'>, <Type.DECIMAL32: 'DECIMAL32'>, <Type.DOUBLE: 'DOUBLE'>, <Type.UINT128: 'UINT128'>, <Type.SMALLMONEY: 'SMALLMONEY'>, <Type.UINT: 'UINT'>, <Type.BIT: 'BIT'>, <Type.INT256: 'INT256'>, <Type.BIGINT: 'BIGINT'>, <Type.USMALLINT: 'USMALLINT'>, <Type.TINYINT: 'TINYINT'>, <Type.UMEDIUMINT: 'UMEDIUMINT'>, <Type.UTINYINT: 'UTINYINT'>}</span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -63237,7 +63237,7 @@ Otherwise, this resets the expressions.</li>
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">TEMPORAL_TYPES</span> =
|
<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">
|
<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.TIMESTAMPTZ: 'TIMESTAMPTZ'>, <Type.TIMETZ: 'TIMETZ'>, <Type.TIMESTAMPNTZ: 'TIMESTAMPNTZ'>, <Type.DATETIME64: 'DATETIME64'>, <Type.DATETIME2: 'DATETIME2'>, <Type.DATE: 'DATE'>, <Type.TIMESTAMP_MS: 'TIMESTAMP_MS'>, <Type.TIMESTAMP_S: 'TIMESTAMP_S'>, <Type.TIMESTAMPLTZ: 'TIMESTAMPLTZ'>, <Type.TIMESTAMP_NS: 'TIMESTAMP_NS'>, <Type.TIME: 'TIME'>, <Type.SMALLDATETIME: 'SMALLDATETIME'>, <Type.DATETIME: 'DATETIME'>, <Type.DATE32: 'DATE32'>, <Type.TIMESTAMP: 'TIMESTAMP'>}</span>
|
<label class="view-value-button pdoc-button" for="DataType.TEMPORAL_TYPES-view-value"></label><span class="default_value">{<Type.SMALLDATETIME: 'SMALLDATETIME'>, <Type.DATETIME64: 'DATETIME64'>, <Type.TIMESTAMPNTZ: 'TIMESTAMPNTZ'>, <Type.TIMESTAMP_S: 'TIMESTAMP_S'>, <Type.TIMESTAMP_NS: 'TIMESTAMP_NS'>, <Type.DATE32: 'DATE32'>, <Type.DATE: 'DATE'>, <Type.DATETIME: 'DATETIME'>, <Type.TIMESTAMPLTZ: 'TIMESTAMPLTZ'>, <Type.TIMETZ: 'TIMETZ'>, <Type.TIMESTAMP: 'TIMESTAMP'>, <Type.TIMESTAMPTZ: 'TIMESTAMPTZ'>, <Type.TIME: 'TIME'>, <Type.TIMESTAMP_MS: 'TIMESTAMP_MS'>, <Type.DATETIME2: 'DATETIME2'>}</span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -12249,7 +12249,7 @@ Default: True</li>
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">SUPPORTED_JSON_PATH_PARTS</span> =
|
<span class="name">SUPPORTED_JSON_PATH_PARTS</span> =
|
||||||
<input id="Generator.SUPPORTED_JSON_PATH_PARTS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
<input id="Generator.SUPPORTED_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="Generator.SUPPORTED_JSON_PATH_PARTS-view-value"></label><span class="default_value">{<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>'>, <class '<a href="expressions.html#JSONPathRoot">sqlglot.expressions.JSONPathRoot</a>'>}</span>
|
<label class="view-value-button pdoc-button" for="Generator.SUPPORTED_JSON_PATH_PARTS-view-value"></label><span class="default_value">{<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>'>, <class '<a href="expressions.html#JSONPathRoot">sqlglot.expressions.JSONPathRoot</a>'>, <class '<a href="expressions.html#JSONPathRecursive">sqlglot.expressions.JSONPathRecursive</a>'>}</span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -12687,7 +12687,7 @@ Default: True</li>
|
||||||
<div id="Generator.PARAMETERIZABLE_TEXT_TYPES" class="classattr">
|
<div id="Generator.PARAMETERIZABLE_TEXT_TYPES" class="classattr">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">PARAMETERIZABLE_TEXT_TYPES</span> =
|
<span class="name">PARAMETERIZABLE_TEXT_TYPES</span> =
|
||||||
<span class="default_value">{<Type.VARCHAR: 'VARCHAR'>, <Type.NVARCHAR: 'NVARCHAR'>, <Type.CHAR: 'CHAR'>, <Type.NCHAR: 'NCHAR'>}</span>
|
<span class="default_value">{<Type.NVARCHAR: 'NVARCHAR'>, <Type.CHAR: 'CHAR'>, <Type.NCHAR: 'NCHAR'>, <Type.VARCHAR: 'VARCHAR'>}</span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1956,7 +1956,7 @@ belong to some totally-ordered set.</p>
|
||||||
<section id="DATE_UNITS">
|
<section id="DATE_UNITS">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">DATE_UNITS</span> =
|
<span class="name">DATE_UNITS</span> =
|
||||||
<span class="default_value">{'year', 'week', 'year_month', 'day', 'month', 'quarter'}</span>
|
<span class="default_value">{'month', 'year', 'day', 'quarter', 'week', 'year_month'}</span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -641,7 +641,7 @@
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">ALL_JSON_PATH_PARTS</span> =
|
<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">
|
<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#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>'>, <class '<a href="expressions.html#JSONPathRoot">sqlglot.expressions.JSONPathRoot</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#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>'>, <class '<a href="expressions.html#JSONPathRoot">sqlglot.expressions.JSONPathRoot</a>'>, <class '<a href="expressions.html#JSONPathRecursive">sqlglot.expressions.JSONPathRecursive</a>'>}</span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</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">
|
<div class="attr variable">
|
||||||
<span class="name">UNMERGABLE_ARGS</span> =
|
<span class="name">UNMERGABLE_ARGS</span> =
|
||||||
<input id="UNMERGABLE_ARGS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
<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">{'match', 'pivots', 'distinct', 'with', 'limit', 'into', 'connect', 'operation_modifiers', 'offset', 'having', 'distribute', 'sort', 'format', 'laterals', 'prewhere', 'locks', 'cluster', 'group', 'windows', 'kind', 'options', 'qualify', 'settings', 'sample'}</span>
|
<label class="view-value-button pdoc-button" for="UNMERGABLE_ARGS-view-value"></label><span class="default_value">{'match', 'windows', 'locks', 'limit', 'settings', 'laterals', 'pivots', 'group', 'into', 'distinct', 'distribute', 'offset', 'sort', 'with', 'connect', 'cluster', 'operation_modifiers', 'qualify', 'options', 'sample', 'format', 'prewhere', 'having', 'kind'}</span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -3186,7 +3186,7 @@ prefix are statically known.</p>
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">DATETRUNC_COMPARISONS</span> =
|
<span class="name">DATETRUNC_COMPARISONS</span> =
|
||||||
<input id="DATETRUNC_COMPARISONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
<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#EQ">sqlglot.expressions.EQ</a>'>, <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#NEQ">sqlglot.expressions.NEQ</a>'>, <class '<a href="../expressions.html#GTE">sqlglot.expressions.GTE</a>'>}</span>
|
<label class="view-value-button pdoc-button" for="DATETRUNC_COMPARISONS-view-value"></label><span class="default_value">{<class '<a href="../expressions.html#In">sqlglot.expressions.In</a>'>, <class '<a href="../expressions.html#NEQ">sqlglot.expressions.NEQ</a>'>, <class '<a href="../expressions.html#GTE">sqlglot.expressions.GTE</a>'>, <class '<a href="../expressions.html#EQ">sqlglot.expressions.EQ</a>'>, <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#LT">sqlglot.expressions.LT</a>'>}</span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -3270,7 +3270,7 @@ prefix are statically known.</p>
|
||||||
<section id="JOINS">
|
<section id="JOINS">
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">JOINS</span> =
|
<span class="name">JOINS</span> =
|
||||||
<span class="default_value">{('RIGHT', ''), ('', 'INNER'), ('RIGHT', 'OUTER'), ('', '')}</span>
|
<span class="default_value">{('', 'INNER'), ('RIGHT', ''), ('RIGHT', 'OUTER'), ('', '')}</span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
31054
docs/sqlglot/parser.html
31054
docs/sqlglot/parser.html
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -9485,7 +9485,7 @@
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">TOKENS_PRECEDING_HINT</span> =
|
<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">
|
<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.DELETE">TokenType.DELETE</a>: 'DELETE'>, <<a href="#TokenType.UPDATE">TokenType.UPDATE</a>: 'UPDATE'>, <<a href="#TokenType.INSERT">TokenType.INSERT</a>: 'INSERT'>, <<a href="#TokenType.SELECT">TokenType.SELECT</a>: 'SELECT'>}</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.SELECT">TokenType.SELECT</a>: 'SELECT'>, <<a href="#TokenType.UPDATE">TokenType.UPDATE</a>: 'UPDATE'>}</span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -9524,7 +9524,7 @@
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">COMMANDS</span> =
|
<span class="name">COMMANDS</span> =
|
||||||
<input id="Tokenizer.COMMANDS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
<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.FETCH">TokenType.FETCH</a>: 'FETCH'>, <<a href="#TokenType.SHOW">TokenType.SHOW</a>: 'SHOW'>, <<a href="#TokenType.EXECUTE">TokenType.EXECUTE</a>: 'EXECUTE'>, <<a href="#TokenType.COMMAND">TokenType.COMMAND</a>: 'COMMAND'>, <<a href="#TokenType.RENAME">TokenType.RENAME</a>: 'RENAME'>}</span>
|
<label class="view-value-button pdoc-button" for="Tokenizer.COMMANDS-view-value"></label><span class="default_value">{<<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.RENAME">TokenType.RENAME</a>: 'RENAME'>, <<a href="#TokenType.SHOW">TokenType.SHOW</a>: 'SHOW'>}</span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1040,6 +1040,7 @@ class BigQuery(Dialect):
|
||||||
exp.DataType.Type.SMALLINT: "INT64",
|
exp.DataType.Type.SMALLINT: "INT64",
|
||||||
exp.DataType.Type.TEXT: "STRING",
|
exp.DataType.Type.TEXT: "STRING",
|
||||||
exp.DataType.Type.TIMESTAMP: "DATETIME",
|
exp.DataType.Type.TIMESTAMP: "DATETIME",
|
||||||
|
exp.DataType.Type.TIMESTAMPNTZ: "DATETIME",
|
||||||
exp.DataType.Type.TIMESTAMPTZ: "TIMESTAMP",
|
exp.DataType.Type.TIMESTAMPTZ: "TIMESTAMP",
|
||||||
exp.DataType.Type.TIMESTAMPLTZ: "TIMESTAMP",
|
exp.DataType.Type.TIMESTAMPLTZ: "TIMESTAMP",
|
||||||
exp.DataType.Type.TINYINT: "INT64",
|
exp.DataType.Type.TINYINT: "INT64",
|
||||||
|
|
|
@ -498,7 +498,10 @@ class ClickHouse(Dialect):
|
||||||
|
|
||||||
FUNCTION_PARSERS.pop("MATCH")
|
FUNCTION_PARSERS.pop("MATCH")
|
||||||
|
|
||||||
PROPERTY_PARSERS = parser.Parser.PROPERTY_PARSERS.copy()
|
PROPERTY_PARSERS = {
|
||||||
|
**parser.Parser.PROPERTY_PARSERS,
|
||||||
|
"ENGINE": lambda self: self._parse_engine_property(),
|
||||||
|
}
|
||||||
PROPERTY_PARSERS.pop("DYNAMIC")
|
PROPERTY_PARSERS.pop("DYNAMIC")
|
||||||
|
|
||||||
NO_PAREN_FUNCTION_PARSERS = parser.Parser.NO_PAREN_FUNCTION_PARSERS.copy()
|
NO_PAREN_FUNCTION_PARSERS = parser.Parser.NO_PAREN_FUNCTION_PARSERS.copy()
|
||||||
|
@ -568,6 +571,13 @@ class ClickHouse(Dialect):
|
||||||
TokenType.L_BRACE: lambda self: self._parse_query_parameter(),
|
TokenType.L_BRACE: lambda self: self._parse_query_parameter(),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def _parse_engine_property(self) -> exp.EngineProperty:
|
||||||
|
self._match(TokenType.EQ)
|
||||||
|
return self.expression(
|
||||||
|
exp.EngineProperty,
|
||||||
|
this=self._parse_field(any_token=True, anonymous_func=True),
|
||||||
|
)
|
||||||
|
|
||||||
# https://clickhouse.com/docs/en/sql-reference/statements/create/function
|
# https://clickhouse.com/docs/en/sql-reference/statements/create/function
|
||||||
def _parse_user_defined_function_expression(self) -> t.Optional[exp.Expression]:
|
def _parse_user_defined_function_expression(self) -> t.Optional[exp.Expression]:
|
||||||
return self._parse_lambda()
|
return self._parse_lambda()
|
||||||
|
@ -1006,6 +1016,7 @@ class ClickHouse(Dialect):
|
||||||
exp.DataType.Type.DECIMAL128: "Decimal128",
|
exp.DataType.Type.DECIMAL128: "Decimal128",
|
||||||
exp.DataType.Type.DECIMAL256: "Decimal256",
|
exp.DataType.Type.DECIMAL256: "Decimal256",
|
||||||
exp.DataType.Type.TIMESTAMP: "DateTime",
|
exp.DataType.Type.TIMESTAMP: "DateTime",
|
||||||
|
exp.DataType.Type.TIMESTAMPNTZ: "DateTime",
|
||||||
exp.DataType.Type.TIMESTAMPTZ: "DateTime",
|
exp.DataType.Type.TIMESTAMPTZ: "DateTime",
|
||||||
exp.DataType.Type.DOUBLE: "Float64",
|
exp.DataType.Type.DOUBLE: "Float64",
|
||||||
exp.DataType.Type.ENUM: "Enum",
|
exp.DataType.Type.ENUM: "Enum",
|
||||||
|
|
|
@ -321,6 +321,7 @@ class DuckDB(Dialect):
|
||||||
"BPCHAR": TokenType.TEXT,
|
"BPCHAR": TokenType.TEXT,
|
||||||
"CHAR": TokenType.TEXT,
|
"CHAR": TokenType.TEXT,
|
||||||
"CHARACTER VARYING": TokenType.TEXT,
|
"CHARACTER VARYING": TokenType.TEXT,
|
||||||
|
"DATETIME": TokenType.TIMESTAMPNTZ,
|
||||||
"DETACH": TokenType.DETACH,
|
"DETACH": TokenType.DETACH,
|
||||||
"EXCLUDE": TokenType.EXCEPT,
|
"EXCLUDE": TokenType.EXCEPT,
|
||||||
"LOGICAL": TokenType.BOOLEAN,
|
"LOGICAL": TokenType.BOOLEAN,
|
||||||
|
@ -330,6 +331,7 @@ class DuckDB(Dialect):
|
||||||
"SIGNED": TokenType.INT,
|
"SIGNED": TokenType.INT,
|
||||||
"STRING": TokenType.TEXT,
|
"STRING": TokenType.TEXT,
|
||||||
"SUMMARIZE": TokenType.SUMMARIZE,
|
"SUMMARIZE": TokenType.SUMMARIZE,
|
||||||
|
"TIMESTAMP": TokenType.TIMESTAMPNTZ,
|
||||||
"TIMESTAMP_S": TokenType.TIMESTAMP_S,
|
"TIMESTAMP_S": TokenType.TIMESTAMP_S,
|
||||||
"TIMESTAMP_MS": TokenType.TIMESTAMP_MS,
|
"TIMESTAMP_MS": TokenType.TIMESTAMP_MS,
|
||||||
"TIMESTAMP_NS": TokenType.TIMESTAMP_NS,
|
"TIMESTAMP_NS": TokenType.TIMESTAMP_NS,
|
||||||
|
|
|
@ -503,6 +503,7 @@ class Hive(Dialect):
|
||||||
exp.DataType.Type.ROWVERSION: "BINARY",
|
exp.DataType.Type.ROWVERSION: "BINARY",
|
||||||
exp.DataType.Type.TEXT: "STRING",
|
exp.DataType.Type.TEXT: "STRING",
|
||||||
exp.DataType.Type.TIME: "TIMESTAMP",
|
exp.DataType.Type.TIME: "TIMESTAMP",
|
||||||
|
exp.DataType.Type.TIMESTAMPNTZ: "TIMESTAMP",
|
||||||
exp.DataType.Type.TIMESTAMPTZ: "TIMESTAMP",
|
exp.DataType.Type.TIMESTAMPTZ: "TIMESTAMP",
|
||||||
exp.DataType.Type.UTINYINT: "SMALLINT",
|
exp.DataType.Type.UTINYINT: "SMALLINT",
|
||||||
exp.DataType.Type.VARBINARY: "BINARY",
|
exp.DataType.Type.VARBINARY: "BINARY",
|
||||||
|
|
|
@ -818,6 +818,7 @@ class MySQL(Dialect):
|
||||||
exp.DataType.Type.DATETIME2: "DATETIME",
|
exp.DataType.Type.DATETIME2: "DATETIME",
|
||||||
exp.DataType.Type.SMALLDATETIME: "DATETIME",
|
exp.DataType.Type.SMALLDATETIME: "DATETIME",
|
||||||
exp.DataType.Type.TIMESTAMP: "DATETIME",
|
exp.DataType.Type.TIMESTAMP: "DATETIME",
|
||||||
|
exp.DataType.Type.TIMESTAMPNTZ: "DATETIME",
|
||||||
exp.DataType.Type.TIMESTAMPTZ: "TIMESTAMP",
|
exp.DataType.Type.TIMESTAMPTZ: "TIMESTAMP",
|
||||||
exp.DataType.Type.TIMESTAMPLTZ: "TIMESTAMP",
|
exp.DataType.Type.TIMESTAMPLTZ: "TIMESTAMP",
|
||||||
}
|
}
|
||||||
|
|
|
@ -266,6 +266,7 @@ class Oracle(Dialect):
|
||||||
exp.DataType.Type.NCHAR: "NCHAR",
|
exp.DataType.Type.NCHAR: "NCHAR",
|
||||||
exp.DataType.Type.TEXT: "CLOB",
|
exp.DataType.Type.TEXT: "CLOB",
|
||||||
exp.DataType.Type.TIMETZ: "TIME",
|
exp.DataType.Type.TIMETZ: "TIME",
|
||||||
|
exp.DataType.Type.TIMESTAMPNTZ: "TIMESTAMP",
|
||||||
exp.DataType.Type.TIMESTAMPTZ: "TIMESTAMP",
|
exp.DataType.Type.TIMESTAMPTZ: "TIMESTAMP",
|
||||||
exp.DataType.Type.BINARY: "BLOB",
|
exp.DataType.Type.BINARY: "BLOB",
|
||||||
exp.DataType.Type.VARBINARY: "BLOB",
|
exp.DataType.Type.VARBINARY: "BLOB",
|
||||||
|
|
|
@ -539,6 +539,7 @@ class Postgres(Dialect):
|
||||||
exp.DataType.Type.VARBINARY: "BYTEA",
|
exp.DataType.Type.VARBINARY: "BYTEA",
|
||||||
exp.DataType.Type.ROWVERSION: "BYTEA",
|
exp.DataType.Type.ROWVERSION: "BYTEA",
|
||||||
exp.DataType.Type.DATETIME: "TIMESTAMP",
|
exp.DataType.Type.DATETIME: "TIMESTAMP",
|
||||||
|
exp.DataType.Type.TIMESTAMPNTZ: "TIMESTAMP",
|
||||||
exp.DataType.Type.BLOB: "BYTEA",
|
exp.DataType.Type.BLOB: "BYTEA",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -330,6 +330,8 @@ class Presto(Dialect):
|
||||||
"DATE_PARSE": build_formatted_time(exp.StrToTime, "presto"),
|
"DATE_PARSE": build_formatted_time(exp.StrToTime, "presto"),
|
||||||
"DATE_TRUNC": date_trunc_to_time,
|
"DATE_TRUNC": date_trunc_to_time,
|
||||||
"DAY_OF_WEEK": exp.DayOfWeekIso.from_arg_list,
|
"DAY_OF_WEEK": exp.DayOfWeekIso.from_arg_list,
|
||||||
|
"DOW": exp.DayOfWeekIso.from_arg_list,
|
||||||
|
"DOY": exp.DayOfYear.from_arg_list,
|
||||||
"ELEMENT_AT": lambda args: exp.Bracket(
|
"ELEMENT_AT": lambda args: exp.Bracket(
|
||||||
this=seq_get(args, 0), expressions=[seq_get(args, 1)], offset=1, safe=True
|
this=seq_get(args, 0), expressions=[seq_get(args, 1)], offset=1, safe=True
|
||||||
),
|
),
|
||||||
|
|
|
@ -1032,6 +1032,7 @@ class Snowflake(Dialect):
|
||||||
exp.DateStrToDate: datestrtodate_sql,
|
exp.DateStrToDate: datestrtodate_sql,
|
||||||
exp.DayOfMonth: rename_func("DAYOFMONTH"),
|
exp.DayOfMonth: rename_func("DAYOFMONTH"),
|
||||||
exp.DayOfWeek: rename_func("DAYOFWEEK"),
|
exp.DayOfWeek: rename_func("DAYOFWEEK"),
|
||||||
|
exp.DayOfWeekIso: rename_func("DAYOFWEEKISO"),
|
||||||
exp.DayOfYear: rename_func("DAYOFYEAR"),
|
exp.DayOfYear: rename_func("DAYOFYEAR"),
|
||||||
exp.Explode: rename_func("FLATTEN"),
|
exp.Explode: rename_func("FLATTEN"),
|
||||||
exp.Extract: rename_func("DATE_PART"),
|
exp.Extract: rename_func("DATE_PART"),
|
||||||
|
|
|
@ -910,6 +910,7 @@ class TSQL(Dialect):
|
||||||
COPY_PARAMS_EQ_REQUIRED = True
|
COPY_PARAMS_EQ_REQUIRED = True
|
||||||
PARSE_JSON_NAME = None
|
PARSE_JSON_NAME = None
|
||||||
EXCEPT_INTERSECT_SUPPORT_ALL_CLAUSE = False
|
EXCEPT_INTERSECT_SUPPORT_ALL_CLAUSE = False
|
||||||
|
ALTER_SET_TYPE = ""
|
||||||
|
|
||||||
EXPRESSIONS_WITHOUT_NESTED_CTES = {
|
EXPRESSIONS_WITHOUT_NESTED_CTES = {
|
||||||
exp.Create,
|
exp.Create,
|
||||||
|
|
|
@ -2869,6 +2869,10 @@ class LanguageProperty(Property):
|
||||||
arg_types = {"this": True}
|
arg_types = {"this": True}
|
||||||
|
|
||||||
|
|
||||||
|
class EnviromentProperty(Property):
|
||||||
|
arg_types = {"expressions": True}
|
||||||
|
|
||||||
|
|
||||||
# spark ddl
|
# spark ddl
|
||||||
class ClusteredByProperty(Property):
|
class ClusteredByProperty(Property):
|
||||||
arg_types = {"expressions": True, "sorted_by": False, "buckets": True}
|
arg_types = {"expressions": True, "sorted_by": False, "buckets": True}
|
||||||
|
|
|
@ -139,6 +139,7 @@ class Generator(metaclass=_Generator):
|
||||||
exp.DynamicProperty: lambda *_: "DYNAMIC",
|
exp.DynamicProperty: lambda *_: "DYNAMIC",
|
||||||
exp.EmptyProperty: lambda *_: "EMPTY",
|
exp.EmptyProperty: lambda *_: "EMPTY",
|
||||||
exp.EncodeColumnConstraint: lambda self, e: f"ENCODE {self.sql(e, 'this')}",
|
exp.EncodeColumnConstraint: lambda self, e: f"ENCODE {self.sql(e, 'this')}",
|
||||||
|
exp.EnviromentProperty: lambda self, e: f"ENVIRONMENT ({self.expressions(e, flat=True)})",
|
||||||
exp.EphemeralColumnConstraint: lambda self,
|
exp.EphemeralColumnConstraint: lambda self,
|
||||||
e: f"EPHEMERAL{(' ' + self.sql(e, 'this')) if e.this else ''}",
|
e: f"EPHEMERAL{(' ' + self.sql(e, 'this')) if e.this else ''}",
|
||||||
exp.ExcludeColumnConstraint: lambda self, e: f"EXCLUDE {self.sql(e, 'this').lstrip()}",
|
exp.ExcludeColumnConstraint: lambda self, e: f"EXCLUDE {self.sql(e, 'this').lstrip()}",
|
||||||
|
@ -543,6 +544,7 @@ class Generator(metaclass=_Generator):
|
||||||
exp.EmptyProperty: exp.Properties.Location.POST_SCHEMA,
|
exp.EmptyProperty: exp.Properties.Location.POST_SCHEMA,
|
||||||
exp.EncodeProperty: exp.Properties.Location.POST_EXPRESSION,
|
exp.EncodeProperty: exp.Properties.Location.POST_EXPRESSION,
|
||||||
exp.EngineProperty: exp.Properties.Location.POST_SCHEMA,
|
exp.EngineProperty: exp.Properties.Location.POST_SCHEMA,
|
||||||
|
exp.EnviromentProperty: exp.Properties.Location.POST_SCHEMA,
|
||||||
exp.ExecuteAsProperty: exp.Properties.Location.POST_SCHEMA,
|
exp.ExecuteAsProperty: exp.Properties.Location.POST_SCHEMA,
|
||||||
exp.ExternalProperty: exp.Properties.Location.POST_CREATE,
|
exp.ExternalProperty: exp.Properties.Location.POST_CREATE,
|
||||||
exp.FallbackProperty: exp.Properties.Location.POST_NAME,
|
exp.FallbackProperty: exp.Properties.Location.POST_NAME,
|
||||||
|
@ -1349,7 +1351,11 @@ class Generator(metaclass=_Generator):
|
||||||
return f"{left_quote}{this}{right_quote}{escape_sql}"
|
return f"{left_quote}{this}{right_quote}{escape_sql}"
|
||||||
|
|
||||||
def rawstring_sql(self, expression: exp.RawString) -> str:
|
def rawstring_sql(self, expression: exp.RawString) -> str:
|
||||||
string = self.escape_str(expression.this.replace("\\", "\\\\"), escape_backslash=False)
|
string = expression.this
|
||||||
|
if "\\" in self.dialect.tokenizer_class.STRING_ESCAPES:
|
||||||
|
string = string.replace("\\", "\\\\")
|
||||||
|
|
||||||
|
string = self.escape_str(string, escape_backslash=False)
|
||||||
return f"{self.dialect.QUOTE_START}{string}{self.dialect.QUOTE_END}"
|
return f"{self.dialect.QUOTE_START}{string}{self.dialect.QUOTE_END}"
|
||||||
|
|
||||||
def datatypeparam_sql(self, expression: exp.DataTypeParam) -> str:
|
def datatypeparam_sql(self, expression: exp.DataTypeParam) -> str:
|
||||||
|
@ -3340,7 +3346,8 @@ class Generator(metaclass=_Generator):
|
||||||
collate = f" COLLATE {collate}" if collate else ""
|
collate = f" COLLATE {collate}" if collate else ""
|
||||||
using = self.sql(expression, "using")
|
using = self.sql(expression, "using")
|
||||||
using = f" USING {using}" if using else ""
|
using = f" USING {using}" if using else ""
|
||||||
return f"ALTER COLUMN {this} {self.ALTER_SET_TYPE} {dtype}{collate}{using}"
|
alter_set_type = self.ALTER_SET_TYPE + " " if self.ALTER_SET_TYPE else ""
|
||||||
|
return f"ALTER COLUMN {this} {alter_set_type}{dtype}{collate}{using}"
|
||||||
|
|
||||||
default = self.sql(expression, "default")
|
default = self.sql(expression, "default")
|
||||||
if default:
|
if default:
|
||||||
|
|
|
@ -2,6 +2,7 @@ from sqlglot import exp
|
||||||
from sqlglot.optimizer.normalize import normalized
|
from sqlglot.optimizer.normalize import normalized
|
||||||
from sqlglot.optimizer.scope import build_scope, find_in_scope
|
from sqlglot.optimizer.scope import build_scope, find_in_scope
|
||||||
from sqlglot.optimizer.simplify import simplify
|
from sqlglot.optimizer.simplify import simplify
|
||||||
|
from sqlglot import Dialect
|
||||||
|
|
||||||
|
|
||||||
def pushdown_predicates(expression, dialect=None):
|
def pushdown_predicates(expression, dialect=None):
|
||||||
|
@ -20,8 +21,13 @@ def pushdown_predicates(expression, dialect=None):
|
||||||
Returns:
|
Returns:
|
||||||
sqlglot.Expression: optimized expression
|
sqlglot.Expression: optimized expression
|
||||||
"""
|
"""
|
||||||
|
from sqlglot.dialects.presto import Presto
|
||||||
|
|
||||||
root = build_scope(expression)
|
root = build_scope(expression)
|
||||||
|
|
||||||
|
dialect = Dialect.get_or_raise(dialect)
|
||||||
|
unnest_requires_cross_join = isinstance(dialect, Presto)
|
||||||
|
|
||||||
if root:
|
if root:
|
||||||
scope_ref_count = root.ref_count()
|
scope_ref_count = root.ref_count()
|
||||||
|
|
||||||
|
@ -35,12 +41,19 @@ def pushdown_predicates(expression, dialect=None):
|
||||||
}
|
}
|
||||||
|
|
||||||
# a right join can only push down to itself and not the source FROM table
|
# a right join can only push down to itself and not the source FROM table
|
||||||
|
# presto, trino and athena don't support inner joins where the RHS is an UNNEST expression
|
||||||
|
pushdown_allowed = True
|
||||||
for k, (node, source) in selected_sources.items():
|
for k, (node, source) in selected_sources.items():
|
||||||
parent = node.find_ancestor(exp.Join, exp.From)
|
parent = node.find_ancestor(exp.Join, exp.From)
|
||||||
if isinstance(parent, exp.Join) and parent.side == "RIGHT":
|
if isinstance(parent, exp.Join):
|
||||||
|
if parent.side == "RIGHT":
|
||||||
selected_sources = {k: (node, source)}
|
selected_sources = {k: (node, source)}
|
||||||
break
|
break
|
||||||
|
if isinstance(node, exp.Unnest) and unnest_requires_cross_join:
|
||||||
|
pushdown_allowed = False
|
||||||
|
break
|
||||||
|
|
||||||
|
if pushdown_allowed:
|
||||||
pushdown(where.this, selected_sources, scope_ref_count, dialect, join_index)
|
pushdown(where.this, selected_sources, scope_ref_count, dialect, join_index)
|
||||||
|
|
||||||
# joins should only pushdown into itself, not to other joins
|
# joins should only pushdown into itself, not to other joins
|
||||||
|
|
|
@ -963,6 +963,9 @@ class Parser(metaclass=_Parser):
|
||||||
"DISTSTYLE": lambda self: self._parse_property_assignment(exp.DistStyleProperty),
|
"DISTSTYLE": lambda self: self._parse_property_assignment(exp.DistStyleProperty),
|
||||||
"EMPTY": lambda self: self.expression(exp.EmptyProperty),
|
"EMPTY": lambda self: self.expression(exp.EmptyProperty),
|
||||||
"ENGINE": lambda self: self._parse_property_assignment(exp.EngineProperty),
|
"ENGINE": lambda self: self._parse_property_assignment(exp.EngineProperty),
|
||||||
|
"ENVIRONMENT": lambda self: self.expression(
|
||||||
|
exp.EnviromentProperty, expressions=self._parse_wrapped_csv(self._parse_assignment)
|
||||||
|
),
|
||||||
"EXECUTE": lambda self: self._parse_property_assignment(exp.ExecuteAsProperty),
|
"EXECUTE": lambda self: self._parse_property_assignment(exp.ExecuteAsProperty),
|
||||||
"EXTERNAL": lambda self: self.expression(exp.ExternalProperty),
|
"EXTERNAL": lambda self: self.expression(exp.ExternalProperty),
|
||||||
"FALLBACK": lambda self, **kwargs: self._parse_fallback(**kwargs),
|
"FALLBACK": lambda self, **kwargs: self._parse_fallback(**kwargs),
|
||||||
|
|
|
@ -926,17 +926,27 @@ def eliminate_join_marks(expression: exp.Expression) -> exp.Expression:
|
||||||
else:
|
else:
|
||||||
predicate_parent.replace(predicate_parent.left)
|
predicate_parent.replace(predicate_parent.left)
|
||||||
|
|
||||||
|
only_old_join_sources = old_joins.keys() - new_joins.keys()
|
||||||
|
|
||||||
if query_from.alias_or_name in new_joins:
|
if query_from.alias_or_name in new_joins:
|
||||||
only_old_joins = old_joins.keys() - new_joins.keys()
|
|
||||||
assert (
|
assert (
|
||||||
len(only_old_joins) >= 1
|
len(only_old_join_sources) >= 1
|
||||||
), "Cannot determine which table to use in the new FROM clause"
|
), "Cannot determine which table to use in the new FROM clause"
|
||||||
|
|
||||||
new_from_name = list(only_old_joins)[0]
|
new_from_name = list(only_old_join_sources)[0]
|
||||||
query.set("from", exp.From(this=old_joins[new_from_name].this))
|
query.set("from", exp.From(this=old_joins.pop(new_from_name).this))
|
||||||
|
only_old_join_sources.remove(new_from_name)
|
||||||
|
|
||||||
if new_joins:
|
if new_joins:
|
||||||
query.set("joins", list(new_joins.values()))
|
only_old_join_expressions = []
|
||||||
|
for old_join_source in only_old_join_sources:
|
||||||
|
old_join_expression = old_joins[old_join_source]
|
||||||
|
if not old_join_expression.kind:
|
||||||
|
old_join_expression.set("kind", "CROSS")
|
||||||
|
|
||||||
|
only_old_join_expressions.append(old_join_expression)
|
||||||
|
|
||||||
|
query.set("joins", list(new_joins.values()) + only_old_join_expressions)
|
||||||
|
|
||||||
if not where.this:
|
if not where.this:
|
||||||
where.pop()
|
where.pop()
|
||||||
|
|
|
@ -236,6 +236,10 @@ LANGUAGE js AS
|
||||||
self.validate_identity(
|
self.validate_identity(
|
||||||
"CREATE OR REPLACE VIEW test (tenant_id OPTIONS (description='Test description on table creation')) AS SELECT 1 AS tenant_id, 1 AS customer_id",
|
"CREATE OR REPLACE VIEW test (tenant_id OPTIONS (description='Test description on table creation')) AS SELECT 1 AS tenant_id, 1 AS customer_id",
|
||||||
)
|
)
|
||||||
|
self.validate_identity(
|
||||||
|
'SELECT r"\\t"',
|
||||||
|
"SELECT '\\\\t'",
|
||||||
|
)
|
||||||
self.validate_identity(
|
self.validate_identity(
|
||||||
"ARRAY(SELECT AS STRUCT e.x AS y, e.z AS bla FROM UNNEST(bob))::ARRAY<STRUCT<y STRING, bro NUMERIC>>",
|
"ARRAY(SELECT AS STRUCT e.x AS y, e.z AS bla FROM UNNEST(bob))::ARRAY<STRUCT<y STRING, bro NUMERIC>>",
|
||||||
"CAST(ARRAY(SELECT AS STRUCT e.x AS y, e.z AS bla FROM UNNEST(bob)) AS ARRAY<STRUCT<y STRING, bro NUMERIC>>)",
|
"CAST(ARRAY(SELECT AS STRUCT e.x AS y, e.z AS bla FROM UNNEST(bob)) AS ARRAY<STRUCT<y STRING, bro NUMERIC>>)",
|
||||||
|
@ -1023,8 +1027,8 @@ LANGUAGE js AS
|
||||||
r'r"""/\*.*\*/"""',
|
r'r"""/\*.*\*/"""',
|
||||||
write={
|
write={
|
||||||
"bigquery": r"'/\\*.*\\*/'",
|
"bigquery": r"'/\\*.*\\*/'",
|
||||||
"duckdb": r"'/\\*.*\\*/'",
|
"duckdb": r"'/\*.*\*/'",
|
||||||
"presto": r"'/\\*.*\\*/'",
|
"presto": r"'/\*.*\*/'",
|
||||||
"hive": r"'/\\*.*\\*/'",
|
"hive": r"'/\\*.*\\*/'",
|
||||||
"spark": r"'/\\*.*\\*/'",
|
"spark": r"'/\\*.*\\*/'",
|
||||||
},
|
},
|
||||||
|
@ -1033,8 +1037,8 @@ LANGUAGE js AS
|
||||||
r'R"""/\*.*\*/"""',
|
r'R"""/\*.*\*/"""',
|
||||||
write={
|
write={
|
||||||
"bigquery": r"'/\\*.*\\*/'",
|
"bigquery": r"'/\\*.*\\*/'",
|
||||||
"duckdb": r"'/\\*.*\\*/'",
|
"duckdb": r"'/\*.*\*/'",
|
||||||
"presto": r"'/\\*.*\\*/'",
|
"presto": r"'/\*.*\*/'",
|
||||||
"hive": r"'/\\*.*\\*/'",
|
"hive": r"'/\\*.*\\*/'",
|
||||||
"spark": r"'/\\*.*\\*/'",
|
"spark": r"'/\\*.*\\*/'",
|
||||||
},
|
},
|
||||||
|
|
|
@ -167,6 +167,7 @@ class TestClickhouse(Validator):
|
||||||
self.validate_identity(
|
self.validate_identity(
|
||||||
"CREATE MATERIALIZED VIEW test_view ON CLUSTER '{cluster}' (id UInt8) ENGINE=AggregatingMergeTree() ORDER BY tuple() AS SELECT * FROM test_data"
|
"CREATE MATERIALIZED VIEW test_view ON CLUSTER '{cluster}' (id UInt8) ENGINE=AggregatingMergeTree() ORDER BY tuple() AS SELECT * FROM test_data"
|
||||||
)
|
)
|
||||||
|
self.validate_identity("CREATE TABLE test (id UInt8) ENGINE=Null()")
|
||||||
self.validate_identity(
|
self.validate_identity(
|
||||||
"CREATE MATERIALIZED VIEW test_view ON CLUSTER cl1 TO table1 AS SELECT * FROM test_data"
|
"CREATE MATERIALIZED VIEW test_view ON CLUSTER cl1 TO table1 AS SELECT * FROM test_data"
|
||||||
)
|
)
|
||||||
|
|
|
@ -338,3 +338,8 @@ class TestDatabricks(Validator):
|
||||||
self.validate_identity(
|
self.validate_identity(
|
||||||
"ANALYZE TABLE ctlg.db.tbl PARTITION(foo = 'foo', bar = 'bar') COMPUTE STATISTICS NOSCAN"
|
"ANALYZE TABLE ctlg.db.tbl PARTITION(foo = 'foo', bar = 'bar') COMPUTE STATISTICS NOSCAN"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_udf_environment_property(self):
|
||||||
|
self.validate_identity(
|
||||||
|
"""CREATE FUNCTION a() ENVIRONMENT (dependencies = '["foo1==1", "foo2==2"]', environment_version = 'None')"""
|
||||||
|
)
|
||||||
|
|
|
@ -428,6 +428,7 @@ class TestDuckDB(Validator):
|
||||||
"SELECT STRFTIME(CAST('2020-01-01' AS TIMESTAMP), CONCAT('%Y', '%m'))",
|
"SELECT STRFTIME(CAST('2020-01-01' AS TIMESTAMP), CONCAT('%Y', '%m'))",
|
||||||
write={
|
write={
|
||||||
"duckdb": "SELECT STRFTIME(CAST('2020-01-01' AS TIMESTAMP), CONCAT('%Y', '%m'))",
|
"duckdb": "SELECT STRFTIME(CAST('2020-01-01' AS TIMESTAMP), CONCAT('%Y', '%m'))",
|
||||||
|
"spark": "SELECT DATE_FORMAT(CAST('2020-01-01' AS TIMESTAMP_NTZ), CONCAT(COALESCE('yyyy', ''), COALESCE('MM', '')))",
|
||||||
"tsql": "SELECT FORMAT(CAST('2020-01-01' AS DATETIME2), CONCAT('yyyy', 'MM'))",
|
"tsql": "SELECT FORMAT(CAST('2020-01-01' AS DATETIME2), CONCAT('yyyy', 'MM'))",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
@ -1110,6 +1111,28 @@ class TestDuckDB(Validator):
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
self.validate_all(
|
||||||
|
"SELECT TIMESTAMP 'foo'",
|
||||||
|
write={
|
||||||
|
"duckdb": "SELECT CAST('foo' AS TIMESTAMP)",
|
||||||
|
"hive": "SELECT CAST('foo' AS TIMESTAMP)",
|
||||||
|
"spark2": "SELECT CAST('foo' AS TIMESTAMP)",
|
||||||
|
"spark": "SELECT CAST('foo' AS TIMESTAMP_NTZ)",
|
||||||
|
"postgres": "SELECT CAST('foo' AS TIMESTAMP)",
|
||||||
|
"mysql": "SELECT CAST('foo' AS DATETIME)",
|
||||||
|
"clickhouse": "SELECT CAST('foo' AS Nullable(DateTime))",
|
||||||
|
"databricks": "SELECT CAST('foo' AS TIMESTAMP_NTZ)",
|
||||||
|
"snowflake": "SELECT CAST('foo' AS TIMESTAMPNTZ)",
|
||||||
|
"redshift": "SELECT CAST('foo' AS TIMESTAMP)",
|
||||||
|
"tsql": "SELECT CAST('foo' AS DATETIME2)",
|
||||||
|
"presto": "SELECT CAST('foo' AS TIMESTAMP)",
|
||||||
|
"trino": "SELECT CAST('foo' AS TIMESTAMP)",
|
||||||
|
"oracle": "SELECT CAST('foo' AS TIMESTAMP)",
|
||||||
|
"bigquery": "SELECT CAST('foo' AS DATETIME)",
|
||||||
|
"starrocks": "SELECT CAST('foo' AS DATETIME)",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
def test_sample(self):
|
def test_sample(self):
|
||||||
self.validate_identity(
|
self.validate_identity(
|
||||||
"SELECT * FROM tbl USING SAMPLE 5",
|
"SELECT * FROM tbl USING SAMPLE 5",
|
||||||
|
|
|
@ -1311,7 +1311,7 @@ COMMENT='客户账户表'"""
|
||||||
|
|
||||||
def test_timestamp_trunc(self):
|
def test_timestamp_trunc(self):
|
||||||
hive_dialects = ("spark", "databricks")
|
hive_dialects = ("spark", "databricks")
|
||||||
for dialect in ("postgres", "snowflake", "duckdb", *hive_dialects):
|
for dialect in ("postgres", "snowflake", *hive_dialects):
|
||||||
for unit in (
|
for unit in (
|
||||||
"SECOND",
|
"SECOND",
|
||||||
"DAY",
|
"DAY",
|
||||||
|
|
|
@ -1022,6 +1022,39 @@ class TestSnowflake(Validator):
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
self.validate_all(
|
||||||
|
"DAYOFWEEKISO(foo)",
|
||||||
|
read={
|
||||||
|
"presto": "DAY_OF_WEEK(foo)",
|
||||||
|
"trino": "DAY_OF_WEEK(foo)",
|
||||||
|
},
|
||||||
|
write={
|
||||||
|
"snowflake": "DAYOFWEEKISO(foo)",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
self.validate_all(
|
||||||
|
"DAYOFWEEKISO(foo)",
|
||||||
|
read={
|
||||||
|
"presto": "DOW(foo)",
|
||||||
|
"trino": "DOW(foo)",
|
||||||
|
},
|
||||||
|
write={
|
||||||
|
"snowflake": "DAYOFWEEKISO(foo)",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
self.validate_all(
|
||||||
|
"DAYOFYEAR(foo)",
|
||||||
|
read={
|
||||||
|
"presto": "DOY(foo)",
|
||||||
|
"trino": "DOY(foo)",
|
||||||
|
},
|
||||||
|
write={
|
||||||
|
"snowflake": "DAYOFYEAR(foo)",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
def test_null_treatment(self):
|
def test_null_treatment(self):
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
r"SELECT FIRST_VALUE(TABLE1.COLUMN1) OVER (PARTITION BY RANDOM_COLUMN1, RANDOM_COLUMN2 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS MY_ALIAS FROM TABLE1",
|
r"SELECT FIRST_VALUE(TABLE1.COLUMN1) OVER (PARTITION BY RANDOM_COLUMN1, RANDOM_COLUMN2 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS MY_ALIAS FROM TABLE1",
|
||||||
|
|
|
@ -1062,6 +1062,16 @@ WHERE
|
||||||
"tsql": "ALTER TABLE a ADD b INTEGER, c INTEGER",
|
"tsql": "ALTER TABLE a ADD b INTEGER, c INTEGER",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
self.validate_all(
|
||||||
|
"ALTER TABLE a ALTER COLUMN b INTEGER",
|
||||||
|
read={
|
||||||
|
"": "ALTER TABLE a ALTER COLUMN b INT",
|
||||||
|
},
|
||||||
|
write={
|
||||||
|
"": "ALTER TABLE a ALTER COLUMN b SET DATA TYPE INT",
|
||||||
|
"tsql": "ALTER TABLE a ALTER COLUMN b INTEGER",
|
||||||
|
},
|
||||||
|
)
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
"CREATE TABLE #mytemp (a INTEGER, b CHAR(2), c TIME(4), d FLOAT(24))",
|
"CREATE TABLE #mytemp (a INTEGER, b CHAR(2), c TIME(4), d FLOAT(24))",
|
||||||
write={
|
write={
|
||||||
|
|
27
tests/fixtures/optimizer/pushdown_predicates.sql
vendored
27
tests/fixtures/optimizer/pushdown_predicates.sql
vendored
|
@ -44,3 +44,30 @@ SELECT x.cnt AS cnt FROM (SELECT COUNT(1) AS cnt FROM x AS x HAVING COUNT(1) > 0
|
||||||
-- Pushdown predicate to HAVING (DNF)
|
-- Pushdown predicate to HAVING (DNF)
|
||||||
SELECT x.cnt AS cnt FROM (SELECT COUNT(1) AS cnt, COUNT(x.a) AS cnt_a, COUNT(x.b) AS cnt_b FROM x AS x) AS x WHERE (x.cnt_a > 0 AND x.cnt_b > 0) OR x.cnt > 0;
|
SELECT x.cnt AS cnt FROM (SELECT COUNT(1) AS cnt, COUNT(x.a) AS cnt_a, COUNT(x.b) AS cnt_b FROM x AS x) AS x WHERE (x.cnt_a > 0 AND x.cnt_b > 0) OR x.cnt > 0;
|
||||||
SELECT x.cnt AS cnt FROM (SELECT COUNT(1) AS cnt, COUNT(x.a) AS cnt_a, COUNT(x.b) AS cnt_b FROM x AS x HAVING COUNT(1) > 0 OR (COUNT(x.a) > 0 AND COUNT(x.b) > 0)) AS x WHERE x.cnt > 0 OR (x.cnt_a > 0 AND x.cnt_b > 0);
|
SELECT x.cnt AS cnt FROM (SELECT COUNT(1) AS cnt, COUNT(x.a) AS cnt_a, COUNT(x.b) AS cnt_b FROM x AS x HAVING COUNT(1) > 0 OR (COUNT(x.a) > 0 AND COUNT(x.b) > 0)) AS x WHERE x.cnt > 0 OR (x.cnt_a > 0 AND x.cnt_b > 0);
|
||||||
|
|
||||||
|
SELECT x.a, u.val FROM x AS x CROSS JOIN UNNEST(ARRAY[0, 1]) AS u("val") WHERE x.a > u.val;
|
||||||
|
SELECT x.a, u.val FROM x AS x JOIN UNNEST(ARRAY(0, 1)) AS u("val") ON u.val < x.a WHERE TRUE;
|
||||||
|
|
||||||
|
# dialect: presto
|
||||||
|
SELECT x.a, u.val FROM x AS x CROSS JOIN UNNEST(ARRAY[0, 1]) AS u("val") WHERE x.a > u.val;
|
||||||
|
SELECT x.a, u.val FROM x AS x CROSS JOIN UNNEST(ARRAY[0, 1]) AS u("val") WHERE x.a > u.val;
|
||||||
|
|
||||||
|
# dialect: trino
|
||||||
|
SELECT x.a, u.val FROM x AS x CROSS JOIN UNNEST(ARRAY[0, 1]) AS u("val") WHERE x.a > u.val;
|
||||||
|
SELECT x.a, u.val FROM x AS x CROSS JOIN UNNEST(ARRAY[0, 1]) AS u("val") WHERE x.a > u.val;
|
||||||
|
|
||||||
|
# dialect: athena
|
||||||
|
SELECT x.a, u.val FROM x AS x CROSS JOIN UNNEST(ARRAY[0, 1]) AS u("val") WHERE x.a > u.val;
|
||||||
|
SELECT x.a, u.val FROM x AS x CROSS JOIN UNNEST(ARRAY[0, 1]) AS u("val") WHERE x.a > u.val;
|
||||||
|
|
||||||
|
# dialect: presto
|
||||||
|
SELECT x.a, u.val FROM UNNEST(ARRAY[0, 1]) AS u("val") CROSS JOIN x AS x WHERE x.a > u.val;
|
||||||
|
SELECT x.a, u.val FROM UNNEST(ARRAY[0, 1]) AS u("val") JOIN x AS x ON u.val < x.a WHERE TRUE;
|
||||||
|
|
||||||
|
# dialect: trino
|
||||||
|
SELECT x.a, u.val FROM UNNEST(ARRAY[0, 1]) AS u("val") CROSS JOIN x AS x WHERE x.a > u.val;
|
||||||
|
SELECT x.a, u.val FROM UNNEST(ARRAY[0, 1]) AS u("val") JOIN x AS x ON u.val < x.a WHERE TRUE;
|
||||||
|
|
||||||
|
# dialect: athena
|
||||||
|
SELECT x.a, u.val FROM UNNEST(ARRAY[0, 1]) AS u("val") CROSS JOIN x AS x WHERE x.a > u.val;
|
||||||
|
SELECT x.a, u.val FROM UNNEST(ARRAY[0, 1]) AS u("val") JOIN x AS x ON u.val < x.a WHERE TRUE;
|
||||||
|
|
|
@ -248,6 +248,13 @@ class TestTransforms(unittest.TestCase):
|
||||||
"SELECT * FROM table1 LEFT JOIN table2 ON table1.col = table2.col1 + 25",
|
"SELECT * FROM table1 LEFT JOIN table2 ON table1.col = table2.col1 + 25",
|
||||||
dialect,
|
dialect,
|
||||||
)
|
)
|
||||||
|
# eliminate join mark while preserving non-participating joins
|
||||||
|
self.validate(
|
||||||
|
eliminate_join_marks,
|
||||||
|
"SELECT * FROM a, b, c WHERE a.id = b.id AND b.id(+) = c.id",
|
||||||
|
"SELECT * FROM a LEFT JOIN b ON b.id = c.id CROSS JOIN c WHERE a.id = b.id",
|
||||||
|
dialect,
|
||||||
|
)
|
||||||
|
|
||||||
alias = "AS " if dialect != "oracle" else ""
|
alias = "AS " if dialect != "oracle" else ""
|
||||||
self.validate(
|
self.validate(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue