Merging upstream version 18.17.0.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
fdf9ca761f
commit
04c9be45a8
90 changed files with 46581 additions and 43319 deletions
|
@ -25,8 +25,8 @@ repos:
|
||||||
files: ^(sqlglot/|tests/|setup.py)
|
files: ^(sqlglot/|tests/|setup.py)
|
||||||
- id: mypy
|
- id: mypy
|
||||||
name: mypy
|
name: mypy
|
||||||
entry: mypy
|
entry: mypy sqlglot tests
|
||||||
language: system
|
language: system
|
||||||
types: [ python ]
|
types: [ python ]
|
||||||
files: ^(sqlglot/|tests/)
|
files: ^(sqlglot/|tests/)
|
||||||
require_serial: true
|
pass_filenames: false
|
||||||
|
|
78
CHANGELOG.md
78
CHANGELOG.md
|
@ -1,6 +1,78 @@
|
||||||
Changelog
|
Changelog
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
## [v18.16.1] - 2023-10-21
|
||||||
|
### :sparkles: New Features
|
||||||
|
- [`16fb83f`](https://github.com/tobymao/sqlglot/commit/16fb83ff3f9a2bd77ce3edfa6f4932916a033d4c) - **bigquery**: default collate closes [#2434](https://github.com/tobymao/sqlglot/pull/2434) *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
|
||||||
|
### :bug: Bug Fixes
|
||||||
|
- [`87efe41`](https://github.com/tobymao/sqlglot/commit/87efe41839a4f8e14e9b5dc0810156d06ae053a7) - **duckdb**: regexp_replace modifiers closes [#2436](https://github.com/tobymao/sqlglot/pull/2436) *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
- [`be38964`](https://github.com/tobymao/sqlglot/commit/be3896441016f0356ca3d3c02f74deed6a63879e) - infinite loop due to uppercase expansion *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
|
||||||
|
|
||||||
|
## [v18.16.0] - 2023-10-21
|
||||||
|
### :bug: Bug Fixes
|
||||||
|
- [`5b388bc`](https://github.com/tobymao/sqlglot/commit/5b388bc72aa8e9e01561b077ddbaeb1935894403) - attach comments to Union expressions *(PR [#2432](https://github.com/tobymao/sqlglot/pull/2432) by [@GeorgeSittas](https://github.com/GeorgeSittas))*
|
||||||
|
- :arrow_lower_right: *fixes issue [#2430](undefined) opened by [@SudarshanVS](https://github.com/SudarshanVS)*
|
||||||
|
- [`e6721d1`](https://github.com/tobymao/sqlglot/commit/e6721d17d111b952c717e8a21b176e08a68226a7) - subquery lineage closes [#2431](https://github.com/tobymao/sqlglot/pull/2431) *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
- [`b4f76eb`](https://github.com/tobymao/sqlglot/commit/b4f76eb6ff7a4bdb377c3aac8cbde886c3894416) - **clickhouse**: neq bug closes [#2435](https://github.com/tobymao/sqlglot/pull/2435) *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
|
||||||
|
|
||||||
|
## [v18.15.1] - 2023-10-19
|
||||||
|
### :sparkles: New Features
|
||||||
|
- [`469226b`](https://github.com/tobymao/sqlglot/commit/469226b31443038ff2c28ce1a03c8c96df598f44) - **snowflake**: support for ALTER TABLE SWAP WITH *(PR [#2420](https://github.com/tobymao/sqlglot/pull/2420) by [@teraamp](https://github.com/teraamp))*
|
||||||
|
- [`13a5df2`](https://github.com/tobymao/sqlglot/commit/13a5df2d20fa57efd4699ce93d98789666131173) - **lineage**: lineage from UDTFs that use columns *(PR [#2424](https://github.com/tobymao/sqlglot/pull/2424) by [@edpaget](https://github.com/edpaget))*
|
||||||
|
- [`8d7e4e9`](https://github.com/tobymao/sqlglot/commit/8d7e4e9ec0ef639376d1b4db55f6578e1eb431d1) - show version in cli *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
- [`88ddaa7`](https://github.com/tobymao/sqlglot/commit/88ddaa7f49327b37acdb6cd87b4189b872b964c1) - make data type build more flexible *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
|
||||||
|
### :bug: Bug Fixes
|
||||||
|
- [`e1186a5`](https://github.com/tobymao/sqlglot/commit/e1186a5c4c75e876aedb47185beef50396089650) - **redshift**: generate the IDENTITY constraint correctly *(PR [#2418](https://github.com/tobymao/sqlglot/pull/2418) by [@GeorgeSittas](https://github.com/GeorgeSittas))*
|
||||||
|
- [`a00b5b5`](https://github.com/tobymao/sqlglot/commit/a00b5b56d5c2d197bb1d1d56bfeedb9c7ab40ddf) - smarter detection of timestamp() fallback to cast *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
- [`c5028d4`](https://github.com/tobymao/sqlglot/commit/c5028d4a651f80aa2599cd69bfe486f8b7ce5d0f) - **teradata**: teradata only supports top closes [#2419](https://github.com/tobymao/sqlglot/pull/2419) *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
- [`3173683`](https://github.com/tobymao/sqlglot/commit/31736832153872b0dcab067cea8b76970369e58a) - **snowflake**: map DAYOF[MONTH|YEAR] back to itself fixes [#2422](https://github.com/tobymao/sqlglot/pull/2422) *(commit by [@GeorgeSittas](https://github.com/GeorgeSittas))*
|
||||||
|
- [`e612089`](https://github.com/tobymao/sqlglot/commit/e6120897fb46c4bbc90184d177d45df264e49768) - ts_or_ds reparse closes [#2428](https://github.com/tobymao/sqlglot/pull/2428) *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
|
||||||
|
### :wrench: Chores
|
||||||
|
- [`fda3576`](https://github.com/tobymao/sqlglot/commit/fda35766ee93e2e01ff1ee53ae804d6fe5109ce3) - fix type hint of swaptable_sql *(commit by [@GeorgeSittas](https://github.com/GeorgeSittas))*
|
||||||
|
|
||||||
|
|
||||||
|
## [v18.15.0] - 2023-10-17
|
||||||
|
### :bug: Bug Fixes
|
||||||
|
- [`d75d760`](https://github.com/tobymao/sqlglot/commit/d75d760778973d88325e0b6d167243385140d698) - bigquery parse_json wide_number_mode *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
|
||||||
|
|
||||||
|
## [v18.14.0] - 2023-10-17
|
||||||
|
### :bug: Bug Fixes
|
||||||
|
- [`4163d5f`](https://github.com/tobymao/sqlglot/commit/4163d5f8ad1d926830a4273d1e8f3ec4a059b13b) - make `RegexpILike` a subclass of `Binary` as well as `Func` *(PR [#2404](https://github.com/tobymao/sqlglot/pull/2404) by [@samuelcolvin](https://github.com/samuelcolvin))*
|
||||||
|
- [`de0cd98`](https://github.com/tobymao/sqlglot/commit/de0cd98ff682868ecb2299425f52ea45a9b88f27) - clickhouse any -> has closes [#2408](https://github.com/tobymao/sqlglot/pull/2408) *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
- [`463b6d6`](https://github.com/tobymao/sqlglot/commit/463b6d63ecdb6a0cf9b44716494aaad7f3efb26b) - **redshift**: add a missing retreat in the group by parser *(PR [#2412](https://github.com/tobymao/sqlglot/pull/2412) by [@GeorgeSittas](https://github.com/GeorgeSittas))*
|
||||||
|
- :arrow_lower_right: *fixes issue [#2411](undefined) opened by [@mrmammadov](https://github.com/mrmammadov)*
|
||||||
|
- [`f8109be`](https://github.com/tobymao/sqlglot/commit/f8109be1b0b620c48db30b82519a5d17b992cce7) - **bigquery**: revert commit 09e2eeb, only reduce NULL for BQ at sqlgen time *(PR [#2414](https://github.com/tobymao/sqlglot/pull/2414) by [@GeorgeSittas](https://github.com/GeorgeSittas))*
|
||||||
|
- [`f970f7c`](https://github.com/tobymao/sqlglot/commit/f970f7cd424747c4e18cd902cc99f55383e79dbc) - **clickhouse**: map RegexpILike to match *(PR [#2407](https://github.com/tobymao/sqlglot/pull/2407) by [@GeorgeSittas](https://github.com/GeorgeSittas))*
|
||||||
|
- :arrow_lower_right: *fixes issue [#2406](undefined) opened by [@samuelcolvin](https://github.com/samuelcolvin)*
|
||||||
|
- [`1c8883f`](https://github.com/tobymao/sqlglot/commit/1c8883fa66fdc95c8166a7fba4d443dca6e8fd86) - clickhouse any transpilation closes [#2408](https://github.com/tobymao/sqlglot/pull/2408) *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
- [`586de82`](https://github.com/tobymao/sqlglot/commit/586de8263b577e791355db39e9e3a0526fd7a1fc) - casting *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
- [`d9958f9`](https://github.com/tobymao/sqlglot/commit/d9958f9438eecf8137361ab76f02acda63e59790) - presto/trino limit can only contain literals *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
- [`7744648`](https://github.com/tobymao/sqlglot/commit/77446481dd59c213368fe554e8011e9a7f5c0f71) - trino view column and partition column *(PR [#2416](https://github.com/tobymao/sqlglot/pull/2416) by [@eakmanrq](https://github.com/eakmanrq))*
|
||||||
|
|
||||||
|
|
||||||
|
## [v18.13.0] - 2023-10-13
|
||||||
|
### :sparkles: New Features
|
||||||
|
- [`e2e960a`](https://github.com/tobymao/sqlglot/commit/e2e960acfdd02cbb22689f1f0f5f00d50e4a537e) - **duckdb**: add parsing support for timestamp types with unit suffixes *(PR [#2400](https://github.com/tobymao/sqlglot/pull/2400) by [@cpcloud](https://github.com/cpcloud))*
|
||||||
|
- [`f024ac5`](https://github.com/tobymao/sqlglot/commit/f024ac5c7321bfdc605dc8bae72d96f1349bd485) - redshift approximate count distinct *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
|
||||||
|
### :bug: Bug Fixes
|
||||||
|
- [`d7021d1`](https://github.com/tobymao/sqlglot/commit/d7021d1609b44b9a9fec5d09b5cb862162a3280b) - **optimizer**: don't propagate equality constraints from IF/CASE outwards *(PR [#2396](https://github.com/tobymao/sqlglot/pull/2396) by [@GeorgeSittas](https://github.com/GeorgeSittas))*
|
||||||
|
- [`ed45fad`](https://github.com/tobymao/sqlglot/commit/ed45fadedb90e3e58e67e47f19091ff147a63ff6) - **teradata**: FOR in LOCKING ROW FOR ACCESS is optional *(PR [#2402](https://github.com/tobymao/sqlglot/pull/2402) by [@GeorgeSittas](https://github.com/GeorgeSittas))*
|
||||||
|
- :arrow_lower_right: *fixes issue [#2401](undefined) opened by [@hsheth2](https://github.com/hsheth2)*
|
||||||
|
|
||||||
|
### :recycle: Refactors
|
||||||
|
- [`d83f242`](https://github.com/tobymao/sqlglot/commit/d83f242420e4feaa950244322806678ad868cedf) - split out when matched *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
|
||||||
|
### :wrench: Chores
|
||||||
|
- [`85a16b1`](https://github.com/tobymao/sqlglot/commit/85a16b16ab7ead731ab255fdb8efb13558d0b232) - remove generic schema type *(PR [#2399](https://github.com/tobymao/sqlglot/pull/2399) by [@GeorgeSittas](https://github.com/GeorgeSittas))*
|
||||||
|
|
||||||
|
|
||||||
## [v18.12.0] - 2023-10-10
|
## [v18.12.0] - 2023-10-10
|
||||||
### :boom: BREAKING CHANGES
|
### :boom: BREAKING CHANGES
|
||||||
- due to [`28308da`](https://github.com/tobymao/sqlglot/commit/28308dae5ab7a0aff3ca2afeff88fa4554babba3) - support spark trycast, treat databricks as strict_cast closes [#2389](https://github.com/tobymao/sqlglot/pull/2389) *(commit by [@tobymao](https://github.com/tobymao))*:
|
- due to [`28308da`](https://github.com/tobymao/sqlglot/commit/28308dae5ab7a0aff3ca2afeff88fa4554babba3) - support spark trycast, treat databricks as strict_cast closes [#2389](https://github.com/tobymao/sqlglot/pull/2389) *(commit by [@tobymao](https://github.com/tobymao))*:
|
||||||
|
@ -1700,3 +1772,9 @@ Changelog
|
||||||
[v18.11.5]: https://github.com/tobymao/sqlglot/compare/v18.11.4...v18.11.5
|
[v18.11.5]: https://github.com/tobymao/sqlglot/compare/v18.11.4...v18.11.5
|
||||||
[v18.11.6]: https://github.com/tobymao/sqlglot/compare/v18.11.5...v18.11.6
|
[v18.11.6]: https://github.com/tobymao/sqlglot/compare/v18.11.5...v18.11.6
|
||||||
[v18.12.0]: https://github.com/tobymao/sqlglot/compare/v18.11.6...v18.12.0
|
[v18.12.0]: https://github.com/tobymao/sqlglot/compare/v18.11.6...v18.12.0
|
||||||
|
[v18.13.0]: https://github.com/tobymao/sqlglot/compare/v18.12.0...v18.13.0
|
||||||
|
[v18.14.0]: https://github.com/tobymao/sqlglot/compare/v18.13.0...v18.14.0
|
||||||
|
[v18.15.0]: https://github.com/tobymao/sqlglot/compare/v18.14.0...v18.15.0
|
||||||
|
[v18.15.1]: https://github.com/tobymao/sqlglot/compare/v18.15.0...v18.15.1
|
||||||
|
[v18.16.0]: https://github.com/tobymao/sqlglot/compare/v18.15.1...v18.16.0
|
||||||
|
[v18.16.1]: https://github.com/tobymao/sqlglot/compare/v18.16.0...v18.16.1
|
File diff suppressed because one or more lines are too long
|
@ -76,8 +76,8 @@
|
||||||
</span><span id="L-12"><a href="#L-12"><span class="linenos">12</span></a><span class="n">__version_tuple__</span><span class="p">:</span> <span class="n">VERSION_TUPLE</span>
|
</span><span id="L-12"><a href="#L-12"><span class="linenos">12</span></a><span class="n">__version_tuple__</span><span class="p">:</span> <span class="n">VERSION_TUPLE</span>
|
||||||
</span><span id="L-13"><a href="#L-13"><span class="linenos">13</span></a><span class="n">version_tuple</span><span class="p">:</span> <span class="n">VERSION_TUPLE</span>
|
</span><span id="L-13"><a href="#L-13"><span class="linenos">13</span></a><span class="n">version_tuple</span><span class="p">:</span> <span class="n">VERSION_TUPLE</span>
|
||||||
</span><span id="L-14"><a href="#L-14"><span class="linenos">14</span></a>
|
</span><span id="L-14"><a href="#L-14"><span class="linenos">14</span></a>
|
||||||
</span><span id="L-15"><a href="#L-15"><span class="linenos">15</span></a><span class="n">__version__</span> <span class="o">=</span> <span class="n">version</span> <span class="o">=</span> <span class="s1">'18.12.0'</span>
|
</span><span id="L-15"><a href="#L-15"><span class="linenos">15</span></a><span class="n">__version__</span> <span class="o">=</span> <span class="n">version</span> <span class="o">=</span> <span class="s1">'18.16.1'</span>
|
||||||
</span><span id="L-16"><a href="#L-16"><span class="linenos">16</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">18</span><span class="p">,</span> <span class="mi">12</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
</span><span id="L-16"><a href="#L-16"><span class="linenos">16</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">18</span><span class="p">,</span> <span class="mi">16</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -97,7 +97,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">'18.12.0'</span>
|
<span class="default_value">'18.16.1'</span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -109,7 +109,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">(18, 12, 0)</span>
|
<span class="default_value">(18, 16, 1)</span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -777,7 +777,7 @@
|
||||||
<div class="attr function">
|
<div class="attr function">
|
||||||
|
|
||||||
<span class="def">def</span>
|
<span class="def">def</span>
|
||||||
<span class="name">createDataFrame</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">data</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140180622968000'</span><span class="o">></span><span class="p">],</span> <span class="n">List</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140180622968000'</span><span class="o">></span><span class="p">],</span> <span class="n">Tuple</span><span class="p">]]</span>,</span><span class="param"> <span class="n">schema</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140180622557920'</span><span class="o">></span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">samplingRatio</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">float</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">verifySchema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span></span><span class="return-annotation">) -> <span class="n"><a href="#DataFrame">DataFrame</a></span>:</span></span>
|
<span class="name">createDataFrame</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">data</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140452315022240'</span><span class="o">></span><span class="p">],</span> <span class="n">List</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140452315022240'</span><span class="o">></span><span class="p">],</span> <span class="n">Tuple</span><span class="p">]]</span>,</span><span class="param"> <span class="n">schema</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140452314825728'</span><span class="o">></span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">samplingRatio</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">float</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">verifySchema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span></span><span class="return-annotation">) -> <span class="n"><a href="#DataFrame">DataFrame</a></span>:</span></span>
|
||||||
|
|
||||||
<label class="view-source-button" for="SparkSession.createDataFrame-view-source"><span>View Source</span></label>
|
<label class="view-source-button" for="SparkSession.createDataFrame-view-source"><span>View Source</span></label>
|
||||||
|
|
||||||
|
@ -1829,7 +1829,7 @@
|
||||||
<input id="DataFrame.__init__-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
<input id="DataFrame.__init__-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||||
<div class="attr function">
|
<div class="attr function">
|
||||||
|
|
||||||
<span class="name">DataFrame</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">spark</span><span class="p">:</span> <span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140180625818192'</span><span class="o">></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#Select">sqlglot.expressions.Select</a></span>,</span><span class="param"> <span class="n">branch_id</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">sequence_id</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">last_op</span><span class="p">:</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">dataframe</span><span class="o">.</span><span class="n">sql</span><span class="o">.</span><span class="n">operations</span><span class="o">.</span><span class="n">Operation</span> <span class="o">=</span> <span class="o"><</span><span class="n">Operation</span><span class="o">.</span><span class="n">INIT</span><span class="p">:</span> <span class="o">-</span><span class="mi">1</span><span class="o">></span>,</span><span class="param"> <span class="n">pending_hints</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="n"><a href="../expressions.html#Expression">sqlglot.expressions.Expression</a></span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">output_expression_container</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140180626003792'</span><span class="o">></span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="o">**</span><span class="n">kwargs</span></span>)</span>
|
<span class="name">DataFrame</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">spark</span><span class="p">:</span> <span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140452319856048'</span><span class="o">></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#Select">sqlglot.expressions.Select</a></span>,</span><span class="param"> <span class="n">branch_id</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">sequence_id</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">last_op</span><span class="p">:</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">dataframe</span><span class="o">.</span><span class="n">sql</span><span class="o">.</span><span class="n">operations</span><span class="o">.</span><span class="n">Operation</span> <span class="o">=</span> <span class="o"><</span><span class="n">Operation</span><span class="o">.</span><span class="n">INIT</span><span class="p">:</span> <span class="o">-</span><span class="mi">1</span><span class="o">></span>,</span><span class="param"> <span class="n">pending_hints</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="n"><a href="../expressions.html#Expression">sqlglot.expressions.Expression</a></span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">output_expression_container</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140452320025888'</span><span class="o">></span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="o">**</span><span class="n">kwargs</span></span>)</span>
|
||||||
|
|
||||||
<label class="view-source-button" for="DataFrame.__init__-view-source"><span>View Source</span></label>
|
<label class="view-source-button" for="DataFrame.__init__-view-source"><span>View Source</span></label>
|
||||||
|
|
||||||
|
@ -2018,7 +2018,7 @@
|
||||||
<div class="attr function">
|
<div class="attr function">
|
||||||
|
|
||||||
<span class="def">def</span>
|
<span class="def">def</span>
|
||||||
<span class="name">sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">dialect</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140180622657328'</span><span class="o">></span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">optimize</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>,</span><span class="param"> <span class="o">**</span><span class="n">kwargs</span></span><span class="return-annotation">) -> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>:</span></span>
|
<span class="name">sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">dialect</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140452315728432'</span><span class="o">></span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">optimize</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>,</span><span class="param"> <span class="o">**</span><span class="n">kwargs</span></span><span class="return-annotation">) -> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>:</span></span>
|
||||||
|
|
||||||
<label class="view-source-button" for="DataFrame.sql-view-source"><span>View Source</span></label>
|
<label class="view-source-button" for="DataFrame.sql-view-source"><span>View Source</span></label>
|
||||||
|
|
||||||
|
@ -2773,7 +2773,7 @@ is unlikely to come up.</p>
|
||||||
<div class="decorator">@operation(Operation.FROM)</div>
|
<div class="decorator">@operation(Operation.FROM)</div>
|
||||||
|
|
||||||
<span class="def">def</span>
|
<span class="def">def</span>
|
||||||
<span class="name">fillna</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">value</span><span class="p">:</span> <span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140180621314368'</span><span class="o">></span>,</span><span class="param"> <span class="n">subset</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><span class="p">],</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">NoneType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">) -> <span class="n"><a href="#DataFrame">DataFrame</a></span>:</span></span>
|
<span class="name">fillna</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">value</span><span class="p">:</span> <span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140452315832640'</span><span class="o">></span>,</span><span class="param"> <span class="n">subset</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="o">...</span><span class="p">],</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">NoneType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">) -> <span class="n"><a href="#DataFrame">DataFrame</a></span>:</span></span>
|
||||||
|
|
||||||
<label class="view-source-button" for="DataFrame.fillna-view-source"><span>View Source</span></label>
|
<label class="view-source-button" for="DataFrame.fillna-view-source"><span>View Source</span></label>
|
||||||
|
|
||||||
|
@ -2842,7 +2842,7 @@ and check if it matches the type of the value provided. If not then make it null
|
||||||
<div class="decorator">@operation(Operation.FROM)</div>
|
<div class="decorator">@operation(Operation.FROM)</div>
|
||||||
|
|
||||||
<span class="def">def</span>
|
<span class="def">def</span>
|
||||||
<span class="name">replace</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">to_replace</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">bool</span><span class="p">,</span> <span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="n">List</span><span class="p">,</span> <span class="n">Dict</span><span class="p">]</span>,</span><span class="param"> <span class="n">value</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">bool</span><span class="p">,</span> <span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="n">List</span><span class="p">,</span> <span class="n">NoneType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">subset</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="n">Collection</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140180621772976'</span><span class="o">></span><span class="p">],</span> <span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140180621772976'</span><span class="o">></span><span class="p">,</span> <span class="n">NoneType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">) -> <span class="n"><a href="#DataFrame">DataFrame</a></span>:</span></span>
|
<span class="name">replace</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">to_replace</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">bool</span><span class="p">,</span> <span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="n">List</span><span class="p">,</span> <span class="n">Dict</span><span class="p">]</span>,</span><span class="param"> <span class="n">value</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">bool</span><span class="p">,</span> <span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="n">List</span><span class="p">,</span> <span class="n">NoneType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">subset</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="n">Collection</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140452313861280'</span><span class="o">></span><span class="p">],</span> <span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140452313861280'</span><span class="o">></span><span class="p">,</span> <span class="n">NoneType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">) -> <span class="n"><a href="#DataFrame">DataFrame</a></span>:</span></span>
|
||||||
|
|
||||||
<label class="view-source-button" for="DataFrame.replace-view-source"><span>View Source</span></label>
|
<label class="view-source-button" for="DataFrame.replace-view-source"><span>View Source</span></label>
|
||||||
|
|
||||||
|
@ -3047,7 +3047,7 @@ and check if it matches the type of the value provided. If not then make it null
|
||||||
<div class="decorator">@operation(Operation.NO_OP)</div>
|
<div class="decorator">@operation(Operation.NO_OP)</div>
|
||||||
|
|
||||||
<span class="def">def</span>
|
<span class="def">def</span>
|
||||||
<span class="name">repartition</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">numPartitions</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140180622057408'</span><span class="o">></span><span class="p">]</span>,</span><span class="param"> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140180622201840'</span><span class="o">></span></span><span class="return-annotation">) -> <span class="n"><a href="#DataFrame">DataFrame</a></span>:</span></span>
|
<span class="name">repartition</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">numPartitions</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140452313784256'</span><span class="o">></span><span class="p">]</span>,</span><span class="param"> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140452314075040'</span><span class="o">></span></span><span class="return-annotation">) -> <span class="n"><a href="#DataFrame">DataFrame</a></span>:</span></span>
|
||||||
|
|
||||||
<label class="view-source-button" for="DataFrame.repartition-view-source"><span>View Source</span></label>
|
<label class="view-source-button" for="DataFrame.repartition-view-source"><span>View Source</span></label>
|
||||||
|
|
||||||
|
@ -3765,7 +3765,7 @@ and check if it matches the type of the value provided. If not then make it null
|
||||||
<input id="Column.__init__-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
<input id="Column.__init__-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||||
<div class="attr function">
|
<div class="attr function">
|
||||||
|
|
||||||
<span class="name">Column</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140180623815392'</span><span class="o">></span><span class="p">,</span> <span class="n"><a href="../expressions.html#Expression">sqlglot.expressions.Expression</a></span><span class="p">,</span> <span class="n">NoneType</span><span class="p">]</span></span>)</span>
|
<span class="name">Column</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140452317817648'</span><span class="o">></span><span class="p">,</span> <span class="n"><a href="../expressions.html#Expression">sqlglot.expressions.Expression</a></span><span class="p">,</span> <span class="n">NoneType</span><span class="p">]</span></span>)</span>
|
||||||
|
|
||||||
<label class="view-source-button" for="Column.__init__-view-source"><span>View Source</span></label>
|
<label class="view-source-button" for="Column.__init__-view-source"><span>View Source</span></label>
|
||||||
|
|
||||||
|
@ -3809,7 +3809,7 @@ and check if it matches the type of the value provided. If not then make it null
|
||||||
<div class="decorator">@classmethod</div>
|
<div class="decorator">@classmethod</div>
|
||||||
|
|
||||||
<span class="def">def</span>
|
<span class="def">def</span>
|
||||||
<span class="name">ensure_col</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">cls</span>,</span><span class="param"> <span class="n">value</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140180622248832'</span><span class="o">></span><span class="p">,</span> <span class="n"><a href="../expressions.html#Expression">sqlglot.expressions.Expression</a></span><span class="p">,</span> <span class="n">NoneType</span><span class="p">]</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">Column</a></span>:</span></span>
|
<span class="name">ensure_col</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">cls</span>,</span><span class="param"> <span class="n">value</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140452314678176'</span><span class="o">></span><span class="p">,</span> <span class="n"><a href="../expressions.html#Expression">sqlglot.expressions.Expression</a></span><span class="p">,</span> <span class="n">NoneType</span><span class="p">]</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">Column</a></span>:</span></span>
|
||||||
|
|
||||||
<label class="view-source-button" for="Column.ensure_col-view-source"><span>View Source</span></label>
|
<label class="view-source-button" for="Column.ensure_col-view-source"><span>View Source</span></label>
|
||||||
|
|
||||||
|
@ -3830,7 +3830,7 @@ and check if it matches the type of the value provided. If not then make it null
|
||||||
<div class="decorator">@classmethod</div>
|
<div class="decorator">@classmethod</div>
|
||||||
|
|
||||||
<span class="def">def</span>
|
<span class="def">def</span>
|
||||||
<span class="name">ensure_cols</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">cls</span>,</span><span class="param"> <span class="n">args</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140180622270880'</span><span class="o">></span><span class="p">,</span> <span class="n"><a href="../expressions.html#Expression">sqlglot.expressions.Expression</a></span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n">List</span><span class="p">[</span><span class="n"><a href="#Column">Column</a></span><span class="p">]</span>:</span></span>
|
<span class="name">ensure_cols</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">cls</span>,</span><span class="param"> <span class="n">args</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140452314457488'</span><span class="o">></span><span class="p">,</span> <span class="n"><a href="../expressions.html#Expression">sqlglot.expressions.Expression</a></span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n">List</span><span class="p">[</span><span class="n"><a href="#Column">Column</a></span><span class="p">]</span>:</span></span>
|
||||||
|
|
||||||
<label class="view-source-button" for="Column.ensure_cols-view-source"><span>View Source</span></label>
|
<label class="view-source-button" for="Column.ensure_cols-view-source"><span>View Source</span></label>
|
||||||
|
|
||||||
|
@ -3851,7 +3851,7 @@ and check if it matches the type of the value provided. If not then make it null
|
||||||
<div class="decorator">@classmethod</div>
|
<div class="decorator">@classmethod</div>
|
||||||
|
|
||||||
<span class="def">def</span>
|
<span class="def">def</span>
|
||||||
<span class="name">invoke_anonymous_function</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">cls</span>,</span><span class="param"> <span class="n">column</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140180620601152'</span><span class="o">></span><span class="p">]</span>,</span><span class="param"> <span class="n">func_name</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140180620379088'</span><span class="o">></span><span class="p">]</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">Column</a></span>:</span></span>
|
<span class="name">invoke_anonymous_function</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">cls</span>,</span><span class="param"> <span class="n">column</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140452314721072'</span><span class="o">></span><span class="p">]</span>,</span><span class="param"> <span class="n">func_name</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140452314417088'</span><span class="o">></span><span class="p">]</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">Column</a></span>:</span></span>
|
||||||
|
|
||||||
<label class="view-source-button" for="Column.invoke_anonymous_function-view-source"><span>View Source</span></label>
|
<label class="view-source-button" for="Column.invoke_anonymous_function-view-source"><span>View Source</span></label>
|
||||||
|
|
||||||
|
@ -3878,7 +3878,7 @@ and check if it matches the type of the value provided. If not then make it null
|
||||||
<div class="decorator">@classmethod</div>
|
<div class="decorator">@classmethod</div>
|
||||||
|
|
||||||
<span class="def">def</span>
|
<span class="def">def</span>
|
||||||
<span class="name">invoke_expression_over_column</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">cls</span>,</span><span class="param"> <span class="n">column</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140180620187376'</span><span class="o">></span><span class="p">]</span>,</span><span class="param"> <span class="n">callable_expression</span><span class="p">:</span> <span class="n">Callable</span>,</span><span class="param"> <span class="o">**</span><span class="n">kwargs</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">Column</a></span>:</span></span>
|
<span class="name">invoke_expression_over_column</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">cls</span>,</span><span class="param"> <span class="n">column</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140452314715216'</span><span class="o">></span><span class="p">]</span>,</span><span class="param"> <span class="n">callable_expression</span><span class="p">:</span> <span class="n">Callable</span>,</span><span class="param"> <span class="o">**</span><span class="n">kwargs</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">Column</a></span>:</span></span>
|
||||||
|
|
||||||
<label class="view-source-button" for="Column.invoke_expression_over_column-view-source"><span>View Source</span></label>
|
<label class="view-source-button" for="Column.invoke_expression_over_column-view-source"><span>View Source</span></label>
|
||||||
|
|
||||||
|
@ -3915,7 +3915,7 @@ and check if it matches the type of the value provided. If not then make it null
|
||||||
<div class="attr function">
|
<div class="attr function">
|
||||||
|
|
||||||
<span class="def">def</span>
|
<span class="def">def</span>
|
||||||
<span class="name">binary_op</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">klass</span><span class="p">:</span> <span class="n">Callable</span>,</span><span class="param"> <span class="n">other</span><span class="p">:</span> <span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140180620223024'</span><span class="o">></span>,</span><span class="param"> <span class="o">**</span><span class="n">kwargs</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">Column</a></span>:</span></span>
|
<span class="name">binary_op</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">klass</span><span class="p">:</span> <span class="n">Callable</span>,</span><span class="param"> <span class="n">other</span><span class="p">:</span> <span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140452314588704'</span><span class="o">></span>,</span><span class="param"> <span class="o">**</span><span class="n">kwargs</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">Column</a></span>:</span></span>
|
||||||
|
|
||||||
<label class="view-source-button" for="Column.binary_op-view-source"><span>View Source</span></label>
|
<label class="view-source-button" for="Column.binary_op-view-source"><span>View Source</span></label>
|
||||||
|
|
||||||
|
@ -3936,7 +3936,7 @@ and check if it matches the type of the value provided. If not then make it null
|
||||||
<div class="attr function">
|
<div class="attr function">
|
||||||
|
|
||||||
<span class="def">def</span>
|
<span class="def">def</span>
|
||||||
<span class="name">inverse_binary_op</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">klass</span><span class="p">:</span> <span class="n">Callable</span>,</span><span class="param"> <span class="n">other</span><span class="p">:</span> <span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140180620447264'</span><span class="o">></span>,</span><span class="param"> <span class="o">**</span><span class="n">kwargs</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">Column</a></span>:</span></span>
|
<span class="name">inverse_binary_op</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">klass</span><span class="p">:</span> <span class="n">Callable</span>,</span><span class="param"> <span class="n">other</span><span class="p">:</span> <span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140452314632720'</span><span class="o">></span>,</span><span class="param"> <span class="o">**</span><span class="n">kwargs</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">Column</a></span>:</span></span>
|
||||||
|
|
||||||
<label class="view-source-button" for="Column.inverse_binary_op-view-source"><span>View Source</span></label>
|
<label class="view-source-button" for="Column.inverse_binary_op-view-source"><span>View Source</span></label>
|
||||||
|
|
||||||
|
@ -4502,7 +4502,7 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
|
||||||
<div class="attr function">
|
<div class="attr function">
|
||||||
|
|
||||||
<span class="def">def</span>
|
<span class="def">def</span>
|
||||||
<span class="name">isin</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140180620677120'</span><span class="o">></span><span class="p">,</span> <span class="n">Iterable</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140180620677120'</span><span class="o">></span><span class="p">]]</span></span><span class="return-annotation">):</span></span>
|
<span class="name">isin</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140452314786560'</span><span class="o">></span><span class="p">,</span> <span class="n">Iterable</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140452314786560'</span><span class="o">></span><span class="p">]]</span></span><span class="return-annotation">):</span></span>
|
||||||
|
|
||||||
<label class="view-source-button" for="Column.isin-view-source"><span>View Source</span></label>
|
<label class="view-source-button" for="Column.isin-view-source"><span>View Source</span></label>
|
||||||
|
|
||||||
|
@ -4523,7 +4523,7 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
|
||||||
<div class="attr function">
|
<div class="attr function">
|
||||||
|
|
||||||
<span class="def">def</span>
|
<span class="def">def</span>
|
||||||
<span class="name">between</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">lowerBound</span><span class="p">:</span> <span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140180620785216'</span><span class="o">></span>,</span><span class="param"> <span class="n">upperBound</span><span class="p">:</span> <span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140180620872528'</span><span class="o">></span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">Column</a></span>:</span></span>
|
<span class="name">between</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">lowerBound</span><span class="p">:</span> <span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140452312840752'</span><span class="o">></span>,</span><span class="param"> <span class="n">upperBound</span><span class="p">:</span> <span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140452312878912'</span><span class="o">></span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">Column</a></span>:</span></span>
|
||||||
|
|
||||||
<label class="view-source-button" for="Column.between-view-source"><span>View Source</span></label>
|
<label class="view-source-button" for="Column.between-view-source"><span>View Source</span></label>
|
||||||
|
|
||||||
|
@ -4558,7 +4558,7 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
|
||||||
<div class="attr function">
|
<div class="attr function">
|
||||||
|
|
||||||
<span class="def">def</span>
|
<span class="def">def</span>
|
||||||
<span class="name">over</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">window</span><span class="p">:</span> <span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140180621601872'</span><span class="o">></span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">Column</a></span>:</span></span>
|
<span class="name">over</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">window</span><span class="p">:</span> <span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140452315623488'</span><span class="o">></span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">Column</a></span>:</span></span>
|
||||||
|
|
||||||
<label class="view-source-button" for="Column.over-view-source"><span>View Source</span></label>
|
<label class="view-source-button" for="Column.over-view-source"><span>View Source</span></label>
|
||||||
|
|
||||||
|
@ -4803,7 +4803,7 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
|
||||||
<div class="decorator">@classmethod</div>
|
<div class="decorator">@classmethod</div>
|
||||||
|
|
||||||
<span class="def">def</span>
|
<span class="def">def</span>
|
||||||
<span class="name">partitionBy</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">cls</span>,</span><span class="param"> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140180621091568'</span><span class="o">></span><span class="p">,</span> <span class="n">List</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140180621091568'</span><span class="o">></span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n"><a href="#WindowSpec">WindowSpec</a></span>:</span></span>
|
<span class="name">partitionBy</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">cls</span>,</span><span class="param"> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140452313196160'</span><span class="o">></span><span class="p">,</span> <span class="n">List</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140452313196160'</span><span class="o">></span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n"><a href="#WindowSpec">WindowSpec</a></span>:</span></span>
|
||||||
|
|
||||||
<label class="view-source-button" for="Window.partitionBy-view-source"><span>View Source</span></label>
|
<label class="view-source-button" for="Window.partitionBy-view-source"><span>View Source</span></label>
|
||||||
|
|
||||||
|
@ -4824,7 +4824,7 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
|
||||||
<div class="decorator">@classmethod</div>
|
<div class="decorator">@classmethod</div>
|
||||||
|
|
||||||
<span class="def">def</span>
|
<span class="def">def</span>
|
||||||
<span class="name">orderBy</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">cls</span>,</span><span class="param"> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140180621079648'</span><span class="o">></span><span class="p">,</span> <span class="n">List</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140180621079648'</span><span class="o">></span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n"><a href="#WindowSpec">WindowSpec</a></span>:</span></span>
|
<span class="name">orderBy</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">cls</span>,</span><span class="param"> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140452313545552'</span><span class="o">></span><span class="p">,</span> <span class="n">List</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140452313545552'</span><span class="o">></span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n"><a href="#WindowSpec">WindowSpec</a></span>:</span></span>
|
||||||
|
|
||||||
<label class="view-source-button" for="Window.orderBy-view-source"><span>View Source</span></label>
|
<label class="view-source-button" for="Window.orderBy-view-source"><span>View Source</span></label>
|
||||||
|
|
||||||
|
@ -5064,7 +5064,7 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
|
||||||
<div class="attr function">
|
<div class="attr function">
|
||||||
|
|
||||||
<span class="def">def</span>
|
<span class="def">def</span>
|
||||||
<span class="name">partitionBy</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140180620960832'</span><span class="o">></span><span class="p">,</span> <span class="n">List</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140180620960832'</span><span class="o">></span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n"><a href="#WindowSpec">WindowSpec</a></span>:</span></span>
|
<span class="name">partitionBy</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140452313094016'</span><span class="o">></span><span class="p">,</span> <span class="n">List</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140452313094016'</span><span class="o">></span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n"><a href="#WindowSpec">WindowSpec</a></span>:</span></span>
|
||||||
|
|
||||||
<label class="view-source-button" for="WindowSpec.partitionBy-view-source"><span>View Source</span></label>
|
<label class="view-source-button" for="WindowSpec.partitionBy-view-source"><span>View Source</span></label>
|
||||||
|
|
||||||
|
@ -5091,7 +5091,7 @@ Sqlglot doesn't currently replicate this class so it only accepts a string</p>
|
||||||
<div class="attr function">
|
<div class="attr function">
|
||||||
|
|
||||||
<span class="def">def</span>
|
<span class="def">def</span>
|
||||||
<span class="name">orderBy</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140180619970784'</span><span class="o">></span><span class="p">,</span> <span class="n">List</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140180619970784'</span><span class="o">></span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n"><a href="#WindowSpec">WindowSpec</a></span>:</span></span>
|
<span class="name">orderBy</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="o">*</span><span class="n">cols</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140452313178048'</span><span class="o">></span><span class="p">,</span> <span class="n">List</span><span class="p">[</span><span class="o"><</span><span class="n">MagicMock</span> <span class="nb">id</span><span class="o">=</span><span class="s1">'140452313178048'</span><span class="o">></span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n"><a href="#WindowSpec">WindowSpec</a></span>:</span></span>
|
||||||
|
|
||||||
<label class="view-source-button" for="WindowSpec.orderBy-view-source"><span>View Source</span></label>
|
<label class="view-source-button" for="WindowSpec.orderBy-view-source"><span>View Source</span></label>
|
||||||
|
|
||||||
|
|
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
|
@ -345,6 +345,9 @@
|
||||||
<li>
|
<li>
|
||||||
<a class="function" href="#timestamptrunc_sql">timestamptrunc_sql</a>
|
<a class="function" href="#timestamptrunc_sql">timestamptrunc_sql</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<a class="function" href="#no_timestamp_sql">no_timestamp_sql</a>
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a class="function" href="#locate_to_strposition">locate_to_strposition</a>
|
<a class="function" href="#locate_to_strposition">locate_to_strposition</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -399,9 +402,6 @@
|
||||||
<li>
|
<li>
|
||||||
<a class="function" href="#pivot_column_names">pivot_column_names</a>
|
<a class="function" href="#pivot_column_names">pivot_column_names</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
|
||||||
<a class="function" href="#simplify_literal">simplify_literal</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
<li>
|
||||||
<a class="function" href="#binary_from_function">binary_from_function</a>
|
<a class="function" href="#binary_from_function">binary_from_function</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -426,6 +426,9 @@
|
||||||
<li>
|
<li>
|
||||||
<a class="function" href="#move_insert_cte_sql">move_insert_cte_sql</a>
|
<a class="function" href="#move_insert_cte_sql">move_insert_cte_sql</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<a class="function" href="#generatedasidentitycolumnconstraint_sql">generatedasidentitycolumnconstraint_sql</a>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
@ -461,7 +464,7 @@
|
||||||
</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a><span class="kn">from</span> <span class="nn">sqlglot.generator</span> <span class="kn">import</span> <span class="n">Generator</span>
|
</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a><span class="kn">from</span> <span class="nn">sqlglot.generator</span> <span class="kn">import</span> <span class="n">Generator</span>
|
||||||
</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a><span class="kn">from</span> <span class="nn">sqlglot.helper</span> <span class="kn">import</span> <span class="n">flatten</span><span class="p">,</span> <span class="n">seq_get</span>
|
</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a><span class="kn">from</span> <span class="nn">sqlglot.helper</span> <span class="kn">import</span> <span class="n">flatten</span><span class="p">,</span> <span class="n">seq_get</span>
|
||||||
</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a><span class="kn">from</span> <span class="nn">sqlglot.parser</span> <span class="kn">import</span> <span class="n">Parser</span>
|
</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a><span class="kn">from</span> <span class="nn">sqlglot.parser</span> <span class="kn">import</span> <span class="n">Parser</span>
|
||||||
</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a><span class="kn">from</span> <span class="nn">sqlglot.time</span> <span class="kn">import</span> <span class="n">format_time</span>
|
</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a><span class="kn">from</span> <span class="nn">sqlglot.time</span> <span class="kn">import</span> <span class="n">TIMEZONES</span><span class="p">,</span> <span class="n">format_time</span>
|
||||||
</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a><span class="kn">from</span> <span class="nn">sqlglot.tokens</span> <span class="kn">import</span> <span class="n">Token</span><span class="p">,</span> <span class="n">Tokenizer</span><span class="p">,</span> <span class="n">TokenType</span>
|
</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a><span class="kn">from</span> <span class="nn">sqlglot.tokens</span> <span class="kn">import</span> <span class="n">Token</span><span class="p">,</span> <span class="n">Tokenizer</span><span class="p">,</span> <span class="n">TokenType</span>
|
||||||
</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a><span class="kn">from</span> <span class="nn">sqlglot.trie</span> <span class="kn">import</span> <span class="n">new_trie</span>
|
</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a><span class="kn">from</span> <span class="nn">sqlglot.trie</span> <span class="kn">import</span> <span class="n">new_trie</span>
|
||||||
</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a>
|
</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a>
|
||||||
|
@ -1046,215 +1049,233 @@
|
||||||
</span><span id="L-595"><a href="#L-595"><span class="linenos">595</span></a> <span class="p">)</span>
|
</span><span id="L-595"><a href="#L-595"><span class="linenos">595</span></a> <span class="p">)</span>
|
||||||
</span><span id="L-596"><a href="#L-596"><span class="linenos">596</span></a>
|
</span><span id="L-596"><a href="#L-596"><span class="linenos">596</span></a>
|
||||||
</span><span id="L-597"><a href="#L-597"><span class="linenos">597</span></a>
|
</span><span id="L-597"><a href="#L-597"><span class="linenos">597</span></a>
|
||||||
</span><span id="L-598"><a href="#L-598"><span class="linenos">598</span></a><span class="k">def</span> <span class="nf">locate_to_strposition</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
|
</span><span id="L-598"><a href="#L-598"><span class="linenos">598</span></a><span class="k">def</span> <span class="nf">no_timestamp_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Timestamp</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="L-599"><a href="#L-599"><span class="linenos">599</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">(</span>
|
</span><span id="L-599"><a href="#L-599"><span class="linenos">599</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">:</span>
|
||||||
</span><span id="L-600"><a href="#L-600"><span class="linenos">600</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">substr</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">position</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
|
</span><span id="L-600"><a href="#L-600"><span class="linenos">600</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">))</span>
|
||||||
</span><span id="L-601"><a href="#L-601"><span class="linenos">601</span></a> <span class="p">)</span>
|
</span><span id="L-601"><a href="#L-601"><span class="linenos">601</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">"expression"</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="n">TIMEZONES</span><span class="p">:</span>
|
||||||
</span><span id="L-602"><a href="#L-602"><span class="linenos">602</span></a>
|
</span><span id="L-602"><a href="#L-602"><span class="linenos">602</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
|
||||||
</span><span id="L-603"><a href="#L-603"><span class="linenos">603</span></a>
|
</span><span id="L-603"><a href="#L-603"><span class="linenos">603</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">(</span>
|
||||||
</span><span id="L-604"><a href="#L-604"><span class="linenos">604</span></a><span class="k">def</span> <span class="nf">strposition_to_locate_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
</span><span id="L-604"><a href="#L-604"><span class="linenos">604</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">),</span>
|
||||||
</span><span id="L-605"><a href="#L-605"><span class="linenos">605</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
|
</span><span id="L-605"><a href="#L-605"><span class="linenos">605</span></a> <span class="n">zone</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
|
||||||
</span><span id="L-606"><a href="#L-606"><span class="linenos">606</span></a> <span class="s2">"LOCATE"</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"substr"</span><span class="p">),</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"position"</span><span class="p">)</span>
|
</span><span id="L-606"><a href="#L-606"><span class="linenos">606</span></a> <span class="p">)</span>
|
||||||
</span><span id="L-607"><a href="#L-607"><span class="linenos">607</span></a> <span class="p">)</span>
|
</span><span id="L-607"><a href="#L-607"><span class="linenos">607</span></a> <span class="p">)</span>
|
||||||
</span><span id="L-608"><a href="#L-608"><span class="linenos">608</span></a>
|
</span><span id="L-608"><a href="#L-608"><span class="linenos">608</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
|
||||||
</span><span id="L-609"><a href="#L-609"><span class="linenos">609</span></a>
|
</span><span id="L-609"><a href="#L-609"><span class="linenos">609</span></a>
|
||||||
</span><span id="L-610"><a href="#L-610"><span class="linenos">610</span></a><span class="k">def</span> <span class="nf">left_to_substring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
</span><span id="L-610"><a href="#L-610"><span class="linenos">610</span></a>
|
||||||
</span><span id="L-611"><a href="#L-611"><span class="linenos">611</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
</span><span id="L-611"><a href="#L-611"><span class="linenos">611</span></a><span class="k">def</span> <span class="nf">locate_to_strposition</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
|
||||||
</span><span id="L-612"><a href="#L-612"><span class="linenos">612</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
|
</span><span id="L-612"><a href="#L-612"><span class="linenos">612</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">(</span>
|
||||||
</span><span id="L-613"><a href="#L-613"><span class="linenos">613</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">(</span>
|
</span><span id="L-613"><a href="#L-613"><span class="linenos">613</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">substr</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">position</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
|
||||||
</span><span id="L-614"><a href="#L-614"><span class="linenos">614</span></a> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span> <span class="n">length</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
|
</span><span id="L-614"><a href="#L-614"><span class="linenos">614</span></a> <span class="p">)</span>
|
||||||
</span><span id="L-615"><a href="#L-615"><span class="linenos">615</span></a> <span class="p">)</span>
|
</span><span id="L-615"><a href="#L-615"><span class="linenos">615</span></a>
|
||||||
</span><span id="L-616"><a href="#L-616"><span class="linenos">616</span></a> <span class="p">)</span>
|
</span><span id="L-616"><a href="#L-616"><span class="linenos">616</span></a>
|
||||||
</span><span id="L-617"><a href="#L-617"><span class="linenos">617</span></a>
|
</span><span id="L-617"><a href="#L-617"><span class="linenos">617</span></a><span class="k">def</span> <span class="nf">strposition_to_locate_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="L-618"><a href="#L-618"><span class="linenos">618</span></a>
|
</span><span id="L-618"><a href="#L-618"><span class="linenos">618</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
|
||||||
</span><span id="L-619"><a href="#L-619"><span class="linenos">619</span></a><span class="k">def</span> <span class="nf">right_to_substring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
</span><span id="L-619"><a href="#L-619"><span class="linenos">619</span></a> <span class="s2">"LOCATE"</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"substr"</span><span class="p">),</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"position"</span><span class="p">)</span>
|
||||||
</span><span id="L-620"><a href="#L-620"><span class="linenos">620</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
</span><span id="L-620"><a href="#L-620"><span class="linenos">620</span></a> <span class="p">)</span>
|
||||||
</span><span id="L-621"><a href="#L-621"><span class="linenos">621</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
|
</span><span id="L-621"><a href="#L-621"><span class="linenos">621</span></a>
|
||||||
</span><span id="L-622"><a href="#L-622"><span class="linenos">622</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">(</span>
|
</span><span id="L-622"><a href="#L-622"><span class="linenos">622</span></a>
|
||||||
</span><span id="L-623"><a href="#L-623"><span class="linenos">623</span></a> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
|
</span><span id="L-623"><a href="#L-623"><span class="linenos">623</span></a><span class="k">def</span> <span class="nf">left_to_substring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="L-624"><a href="#L-624"><span class="linenos">624</span></a> <span class="n">start</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Length</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="o">-</span> <span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span> <span class="o">-</span> <span class="mi">1</span><span class="p">),</span>
|
</span><span id="L-624"><a href="#L-624"><span class="linenos">624</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
||||||
</span><span id="L-625"><a href="#L-625"><span class="linenos">625</span></a> <span class="p">)</span>
|
</span><span id="L-625"><a href="#L-625"><span class="linenos">625</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
|
||||||
</span><span id="L-626"><a href="#L-626"><span class="linenos">626</span></a> <span class="p">)</span>
|
</span><span id="L-626"><a href="#L-626"><span class="linenos">626</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">(</span>
|
||||||
</span><span id="L-627"><a href="#L-627"><span class="linenos">627</span></a>
|
</span><span id="L-627"><a href="#L-627"><span class="linenos">627</span></a> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span> <span class="n">length</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
|
||||||
</span><span id="L-628"><a href="#L-628"><span class="linenos">628</span></a>
|
</span><span id="L-628"><a href="#L-628"><span class="linenos">628</span></a> <span class="p">)</span>
|
||||||
</span><span id="L-629"><a href="#L-629"><span class="linenos">629</span></a><span class="k">def</span> <span class="nf">timestrtotime_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
</span><span id="L-629"><a href="#L-629"><span class="linenos">629</span></a> <span class="p">)</span>
|
||||||
</span><span id="L-630"><a href="#L-630"><span class="linenos">630</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">"timestamp"</span><span class="p">))</span>
|
</span><span id="L-630"><a href="#L-630"><span class="linenos">630</span></a>
|
||||||
</span><span id="L-631"><a href="#L-631"><span class="linenos">631</span></a>
|
</span><span id="L-631"><a href="#L-631"><span class="linenos">631</span></a>
|
||||||
</span><span id="L-632"><a href="#L-632"><span class="linenos">632</span></a>
|
</span><span id="L-632"><a href="#L-632"><span class="linenos">632</span></a><span class="k">def</span> <span class="nf">right_to_substring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="L-633"><a href="#L-633"><span class="linenos">633</span></a><span class="k">def</span> <span class="nf">datestrtodate_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
</span><span id="L-633"><a href="#L-633"><span class="linenos">633</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
||||||
</span><span id="L-634"><a href="#L-634"><span class="linenos">634</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">"date"</span><span class="p">))</span>
|
</span><span id="L-634"><a href="#L-634"><span class="linenos">634</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
|
||||||
</span><span id="L-635"><a href="#L-635"><span class="linenos">635</span></a>
|
</span><span id="L-635"><a href="#L-635"><span class="linenos">635</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">(</span>
|
||||||
</span><span id="L-636"><a href="#L-636"><span class="linenos">636</span></a>
|
</span><span id="L-636"><a href="#L-636"><span class="linenos">636</span></a> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
|
||||||
</span><span id="L-637"><a href="#L-637"><span class="linenos">637</span></a><span class="c1"># Used for Presto and Duckdb which use functions that don't support charset, and assume utf-8</span>
|
</span><span id="L-637"><a href="#L-637"><span class="linenos">637</span></a> <span class="n">start</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Length</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="o">-</span> <span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span> <span class="o">-</span> <span class="mi">1</span><span class="p">),</span>
|
||||||
</span><span id="L-638"><a href="#L-638"><span class="linenos">638</span></a><span class="k">def</span> <span class="nf">encode_decode_sql</span><span class="p">(</span>
|
</span><span id="L-638"><a href="#L-638"><span class="linenos">638</span></a> <span class="p">)</span>
|
||||||
</span><span id="L-639"><a href="#L-639"><span class="linenos">639</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">replace</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
|
</span><span id="L-639"><a href="#L-639"><span class="linenos">639</span></a> <span class="p">)</span>
|
||||||
</span><span id="L-640"><a href="#L-640"><span class="linenos">640</span></a><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
</span><span id="L-640"><a href="#L-640"><span class="linenos">640</span></a>
|
||||||
</span><span id="L-641"><a href="#L-641"><span class="linenos">641</span></a> <span class="n">charset</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"charset"</span><span class="p">)</span>
|
</span><span id="L-641"><a href="#L-641"><span class="linenos">641</span></a>
|
||||||
</span><span id="L-642"><a href="#L-642"><span class="linenos">642</span></a> <span class="k">if</span> <span class="n">charset</span> <span class="ow">and</span> <span class="n">charset</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">!=</span> <span class="s2">"utf-8"</span><span class="p">:</span>
|
</span><span id="L-642"><a href="#L-642"><span class="linenos">642</span></a><span class="k">def</span> <span class="nf">timestrtotime_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="L-643"><a href="#L-643"><span class="linenos">643</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Expected utf-8 character set, got </span><span class="si">{</span><span class="n">charset</span><span class="si">}</span><span class="s2">."</span><span class="p">)</span>
|
</span><span id="L-643"><a href="#L-643"><span class="linenos">643</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">"timestamp"</span><span class="p">))</span>
|
||||||
</span><span id="L-644"><a href="#L-644"><span class="linenos">644</span></a>
|
</span><span id="L-644"><a href="#L-644"><span class="linenos">644</span></a>
|
||||||
</span><span id="L-645"><a href="#L-645"><span class="linenos">645</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"replace"</span><span class="p">)</span> <span class="k">if</span> <span class="n">replace</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
|
</span><span id="L-645"><a href="#L-645"><span class="linenos">645</span></a>
|
||||||
</span><span id="L-646"><a href="#L-646"><span class="linenos">646</span></a>
|
</span><span id="L-646"><a href="#L-646"><span class="linenos">646</span></a><span class="k">def</span> <span class="nf">datestrtodate_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="L-647"><a href="#L-647"><span class="linenos">647</span></a>
|
</span><span id="L-647"><a href="#L-647"><span class="linenos">647</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">"date"</span><span class="p">))</span>
|
||||||
</span><span id="L-648"><a href="#L-648"><span class="linenos">648</span></a><span class="k">def</span> <span class="nf">min_or_least</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Min</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
</span><span id="L-648"><a href="#L-648"><span class="linenos">648</span></a>
|
||||||
</span><span id="L-649"><a href="#L-649"><span class="linenos">649</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">"LEAST"</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">"MIN"</span>
|
</span><span id="L-649"><a href="#L-649"><span class="linenos">649</span></a>
|
||||||
</span><span id="L-650"><a href="#L-650"><span class="linenos">650</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="n">name</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
|
</span><span id="L-650"><a href="#L-650"><span class="linenos">650</span></a><span class="c1"># Used for Presto and Duckdb which use functions that don't support charset, and assume utf-8</span>
|
||||||
</span><span id="L-651"><a href="#L-651"><span class="linenos">651</span></a>
|
</span><span id="L-651"><a href="#L-651"><span class="linenos">651</span></a><span class="k">def</span> <span class="nf">encode_decode_sql</span><span class="p">(</span>
|
||||||
</span><span id="L-652"><a href="#L-652"><span class="linenos">652</span></a>
|
</span><span id="L-652"><a href="#L-652"><span class="linenos">652</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">replace</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
|
||||||
</span><span id="L-653"><a href="#L-653"><span class="linenos">653</span></a><span class="k">def</span> <span class="nf">max_or_greatest</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Max</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
</span><span id="L-653"><a href="#L-653"><span class="linenos">653</span></a><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="L-654"><a href="#L-654"><span class="linenos">654</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">"GREATEST"</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">"MAX"</span>
|
</span><span id="L-654"><a href="#L-654"><span class="linenos">654</span></a> <span class="n">charset</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"charset"</span><span class="p">)</span>
|
||||||
</span><span id="L-655"><a href="#L-655"><span class="linenos">655</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="n">name</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
|
</span><span id="L-655"><a href="#L-655"><span class="linenos">655</span></a> <span class="k">if</span> <span class="n">charset</span> <span class="ow">and</span> <span class="n">charset</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">!=</span> <span class="s2">"utf-8"</span><span class="p">:</span>
|
||||||
</span><span id="L-656"><a href="#L-656"><span class="linenos">656</span></a>
|
</span><span id="L-656"><a href="#L-656"><span class="linenos">656</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Expected utf-8 character set, got </span><span class="si">{</span><span class="n">charset</span><span class="si">}</span><span class="s2">."</span><span class="p">)</span>
|
||||||
</span><span id="L-657"><a href="#L-657"><span class="linenos">657</span></a>
|
</span><span id="L-657"><a href="#L-657"><span class="linenos">657</span></a>
|
||||||
</span><span id="L-658"><a href="#L-658"><span class="linenos">658</span></a><span class="k">def</span> <span class="nf">count_if_to_sum</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
</span><span id="L-658"><a href="#L-658"><span class="linenos">658</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"replace"</span><span class="p">)</span> <span class="k">if</span> <span class="n">replace</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
|
||||||
</span><span id="L-659"><a href="#L-659"><span class="linenos">659</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
|
</span><span id="L-659"><a href="#L-659"><span class="linenos">659</span></a>
|
||||||
</span><span id="L-660"><a href="#L-660"><span class="linenos">660</span></a>
|
</span><span id="L-660"><a href="#L-660"><span class="linenos">660</span></a>
|
||||||
</span><span id="L-661"><a href="#L-661"><span class="linenos">661</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">):</span>
|
</span><span id="L-661"><a href="#L-661"><span class="linenos">661</span></a><span class="k">def</span> <span class="nf">min_or_least</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Min</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="L-662"><a href="#L-662"><span class="linenos">662</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
</span><span id="L-662"><a href="#L-662"><span class="linenos">662</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">"LEAST"</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">"MIN"</span>
|
||||||
</span><span id="L-663"><a href="#L-663"><span class="linenos">663</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">"DISTINCT is not supported when converting COUNT_IF to SUM"</span><span class="p">)</span>
|
</span><span id="L-663"><a href="#L-663"><span class="linenos">663</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="n">name</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
|
||||||
</span><span id="L-664"><a href="#L-664"><span class="linenos">664</span></a>
|
</span><span id="L-664"><a href="#L-664"><span class="linenos">664</span></a>
|
||||||
</span><span id="L-665"><a href="#L-665"><span class="linenos">665</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">"sum"</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">"if"</span><span class="p">,</span> <span class="n">cond</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
|
</span><span id="L-665"><a href="#L-665"><span class="linenos">665</span></a>
|
||||||
</span><span id="L-666"><a href="#L-666"><span class="linenos">666</span></a>
|
</span><span id="L-666"><a href="#L-666"><span class="linenos">666</span></a><span class="k">def</span> <span class="nf">max_or_greatest</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Max</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="L-667"><a href="#L-667"><span class="linenos">667</span></a>
|
</span><span id="L-667"><a href="#L-667"><span class="linenos">667</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">"GREATEST"</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">"MAX"</span>
|
||||||
</span><span id="L-668"><a href="#L-668"><span class="linenos">668</span></a><span class="k">def</span> <span class="nf">trim_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
</span><span id="L-668"><a href="#L-668"><span class="linenos">668</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="n">name</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
|
||||||
</span><span id="L-669"><a href="#L-669"><span class="linenos">669</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"this"</span><span class="p">)</span>
|
</span><span id="L-669"><a href="#L-669"><span class="linenos">669</span></a>
|
||||||
</span><span id="L-670"><a href="#L-670"><span class="linenos">670</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"position"</span><span class="p">)</span>
|
</span><span id="L-670"><a href="#L-670"><span class="linenos">670</span></a>
|
||||||
</span><span id="L-671"><a href="#L-671"><span class="linenos">671</span></a> <span class="n">remove_chars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"expression"</span><span class="p">)</span>
|
</span><span id="L-671"><a href="#L-671"><span class="linenos">671</span></a><span class="k">def</span> <span class="nf">count_if_to_sum</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="L-672"><a href="#L-672"><span class="linenos">672</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"collation"</span><span class="p">)</span>
|
</span><span id="L-672"><a href="#L-672"><span class="linenos">672</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
|
||||||
</span><span id="L-673"><a href="#L-673"><span class="linenos">673</span></a>
|
</span><span id="L-673"><a href="#L-673"><span class="linenos">673</span></a>
|
||||||
</span><span id="L-674"><a href="#L-674"><span class="linenos">674</span></a> <span class="c1"># Use TRIM/LTRIM/RTRIM syntax if the expression isn't database-specific</span>
|
</span><span id="L-674"><a href="#L-674"><span class="linenos">674</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">):</span>
|
||||||
</span><span id="L-675"><a href="#L-675"><span class="linenos">675</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">remove_chars</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">collation</span><span class="p">:</span>
|
</span><span id="L-675"><a href="#L-675"><span class="linenos">675</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||||
</span><span id="L-676"><a href="#L-676"><span class="linenos">676</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">trim_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
|
</span><span id="L-676"><a href="#L-676"><span class="linenos">676</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">"DISTINCT is not supported when converting COUNT_IF to SUM"</span><span class="p">)</span>
|
||||||
</span><span id="L-677"><a href="#L-677"><span class="linenos">677</span></a>
|
</span><span id="L-677"><a href="#L-677"><span class="linenos">677</span></a>
|
||||||
</span><span id="L-678"><a href="#L-678"><span class="linenos">678</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">trim_type</span><span class="si">}</span><span class="s2"> "</span> <span class="k">if</span> <span class="n">trim_type</span> <span class="k">else</span> <span class="s2">""</span>
|
</span><span id="L-678"><a href="#L-678"><span class="linenos">678</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">"sum"</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">"if"</span><span class="p">,</span> <span class="n">cond</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
|
||||||
</span><span id="L-679"><a href="#L-679"><span class="linenos">679</span></a> <span class="n">remove_chars</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">remove_chars</span><span class="si">}</span><span class="s2"> "</span> <span class="k">if</span> <span class="n">remove_chars</span> <span class="k">else</span> <span class="s2">""</span>
|
</span><span id="L-679"><a href="#L-679"><span class="linenos">679</span></a>
|
||||||
</span><span id="L-680"><a href="#L-680"><span class="linenos">680</span></a> <span class="n">from_part</span> <span class="o">=</span> <span class="s2">"FROM "</span> <span class="k">if</span> <span class="n">trim_type</span> <span class="ow">or</span> <span class="n">remove_chars</span> <span class="k">else</span> <span class="s2">""</span>
|
</span><span id="L-680"><a href="#L-680"><span class="linenos">680</span></a>
|
||||||
</span><span id="L-681"><a href="#L-681"><span class="linenos">681</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" COLLATE </span><span class="si">{</span><span class="n">collation</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">collation</span> <span class="k">else</span> <span class="s2">""</span>
|
</span><span id="L-681"><a href="#L-681"><span class="linenos">681</span></a><span class="k">def</span> <span class="nf">trim_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="L-682"><a href="#L-682"><span class="linenos">682</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"TRIM(</span><span class="si">{</span><span class="n">trim_type</span><span class="si">}{</span><span class="n">remove_chars</span><span class="si">}{</span><span class="n">from_part</span><span class="si">}{</span><span class="n">target</span><span class="si">}{</span><span class="n">collation</span><span class="si">}</span><span class="s2">)"</span>
|
</span><span id="L-682"><a href="#L-682"><span class="linenos">682</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"this"</span><span class="p">)</span>
|
||||||
</span><span id="L-683"><a href="#L-683"><span class="linenos">683</span></a>
|
</span><span id="L-683"><a href="#L-683"><span class="linenos">683</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"position"</span><span class="p">)</span>
|
||||||
</span><span id="L-684"><a href="#L-684"><span class="linenos">684</span></a>
|
</span><span id="L-684"><a href="#L-684"><span class="linenos">684</span></a> <span class="n">remove_chars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"expression"</span><span class="p">)</span>
|
||||||
</span><span id="L-685"><a href="#L-685"><span class="linenos">685</span></a><span class="k">def</span> <span class="nf">str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
</span><span id="L-685"><a href="#L-685"><span class="linenos">685</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"collation"</span><span class="p">)</span>
|
||||||
</span><span id="L-686"><a href="#L-686"><span class="linenos">686</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">"STRPTIME"</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
|
</span><span id="L-686"><a href="#L-686"><span class="linenos">686</span></a>
|
||||||
</span><span id="L-687"><a href="#L-687"><span class="linenos">687</span></a>
|
</span><span id="L-687"><a href="#L-687"><span class="linenos">687</span></a> <span class="c1"># Use TRIM/LTRIM/RTRIM syntax if the expression isn't database-specific</span>
|
||||||
</span><span id="L-688"><a href="#L-688"><span class="linenos">688</span></a>
|
</span><span id="L-688"><a href="#L-688"><span class="linenos">688</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">remove_chars</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">collation</span><span class="p">:</span>
|
||||||
</span><span id="L-689"><a href="#L-689"><span class="linenos">689</span></a><span class="k">def</span> <span class="nf">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="n">dialect</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">:</span>
|
</span><span id="L-689"><a href="#L-689"><span class="linenos">689</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">trim_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
|
||||||
</span><span id="L-690"><a href="#L-690"><span class="linenos">690</span></a> <span class="k">def</span> <span class="nf">_ts_or_ds_to_date_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
</span><span id="L-690"><a href="#L-690"><span class="linenos">690</span></a>
|
||||||
</span><span id="L-691"><a href="#L-691"><span class="linenos">691</span></a> <span class="n">_dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span>
|
</span><span id="L-691"><a href="#L-691"><span class="linenos">691</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">trim_type</span><span class="si">}</span><span class="s2"> "</span> <span class="k">if</span> <span class="n">trim_type</span> <span class="k">else</span> <span class="s2">""</span>
|
||||||
</span><span id="L-692"><a href="#L-692"><span class="linenos">692</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
|
</span><span id="L-692"><a href="#L-692"><span class="linenos">692</span></a> <span class="n">remove_chars</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">remove_chars</span><span class="si">}</span><span class="s2"> "</span> <span class="k">if</span> <span class="n">remove_chars</span> <span class="k">else</span> <span class="s2">""</span>
|
||||||
</span><span id="L-693"><a href="#L-693"><span class="linenos">693</span></a> <span class="k">if</span> <span class="n">time_format</span> <span class="ow">and</span> <span class="n">time_format</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="n">_dialect</span><span class="o">.</span><span class="n">TIME_FORMAT</span><span class="p">,</span> <span class="n">_dialect</span><span class="o">.</span><span class="n">DATE_FORMAT</span><span class="p">):</span>
|
</span><span id="L-693"><a href="#L-693"><span class="linenos">693</span></a> <span class="n">from_part</span> <span class="o">=</span> <span class="s2">"FROM "</span> <span class="k">if</span> <span class="n">trim_type</span> <span class="ow">or</span> <span class="n">remove_chars</span> <span class="k">else</span> <span class="s2">""</span>
|
||||||
</span><span id="L-694"><a href="#L-694"><span class="linenos">694</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">),</span> <span class="s2">"date"</span><span class="p">))</span>
|
</span><span id="L-694"><a href="#L-694"><span class="linenos">694</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" COLLATE </span><span class="si">{</span><span class="n">collation</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">collation</span> <span class="k">else</span> <span class="s2">""</span>
|
||||||
</span><span id="L-695"><a href="#L-695"><span class="linenos">695</span></a>
|
</span><span id="L-695"><a href="#L-695"><span class="linenos">695</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"TRIM(</span><span class="si">{</span><span class="n">trim_type</span><span class="si">}{</span><span class="n">remove_chars</span><span class="si">}{</span><span class="n">from_part</span><span class="si">}{</span><span class="n">target</span><span class="si">}{</span><span class="n">collation</span><span class="si">}</span><span class="s2">)"</span>
|
||||||
</span><span id="L-696"><a href="#L-696"><span class="linenos">696</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"this"</span><span class="p">),</span> <span class="s2">"date"</span><span class="p">))</span>
|
</span><span id="L-696"><a href="#L-696"><span class="linenos">696</span></a>
|
||||||
</span><span id="L-697"><a href="#L-697"><span class="linenos">697</span></a>
|
</span><span id="L-697"><a href="#L-697"><span class="linenos">697</span></a>
|
||||||
</span><span id="L-698"><a href="#L-698"><span class="linenos">698</span></a> <span class="k">return</span> <span class="n">_ts_or_ds_to_date_sql</span>
|
</span><span id="L-698"><a href="#L-698"><span class="linenos">698</span></a><span class="k">def</span> <span class="nf">str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="L-699"><a href="#L-699"><span class="linenos">699</span></a>
|
</span><span id="L-699"><a href="#L-699"><span class="linenos">699</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">"STRPTIME"</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
|
||||||
</span><span id="L-700"><a href="#L-700"><span class="linenos">700</span></a>
|
</span><span id="L-700"><a href="#L-700"><span class="linenos">700</span></a>
|
||||||
</span><span id="L-701"><a href="#L-701"><span class="linenos">701</span></a><span class="k">def</span> <span class="nf">concat_to_dpipe_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Concat</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
</span><span id="L-701"><a href="#L-701"><span class="linenos">701</span></a>
|
||||||
</span><span id="L-702"><a href="#L-702"><span class="linenos">702</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
</span><span id="L-702"><a href="#L-702"><span class="linenos">702</span></a><span class="k">def</span> <span class="nf">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="n">dialect</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">:</span>
|
||||||
</span><span id="L-703"><a href="#L-703"><span class="linenos">703</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">reduce</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">x</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">y</span><span class="p">),</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">))</span>
|
</span><span id="L-703"><a href="#L-703"><span class="linenos">703</span></a> <span class="k">def</span> <span class="nf">_ts_or_ds_to_date_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="L-704"><a href="#L-704"><span class="linenos">704</span></a>
|
</span><span id="L-704"><a href="#L-704"><span class="linenos">704</span></a> <span class="n">_dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span>
|
||||||
</span><span id="L-705"><a href="#L-705"><span class="linenos">705</span></a>
|
</span><span id="L-705"><a href="#L-705"><span class="linenos">705</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
|
||||||
</span><span id="L-706"><a href="#L-706"><span class="linenos">706</span></a><span class="k">def</span> <span class="nf">concat_ws_to_dpipe_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ConcatWs</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
</span><span id="L-706"><a href="#L-706"><span class="linenos">706</span></a> <span class="k">if</span> <span class="n">time_format</span> <span class="ow">and</span> <span class="n">time_format</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="n">_dialect</span><span class="o">.</span><span class="n">TIME_FORMAT</span><span class="p">,</span> <span class="n">_dialect</span><span class="o">.</span><span class="n">DATE_FORMAT</span><span class="p">):</span>
|
||||||
</span><span id="L-707"><a href="#L-707"><span class="linenos">707</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
</span><span id="L-707"><a href="#L-707"><span class="linenos">707</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
|
||||||
</span><span id="L-708"><a href="#L-708"><span class="linenos">708</span></a> <span class="n">delim</span><span class="p">,</span> <span class="o">*</span><span class="n">rest_args</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
|
</span><span id="L-708"><a href="#L-708"><span class="linenos">708</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
|
||||||
</span><span id="L-709"><a href="#L-709"><span class="linenos">709</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
|
</span><span id="L-709"><a href="#L-709"><span class="linenos">709</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"format"</span><span class="p">]),</span>
|
||||||
</span><span id="L-710"><a href="#L-710"><span class="linenos">710</span></a> <span class="n">reduce</span><span class="p">(</span>
|
</span><span id="L-710"><a href="#L-710"><span class="linenos">710</span></a> <span class="s2">"date"</span><span class="p">,</span>
|
||||||
</span><span id="L-711"><a href="#L-711"><span class="linenos">711</span></a> <span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">x</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">delim</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">y</span><span class="p">)),</span>
|
</span><span id="L-711"><a href="#L-711"><span class="linenos">711</span></a> <span class="p">)</span>
|
||||||
</span><span id="L-712"><a href="#L-712"><span class="linenos">712</span></a> <span class="n">rest_args</span><span class="p">,</span>
|
</span><span id="L-712"><a href="#L-712"><span class="linenos">712</span></a> <span class="p">)</span>
|
||||||
</span><span id="L-713"><a href="#L-713"><span class="linenos">713</span></a> <span class="p">)</span>
|
</span><span id="L-713"><a href="#L-713"><span class="linenos">713</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">"date"</span><span class="p">))</span>
|
||||||
</span><span id="L-714"><a href="#L-714"><span class="linenos">714</span></a> <span class="p">)</span>
|
</span><span id="L-714"><a href="#L-714"><span class="linenos">714</span></a>
|
||||||
</span><span id="L-715"><a href="#L-715"><span class="linenos">715</span></a>
|
</span><span id="L-715"><a href="#L-715"><span class="linenos">715</span></a> <span class="k">return</span> <span class="n">_ts_or_ds_to_date_sql</span>
|
||||||
</span><span id="L-716"><a href="#L-716"><span class="linenos">716</span></a>
|
</span><span id="L-716"><a href="#L-716"><span class="linenos">716</span></a>
|
||||||
</span><span id="L-717"><a href="#L-717"><span class="linenos">717</span></a><span class="k">def</span> <span class="nf">regexp_extract_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpExtract</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
</span><span id="L-717"><a href="#L-717"><span class="linenos">717</span></a>
|
||||||
</span><span id="L-718"><a href="#L-718"><span class="linenos">718</span></a> <span class="n">bad_args</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">,</span> <span class="p">(</span><span class="s2">"position"</span><span class="p">,</span> <span class="s2">"occurrence"</span><span class="p">,</span> <span class="s2">"parameters"</span><span class="p">)))</span>
|
</span><span id="L-718"><a href="#L-718"><span class="linenos">718</span></a><span class="k">def</span> <span class="nf">concat_to_dpipe_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Concat</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="L-719"><a href="#L-719"><span class="linenos">719</span></a> <span class="k">if</span> <span class="n">bad_args</span><span class="p">:</span>
|
</span><span id="L-719"><a href="#L-719"><span class="linenos">719</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
||||||
</span><span id="L-720"><a href="#L-720"><span class="linenos">720</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">"REGEXP_EXTRACT does not support the following arg(s): </span><span class="si">{</span><span class="n">bad_args</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
</span><span id="L-720"><a href="#L-720"><span class="linenos">720</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">reduce</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">x</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">y</span><span class="p">),</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">))</span>
|
||||||
</span><span id="L-721"><a href="#L-721"><span class="linenos">721</span></a>
|
</span><span id="L-721"><a href="#L-721"><span class="linenos">721</span></a>
|
||||||
</span><span id="L-722"><a href="#L-722"><span class="linenos">722</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
|
</span><span id="L-722"><a href="#L-722"><span class="linenos">722</span></a>
|
||||||
</span><span id="L-723"><a href="#L-723"><span class="linenos">723</span></a> <span class="s2">"REGEXP_EXTRACT"</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"group"</span><span class="p">)</span>
|
</span><span id="L-723"><a href="#L-723"><span class="linenos">723</span></a><span class="k">def</span> <span class="nf">concat_ws_to_dpipe_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ConcatWs</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="L-724"><a href="#L-724"><span class="linenos">724</span></a> <span class="p">)</span>
|
</span><span id="L-724"><a href="#L-724"><span class="linenos">724</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
||||||
</span><span id="L-725"><a href="#L-725"><span class="linenos">725</span></a>
|
</span><span id="L-725"><a href="#L-725"><span class="linenos">725</span></a> <span class="n">delim</span><span class="p">,</span> <span class="o">*</span><span class="n">rest_args</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
|
||||||
</span><span id="L-726"><a href="#L-726"><span class="linenos">726</span></a>
|
</span><span id="L-726"><a href="#L-726"><span class="linenos">726</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
|
||||||
</span><span id="L-727"><a href="#L-727"><span class="linenos">727</span></a><span class="k">def</span> <span class="nf">regexp_replace_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
</span><span id="L-727"><a href="#L-727"><span class="linenos">727</span></a> <span class="n">reduce</span><span class="p">(</span>
|
||||||
</span><span id="L-728"><a href="#L-728"><span class="linenos">728</span></a> <span class="n">bad_args</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">,</span> <span class="p">(</span><span class="s2">"position"</span><span class="p">,</span> <span class="s2">"occurrence"</span><span class="p">,</span> <span class="s2">"parameters"</span><span class="p">)))</span>
|
</span><span id="L-728"><a href="#L-728"><span class="linenos">728</span></a> <span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">x</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">delim</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">y</span><span class="p">)),</span>
|
||||||
</span><span id="L-729"><a href="#L-729"><span class="linenos">729</span></a> <span class="k">if</span> <span class="n">bad_args</span><span class="p">:</span>
|
</span><span id="L-729"><a href="#L-729"><span class="linenos">729</span></a> <span class="n">rest_args</span><span class="p">,</span>
|
||||||
</span><span id="L-730"><a href="#L-730"><span class="linenos">730</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">"REGEXP_REPLACE does not support the following arg(s): </span><span class="si">{</span><span class="n">bad_args</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
</span><span id="L-730"><a href="#L-730"><span class="linenos">730</span></a> <span class="p">)</span>
|
||||||
</span><span id="L-731"><a href="#L-731"><span class="linenos">731</span></a>
|
</span><span id="L-731"><a href="#L-731"><span class="linenos">731</span></a> <span class="p">)</span>
|
||||||
</span><span id="L-732"><a href="#L-732"><span class="linenos">732</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
|
</span><span id="L-732"><a href="#L-732"><span class="linenos">732</span></a>
|
||||||
</span><span id="L-733"><a href="#L-733"><span class="linenos">733</span></a> <span class="s2">"REGEXP_REPLACE"</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"replacement"</span><span class="p">]</span>
|
</span><span id="L-733"><a href="#L-733"><span class="linenos">733</span></a>
|
||||||
</span><span id="L-734"><a href="#L-734"><span class="linenos">734</span></a> <span class="p">)</span>
|
</span><span id="L-734"><a href="#L-734"><span class="linenos">734</span></a><span class="k">def</span> <span class="nf">regexp_extract_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpExtract</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="L-735"><a href="#L-735"><span class="linenos">735</span></a>
|
</span><span id="L-735"><a href="#L-735"><span class="linenos">735</span></a> <span class="n">bad_args</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">,</span> <span class="p">(</span><span class="s2">"position"</span><span class="p">,</span> <span class="s2">"occurrence"</span><span class="p">,</span> <span class="s2">"parameters"</span><span class="p">)))</span>
|
||||||
</span><span id="L-736"><a href="#L-736"><span class="linenos">736</span></a>
|
</span><span id="L-736"><a href="#L-736"><span class="linenos">736</span></a> <span class="k">if</span> <span class="n">bad_args</span><span class="p">:</span>
|
||||||
</span><span id="L-737"><a href="#L-737"><span class="linenos">737</span></a><span class="k">def</span> <span class="nf">pivot_column_names</span><span class="p">(</span><span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
|
</span><span id="L-737"><a href="#L-737"><span class="linenos">737</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">"REGEXP_EXTRACT does not support the following arg(s): </span><span class="si">{</span><span class="n">bad_args</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||||
</span><span id="L-738"><a href="#L-738"><span class="linenos">738</span></a> <span class="n">names</span> <span class="o">=</span> <span class="p">[]</span>
|
</span><span id="L-738"><a href="#L-738"><span class="linenos">738</span></a>
|
||||||
</span><span id="L-739"><a href="#L-739"><span class="linenos">739</span></a> <span class="k">for</span> <span class="n">agg</span> <span class="ow">in</span> <span class="n">aggregations</span><span class="p">:</span>
|
</span><span id="L-739"><a href="#L-739"><span class="linenos">739</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
|
||||||
</span><span id="L-740"><a href="#L-740"><span class="linenos">740</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">agg</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
|
</span><span id="L-740"><a href="#L-740"><span class="linenos">740</span></a> <span class="s2">"REGEXP_EXTRACT"</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"group"</span><span class="p">)</span>
|
||||||
</span><span id="L-741"><a href="#L-741"><span class="linenos">741</span></a> <span class="n">names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">agg</span><span class="o">.</span><span class="n">alias</span><span class="p">)</span>
|
</span><span id="L-741"><a href="#L-741"><span class="linenos">741</span></a> <span class="p">)</span>
|
||||||
</span><span id="L-742"><a href="#L-742"><span class="linenos">742</span></a> <span class="k">else</span><span class="p">:</span>
|
</span><span id="L-742"><a href="#L-742"><span class="linenos">742</span></a>
|
||||||
</span><span id="L-743"><a href="#L-743"><span class="linenos">743</span></a><span class="w"> </span><span class="sd">"""</span>
|
</span><span id="L-743"><a href="#L-743"><span class="linenos">743</span></a>
|
||||||
</span><span id="L-744"><a href="#L-744"><span class="linenos">744</span></a><span class="sd"> This case corresponds to aggregations without aliases being used as suffixes</span>
|
</span><span id="L-744"><a href="#L-744"><span class="linenos">744</span></a><span class="k">def</span> <span class="nf">regexp_replace_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="L-745"><a href="#L-745"><span class="linenos">745</span></a><span class="sd"> (e.g. col_avg(foo)). We need to unquote identifiers because they're going to</span>
|
</span><span id="L-745"><a href="#L-745"><span class="linenos">745</span></a> <span class="n">bad_args</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span>
|
||||||
</span><span id="L-746"><a href="#L-746"><span class="linenos">746</span></a><span class="sd"> be quoted in the base parser's `_parse_pivot` method, due to `to_identifier`.</span>
|
</span><span id="L-746"><a href="#L-746"><span class="linenos">746</span></a> <span class="nb">filter</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">,</span> <span class="p">(</span><span class="s2">"position"</span><span class="p">,</span> <span class="s2">"occurrence"</span><span class="p">,</span> <span class="s2">"parameters"</span><span class="p">,</span> <span class="s2">"modifiers"</span><span class="p">))</span>
|
||||||
</span><span id="L-747"><a href="#L-747"><span class="linenos">747</span></a><span class="sd"> Otherwise, we'd end up with `col_avg(`foo`)` (notice the double quotes).</span>
|
</span><span id="L-747"><a href="#L-747"><span class="linenos">747</span></a> <span class="p">)</span>
|
||||||
</span><span id="L-748"><a href="#L-748"><span class="linenos">748</span></a><span class="sd"> """</span>
|
</span><span id="L-748"><a href="#L-748"><span class="linenos">748</span></a> <span class="k">if</span> <span class="n">bad_args</span><span class="p">:</span>
|
||||||
</span><span id="L-749"><a href="#L-749"><span class="linenos">749</span></a> <span class="n">agg_all_unquoted</span> <span class="o">=</span> <span class="n">agg</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
|
</span><span id="L-749"><a href="#L-749"><span class="linenos">749</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">"REGEXP_REPLACE does not support the following arg(s): </span><span class="si">{</span><span class="n">bad_args</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||||
</span><span id="L-750"><a href="#L-750"><span class="linenos">750</span></a> <span class="k">lambda</span> <span class="n">node</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">node</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
</span><span id="L-750"><a href="#L-750"><span class="linenos">750</span></a>
|
||||||
</span><span id="L-751"><a href="#L-751"><span class="linenos">751</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span>
|
</span><span id="L-751"><a href="#L-751"><span class="linenos">751</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
|
||||||
</span><span id="L-752"><a href="#L-752"><span class="linenos">752</span></a> <span class="k">else</span> <span class="n">node</span>
|
</span><span id="L-752"><a href="#L-752"><span class="linenos">752</span></a> <span class="s2">"REGEXP_REPLACE"</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"replacement"</span><span class="p">]</span>
|
||||||
</span><span id="L-753"><a href="#L-753"><span class="linenos">753</span></a> <span class="p">)</span>
|
</span><span id="L-753"><a href="#L-753"><span class="linenos">753</span></a> <span class="p">)</span>
|
||||||
</span><span id="L-754"><a href="#L-754"><span class="linenos">754</span></a> <span class="n">names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">agg_all_unquoted</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize_functions</span><span class="o">=</span><span class="s2">"lower"</span><span class="p">))</span>
|
</span><span id="L-754"><a href="#L-754"><span class="linenos">754</span></a>
|
||||||
</span><span id="L-755"><a href="#L-755"><span class="linenos">755</span></a>
|
</span><span id="L-755"><a href="#L-755"><span class="linenos">755</span></a>
|
||||||
</span><span id="L-756"><a href="#L-756"><span class="linenos">756</span></a> <span class="k">return</span> <span class="n">names</span>
|
</span><span id="L-756"><a href="#L-756"><span class="linenos">756</span></a><span class="k">def</span> <span class="nf">pivot_column_names</span><span class="p">(</span><span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
|
||||||
</span><span id="L-757"><a href="#L-757"><span class="linenos">757</span></a>
|
</span><span id="L-757"><a href="#L-757"><span class="linenos">757</span></a> <span class="n">names</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
</span><span id="L-758"><a href="#L-758"><span class="linenos">758</span></a>
|
</span><span id="L-758"><a href="#L-758"><span class="linenos">758</span></a> <span class="k">for</span> <span class="n">agg</span> <span class="ow">in</span> <span class="n">aggregations</span><span class="p">:</span>
|
||||||
</span><span id="L-759"><a href="#L-759"><span class="linenos">759</span></a><span class="k">def</span> <span class="nf">simplify_literal</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-></span> <span class="n">E</span><span class="p">:</span>
|
</span><span id="L-759"><a href="#L-759"><span class="linenos">759</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">agg</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
|
||||||
</span><span id="L-760"><a href="#L-760"><span class="linenos">760</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
|
</span><span id="L-760"><a href="#L-760"><span class="linenos">760</span></a> <span class="n">names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">agg</span><span class="o">.</span><span class="n">alias</span><span class="p">)</span>
|
||||||
</span><span id="L-761"><a href="#L-761"><span class="linenos">761</span></a> <span class="kn">from</span> <span class="nn">sqlglot.optimizer.simplify</span> <span class="kn">import</span> <span class="n">simplify</span>
|
</span><span id="L-761"><a href="#L-761"><span class="linenos">761</span></a> <span class="k">else</span><span class="p">:</span>
|
||||||
</span><span id="L-762"><a href="#L-762"><span class="linenos">762</span></a>
|
</span><span id="L-762"><a href="#L-762"><span class="linenos">762</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||||
</span><span id="L-763"><a href="#L-763"><span class="linenos">763</span></a> <span class="n">simplify</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
|
</span><span id="L-763"><a href="#L-763"><span class="linenos">763</span></a><span class="sd"> This case corresponds to aggregations without aliases being used as suffixes</span>
|
||||||
</span><span id="L-764"><a href="#L-764"><span class="linenos">764</span></a>
|
</span><span id="L-764"><a href="#L-764"><span class="linenos">764</span></a><span class="sd"> (e.g. col_avg(foo)). We need to unquote identifiers because they're going to</span>
|
||||||
</span><span id="L-765"><a href="#L-765"><span class="linenos">765</span></a> <span class="k">return</span> <span class="n">expression</span>
|
</span><span id="L-765"><a href="#L-765"><span class="linenos">765</span></a><span class="sd"> be quoted in the base parser's `_parse_pivot` method, due to `to_identifier`.</span>
|
||||||
</span><span id="L-766"><a href="#L-766"><span class="linenos">766</span></a>
|
</span><span id="L-766"><a href="#L-766"><span class="linenos">766</span></a><span class="sd"> Otherwise, we'd end up with `col_avg(`foo`)` (notice the double quotes).</span>
|
||||||
</span><span id="L-767"><a href="#L-767"><span class="linenos">767</span></a>
|
</span><span id="L-767"><a href="#L-767"><span class="linenos">767</span></a><span class="sd"> """</span>
|
||||||
</span><span id="L-768"><a href="#L-768"><span class="linenos">768</span></a><span class="k">def</span> <span class="nf">binary_from_function</span><span class="p">(</span><span class="n">expr_type</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">B</span><span class="p">])</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">],</span> <span class="n">B</span><span class="p">]:</span>
|
</span><span id="L-768"><a href="#L-768"><span class="linenos">768</span></a> <span class="n">agg_all_unquoted</span> <span class="o">=</span> <span class="n">agg</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
|
||||||
</span><span id="L-769"><a href="#L-769"><span class="linenos">769</span></a> <span class="k">return</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">expr_type</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
|
</span><span id="L-769"><a href="#L-769"><span class="linenos">769</span></a> <span class="k">lambda</span> <span class="n">node</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">node</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||||
</span><span id="L-770"><a href="#L-770"><span class="linenos">770</span></a>
|
</span><span id="L-770"><a href="#L-770"><span class="linenos">770</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span>
|
||||||
</span><span id="L-771"><a href="#L-771"><span class="linenos">771</span></a>
|
</span><span id="L-771"><a href="#L-771"><span class="linenos">771</span></a> <span class="k">else</span> <span class="n">node</span>
|
||||||
</span><span id="L-772"><a href="#L-772"><span class="linenos">772</span></a><span class="c1"># Used to represent DATE_TRUNC in Doris, Postgres and Starrocks dialects</span>
|
</span><span id="L-772"><a href="#L-772"><span class="linenos">772</span></a> <span class="p">)</span>
|
||||||
</span><span id="L-773"><a href="#L-773"><span class="linenos">773</span></a><span class="k">def</span> <span class="nf">parse_timestamp_trunc</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span>
|
</span><span id="L-773"><a href="#L-773"><span class="linenos">773</span></a> <span class="n">names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">agg_all_unquoted</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize_functions</span><span class="o">=</span><span class="s2">"lower"</span><span class="p">))</span>
|
||||||
</span><span id="L-774"><a href="#L-774"><span class="linenos">774</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
|
</span><span id="L-774"><a href="#L-774"><span class="linenos">774</span></a>
|
||||||
</span><span id="L-775"><a href="#L-775"><span class="linenos">775</span></a>
|
</span><span id="L-775"><a href="#L-775"><span class="linenos">775</span></a> <span class="k">return</span> <span class="n">names</span>
|
||||||
</span><span id="L-776"><a href="#L-776"><span class="linenos">776</span></a>
|
</span><span id="L-776"><a href="#L-776"><span class="linenos">776</span></a>
|
||||||
</span><span id="L-777"><a href="#L-777"><span class="linenos">777</span></a><span class="k">def</span> <span class="nf">any_value_to_max_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
</span><span id="L-777"><a href="#L-777"><span class="linenos">777</span></a>
|
||||||
</span><span id="L-778"><a href="#L-778"><span class="linenos">778</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">"MAX"</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
|
</span><span id="L-778"><a href="#L-778"><span class="linenos">778</span></a><span class="k">def</span> <span class="nf">binary_from_function</span><span class="p">(</span><span class="n">expr_type</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">B</span><span class="p">])</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">],</span> <span class="n">B</span><span class="p">]:</span>
|
||||||
</span><span id="L-779"><a href="#L-779"><span class="linenos">779</span></a>
|
</span><span id="L-779"><a href="#L-779"><span class="linenos">779</span></a> <span class="k">return</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">expr_type</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
|
||||||
</span><span id="L-780"><a href="#L-780"><span class="linenos">780</span></a>
|
</span><span id="L-780"><a href="#L-780"><span class="linenos">780</span></a>
|
||||||
</span><span id="L-781"><a href="#L-781"><span class="linenos">781</span></a><span class="k">def</span> <span class="nf">bool_xor_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
</span><span id="L-781"><a href="#L-781"><span class="linenos">781</span></a>
|
||||||
</span><span id="L-782"><a href="#L-782"><span class="linenos">782</span></a> <span class="n">a</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
|
</span><span id="L-782"><a href="#L-782"><span class="linenos">782</span></a><span class="c1"># Used to represent DATE_TRUNC in Doris, Postgres and Starrocks dialects</span>
|
||||||
</span><span id="L-783"><a href="#L-783"><span class="linenos">783</span></a> <span class="n">b</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
|
</span><span id="L-783"><a href="#L-783"><span class="linenos">783</span></a><span class="k">def</span> <span class="nf">parse_timestamp_trunc</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span>
|
||||||
</span><span id="L-784"><a href="#L-784"><span class="linenos">784</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"(</span><span class="si">{</span><span class="n">a</span><span class="si">}</span><span class="s2"> AND (NOT </span><span class="si">{</span><span class="n">b</span><span class="si">}</span><span class="s2">)) OR ((NOT </span><span class="si">{</span><span class="n">a</span><span class="si">}</span><span class="s2">) AND </span><span class="si">{</span><span class="n">b</span><span class="si">}</span><span class="s2">)"</span>
|
</span><span id="L-784"><a href="#L-784"><span class="linenos">784</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
|
||||||
</span><span id="L-785"><a href="#L-785"><span class="linenos">785</span></a>
|
</span><span id="L-785"><a href="#L-785"><span class="linenos">785</span></a>
|
||||||
</span><span id="L-786"><a href="#L-786"><span class="linenos">786</span></a>
|
</span><span id="L-786"><a href="#L-786"><span class="linenos">786</span></a>
|
||||||
</span><span id="L-787"><a href="#L-787"><span class="linenos">787</span></a><span class="c1"># Used to generate JSON_OBJECT with a comma in BigQuery and MySQL instead of colon</span>
|
</span><span id="L-787"><a href="#L-787"><span class="linenos">787</span></a><span class="k">def</span> <span class="nf">any_value_to_max_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="L-788"><a href="#L-788"><span class="linenos">788</span></a><span class="k">def</span> <span class="nf">json_keyvalue_comma_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONKeyValue</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
</span><span id="L-788"><a href="#L-788"><span class="linenos">788</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">"MAX"</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
|
||||||
</span><span id="L-789"><a href="#L-789"><span class="linenos">789</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">'this'</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">'expression'</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span>
|
</span><span id="L-789"><a href="#L-789"><span class="linenos">789</span></a>
|
||||||
</span><span id="L-790"><a href="#L-790"><span class="linenos">790</span></a>
|
</span><span id="L-790"><a href="#L-790"><span class="linenos">790</span></a>
|
||||||
</span><span id="L-791"><a href="#L-791"><span class="linenos">791</span></a>
|
</span><span id="L-791"><a href="#L-791"><span class="linenos">791</span></a><span class="k">def</span> <span class="nf">bool_xor_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="L-792"><a href="#L-792"><span class="linenos">792</span></a><span class="k">def</span> <span class="nf">is_parse_json</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
|
</span><span id="L-792"><a href="#L-792"><span class="linenos">792</span></a> <span class="n">a</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
|
||||||
</span><span id="L-793"><a href="#L-793"><span class="linenos">793</span></a> <span class="k">return</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">ParseJSON</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span>
|
</span><span id="L-793"><a href="#L-793"><span class="linenos">793</span></a> <span class="n">b</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
|
||||||
</span><span id="L-794"><a href="#L-794"><span class="linenos">794</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">"json"</span><span class="p">)</span>
|
</span><span id="L-794"><a href="#L-794"><span class="linenos">794</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"(</span><span class="si">{</span><span class="n">a</span><span class="si">}</span><span class="s2"> AND (NOT </span><span class="si">{</span><span class="n">b</span><span class="si">}</span><span class="s2">)) OR ((NOT </span><span class="si">{</span><span class="n">a</span><span class="si">}</span><span class="s2">) AND </span><span class="si">{</span><span class="n">b</span><span class="si">}</span><span class="s2">)"</span>
|
||||||
</span><span id="L-795"><a href="#L-795"><span class="linenos">795</span></a> <span class="p">)</span>
|
</span><span id="L-795"><a href="#L-795"><span class="linenos">795</span></a>
|
||||||
</span><span id="L-796"><a href="#L-796"><span class="linenos">796</span></a>
|
</span><span id="L-796"><a href="#L-796"><span class="linenos">796</span></a>
|
||||||
</span><span id="L-797"><a href="#L-797"><span class="linenos">797</span></a>
|
</span><span id="L-797"><a href="#L-797"><span class="linenos">797</span></a><span class="c1"># Used to generate JSON_OBJECT with a comma in BigQuery and MySQL instead of colon</span>
|
||||||
</span><span id="L-798"><a href="#L-798"><span class="linenos">798</span></a><span class="k">def</span> <span class="nf">isnull_to_is_null</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
|
</span><span id="L-798"><a href="#L-798"><span class="linenos">798</span></a><span class="k">def</span> <span class="nf">json_keyvalue_comma_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONKeyValue</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="L-799"><a href="#L-799"><span class="linenos">799</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Paren</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()))</span>
|
</span><span id="L-799"><a href="#L-799"><span class="linenos">799</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">'this'</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">'expression'</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span>
|
||||||
</span><span id="L-800"><a href="#L-800"><span class="linenos">800</span></a>
|
</span><span id="L-800"><a href="#L-800"><span class="linenos">800</span></a>
|
||||||
</span><span id="L-801"><a href="#L-801"><span class="linenos">801</span></a>
|
</span><span id="L-801"><a href="#L-801"><span class="linenos">801</span></a>
|
||||||
</span><span id="L-802"><a href="#L-802"><span class="linenos">802</span></a><span class="k">def</span> <span class="nf">move_insert_cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
</span><span id="L-802"><a href="#L-802"><span class="linenos">802</span></a><span class="k">def</span> <span class="nf">is_parse_json</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
|
||||||
</span><span id="L-803"><a href="#L-803"><span class="linenos">803</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"with"</span><span class="p">):</span>
|
</span><span id="L-803"><a href="#L-803"><span class="linenos">803</span></a> <span class="k">return</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">ParseJSON</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span>
|
||||||
</span><span id="L-804"><a href="#L-804"><span class="linenos">804</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
</span><span id="L-804"><a href="#L-804"><span class="linenos">804</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">"json"</span><span class="p">)</span>
|
||||||
</span><span id="L-805"><a href="#L-805"><span class="linenos">805</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"with"</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"with"</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span>
|
</span><span id="L-805"><a href="#L-805"><span class="linenos">805</span></a> <span class="p">)</span>
|
||||||
</span><span id="L-806"><a href="#L-806"><span class="linenos">806</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">insert_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
|
</span><span id="L-806"><a href="#L-806"><span class="linenos">806</span></a>
|
||||||
|
</span><span id="L-807"><a href="#L-807"><span class="linenos">807</span></a>
|
||||||
|
</span><span id="L-808"><a href="#L-808"><span class="linenos">808</span></a><span class="k">def</span> <span class="nf">isnull_to_is_null</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
|
||||||
|
</span><span id="L-809"><a href="#L-809"><span class="linenos">809</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Paren</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()))</span>
|
||||||
|
</span><span id="L-810"><a href="#L-810"><span class="linenos">810</span></a>
|
||||||
|
</span><span id="L-811"><a href="#L-811"><span class="linenos">811</span></a>
|
||||||
|
</span><span id="L-812"><a href="#L-812"><span class="linenos">812</span></a><span class="k">def</span> <span class="nf">move_insert_cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
|
</span><span id="L-813"><a href="#L-813"><span class="linenos">813</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"with"</span><span class="p">):</span>
|
||||||
|
</span><span id="L-814"><a href="#L-814"><span class="linenos">814</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
||||||
|
</span><span id="L-815"><a href="#L-815"><span class="linenos">815</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"with"</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"with"</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span>
|
||||||
|
</span><span id="L-816"><a href="#L-816"><span class="linenos">816</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">insert_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
|
||||||
|
</span><span id="L-817"><a href="#L-817"><span class="linenos">817</span></a>
|
||||||
|
</span><span id="L-818"><a href="#L-818"><span class="linenos">818</span></a>
|
||||||
|
</span><span id="L-819"><a href="#L-819"><span class="linenos">819</span></a><span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
|
||||||
|
</span><span id="L-820"><a href="#L-820"><span class="linenos">820</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span>
|
||||||
|
</span><span id="L-821"><a href="#L-821"><span class="linenos">821</span></a><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
|
</span><span id="L-822"><a href="#L-822"><span class="linenos">822</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"start"</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">"1"</span>
|
||||||
|
</span><span id="L-823"><a href="#L-823"><span class="linenos">823</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"increment"</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">"1"</span>
|
||||||
|
</span><span id="L-824"><a href="#L-824"><span class="linenos">824</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"IDENTITY(</span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">increment</span><span class="si">}</span><span class="s2">)"</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -3336,6 +3357,34 @@ columns are removed from the create statement.</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</section>
|
||||||
|
<section id="no_timestamp_sql">
|
||||||
|
<input id="no_timestamp_sql-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||||
|
<div class="attr function">
|
||||||
|
|
||||||
|
<span class="def">def</span>
|
||||||
|
<span class="name">no_timestamp_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#Timestamp">sqlglot.expressions.Timestamp</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
|
||||||
|
|
||||||
|
<label class="view-source-button" for="no_timestamp_sql-view-source"><span>View Source</span></label>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<a class="headerlink" href="#no_timestamp_sql"></a>
|
||||||
|
<div class="pdoc-code codehilite"><pre><span></span><span id="no_timestamp_sql-599"><a href="#no_timestamp_sql-599"><span class="linenos">599</span></a><span class="k">def</span> <span class="nf">no_timestamp_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Timestamp</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
|
</span><span id="no_timestamp_sql-600"><a href="#no_timestamp_sql-600"><span class="linenos">600</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">:</span>
|
||||||
|
</span><span id="no_timestamp_sql-601"><a href="#no_timestamp_sql-601"><span class="linenos">601</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">))</span>
|
||||||
|
</span><span id="no_timestamp_sql-602"><a href="#no_timestamp_sql-602"><span class="linenos">602</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">"expression"</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="n">TIMEZONES</span><span class="p">:</span>
|
||||||
|
</span><span id="no_timestamp_sql-603"><a href="#no_timestamp_sql-603"><span class="linenos">603</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
|
||||||
|
</span><span id="no_timestamp_sql-604"><a href="#no_timestamp_sql-604"><span class="linenos">604</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">(</span>
|
||||||
|
</span><span id="no_timestamp_sql-605"><a href="#no_timestamp_sql-605"><span class="linenos">605</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">),</span>
|
||||||
|
</span><span id="no_timestamp_sql-606"><a href="#no_timestamp_sql-606"><span class="linenos">606</span></a> <span class="n">zone</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
|
||||||
|
</span><span id="no_timestamp_sql-607"><a href="#no_timestamp_sql-607"><span class="linenos">607</span></a> <span class="p">)</span>
|
||||||
|
</span><span id="no_timestamp_sql-608"><a href="#no_timestamp_sql-608"><span class="linenos">608</span></a> <span class="p">)</span>
|
||||||
|
</span><span id="no_timestamp_sql-609"><a href="#no_timestamp_sql-609"><span class="linenos">609</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
|
||||||
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
<section id="locate_to_strposition">
|
<section id="locate_to_strposition">
|
||||||
<input id="locate_to_strposition-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
<input id="locate_to_strposition-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||||
|
@ -3348,10 +3397,10 @@ columns are removed from the create statement.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#locate_to_strposition"></a>
|
<a class="headerlink" href="#locate_to_strposition"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="locate_to_strposition-599"><a href="#locate_to_strposition-599"><span class="linenos">599</span></a><span class="k">def</span> <span class="nf">locate_to_strposition</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="locate_to_strposition-612"><a href="#locate_to_strposition-612"><span class="linenos">612</span></a><span class="k">def</span> <span class="nf">locate_to_strposition</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
|
||||||
</span><span id="locate_to_strposition-600"><a href="#locate_to_strposition-600"><span class="linenos">600</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">(</span>
|
</span><span id="locate_to_strposition-613"><a href="#locate_to_strposition-613"><span class="linenos">613</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">(</span>
|
||||||
</span><span id="locate_to_strposition-601"><a href="#locate_to_strposition-601"><span class="linenos">601</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">substr</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">position</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
|
</span><span id="locate_to_strposition-614"><a href="#locate_to_strposition-614"><span class="linenos">614</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">substr</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">position</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
|
||||||
</span><span id="locate_to_strposition-602"><a href="#locate_to_strposition-602"><span class="linenos">602</span></a> <span class="p">)</span>
|
</span><span id="locate_to_strposition-615"><a href="#locate_to_strposition-615"><span class="linenos">615</span></a> <span class="p">)</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -3369,10 +3418,10 @@ columns are removed from the create statement.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#strposition_to_locate_sql"></a>
|
<a class="headerlink" href="#strposition_to_locate_sql"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="strposition_to_locate_sql-605"><a href="#strposition_to_locate_sql-605"><span class="linenos">605</span></a><span class="k">def</span> <span class="nf">strposition_to_locate_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="strposition_to_locate_sql-618"><a href="#strposition_to_locate_sql-618"><span class="linenos">618</span></a><span class="k">def</span> <span class="nf">strposition_to_locate_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="strposition_to_locate_sql-606"><a href="#strposition_to_locate_sql-606"><span class="linenos">606</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
|
</span><span id="strposition_to_locate_sql-619"><a href="#strposition_to_locate_sql-619"><span class="linenos">619</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
|
||||||
</span><span id="strposition_to_locate_sql-607"><a href="#strposition_to_locate_sql-607"><span class="linenos">607</span></a> <span class="s2">"LOCATE"</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"substr"</span><span class="p">),</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"position"</span><span class="p">)</span>
|
</span><span id="strposition_to_locate_sql-620"><a href="#strposition_to_locate_sql-620"><span class="linenos">620</span></a> <span class="s2">"LOCATE"</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"substr"</span><span class="p">),</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"position"</span><span class="p">)</span>
|
||||||
</span><span id="strposition_to_locate_sql-608"><a href="#strposition_to_locate_sql-608"><span class="linenos">608</span></a> <span class="p">)</span>
|
</span><span id="strposition_to_locate_sql-621"><a href="#strposition_to_locate_sql-621"><span class="linenos">621</span></a> <span class="p">)</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -3390,13 +3439,13 @@ columns are removed from the create statement.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#left_to_substring_sql"></a>
|
<a class="headerlink" href="#left_to_substring_sql"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="left_to_substring_sql-611"><a href="#left_to_substring_sql-611"><span class="linenos">611</span></a><span class="k">def</span> <span class="nf">left_to_substring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="left_to_substring_sql-624"><a href="#left_to_substring_sql-624"><span class="linenos">624</span></a><span class="k">def</span> <span class="nf">left_to_substring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="left_to_substring_sql-612"><a href="#left_to_substring_sql-612"><span class="linenos">612</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
</span><span id="left_to_substring_sql-625"><a href="#left_to_substring_sql-625"><span class="linenos">625</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
||||||
</span><span id="left_to_substring_sql-613"><a href="#left_to_substring_sql-613"><span class="linenos">613</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
|
</span><span id="left_to_substring_sql-626"><a href="#left_to_substring_sql-626"><span class="linenos">626</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
|
||||||
</span><span id="left_to_substring_sql-614"><a href="#left_to_substring_sql-614"><span class="linenos">614</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">(</span>
|
</span><span id="left_to_substring_sql-627"><a href="#left_to_substring_sql-627"><span class="linenos">627</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">(</span>
|
||||||
</span><span id="left_to_substring_sql-615"><a href="#left_to_substring_sql-615"><span class="linenos">615</span></a> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span> <span class="n">length</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
|
</span><span id="left_to_substring_sql-628"><a href="#left_to_substring_sql-628"><span class="linenos">628</span></a> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span> <span class="n">length</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span>
|
||||||
</span><span id="left_to_substring_sql-616"><a href="#left_to_substring_sql-616"><span class="linenos">616</span></a> <span class="p">)</span>
|
</span><span id="left_to_substring_sql-629"><a href="#left_to_substring_sql-629"><span class="linenos">629</span></a> <span class="p">)</span>
|
||||||
</span><span id="left_to_substring_sql-617"><a href="#left_to_substring_sql-617"><span class="linenos">617</span></a> <span class="p">)</span>
|
</span><span id="left_to_substring_sql-630"><a href="#left_to_substring_sql-630"><span class="linenos">630</span></a> <span class="p">)</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -3414,14 +3463,14 @@ columns are removed from the create statement.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#right_to_substring_sql"></a>
|
<a class="headerlink" href="#right_to_substring_sql"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="right_to_substring_sql-620"><a href="#right_to_substring_sql-620"><span class="linenos">620</span></a><span class="k">def</span> <span class="nf">right_to_substring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="right_to_substring_sql-633"><a href="#right_to_substring_sql-633"><span class="linenos">633</span></a><span class="k">def</span> <span class="nf">right_to_substring_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="right_to_substring_sql-621"><a href="#right_to_substring_sql-621"><span class="linenos">621</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
</span><span id="right_to_substring_sql-634"><a href="#right_to_substring_sql-634"><span class="linenos">634</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
||||||
</span><span id="right_to_substring_sql-622"><a href="#right_to_substring_sql-622"><span class="linenos">622</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
|
</span><span id="right_to_substring_sql-635"><a href="#right_to_substring_sql-635"><span class="linenos">635</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
|
||||||
</span><span id="right_to_substring_sql-623"><a href="#right_to_substring_sql-623"><span class="linenos">623</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">(</span>
|
</span><span id="right_to_substring_sql-636"><a href="#right_to_substring_sql-636"><span class="linenos">636</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">(</span>
|
||||||
</span><span id="right_to_substring_sql-624"><a href="#right_to_substring_sql-624"><span class="linenos">624</span></a> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
|
</span><span id="right_to_substring_sql-637"><a href="#right_to_substring_sql-637"><span class="linenos">637</span></a> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
|
||||||
</span><span id="right_to_substring_sql-625"><a href="#right_to_substring_sql-625"><span class="linenos">625</span></a> <span class="n">start</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Length</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="o">-</span> <span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span> <span class="o">-</span> <span class="mi">1</span><span class="p">),</span>
|
</span><span id="right_to_substring_sql-638"><a href="#right_to_substring_sql-638"><span class="linenos">638</span></a> <span class="n">start</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Length</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="o">-</span> <span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span> <span class="o">-</span> <span class="mi">1</span><span class="p">),</span>
|
||||||
</span><span id="right_to_substring_sql-626"><a href="#right_to_substring_sql-626"><span class="linenos">626</span></a> <span class="p">)</span>
|
</span><span id="right_to_substring_sql-639"><a href="#right_to_substring_sql-639"><span class="linenos">639</span></a> <span class="p">)</span>
|
||||||
</span><span id="right_to_substring_sql-627"><a href="#right_to_substring_sql-627"><span class="linenos">627</span></a> <span class="p">)</span>
|
</span><span id="right_to_substring_sql-640"><a href="#right_to_substring_sql-640"><span class="linenos">640</span></a> <span class="p">)</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -3439,8 +3488,8 @@ columns are removed from the create statement.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#timestrtotime_sql"></a>
|
<a class="headerlink" href="#timestrtotime_sql"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="timestrtotime_sql-630"><a href="#timestrtotime_sql-630"><span class="linenos">630</span></a><span class="k">def</span> <span class="nf">timestrtotime_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="timestrtotime_sql-643"><a href="#timestrtotime_sql-643"><span class="linenos">643</span></a><span class="k">def</span> <span class="nf">timestrtotime_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="timestrtotime_sql-631"><a href="#timestrtotime_sql-631"><span class="linenos">631</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">"timestamp"</span><span class="p">))</span>
|
</span><span id="timestrtotime_sql-644"><a href="#timestrtotime_sql-644"><span class="linenos">644</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">"timestamp"</span><span class="p">))</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -3458,8 +3507,8 @@ columns are removed from the create statement.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#datestrtodate_sql"></a>
|
<a class="headerlink" href="#datestrtodate_sql"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="datestrtodate_sql-634"><a href="#datestrtodate_sql-634"><span class="linenos">634</span></a><span class="k">def</span> <span class="nf">datestrtodate_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="datestrtodate_sql-647"><a href="#datestrtodate_sql-647"><span class="linenos">647</span></a><span class="k">def</span> <span class="nf">datestrtodate_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="datestrtodate_sql-635"><a href="#datestrtodate_sql-635"><span class="linenos">635</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">"date"</span><span class="p">))</span>
|
</span><span id="datestrtodate_sql-648"><a href="#datestrtodate_sql-648"><span class="linenos">648</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">"date"</span><span class="p">))</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -3477,14 +3526,14 @@ columns are removed from the create statement.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#encode_decode_sql"></a>
|
<a class="headerlink" href="#encode_decode_sql"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="encode_decode_sql-639"><a href="#encode_decode_sql-639"><span class="linenos">639</span></a><span class="k">def</span> <span class="nf">encode_decode_sql</span><span class="p">(</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="encode_decode_sql-652"><a href="#encode_decode_sql-652"><span class="linenos">652</span></a><span class="k">def</span> <span class="nf">encode_decode_sql</span><span class="p">(</span>
|
||||||
</span><span id="encode_decode_sql-640"><a href="#encode_decode_sql-640"><span class="linenos">640</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">replace</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
|
</span><span id="encode_decode_sql-653"><a href="#encode_decode_sql-653"><span class="linenos">653</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">replace</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
|
||||||
</span><span id="encode_decode_sql-641"><a href="#encode_decode_sql-641"><span class="linenos">641</span></a><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
</span><span id="encode_decode_sql-654"><a href="#encode_decode_sql-654"><span class="linenos">654</span></a><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="encode_decode_sql-642"><a href="#encode_decode_sql-642"><span class="linenos">642</span></a> <span class="n">charset</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"charset"</span><span class="p">)</span>
|
</span><span id="encode_decode_sql-655"><a href="#encode_decode_sql-655"><span class="linenos">655</span></a> <span class="n">charset</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"charset"</span><span class="p">)</span>
|
||||||
</span><span id="encode_decode_sql-643"><a href="#encode_decode_sql-643"><span class="linenos">643</span></a> <span class="k">if</span> <span class="n">charset</span> <span class="ow">and</span> <span class="n">charset</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">!=</span> <span class="s2">"utf-8"</span><span class="p">:</span>
|
</span><span id="encode_decode_sql-656"><a href="#encode_decode_sql-656"><span class="linenos">656</span></a> <span class="k">if</span> <span class="n">charset</span> <span class="ow">and</span> <span class="n">charset</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">!=</span> <span class="s2">"utf-8"</span><span class="p">:</span>
|
||||||
</span><span id="encode_decode_sql-644"><a href="#encode_decode_sql-644"><span class="linenos">644</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Expected utf-8 character set, got </span><span class="si">{</span><span class="n">charset</span><span class="si">}</span><span class="s2">."</span><span class="p">)</span>
|
</span><span id="encode_decode_sql-657"><a href="#encode_decode_sql-657"><span class="linenos">657</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Expected utf-8 character set, got </span><span class="si">{</span><span class="n">charset</span><span class="si">}</span><span class="s2">."</span><span class="p">)</span>
|
||||||
</span><span id="encode_decode_sql-645"><a href="#encode_decode_sql-645"><span class="linenos">645</span></a>
|
</span><span id="encode_decode_sql-658"><a href="#encode_decode_sql-658"><span class="linenos">658</span></a>
|
||||||
</span><span id="encode_decode_sql-646"><a href="#encode_decode_sql-646"><span class="linenos">646</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"replace"</span><span class="p">)</span> <span class="k">if</span> <span class="n">replace</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
|
</span><span id="encode_decode_sql-659"><a href="#encode_decode_sql-659"><span class="linenos">659</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"replace"</span><span class="p">)</span> <span class="k">if</span> <span class="n">replace</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -3502,9 +3551,9 @@ columns are removed from the create statement.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#min_or_least"></a>
|
<a class="headerlink" href="#min_or_least"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="min_or_least-649"><a href="#min_or_least-649"><span class="linenos">649</span></a><span class="k">def</span> <span class="nf">min_or_least</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Min</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="min_or_least-662"><a href="#min_or_least-662"><span class="linenos">662</span></a><span class="k">def</span> <span class="nf">min_or_least</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Min</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="min_or_least-650"><a href="#min_or_least-650"><span class="linenos">650</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">"LEAST"</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">"MIN"</span>
|
</span><span id="min_or_least-663"><a href="#min_or_least-663"><span class="linenos">663</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">"LEAST"</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">"MIN"</span>
|
||||||
</span><span id="min_or_least-651"><a href="#min_or_least-651"><span class="linenos">651</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="n">name</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
|
</span><span id="min_or_least-664"><a href="#min_or_least-664"><span class="linenos">664</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="n">name</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -3522,9 +3571,9 @@ columns are removed from the create statement.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#max_or_greatest"></a>
|
<a class="headerlink" href="#max_or_greatest"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="max_or_greatest-654"><a href="#max_or_greatest-654"><span class="linenos">654</span></a><span class="k">def</span> <span class="nf">max_or_greatest</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Max</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="max_or_greatest-667"><a href="#max_or_greatest-667"><span class="linenos">667</span></a><span class="k">def</span> <span class="nf">max_or_greatest</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Max</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="max_or_greatest-655"><a href="#max_or_greatest-655"><span class="linenos">655</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">"GREATEST"</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">"MAX"</span>
|
</span><span id="max_or_greatest-668"><a href="#max_or_greatest-668"><span class="linenos">668</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">"GREATEST"</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">"MAX"</span>
|
||||||
</span><span id="max_or_greatest-656"><a href="#max_or_greatest-656"><span class="linenos">656</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="n">name</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
|
</span><span id="max_or_greatest-669"><a href="#max_or_greatest-669"><span class="linenos">669</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="n">name</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -3542,14 +3591,14 @@ columns are removed from the create statement.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#count_if_to_sum"></a>
|
<a class="headerlink" href="#count_if_to_sum"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="count_if_to_sum-659"><a href="#count_if_to_sum-659"><span class="linenos">659</span></a><span class="k">def</span> <span class="nf">count_if_to_sum</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="count_if_to_sum-672"><a href="#count_if_to_sum-672"><span class="linenos">672</span></a><span class="k">def</span> <span class="nf">count_if_to_sum</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="count_if_to_sum-660"><a href="#count_if_to_sum-660"><span class="linenos">660</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
|
</span><span id="count_if_to_sum-673"><a href="#count_if_to_sum-673"><span class="linenos">673</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
|
||||||
</span><span id="count_if_to_sum-661"><a href="#count_if_to_sum-661"><span class="linenos">661</span></a>
|
</span><span id="count_if_to_sum-674"><a href="#count_if_to_sum-674"><span class="linenos">674</span></a>
|
||||||
</span><span id="count_if_to_sum-662"><a href="#count_if_to_sum-662"><span class="linenos">662</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">):</span>
|
</span><span id="count_if_to_sum-675"><a href="#count_if_to_sum-675"><span class="linenos">675</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">):</span>
|
||||||
</span><span id="count_if_to_sum-663"><a href="#count_if_to_sum-663"><span class="linenos">663</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
</span><span id="count_if_to_sum-676"><a href="#count_if_to_sum-676"><span class="linenos">676</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||||
</span><span id="count_if_to_sum-664"><a href="#count_if_to_sum-664"><span class="linenos">664</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">"DISTINCT is not supported when converting COUNT_IF to SUM"</span><span class="p">)</span>
|
</span><span id="count_if_to_sum-677"><a href="#count_if_to_sum-677"><span class="linenos">677</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">"DISTINCT is not supported when converting COUNT_IF to SUM"</span><span class="p">)</span>
|
||||||
</span><span id="count_if_to_sum-665"><a href="#count_if_to_sum-665"><span class="linenos">665</span></a>
|
</span><span id="count_if_to_sum-678"><a href="#count_if_to_sum-678"><span class="linenos">678</span></a>
|
||||||
</span><span id="count_if_to_sum-666"><a href="#count_if_to_sum-666"><span class="linenos">666</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">"sum"</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">"if"</span><span class="p">,</span> <span class="n">cond</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
|
</span><span id="count_if_to_sum-679"><a href="#count_if_to_sum-679"><span class="linenos">679</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">"sum"</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">"if"</span><span class="p">,</span> <span class="n">cond</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -3567,21 +3616,21 @@ columns are removed from the create statement.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#trim_sql"></a>
|
<a class="headerlink" href="#trim_sql"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="trim_sql-669"><a href="#trim_sql-669"><span class="linenos">669</span></a><span class="k">def</span> <span class="nf">trim_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="trim_sql-682"><a href="#trim_sql-682"><span class="linenos">682</span></a><span class="k">def</span> <span class="nf">trim_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="trim_sql-670"><a href="#trim_sql-670"><span class="linenos">670</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"this"</span><span class="p">)</span>
|
</span><span id="trim_sql-683"><a href="#trim_sql-683"><span class="linenos">683</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"this"</span><span class="p">)</span>
|
||||||
</span><span id="trim_sql-671"><a href="#trim_sql-671"><span class="linenos">671</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"position"</span><span class="p">)</span>
|
</span><span id="trim_sql-684"><a href="#trim_sql-684"><span class="linenos">684</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"position"</span><span class="p">)</span>
|
||||||
</span><span id="trim_sql-672"><a href="#trim_sql-672"><span class="linenos">672</span></a> <span class="n">remove_chars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"expression"</span><span class="p">)</span>
|
</span><span id="trim_sql-685"><a href="#trim_sql-685"><span class="linenos">685</span></a> <span class="n">remove_chars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"expression"</span><span class="p">)</span>
|
||||||
</span><span id="trim_sql-673"><a href="#trim_sql-673"><span class="linenos">673</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"collation"</span><span class="p">)</span>
|
</span><span id="trim_sql-686"><a href="#trim_sql-686"><span class="linenos">686</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"collation"</span><span class="p">)</span>
|
||||||
</span><span id="trim_sql-674"><a href="#trim_sql-674"><span class="linenos">674</span></a>
|
</span><span id="trim_sql-687"><a href="#trim_sql-687"><span class="linenos">687</span></a>
|
||||||
</span><span id="trim_sql-675"><a href="#trim_sql-675"><span class="linenos">675</span></a> <span class="c1"># Use TRIM/LTRIM/RTRIM syntax if the expression isn't database-specific</span>
|
</span><span id="trim_sql-688"><a href="#trim_sql-688"><span class="linenos">688</span></a> <span class="c1"># Use TRIM/LTRIM/RTRIM syntax if the expression isn't database-specific</span>
|
||||||
</span><span id="trim_sql-676"><a href="#trim_sql-676"><span class="linenos">676</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">remove_chars</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">collation</span><span class="p">:</span>
|
</span><span id="trim_sql-689"><a href="#trim_sql-689"><span class="linenos">689</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">remove_chars</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">collation</span><span class="p">:</span>
|
||||||
</span><span id="trim_sql-677"><a href="#trim_sql-677"><span class="linenos">677</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">trim_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
|
</span><span id="trim_sql-690"><a href="#trim_sql-690"><span class="linenos">690</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">trim_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
|
||||||
</span><span id="trim_sql-678"><a href="#trim_sql-678"><span class="linenos">678</span></a>
|
</span><span id="trim_sql-691"><a href="#trim_sql-691"><span class="linenos">691</span></a>
|
||||||
</span><span id="trim_sql-679"><a href="#trim_sql-679"><span class="linenos">679</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">trim_type</span><span class="si">}</span><span class="s2"> "</span> <span class="k">if</span> <span class="n">trim_type</span> <span class="k">else</span> <span class="s2">""</span>
|
</span><span id="trim_sql-692"><a href="#trim_sql-692"><span class="linenos">692</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">trim_type</span><span class="si">}</span><span class="s2"> "</span> <span class="k">if</span> <span class="n">trim_type</span> <span class="k">else</span> <span class="s2">""</span>
|
||||||
</span><span id="trim_sql-680"><a href="#trim_sql-680"><span class="linenos">680</span></a> <span class="n">remove_chars</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">remove_chars</span><span class="si">}</span><span class="s2"> "</span> <span class="k">if</span> <span class="n">remove_chars</span> <span class="k">else</span> <span class="s2">""</span>
|
</span><span id="trim_sql-693"><a href="#trim_sql-693"><span class="linenos">693</span></a> <span class="n">remove_chars</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">remove_chars</span><span class="si">}</span><span class="s2"> "</span> <span class="k">if</span> <span class="n">remove_chars</span> <span class="k">else</span> <span class="s2">""</span>
|
||||||
</span><span id="trim_sql-681"><a href="#trim_sql-681"><span class="linenos">681</span></a> <span class="n">from_part</span> <span class="o">=</span> <span class="s2">"FROM "</span> <span class="k">if</span> <span class="n">trim_type</span> <span class="ow">or</span> <span class="n">remove_chars</span> <span class="k">else</span> <span class="s2">""</span>
|
</span><span id="trim_sql-694"><a href="#trim_sql-694"><span class="linenos">694</span></a> <span class="n">from_part</span> <span class="o">=</span> <span class="s2">"FROM "</span> <span class="k">if</span> <span class="n">trim_type</span> <span class="ow">or</span> <span class="n">remove_chars</span> <span class="k">else</span> <span class="s2">""</span>
|
||||||
</span><span id="trim_sql-682"><a href="#trim_sql-682"><span class="linenos">682</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" COLLATE </span><span class="si">{</span><span class="n">collation</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">collation</span> <span class="k">else</span> <span class="s2">""</span>
|
</span><span id="trim_sql-695"><a href="#trim_sql-695"><span class="linenos">695</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" COLLATE </span><span class="si">{</span><span class="n">collation</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">collation</span> <span class="k">else</span> <span class="s2">""</span>
|
||||||
</span><span id="trim_sql-683"><a href="#trim_sql-683"><span class="linenos">683</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"TRIM(</span><span class="si">{</span><span class="n">trim_type</span><span class="si">}{</span><span class="n">remove_chars</span><span class="si">}{</span><span class="n">from_part</span><span class="si">}{</span><span class="n">target</span><span class="si">}{</span><span class="n">collation</span><span class="si">}</span><span class="s2">)"</span>
|
</span><span id="trim_sql-696"><a href="#trim_sql-696"><span class="linenos">696</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"TRIM(</span><span class="si">{</span><span class="n">trim_type</span><span class="si">}{</span><span class="n">remove_chars</span><span class="si">}{</span><span class="n">from_part</span><span class="si">}{</span><span class="n">target</span><span class="si">}{</span><span class="n">collation</span><span class="si">}</span><span class="s2">)"</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -3599,8 +3648,8 @@ columns are removed from the create statement.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#str_to_time_sql"></a>
|
<a class="headerlink" href="#str_to_time_sql"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="str_to_time_sql-686"><a href="#str_to_time_sql-686"><span class="linenos">686</span></a><span class="k">def</span> <span class="nf">str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="str_to_time_sql-699"><a href="#str_to_time_sql-699"><span class="linenos">699</span></a><span class="k">def</span> <span class="nf">str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="str_to_time_sql-687"><a href="#str_to_time_sql-687"><span class="linenos">687</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">"STRPTIME"</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
|
</span><span id="str_to_time_sql-700"><a href="#str_to_time_sql-700"><span class="linenos">700</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">"STRPTIME"</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -3618,16 +3667,20 @@ columns are removed from the create statement.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#ts_or_ds_to_date_sql"></a>
|
<a class="headerlink" href="#ts_or_ds_to_date_sql"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="ts_or_ds_to_date_sql-690"><a href="#ts_or_ds_to_date_sql-690"><span class="linenos">690</span></a><span class="k">def</span> <span class="nf">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="n">dialect</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="ts_or_ds_to_date_sql-703"><a href="#ts_or_ds_to_date_sql-703"><span class="linenos">703</span></a><span class="k">def</span> <span class="nf">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="n">dialect</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">:</span>
|
||||||
</span><span id="ts_or_ds_to_date_sql-691"><a href="#ts_or_ds_to_date_sql-691"><span class="linenos">691</span></a> <span class="k">def</span> <span class="nf">_ts_or_ds_to_date_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
</span><span id="ts_or_ds_to_date_sql-704"><a href="#ts_or_ds_to_date_sql-704"><span class="linenos">704</span></a> <span class="k">def</span> <span class="nf">_ts_or_ds_to_date_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="ts_or_ds_to_date_sql-692"><a href="#ts_or_ds_to_date_sql-692"><span class="linenos">692</span></a> <span class="n">_dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span>
|
</span><span id="ts_or_ds_to_date_sql-705"><a href="#ts_or_ds_to_date_sql-705"><span class="linenos">705</span></a> <span class="n">_dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span>
|
||||||
</span><span id="ts_or_ds_to_date_sql-693"><a href="#ts_or_ds_to_date_sql-693"><span class="linenos">693</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
|
</span><span id="ts_or_ds_to_date_sql-706"><a href="#ts_or_ds_to_date_sql-706"><span class="linenos">706</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
|
||||||
</span><span id="ts_or_ds_to_date_sql-694"><a href="#ts_or_ds_to_date_sql-694"><span class="linenos">694</span></a> <span class="k">if</span> <span class="n">time_format</span> <span class="ow">and</span> <span class="n">time_format</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="n">_dialect</span><span class="o">.</span><span class="n">TIME_FORMAT</span><span class="p">,</span> <span class="n">_dialect</span><span class="o">.</span><span class="n">DATE_FORMAT</span><span class="p">):</span>
|
</span><span id="ts_or_ds_to_date_sql-707"><a href="#ts_or_ds_to_date_sql-707"><span class="linenos">707</span></a> <span class="k">if</span> <span class="n">time_format</span> <span class="ow">and</span> <span class="n">time_format</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="n">_dialect</span><span class="o">.</span><span class="n">TIME_FORMAT</span><span class="p">,</span> <span class="n">_dialect</span><span class="o">.</span><span class="n">DATE_FORMAT</span><span class="p">):</span>
|
||||||
</span><span id="ts_or_ds_to_date_sql-695"><a href="#ts_or_ds_to_date_sql-695"><span class="linenos">695</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">),</span> <span class="s2">"date"</span><span class="p">))</span>
|
</span><span id="ts_or_ds_to_date_sql-708"><a href="#ts_or_ds_to_date_sql-708"><span class="linenos">708</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
|
||||||
</span><span id="ts_or_ds_to_date_sql-696"><a href="#ts_or_ds_to_date_sql-696"><span class="linenos">696</span></a>
|
</span><span id="ts_or_ds_to_date_sql-709"><a href="#ts_or_ds_to_date_sql-709"><span class="linenos">709</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
|
||||||
</span><span id="ts_or_ds_to_date_sql-697"><a href="#ts_or_ds_to_date_sql-697"><span class="linenos">697</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"this"</span><span class="p">),</span> <span class="s2">"date"</span><span class="p">))</span>
|
</span><span id="ts_or_ds_to_date_sql-710"><a href="#ts_or_ds_to_date_sql-710"><span class="linenos">710</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"format"</span><span class="p">]),</span>
|
||||||
</span><span id="ts_or_ds_to_date_sql-698"><a href="#ts_or_ds_to_date_sql-698"><span class="linenos">698</span></a>
|
</span><span id="ts_or_ds_to_date_sql-711"><a href="#ts_or_ds_to_date_sql-711"><span class="linenos">711</span></a> <span class="s2">"date"</span><span class="p">,</span>
|
||||||
</span><span id="ts_or_ds_to_date_sql-699"><a href="#ts_or_ds_to_date_sql-699"><span class="linenos">699</span></a> <span class="k">return</span> <span class="n">_ts_or_ds_to_date_sql</span>
|
</span><span id="ts_or_ds_to_date_sql-712"><a href="#ts_or_ds_to_date_sql-712"><span class="linenos">712</span></a> <span class="p">)</span>
|
||||||
|
</span><span id="ts_or_ds_to_date_sql-713"><a href="#ts_or_ds_to_date_sql-713"><span class="linenos">713</span></a> <span class="p">)</span>
|
||||||
|
</span><span id="ts_or_ds_to_date_sql-714"><a href="#ts_or_ds_to_date_sql-714"><span class="linenos">714</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">"date"</span><span class="p">))</span>
|
||||||
|
</span><span id="ts_or_ds_to_date_sql-715"><a href="#ts_or_ds_to_date_sql-715"><span class="linenos">715</span></a>
|
||||||
|
</span><span id="ts_or_ds_to_date_sql-716"><a href="#ts_or_ds_to_date_sql-716"><span class="linenos">716</span></a> <span class="k">return</span> <span class="n">_ts_or_ds_to_date_sql</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -3645,9 +3698,9 @@ columns are removed from the create statement.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#concat_to_dpipe_sql"></a>
|
<a class="headerlink" href="#concat_to_dpipe_sql"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="concat_to_dpipe_sql-702"><a href="#concat_to_dpipe_sql-702"><span class="linenos">702</span></a><span class="k">def</span> <span class="nf">concat_to_dpipe_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Concat</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="concat_to_dpipe_sql-719"><a href="#concat_to_dpipe_sql-719"><span class="linenos">719</span></a><span class="k">def</span> <span class="nf">concat_to_dpipe_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Concat</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">SafeConcat</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="concat_to_dpipe_sql-703"><a href="#concat_to_dpipe_sql-703"><span class="linenos">703</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
</span><span id="concat_to_dpipe_sql-720"><a href="#concat_to_dpipe_sql-720"><span class="linenos">720</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
||||||
</span><span id="concat_to_dpipe_sql-704"><a href="#concat_to_dpipe_sql-704"><span class="linenos">704</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">reduce</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">x</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">y</span><span class="p">),</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">))</span>
|
</span><span id="concat_to_dpipe_sql-721"><a href="#concat_to_dpipe_sql-721"><span class="linenos">721</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">reduce</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">x</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">y</span><span class="p">),</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">))</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -3665,15 +3718,15 @@ columns are removed from the create statement.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#concat_ws_to_dpipe_sql"></a>
|
<a class="headerlink" href="#concat_ws_to_dpipe_sql"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="concat_ws_to_dpipe_sql-707"><a href="#concat_ws_to_dpipe_sql-707"><span class="linenos">707</span></a><span class="k">def</span> <span class="nf">concat_ws_to_dpipe_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ConcatWs</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="concat_ws_to_dpipe_sql-724"><a href="#concat_ws_to_dpipe_sql-724"><span class="linenos">724</span></a><span class="k">def</span> <span class="nf">concat_ws_to_dpipe_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ConcatWs</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="concat_ws_to_dpipe_sql-708"><a href="#concat_ws_to_dpipe_sql-708"><span class="linenos">708</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
</span><span id="concat_ws_to_dpipe_sql-725"><a href="#concat_ws_to_dpipe_sql-725"><span class="linenos">725</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
||||||
</span><span id="concat_ws_to_dpipe_sql-709"><a href="#concat_ws_to_dpipe_sql-709"><span class="linenos">709</span></a> <span class="n">delim</span><span class="p">,</span> <span class="o">*</span><span class="n">rest_args</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
|
</span><span id="concat_ws_to_dpipe_sql-726"><a href="#concat_ws_to_dpipe_sql-726"><span class="linenos">726</span></a> <span class="n">delim</span><span class="p">,</span> <span class="o">*</span><span class="n">rest_args</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
|
||||||
</span><span id="concat_ws_to_dpipe_sql-710"><a href="#concat_ws_to_dpipe_sql-710"><span class="linenos">710</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
|
</span><span id="concat_ws_to_dpipe_sql-727"><a href="#concat_ws_to_dpipe_sql-727"><span class="linenos">727</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span>
|
||||||
</span><span id="concat_ws_to_dpipe_sql-711"><a href="#concat_ws_to_dpipe_sql-711"><span class="linenos">711</span></a> <span class="n">reduce</span><span class="p">(</span>
|
</span><span id="concat_ws_to_dpipe_sql-728"><a href="#concat_ws_to_dpipe_sql-728"><span class="linenos">728</span></a> <span class="n">reduce</span><span class="p">(</span>
|
||||||
</span><span id="concat_ws_to_dpipe_sql-712"><a href="#concat_ws_to_dpipe_sql-712"><span class="linenos">712</span></a> <span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">x</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">delim</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">y</span><span class="p">)),</span>
|
</span><span id="concat_ws_to_dpipe_sql-729"><a href="#concat_ws_to_dpipe_sql-729"><span class="linenos">729</span></a> <span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">x</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">delim</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">y</span><span class="p">)),</span>
|
||||||
</span><span id="concat_ws_to_dpipe_sql-713"><a href="#concat_ws_to_dpipe_sql-713"><span class="linenos">713</span></a> <span class="n">rest_args</span><span class="p">,</span>
|
</span><span id="concat_ws_to_dpipe_sql-730"><a href="#concat_ws_to_dpipe_sql-730"><span class="linenos">730</span></a> <span class="n">rest_args</span><span class="p">,</span>
|
||||||
</span><span id="concat_ws_to_dpipe_sql-714"><a href="#concat_ws_to_dpipe_sql-714"><span class="linenos">714</span></a> <span class="p">)</span>
|
</span><span id="concat_ws_to_dpipe_sql-731"><a href="#concat_ws_to_dpipe_sql-731"><span class="linenos">731</span></a> <span class="p">)</span>
|
||||||
</span><span id="concat_ws_to_dpipe_sql-715"><a href="#concat_ws_to_dpipe_sql-715"><span class="linenos">715</span></a> <span class="p">)</span>
|
</span><span id="concat_ws_to_dpipe_sql-732"><a href="#concat_ws_to_dpipe_sql-732"><span class="linenos">732</span></a> <span class="p">)</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -3691,14 +3744,14 @@ columns are removed from the create statement.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#regexp_extract_sql"></a>
|
<a class="headerlink" href="#regexp_extract_sql"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="regexp_extract_sql-718"><a href="#regexp_extract_sql-718"><span class="linenos">718</span></a><span class="k">def</span> <span class="nf">regexp_extract_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpExtract</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="regexp_extract_sql-735"><a href="#regexp_extract_sql-735"><span class="linenos">735</span></a><span class="k">def</span> <span class="nf">regexp_extract_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpExtract</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="regexp_extract_sql-719"><a href="#regexp_extract_sql-719"><span class="linenos">719</span></a> <span class="n">bad_args</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">,</span> <span class="p">(</span><span class="s2">"position"</span><span class="p">,</span> <span class="s2">"occurrence"</span><span class="p">,</span> <span class="s2">"parameters"</span><span class="p">)))</span>
|
</span><span id="regexp_extract_sql-736"><a href="#regexp_extract_sql-736"><span class="linenos">736</span></a> <span class="n">bad_args</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">,</span> <span class="p">(</span><span class="s2">"position"</span><span class="p">,</span> <span class="s2">"occurrence"</span><span class="p">,</span> <span class="s2">"parameters"</span><span class="p">)))</span>
|
||||||
</span><span id="regexp_extract_sql-720"><a href="#regexp_extract_sql-720"><span class="linenos">720</span></a> <span class="k">if</span> <span class="n">bad_args</span><span class="p">:</span>
|
</span><span id="regexp_extract_sql-737"><a href="#regexp_extract_sql-737"><span class="linenos">737</span></a> <span class="k">if</span> <span class="n">bad_args</span><span class="p">:</span>
|
||||||
</span><span id="regexp_extract_sql-721"><a href="#regexp_extract_sql-721"><span class="linenos">721</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">"REGEXP_EXTRACT does not support the following arg(s): </span><span class="si">{</span><span class="n">bad_args</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
</span><span id="regexp_extract_sql-738"><a href="#regexp_extract_sql-738"><span class="linenos">738</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">"REGEXP_EXTRACT does not support the following arg(s): </span><span class="si">{</span><span class="n">bad_args</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||||
</span><span id="regexp_extract_sql-722"><a href="#regexp_extract_sql-722"><span class="linenos">722</span></a>
|
</span><span id="regexp_extract_sql-739"><a href="#regexp_extract_sql-739"><span class="linenos">739</span></a>
|
||||||
</span><span id="regexp_extract_sql-723"><a href="#regexp_extract_sql-723"><span class="linenos">723</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
|
</span><span id="regexp_extract_sql-740"><a href="#regexp_extract_sql-740"><span class="linenos">740</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
|
||||||
</span><span id="regexp_extract_sql-724"><a href="#regexp_extract_sql-724"><span class="linenos">724</span></a> <span class="s2">"REGEXP_EXTRACT"</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"group"</span><span class="p">)</span>
|
</span><span id="regexp_extract_sql-741"><a href="#regexp_extract_sql-741"><span class="linenos">741</span></a> <span class="s2">"REGEXP_EXTRACT"</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"group"</span><span class="p">)</span>
|
||||||
</span><span id="regexp_extract_sql-725"><a href="#regexp_extract_sql-725"><span class="linenos">725</span></a> <span class="p">)</span>
|
</span><span id="regexp_extract_sql-742"><a href="#regexp_extract_sql-742"><span class="linenos">742</span></a> <span class="p">)</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -3716,14 +3769,16 @@ columns are removed from the create statement.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#regexp_replace_sql"></a>
|
<a class="headerlink" href="#regexp_replace_sql"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="regexp_replace_sql-728"><a href="#regexp_replace_sql-728"><span class="linenos">728</span></a><span class="k">def</span> <span class="nf">regexp_replace_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="regexp_replace_sql-745"><a href="#regexp_replace_sql-745"><span class="linenos">745</span></a><span class="k">def</span> <span class="nf">regexp_replace_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpReplace</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="regexp_replace_sql-729"><a href="#regexp_replace_sql-729"><span class="linenos">729</span></a> <span class="n">bad_args</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">,</span> <span class="p">(</span><span class="s2">"position"</span><span class="p">,</span> <span class="s2">"occurrence"</span><span class="p">,</span> <span class="s2">"parameters"</span><span class="p">)))</span>
|
</span><span id="regexp_replace_sql-746"><a href="#regexp_replace_sql-746"><span class="linenos">746</span></a> <span class="n">bad_args</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span>
|
||||||
</span><span id="regexp_replace_sql-730"><a href="#regexp_replace_sql-730"><span class="linenos">730</span></a> <span class="k">if</span> <span class="n">bad_args</span><span class="p">:</span>
|
</span><span id="regexp_replace_sql-747"><a href="#regexp_replace_sql-747"><span class="linenos">747</span></a> <span class="nb">filter</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">,</span> <span class="p">(</span><span class="s2">"position"</span><span class="p">,</span> <span class="s2">"occurrence"</span><span class="p">,</span> <span class="s2">"parameters"</span><span class="p">,</span> <span class="s2">"modifiers"</span><span class="p">))</span>
|
||||||
</span><span id="regexp_replace_sql-731"><a href="#regexp_replace_sql-731"><span class="linenos">731</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">"REGEXP_REPLACE does not support the following arg(s): </span><span class="si">{</span><span class="n">bad_args</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
</span><span id="regexp_replace_sql-748"><a href="#regexp_replace_sql-748"><span class="linenos">748</span></a> <span class="p">)</span>
|
||||||
</span><span id="regexp_replace_sql-732"><a href="#regexp_replace_sql-732"><span class="linenos">732</span></a>
|
</span><span id="regexp_replace_sql-749"><a href="#regexp_replace_sql-749"><span class="linenos">749</span></a> <span class="k">if</span> <span class="n">bad_args</span><span class="p">:</span>
|
||||||
</span><span id="regexp_replace_sql-733"><a href="#regexp_replace_sql-733"><span class="linenos">733</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
|
</span><span id="regexp_replace_sql-750"><a href="#regexp_replace_sql-750"><span class="linenos">750</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">"REGEXP_REPLACE does not support the following arg(s): </span><span class="si">{</span><span class="n">bad_args</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||||
</span><span id="regexp_replace_sql-734"><a href="#regexp_replace_sql-734"><span class="linenos">734</span></a> <span class="s2">"REGEXP_REPLACE"</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"replacement"</span><span class="p">]</span>
|
</span><span id="regexp_replace_sql-751"><a href="#regexp_replace_sql-751"><span class="linenos">751</span></a>
|
||||||
</span><span id="regexp_replace_sql-735"><a href="#regexp_replace_sql-735"><span class="linenos">735</span></a> <span class="p">)</span>
|
</span><span id="regexp_replace_sql-752"><a href="#regexp_replace_sql-752"><span class="linenos">752</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
|
||||||
|
</span><span id="regexp_replace_sql-753"><a href="#regexp_replace_sql-753"><span class="linenos">753</span></a> <span class="s2">"REGEXP_REPLACE"</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"replacement"</span><span class="p">]</span>
|
||||||
|
</span><span id="regexp_replace_sql-754"><a href="#regexp_replace_sql-754"><span class="linenos">754</span></a> <span class="p">)</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -3741,50 +3796,26 @@ columns are removed from the create statement.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#pivot_column_names"></a>
|
<a class="headerlink" href="#pivot_column_names"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="pivot_column_names-738"><a href="#pivot_column_names-738"><span class="linenos">738</span></a><span class="k">def</span> <span class="nf">pivot_column_names</span><span class="p">(</span><span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="pivot_column_names-757"><a href="#pivot_column_names-757"><span class="linenos">757</span></a><span class="k">def</span> <span class="nf">pivot_column_names</span><span class="p">(</span><span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
|
||||||
</span><span id="pivot_column_names-739"><a href="#pivot_column_names-739"><span class="linenos">739</span></a> <span class="n">names</span> <span class="o">=</span> <span class="p">[]</span>
|
</span><span id="pivot_column_names-758"><a href="#pivot_column_names-758"><span class="linenos">758</span></a> <span class="n">names</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
</span><span id="pivot_column_names-740"><a href="#pivot_column_names-740"><span class="linenos">740</span></a> <span class="k">for</span> <span class="n">agg</span> <span class="ow">in</span> <span class="n">aggregations</span><span class="p">:</span>
|
</span><span id="pivot_column_names-759"><a href="#pivot_column_names-759"><span class="linenos">759</span></a> <span class="k">for</span> <span class="n">agg</span> <span class="ow">in</span> <span class="n">aggregations</span><span class="p">:</span>
|
||||||
</span><span id="pivot_column_names-741"><a href="#pivot_column_names-741"><span class="linenos">741</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">agg</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
|
</span><span id="pivot_column_names-760"><a href="#pivot_column_names-760"><span class="linenos">760</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">agg</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
|
||||||
</span><span id="pivot_column_names-742"><a href="#pivot_column_names-742"><span class="linenos">742</span></a> <span class="n">names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">agg</span><span class="o">.</span><span class="n">alias</span><span class="p">)</span>
|
</span><span id="pivot_column_names-761"><a href="#pivot_column_names-761"><span class="linenos">761</span></a> <span class="n">names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">agg</span><span class="o">.</span><span class="n">alias</span><span class="p">)</span>
|
||||||
</span><span id="pivot_column_names-743"><a href="#pivot_column_names-743"><span class="linenos">743</span></a> <span class="k">else</span><span class="p">:</span>
|
</span><span id="pivot_column_names-762"><a href="#pivot_column_names-762"><span class="linenos">762</span></a> <span class="k">else</span><span class="p">:</span>
|
||||||
</span><span id="pivot_column_names-744"><a href="#pivot_column_names-744"><span class="linenos">744</span></a><span class="w"> </span><span class="sd">"""</span>
|
</span><span id="pivot_column_names-763"><a href="#pivot_column_names-763"><span class="linenos">763</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||||
</span><span id="pivot_column_names-745"><a href="#pivot_column_names-745"><span class="linenos">745</span></a><span class="sd"> This case corresponds to aggregations without aliases being used as suffixes</span>
|
</span><span id="pivot_column_names-764"><a href="#pivot_column_names-764"><span class="linenos">764</span></a><span class="sd"> This case corresponds to aggregations without aliases being used as suffixes</span>
|
||||||
</span><span id="pivot_column_names-746"><a href="#pivot_column_names-746"><span class="linenos">746</span></a><span class="sd"> (e.g. col_avg(foo)). We need to unquote identifiers because they're going to</span>
|
</span><span id="pivot_column_names-765"><a href="#pivot_column_names-765"><span class="linenos">765</span></a><span class="sd"> (e.g. col_avg(foo)). We need to unquote identifiers because they're going to</span>
|
||||||
</span><span id="pivot_column_names-747"><a href="#pivot_column_names-747"><span class="linenos">747</span></a><span class="sd"> be quoted in the base parser's `_parse_pivot` method, due to `to_identifier`.</span>
|
</span><span id="pivot_column_names-766"><a href="#pivot_column_names-766"><span class="linenos">766</span></a><span class="sd"> be quoted in the base parser's `_parse_pivot` method, due to `to_identifier`.</span>
|
||||||
</span><span id="pivot_column_names-748"><a href="#pivot_column_names-748"><span class="linenos">748</span></a><span class="sd"> Otherwise, we'd end up with `col_avg(`foo`)` (notice the double quotes).</span>
|
</span><span id="pivot_column_names-767"><a href="#pivot_column_names-767"><span class="linenos">767</span></a><span class="sd"> Otherwise, we'd end up with `col_avg(`foo`)` (notice the double quotes).</span>
|
||||||
</span><span id="pivot_column_names-749"><a href="#pivot_column_names-749"><span class="linenos">749</span></a><span class="sd"> """</span>
|
</span><span id="pivot_column_names-768"><a href="#pivot_column_names-768"><span class="linenos">768</span></a><span class="sd"> """</span>
|
||||||
</span><span id="pivot_column_names-750"><a href="#pivot_column_names-750"><span class="linenos">750</span></a> <span class="n">agg_all_unquoted</span> <span class="o">=</span> <span class="n">agg</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
|
</span><span id="pivot_column_names-769"><a href="#pivot_column_names-769"><span class="linenos">769</span></a> <span class="n">agg_all_unquoted</span> <span class="o">=</span> <span class="n">agg</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
|
||||||
</span><span id="pivot_column_names-751"><a href="#pivot_column_names-751"><span class="linenos">751</span></a> <span class="k">lambda</span> <span class="n">node</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">node</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
</span><span id="pivot_column_names-770"><a href="#pivot_column_names-770"><span class="linenos">770</span></a> <span class="k">lambda</span> <span class="n">node</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">node</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||||
</span><span id="pivot_column_names-752"><a href="#pivot_column_names-752"><span class="linenos">752</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span>
|
</span><span id="pivot_column_names-771"><a href="#pivot_column_names-771"><span class="linenos">771</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)</span>
|
||||||
</span><span id="pivot_column_names-753"><a href="#pivot_column_names-753"><span class="linenos">753</span></a> <span class="k">else</span> <span class="n">node</span>
|
</span><span id="pivot_column_names-772"><a href="#pivot_column_names-772"><span class="linenos">772</span></a> <span class="k">else</span> <span class="n">node</span>
|
||||||
</span><span id="pivot_column_names-754"><a href="#pivot_column_names-754"><span class="linenos">754</span></a> <span class="p">)</span>
|
</span><span id="pivot_column_names-773"><a href="#pivot_column_names-773"><span class="linenos">773</span></a> <span class="p">)</span>
|
||||||
</span><span id="pivot_column_names-755"><a href="#pivot_column_names-755"><span class="linenos">755</span></a> <span class="n">names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">agg_all_unquoted</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize_functions</span><span class="o">=</span><span class="s2">"lower"</span><span class="p">))</span>
|
</span><span id="pivot_column_names-774"><a href="#pivot_column_names-774"><span class="linenos">774</span></a> <span class="n">names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">agg_all_unquoted</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">normalize_functions</span><span class="o">=</span><span class="s2">"lower"</span><span class="p">))</span>
|
||||||
</span><span id="pivot_column_names-756"><a href="#pivot_column_names-756"><span class="linenos">756</span></a>
|
</span><span id="pivot_column_names-775"><a href="#pivot_column_names-775"><span class="linenos">775</span></a>
|
||||||
</span><span id="pivot_column_names-757"><a href="#pivot_column_names-757"><span class="linenos">757</span></a> <span class="k">return</span> <span class="n">names</span>
|
</span><span id="pivot_column_names-776"><a href="#pivot_column_names-776"><span class="linenos">776</span></a> <span class="k">return</span> <span class="n">names</span>
|
||||||
</span></pre></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section id="simplify_literal">
|
|
||||||
<input id="simplify_literal-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
|
||||||
<div class="attr function">
|
|
||||||
|
|
||||||
<span class="def">def</span>
|
|
||||||
<span class="name">simplify_literal</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">expression</span><span class="p">:</span> <span class="o">~</span><span class="n">E</span></span><span class="return-annotation">) -> <span class="o">~</span><span class="n">E</span>:</span></span>
|
|
||||||
|
|
||||||
<label class="view-source-button" for="simplify_literal-view-source"><span>View Source</span></label>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<a class="headerlink" href="#simplify_literal"></a>
|
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="simplify_literal-760"><a href="#simplify_literal-760"><span class="linenos">760</span></a><span class="k">def</span> <span class="nf">simplify_literal</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">E</span><span class="p">)</span> <span class="o">-></span> <span class="n">E</span><span class="p">:</span>
|
|
||||||
</span><span id="simplify_literal-761"><a href="#simplify_literal-761"><span class="linenos">761</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
|
|
||||||
</span><span id="simplify_literal-762"><a href="#simplify_literal-762"><span class="linenos">762</span></a> <span class="kn">from</span> <span class="nn">sqlglot.optimizer.simplify</span> <span class="kn">import</span> <span class="n">simplify</span>
|
|
||||||
</span><span id="simplify_literal-763"><a href="#simplify_literal-763"><span class="linenos">763</span></a>
|
|
||||||
</span><span id="simplify_literal-764"><a href="#simplify_literal-764"><span class="linenos">764</span></a> <span class="n">simplify</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
|
|
||||||
</span><span id="simplify_literal-765"><a href="#simplify_literal-765"><span class="linenos">765</span></a>
|
|
||||||
</span><span id="simplify_literal-766"><a href="#simplify_literal-766"><span class="linenos">766</span></a> <span class="k">return</span> <span class="n">expression</span>
|
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -3802,8 +3833,8 @@ columns are removed from the create statement.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#binary_from_function"></a>
|
<a class="headerlink" href="#binary_from_function"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="binary_from_function-769"><a href="#binary_from_function-769"><span class="linenos">769</span></a><span class="k">def</span> <span class="nf">binary_from_function</span><span class="p">(</span><span class="n">expr_type</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">B</span><span class="p">])</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">],</span> <span class="n">B</span><span class="p">]:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="binary_from_function-779"><a href="#binary_from_function-779"><span class="linenos">779</span></a><span class="k">def</span> <span class="nf">binary_from_function</span><span class="p">(</span><span class="n">expr_type</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">B</span><span class="p">])</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">],</span> <span class="n">B</span><span class="p">]:</span>
|
||||||
</span><span id="binary_from_function-770"><a href="#binary_from_function-770"><span class="linenos">770</span></a> <span class="k">return</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">expr_type</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
|
</span><span id="binary_from_function-780"><a href="#binary_from_function-780"><span class="linenos">780</span></a> <span class="k">return</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">expr_type</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -3821,8 +3852,8 @@ columns are removed from the create statement.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#parse_timestamp_trunc"></a>
|
<a class="headerlink" href="#parse_timestamp_trunc"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="parse_timestamp_trunc-774"><a href="#parse_timestamp_trunc-774"><span class="linenos">774</span></a><span class="k">def</span> <span class="nf">parse_timestamp_trunc</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="parse_timestamp_trunc-784"><a href="#parse_timestamp_trunc-784"><span class="linenos">784</span></a><span class="k">def</span> <span class="nf">parse_timestamp_trunc</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span>
|
||||||
</span><span id="parse_timestamp_trunc-775"><a href="#parse_timestamp_trunc-775"><span class="linenos">775</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
|
</span><span id="parse_timestamp_trunc-785"><a href="#parse_timestamp_trunc-785"><span class="linenos">785</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -3840,8 +3871,8 @@ columns are removed from the create statement.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#any_value_to_max_sql"></a>
|
<a class="headerlink" href="#any_value_to_max_sql"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="any_value_to_max_sql-778"><a href="#any_value_to_max_sql-778"><span class="linenos">778</span></a><span class="k">def</span> <span class="nf">any_value_to_max_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="any_value_to_max_sql-788"><a href="#any_value_to_max_sql-788"><span class="linenos">788</span></a><span class="k">def</span> <span class="nf">any_value_to_max_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="any_value_to_max_sql-779"><a href="#any_value_to_max_sql-779"><span class="linenos">779</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">"MAX"</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
|
</span><span id="any_value_to_max_sql-789"><a href="#any_value_to_max_sql-789"><span class="linenos">789</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">"MAX"</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -3859,10 +3890,10 @@ columns are removed from the create statement.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#bool_xor_sql"></a>
|
<a class="headerlink" href="#bool_xor_sql"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="bool_xor_sql-782"><a href="#bool_xor_sql-782"><span class="linenos">782</span></a><span class="k">def</span> <span class="nf">bool_xor_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="bool_xor_sql-792"><a href="#bool_xor_sql-792"><span class="linenos">792</span></a><span class="k">def</span> <span class="nf">bool_xor_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Xor</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="bool_xor_sql-783"><a href="#bool_xor_sql-783"><span class="linenos">783</span></a> <span class="n">a</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
|
</span><span id="bool_xor_sql-793"><a href="#bool_xor_sql-793"><span class="linenos">793</span></a> <span class="n">a</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
|
||||||
</span><span id="bool_xor_sql-784"><a href="#bool_xor_sql-784"><span class="linenos">784</span></a> <span class="n">b</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
|
</span><span id="bool_xor_sql-794"><a href="#bool_xor_sql-794"><span class="linenos">794</span></a> <span class="n">b</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
|
||||||
</span><span id="bool_xor_sql-785"><a href="#bool_xor_sql-785"><span class="linenos">785</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"(</span><span class="si">{</span><span class="n">a</span><span class="si">}</span><span class="s2"> AND (NOT </span><span class="si">{</span><span class="n">b</span><span class="si">}</span><span class="s2">)) OR ((NOT </span><span class="si">{</span><span class="n">a</span><span class="si">}</span><span class="s2">) AND </span><span class="si">{</span><span class="n">b</span><span class="si">}</span><span class="s2">)"</span>
|
</span><span id="bool_xor_sql-795"><a href="#bool_xor_sql-795"><span class="linenos">795</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"(</span><span class="si">{</span><span class="n">a</span><span class="si">}</span><span class="s2"> AND (NOT </span><span class="si">{</span><span class="n">b</span><span class="si">}</span><span class="s2">)) OR ((NOT </span><span class="si">{</span><span class="n">a</span><span class="si">}</span><span class="s2">) AND </span><span class="si">{</span><span class="n">b</span><span class="si">}</span><span class="s2">)"</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -3880,8 +3911,8 @@ columns are removed from the create statement.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#json_keyvalue_comma_sql"></a>
|
<a class="headerlink" href="#json_keyvalue_comma_sql"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="json_keyvalue_comma_sql-789"><a href="#json_keyvalue_comma_sql-789"><span class="linenos">789</span></a><span class="k">def</span> <span class="nf">json_keyvalue_comma_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONKeyValue</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="json_keyvalue_comma_sql-799"><a href="#json_keyvalue_comma_sql-799"><span class="linenos">799</span></a><span class="k">def</span> <span class="nf">json_keyvalue_comma_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONKeyValue</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="json_keyvalue_comma_sql-790"><a href="#json_keyvalue_comma_sql-790"><span class="linenos">790</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">'this'</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">'expression'</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span>
|
</span><span id="json_keyvalue_comma_sql-800"><a href="#json_keyvalue_comma_sql-800"><span class="linenos">800</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">'this'</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">'expression'</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -3899,10 +3930,10 @@ columns are removed from the create statement.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#is_parse_json"></a>
|
<a class="headerlink" href="#is_parse_json"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="is_parse_json-793"><a href="#is_parse_json-793"><span class="linenos">793</span></a><span class="k">def</span> <span class="nf">is_parse_json</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="is_parse_json-803"><a href="#is_parse_json-803"><span class="linenos">803</span></a><span class="k">def</span> <span class="nf">is_parse_json</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
|
||||||
</span><span id="is_parse_json-794"><a href="#is_parse_json-794"><span class="linenos">794</span></a> <span class="k">return</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">ParseJSON</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span>
|
</span><span id="is_parse_json-804"><a href="#is_parse_json-804"><span class="linenos">804</span></a> <span class="k">return</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">ParseJSON</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span>
|
||||||
</span><span id="is_parse_json-795"><a href="#is_parse_json-795"><span class="linenos">795</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">"json"</span><span class="p">)</span>
|
</span><span id="is_parse_json-805"><a href="#is_parse_json-805"><span class="linenos">805</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">"json"</span><span class="p">)</span>
|
||||||
</span><span id="is_parse_json-796"><a href="#is_parse_json-796"><span class="linenos">796</span></a> <span class="p">)</span>
|
</span><span id="is_parse_json-806"><a href="#is_parse_json-806"><span class="linenos">806</span></a> <span class="p">)</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -3920,8 +3951,8 @@ columns are removed from the create statement.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#isnull_to_is_null"></a>
|
<a class="headerlink" href="#isnull_to_is_null"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="isnull_to_is_null-799"><a href="#isnull_to_is_null-799"><span class="linenos">799</span></a><span class="k">def</span> <span class="nf">isnull_to_is_null</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="isnull_to_is_null-809"><a href="#isnull_to_is_null-809"><span class="linenos">809</span></a><span class="k">def</span> <span class="nf">isnull_to_is_null</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">)</span> <span class="o">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
|
||||||
</span><span id="isnull_to_is_null-800"><a href="#isnull_to_is_null-800"><span class="linenos">800</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Paren</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()))</span>
|
</span><span id="isnull_to_is_null-810"><a href="#isnull_to_is_null-810"><span class="linenos">810</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Paren</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()))</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -3939,11 +3970,34 @@ columns are removed from the create statement.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#move_insert_cte_sql"></a>
|
<a class="headerlink" href="#move_insert_cte_sql"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="move_insert_cte_sql-803"><a href="#move_insert_cte_sql-803"><span class="linenos">803</span></a><span class="k">def</span> <span class="nf">move_insert_cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="move_insert_cte_sql-813"><a href="#move_insert_cte_sql-813"><span class="linenos">813</span></a><span class="k">def</span> <span class="nf">move_insert_cte_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="move_insert_cte_sql-804"><a href="#move_insert_cte_sql-804"><span class="linenos">804</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"with"</span><span class="p">):</span>
|
</span><span id="move_insert_cte_sql-814"><a href="#move_insert_cte_sql-814"><span class="linenos">814</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"with"</span><span class="p">):</span>
|
||||||
</span><span id="move_insert_cte_sql-805"><a href="#move_insert_cte_sql-805"><span class="linenos">805</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
</span><span id="move_insert_cte_sql-815"><a href="#move_insert_cte_sql-815"><span class="linenos">815</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
||||||
</span><span id="move_insert_cte_sql-806"><a href="#move_insert_cte_sql-806"><span class="linenos">806</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"with"</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"with"</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span>
|
</span><span id="move_insert_cte_sql-816"><a href="#move_insert_cte_sql-816"><span class="linenos">816</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"with"</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"with"</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span>
|
||||||
</span><span id="move_insert_cte_sql-807"><a href="#move_insert_cte_sql-807"><span class="linenos">807</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">insert_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
|
</span><span id="move_insert_cte_sql-817"><a href="#move_insert_cte_sql-817"><span class="linenos">817</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">insert_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
|
||||||
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</section>
|
||||||
|
<section id="generatedasidentitycolumnconstraint_sql">
|
||||||
|
<input id="generatedasidentitycolumnconstraint_sql-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||||
|
<div class="attr function">
|
||||||
|
|
||||||
|
<span class="def">def</span>
|
||||||
|
<span class="name">generatedasidentitycolumnconstraint_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span><span class="p">:</span> <span class="n"><a href="../generator.html#Generator">sqlglot.generator.Generator</a></span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#GeneratedAsIdentityColumnConstraint">sqlglot.expressions.GeneratedAsIdentityColumnConstraint</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
|
||||||
|
|
||||||
|
<label class="view-source-button" for="generatedasidentitycolumnconstraint_sql-view-source"><span>View Source</span></label>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<a class="headerlink" href="#generatedasidentitycolumnconstraint_sql"></a>
|
||||||
|
<div class="pdoc-code codehilite"><pre><span></span><span id="generatedasidentitycolumnconstraint_sql-820"><a href="#generatedasidentitycolumnconstraint_sql-820"><span class="linenos">820</span></a><span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
|
||||||
|
</span><span id="generatedasidentitycolumnconstraint_sql-821"><a href="#generatedasidentitycolumnconstraint_sql-821"><span class="linenos">821</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span>
|
||||||
|
</span><span id="generatedasidentitycolumnconstraint_sql-822"><a href="#generatedasidentitycolumnconstraint_sql-822"><span class="linenos">822</span></a><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
|
</span><span id="generatedasidentitycolumnconstraint_sql-823"><a href="#generatedasidentitycolumnconstraint_sql-823"><span class="linenos">823</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"start"</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">"1"</span>
|
||||||
|
</span><span id="generatedasidentitycolumnconstraint_sql-824"><a href="#generatedasidentitycolumnconstraint_sql-824"><span class="linenos">824</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"increment"</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">"1"</span>
|
||||||
|
</span><span id="generatedasidentitycolumnconstraint_sql-825"><a href="#generatedasidentitycolumnconstraint_sql-825"><span class="linenos">825</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"IDENTITY(</span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">increment</span><span class="si">}</span><span class="s2">)"</span>
|
||||||
</span></pre></div>
|
</span></pre></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
|
@ -250,7 +250,7 @@
|
||||||
</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">row</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="p">[</span><span class="n">column</span><span class="p">]]</span>
|
</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">row</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">columns</span><span class="p">[</span><span class="n">column</span><span class="p">]]</span>
|
||||||
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a>
|
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a>
|
||||||
</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a>
|
</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a>
|
||||||
</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a><span class="k">class</span> <span class="nc">Tables</span><span class="p">(</span><span class="n">AbstractMappingSchema</span><span class="p">[</span><span class="n">Table</span><span class="p">]):</span>
|
</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a><span class="k">class</span> <span class="nc">Tables</span><span class="p">(</span><span class="n">AbstractMappingSchema</span><span class="p">):</span>
|
||||||
</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="k">pass</span>
|
</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="k">pass</span>
|
||||||
</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a>
|
</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a>
|
||||||
</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a>
|
</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a>
|
||||||
|
@ -733,36 +733,17 @@
|
||||||
<div class="attr class">
|
<div class="attr class">
|
||||||
|
|
||||||
<span class="def">class</span>
|
<span class="def">class</span>
|
||||||
<span class="name">Tables</span><wbr>(<span class="base"><a href="../schema.html#AbstractMappingSchema">sqlglot.schema.AbstractMappingSchema[sqlglot.executor.table.Table]</a></span>):
|
<span class="name">Tables</span><wbr>(<span class="base"><a href="../schema.html#AbstractMappingSchema">sqlglot.schema.AbstractMappingSchema</a></span>):
|
||||||
|
|
||||||
<label class="view-source-button" for="Tables-view-source"><span>View Source</span></label>
|
<label class="view-source-button" for="Tables-view-source"><span>View Source</span></label>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#Tables"></a>
|
<a class="headerlink" href="#Tables"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="Tables-109"><a href="#Tables-109"><span class="linenos">109</span></a><span class="k">class</span> <span class="nc">Tables</span><span class="p">(</span><span class="n">AbstractMappingSchema</span><span class="p">[</span><span class="n">Table</span><span class="p">]):</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="Tables-109"><a href="#Tables-109"><span class="linenos">109</span></a><span class="k">class</span> <span class="nc">Tables</span><span class="p">(</span><span class="n">AbstractMappingSchema</span><span class="p">):</span>
|
||||||
</span><span id="Tables-110"><a href="#Tables-110"><span class="linenos">110</span></a> <span class="k">pass</span>
|
</span><span id="Tables-110"><a href="#Tables-110"><span class="linenos">110</span></a> <span class="k">pass</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
<div class="docstring"><p>Abstract base class for generic types.</p>
|
|
||||||
|
|
||||||
<p>A generic type is typically declared by inheriting from
|
|
||||||
this class parameterized with one or more type variables.
|
|
||||||
For example, a generic mapping type might be defined as::</p>
|
|
||||||
|
|
||||||
<p>class Mapping(Generic[KT, VT]):
|
|
||||||
def __getitem__(self, key: KT) -> VT:
|
|
||||||
...
|
|
||||||
# Etc.</p>
|
|
||||||
|
|
||||||
<p>This class can then be used as follows::</p>
|
|
||||||
|
|
||||||
<p>def lookup_name(mapping: Mapping[KT, VT], key: KT, default: VT) -> VT:
|
|
||||||
try:
|
|
||||||
return mapping[key]
|
|
||||||
except KeyError:
|
|
||||||
return default</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="inherited">
|
<div class="inherited">
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load diff
|
@ -235,156 +235,173 @@
|
||||||
</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a>
|
</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a>
|
||||||
</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="k">return</span> <span class="n">upstream</span>
|
</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="k">return</span> <span class="n">upstream</span>
|
||||||
</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a>
|
</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a>
|
||||||
</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
|
</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="n">subquery</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">unalias</span><span class="p">()</span>
|
||||||
</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="c1"># For better ergonomics in our node labels, replace the full select with</span>
|
</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a>
|
||||||
</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="c1"># a version that has only the column we care about.</span>
|
</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">subquery</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">):</span>
|
||||||
</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="c1"># "x", SELECT x, y FROM foo</span>
|
</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="n">upstream</span> <span class="o">=</span> <span class="n">upstream</span> <span class="ow">or</span> <span class="n">Node</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s2">"SUBQUERY"</span><span class="p">,</span> <span class="n">source</span><span class="o">=</span><span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">select</span><span class="p">)</span>
|
||||||
</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="c1"># => "x", SELECT x FROM foo</span>
|
</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="n">scope</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">Scope</span><span class="p">,</span> <span class="n">build_scope</span><span class="p">(</span><span class="n">subquery</span><span class="o">.</span><span class="n">unnest</span><span class="p">()))</span>
|
||||||
</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
|
</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a>
|
||||||
</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="k">else</span><span class="p">:</span>
|
</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">subquery</span><span class="o">.</span><span class="n">named_selects</span><span class="p">:</span>
|
||||||
</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">expression</span>
|
</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="n">to_node</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">scope</span><span class="o">=</span><span class="n">scope</span><span class="p">,</span> <span class="n">upstream</span><span class="o">=</span><span class="n">upstream</span><span class="p">)</span>
|
||||||
</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a>
|
</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a>
|
||||||
</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="c1"># Create the node for this step in the lineage chain, and attach it to the previous one.</span>
|
</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="k">return</span> <span class="n">upstream</span>
|
||||||
</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">Node</span><span class="p">(</span>
|
</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a>
|
||||||
</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="n">name</span><span class="o">=</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">scope_name</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">column</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">scope_name</span> <span class="k">else</span> <span class="nb">str</span><span class="p">(</span><span class="n">column</span><span class="p">),</span>
|
</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
|
||||||
</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="n">source</span><span class="o">=</span><span class="n">source</span><span class="p">,</span>
|
</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="c1"># For better ergonomics in our node labels, replace the full select with</span>
|
||||||
</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">select</span><span class="p">,</span>
|
</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="c1"># a version that has only the column we care about.</span>
|
||||||
</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span> <span class="ow">or</span> <span class="s2">""</span><span class="p">,</span>
|
</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="c1"># "x", SELECT x, y FROM foo</span>
|
||||||
</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="p">)</span>
|
</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="c1"># => "x", SELECT x FROM foo</span>
|
||||||
</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="k">if</span> <span class="n">upstream</span><span class="p">:</span>
|
</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
|
||||||
</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="n">upstream</span><span class="o">.</span><span class="n">downstream</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
|
</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="k">else</span><span class="p">:</span>
|
||||||
</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a>
|
</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">expression</span>
|
||||||
</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="c1"># Find all columns that went into creating this one to list their lineage nodes.</span>
|
</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a>
|
||||||
</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="nb">set</span><span class="p">(</span><span class="n">select</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)):</span>
|
</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="c1"># Create the node for this step in the lineage chain, and attach it to the previous one.</span>
|
||||||
</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">table</span>
|
</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">Node</span><span class="p">(</span>
|
||||||
</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
|
</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="n">name</span><span class="o">=</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">scope_name</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">column</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">scope_name</span> <span class="k">else</span> <span class="nb">str</span><span class="p">(</span><span class="n">column</span><span class="p">),</span>
|
||||||
</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a>
|
</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="n">source</span><span class="o">=</span><span class="n">source</span><span class="p">,</span>
|
||||||
</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">Scope</span><span class="p">):</span>
|
</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">select</span><span class="p">,</span>
|
||||||
</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="c1"># The table itself came from a more specific scope. Recurse into that one using the unaliased column name.</span>
|
</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span> <span class="ow">or</span> <span class="s2">""</span><span class="p">,</span>
|
||||||
</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="n">to_node</span><span class="p">(</span>
|
</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="p">)</span>
|
||||||
</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="n">c</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">scope</span><span class="o">=</span><span class="n">source</span><span class="p">,</span> <span class="n">scope_name</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">upstream</span><span class="o">=</span><span class="n">node</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">aliases</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
|
</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="k">if</span> <span class="n">upstream</span><span class="p">:</span>
|
||||||
</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="p">)</span>
|
</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="n">upstream</span><span class="o">.</span><span class="n">downstream</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
|
||||||
</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="k">else</span><span class="p">:</span>
|
</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a>
|
||||||
</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="c1"># The source is not a scope - we've reached the end of the line. At this point, if a source is not found</span>
|
</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="c1"># Find all columns that went into creating this one to list their lineage nodes.</span>
|
||||||
</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="c1"># it means this column's lineage is unknown. This can happen if the definition of a source used in a query</span>
|
</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="n">source_columns</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">select</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">))</span>
|
||||||
</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="c1"># is not passed into the `sources` map.</span>
|
</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a>
|
||||||
</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">source</span> <span class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">Placeholder</span><span class="p">()</span>
|
</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="c1"># If the source is a UDTF find columns used in the UTDF to generate the table</span>
|
||||||
</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="n">node</span><span class="o">.</span><span class="n">downstream</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Node</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">c</span><span class="o">.</span><span class="n">sql</span><span class="p">(),</span> <span class="n">source</span><span class="o">=</span><span class="n">source</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">source</span><span class="p">))</span>
|
</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UDTF</span><span class="p">):</span>
|
||||||
</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a>
|
</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="n">source_columns</span> <span class="o">|=</span> <span class="nb">set</span><span class="p">(</span><span class="n">source</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">))</span>
|
||||||
</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="k">return</span> <span class="n">node</span>
|
</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a>
|
||||||
</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a>
|
</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">source_columns</span><span class="p">:</span>
|
||||||
</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="k">return</span> <span class="n">to_node</span><span class="p">(</span><span class="n">column</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">scope</span><span class="p">)</span>
|
</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">table</span>
|
||||||
</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a>
|
</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
|
||||||
</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a>
|
</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a>
|
||||||
</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a><span class="k">class</span> <span class="nc">LineageHTML</span><span class="p">:</span>
|
</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">Scope</span><span class="p">):</span>
|
||||||
</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a><span class="w"> </span><span class="sd">"""Node to HTML generator using vis.js.</span>
|
</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="c1"># The table itself came from a more specific scope. Recurse into that one using the unaliased column name.</span>
|
||||||
</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a>
|
</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="n">to_node</span><span class="p">(</span>
|
||||||
</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a><span class="sd"> https://visjs.github.io/vis-network/docs/network/</span>
|
</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="n">c</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">scope</span><span class="o">=</span><span class="n">source</span><span class="p">,</span> <span class="n">scope_name</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">upstream</span><span class="o">=</span><span class="n">node</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">aliases</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
|
||||||
</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a><span class="sd"> """</span>
|
</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="p">)</span>
|
||||||
</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a>
|
</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="k">else</span><span class="p">:</span>
|
||||||
</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
|
</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="c1"># The source is not a scope - we've reached the end of the line. At this point, if a source is not found</span>
|
||||||
</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="bp">self</span><span class="p">,</span>
|
</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="c1"># it means this column's lineage is unknown. This can happen if the definition of a source used in a query</span>
|
||||||
</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="n">node</span><span class="p">:</span> <span class="n">Node</span><span class="p">,</span>
|
</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="c1"># is not passed into the `sources` map.</span>
|
||||||
</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">source</span> <span class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">Placeholder</span><span class="p">()</span>
|
||||||
</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="n">imports</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
|
</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="n">node</span><span class="o">.</span><span class="n">downstream</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Node</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">c</span><span class="o">.</span><span class="n">sql</span><span class="p">(),</span> <span class="n">source</span><span class="o">=</span><span class="n">source</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">source</span><span class="p">))</span>
|
||||||
</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">,</span>
|
</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a>
|
||||||
</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="p">):</span>
|
</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="k">return</span> <span class="n">node</span>
|
||||||
</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">node</span> <span class="o">=</span> <span class="n">node</span>
|
</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a>
|
||||||
</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">imports</span> <span class="o">=</span> <span class="n">imports</span>
|
</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="k">return</span> <span class="n">to_node</span><span class="p">(</span><span class="n">column</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">scope</span><span class="p">)</span>
|
||||||
</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a>
|
</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a>
|
||||||
</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">options</span> <span class="o">=</span> <span class="p">{</span>
|
</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a>
|
||||||
</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="s2">"height"</span><span class="p">:</span> <span class="s2">"500px"</span><span class="p">,</span>
|
</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a><span class="k">class</span> <span class="nc">LineageHTML</span><span class="p">:</span>
|
||||||
</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="s2">"width"</span><span class="p">:</span> <span class="s2">"100%"</span><span class="p">,</span>
|
</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a><span class="w"> </span><span class="sd">"""Node to HTML generator using vis.js.</span>
|
||||||
</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="s2">"layout"</span><span class="p">:</span> <span class="p">{</span>
|
</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a>
|
||||||
</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="s2">"hierarchical"</span><span class="p">:</span> <span class="p">{</span>
|
</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a><span class="sd"> https://visjs.github.io/vis-network/docs/network/</span>
|
||||||
</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="s2">"enabled"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a><span class="sd"> """</span>
|
||||||
</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="s2">"nodeSpacing"</span><span class="p">:</span> <span class="mi">200</span><span class="p">,</span>
|
</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a>
|
||||||
</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="s2">"sortMethod"</span><span class="p">:</span> <span class="s2">"directed"</span><span class="p">,</span>
|
</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
|
||||||
</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="p">},</span>
|
</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="bp">self</span><span class="p">,</span>
|
||||||
</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="p">},</span>
|
</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="n">node</span><span class="p">:</span> <span class="n">Node</span><span class="p">,</span>
|
||||||
</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="s2">"interaction"</span><span class="p">:</span> <span class="p">{</span>
|
</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||||
</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="s2">"dragNodes"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="n">imports</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
|
||||||
</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="s2">"selectable"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">,</span>
|
||||||
</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="p">},</span>
|
</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="p">):</span>
|
||||||
</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="s2">"physics"</span><span class="p">:</span> <span class="p">{</span>
|
</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">node</span> <span class="o">=</span> <span class="n">node</span>
|
||||||
</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="s2">"enabled"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">imports</span> <span class="o">=</span> <span class="n">imports</span>
|
||||||
</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="p">},</span>
|
</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a>
|
||||||
</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="s2">"edges"</span><span class="p">:</span> <span class="p">{</span>
|
</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">options</span> <span class="o">=</span> <span class="p">{</span>
|
||||||
</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="s2">"arrows"</span><span class="p">:</span> <span class="s2">"to"</span><span class="p">,</span>
|
</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="s2">"height"</span><span class="p">:</span> <span class="s2">"500px"</span><span class="p">,</span>
|
||||||
</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="p">},</span>
|
</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="s2">"width"</span><span class="p">:</span> <span class="s2">"100%"</span><span class="p">,</span>
|
||||||
</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="s2">"nodes"</span><span class="p">:</span> <span class="p">{</span>
|
</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="s2">"layout"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="s2">"font"</span><span class="p">:</span> <span class="s2">"20px monaco"</span><span class="p">,</span>
|
</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="s2">"hierarchical"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="s2">"shape"</span><span class="p">:</span> <span class="s2">"box"</span><span class="p">,</span>
|
</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="s2">"enabled"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
||||||
</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="s2">"widthConstraint"</span><span class="p">:</span> <span class="p">{</span>
|
</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="s2">"nodeSpacing"</span><span class="p">:</span> <span class="mi">200</span><span class="p">,</span>
|
||||||
</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="s2">"maximum"</span><span class="p">:</span> <span class="mi">300</span><span class="p">,</span>
|
</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="s2">"sortMethod"</span><span class="p">:</span> <span class="s2">"directed"</span><span class="p">,</span>
|
||||||
</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="p">},</span>
|
</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="p">},</span>
|
||||||
</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="p">},</span>
|
</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="p">},</span>
|
||||||
</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
|
</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="s2">"interaction"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="p">}</span>
|
</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="s2">"dragNodes"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
||||||
</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a>
|
</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="s2">"selectable"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
||||||
</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">nodes</span> <span class="o">=</span> <span class="p">{}</span>
|
</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="p">},</span>
|
||||||
</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">edges</span> <span class="o">=</span> <span class="p">[]</span>
|
</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="s2">"physics"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a>
|
</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="s2">"enabled"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
||||||
</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a> <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">walk</span><span class="p">():</span>
|
</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a> <span class="p">},</span>
|
||||||
</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">):</span>
|
</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="s2">"edges"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="n">label</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"FROM </span><span class="si">{</span><span class="n">node</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="si">}</span><span class="s2">"</span>
|
</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="s2">"arrows"</span><span class="p">:</span> <span class="s2">"to"</span><span class="p">,</span>
|
||||||
</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="n">title</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"<pre>SELECT </span><span class="si">{</span><span class="n">node</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> FROM </span><span class="si">{</span><span class="n">node</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="si">}</span><span class="s2"></pre>"</span>
|
</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="p">},</span>
|
||||||
</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="n">group</span> <span class="o">=</span> <span class="mi">1</span>
|
</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="s2">"nodes"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="k">else</span><span class="p">:</span>
|
</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="s2">"font"</span><span class="p">:</span> <span class="s2">"20px monaco"</span><span class="p">,</span>
|
||||||
</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="n">label</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">pretty</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span>
|
</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="s2">"shape"</span><span class="p">:</span> <span class="s2">"box"</span><span class="p">,</span>
|
||||||
</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">source</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
|
</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="s2">"widthConstraint"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Tag</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">n</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">"<b>"</span><span class="p">,</span> <span class="n">postfix</span><span class="o">=</span><span class="s2">"</b>"</span><span class="p">)</span>
|
</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="s2">"maximum"</span><span class="p">:</span> <span class="mi">300</span><span class="p">,</span>
|
||||||
</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="k">if</span> <span class="n">n</span> <span class="ow">is</span> <span class="n">node</span><span class="o">.</span><span class="n">expression</span>
|
</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="p">},</span>
|
||||||
</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="k">else</span> <span class="n">n</span><span class="p">,</span>
|
</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="p">},</span>
|
||||||
</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
|
||||||
</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="p">)</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">pretty</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span>
|
</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="p">}</span>
|
||||||
</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="n">title</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"<pre></span><span class="si">{</span><span class="n">source</span><span class="si">}</span><span class="s2"></pre>"</span>
|
</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a>
|
||||||
</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="n">group</span> <span class="o">=</span> <span class="mi">0</span>
|
</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">nodes</span> <span class="o">=</span> <span class="p">{}</span>
|
||||||
</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a>
|
</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">edges</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a> <span class="n">node_id</span> <span class="o">=</span> <span class="nb">id</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
|
</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a>
|
||||||
</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a>
|
</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">walk</span><span class="p">():</span>
|
||||||
</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">nodes</span><span class="p">[</span><span class="n">node_id</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
|
</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">):</span>
|
||||||
</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="s2">"id"</span><span class="p">:</span> <span class="n">node_id</span><span class="p">,</span>
|
</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="n">label</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"FROM </span><span class="si">{</span><span class="n">node</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="si">}</span><span class="s2">"</span>
|
||||||
</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="s2">"label"</span><span class="p">:</span> <span class="n">label</span><span class="p">,</span>
|
</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="n">title</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"<pre>SELECT </span><span class="si">{</span><span class="n">node</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> FROM </span><span class="si">{</span><span class="n">node</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="si">}</span><span class="s2"></pre>"</span>
|
||||||
</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="s2">"title"</span><span class="p">:</span> <span class="n">title</span><span class="p">,</span>
|
</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="n">group</span> <span class="o">=</span> <span class="mi">1</span>
|
||||||
</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="s2">"group"</span><span class="p">:</span> <span class="n">group</span><span class="p">,</span>
|
</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="k">else</span><span class="p">:</span>
|
||||||
</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="p">}</span>
|
</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="n">label</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">pretty</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span>
|
||||||
</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a>
|
</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">source</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
|
||||||
</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">downstream</span><span class="p">:</span>
|
</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Tag</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">n</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">"<b>"</span><span class="p">,</span> <span class="n">postfix</span><span class="o">=</span><span class="s2">"</b>"</span><span class="p">)</span>
|
||||||
</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">edges</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s2">"from"</span><span class="p">:</span> <span class="n">node_id</span><span class="p">,</span> <span class="s2">"to"</span><span class="p">:</span> <span class="nb">id</span><span class="p">(</span><span class="n">d</span><span class="p">)})</span>
|
</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="k">if</span> <span class="n">n</span> <span class="ow">is</span> <span class="n">node</span><span class="o">.</span><span class="n">expression</span>
|
||||||
</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a>
|
</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="k">else</span> <span class="n">n</span><span class="p">,</span>
|
||||||
</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||||
</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="n">nodes</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">nodes</span><span class="o">.</span><span class="n">values</span><span class="p">()))</span>
|
</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="p">)</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">pretty</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span>
|
||||||
</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a> <span class="n">edges</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">edges</span><span class="p">)</span>
|
</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a> <span class="n">title</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"<pre></span><span class="si">{</span><span class="n">source</span><span class="si">}</span><span class="s2"></pre>"</span>
|
||||||
</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a> <span class="n">options</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="p">)</span>
|
</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a> <span class="n">group</span> <span class="o">=</span> <span class="mi">0</span>
|
||||||
</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="n">imports</span> <span class="o">=</span> <span class="p">(</span>
|
</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a>
|
||||||
</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a><span class="w"> </span><span class="sd">"""<script type="text/javascript" src="https://unpkg.com/vis-data@latest/peer/umd/vis-data.min.js"></script></span>
|
</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="n">node_id</span> <span class="o">=</span> <span class="nb">id</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
|
||||||
</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a><span class="sd"> <script type="text/javascript" src="https://unpkg.com/vis-network@latest/peer/umd/vis-network.min.js"></script></span>
|
</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a>
|
||||||
</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a><span class="sd"> <link rel="stylesheet" type="text/css" href="https://unpkg.com/vis-network/styles/vis-network.min.css" />"""</span>
|
</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">nodes</span><span class="p">[</span><span class="n">node_id</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
|
||||||
</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">imports</span>
|
</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="s2">"id"</span><span class="p">:</span> <span class="n">node_id</span><span class="p">,</span>
|
||||||
</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="k">else</span> <span class="s2">""</span>
|
</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="s2">"label"</span><span class="p">:</span> <span class="n">label</span><span class="p">,</span>
|
||||||
</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="p">)</span>
|
</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="s2">"title"</span><span class="p">:</span> <span class="n">title</span><span class="p">,</span>
|
||||||
</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a>
|
</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="s2">"group"</span><span class="p">:</span> <span class="n">group</span><span class="p">,</span>
|
||||||
</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"""<div></span>
|
</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="p">}</span>
|
||||||
</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a><span class="s2"> <div id="sqlglot-lineage"></div></span>
|
</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a>
|
||||||
</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a><span class="s2"> </span><span class="si">{</span><span class="n">imports</span><span class="si">}</span>
|
</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">downstream</span><span class="p">:</span>
|
||||||
</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a><span class="s2"> <script type="text/javascript"></span>
|
</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">edges</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s2">"from"</span><span class="p">:</span> <span class="n">node_id</span><span class="p">,</span> <span class="s2">"to"</span><span class="p">:</span> <span class="nb">id</span><span class="p">(</span><span class="n">d</span><span class="p">)})</span>
|
||||||
</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a><span class="s2"> var nodes = new vis.DataSet(</span><span class="si">{</span><span class="n">nodes</span><span class="si">}</span><span class="s2">)</span>
|
</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a>
|
||||||
</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a><span class="s2"> nodes.forEach(row => row["title"] = new DOMParser().parseFromString(row["title"], "text/html").body.childNodes[0])</span>
|
</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a>
|
</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="n">nodes</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">nodes</span><span class="o">.</span><span class="n">values</span><span class="p">()))</span>
|
||||||
</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a><span class="s2"> new vis.Network(</span>
|
</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a> <span class="n">edges</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">edges</span><span class="p">)</span>
|
||||||
</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a><span class="s2"> document.getElementById("sqlglot-lineage"),</span>
|
</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a> <span class="n">options</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="p">)</span>
|
||||||
</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a><span class="s2"> </span><span class="se">{{</span>
|
</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a> <span class="n">imports</span> <span class="o">=</span> <span class="p">(</span>
|
||||||
</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a><span class="s2"> nodes: nodes,</span>
|
</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a><span class="w"> </span><span class="sd">"""<script type="text/javascript" src="https://unpkg.com/vis-data@latest/peer/umd/vis-data.min.js"></script></span>
|
||||||
</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a><span class="s2"> edges: new vis.DataSet(</span><span class="si">{</span><span class="n">edges</span><span class="si">}</span><span class="s2">)</span>
|
</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a><span class="sd"> <script type="text/javascript" src="https://unpkg.com/vis-network@latest/peer/umd/vis-network.min.js"></script></span>
|
||||||
</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a><span class="s2"> </span><span class="se">}}</span><span class="s2">,</span>
|
</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a><span class="sd"> <link rel="stylesheet" type="text/css" href="https://unpkg.com/vis-network/styles/vis-network.min.css" />"""</span>
|
||||||
</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a><span class="s2"> </span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">,</span>
|
</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">imports</span>
|
||||||
</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a><span class="s2"> )</span>
|
</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a> <span class="k">else</span> <span class="s2">""</span>
|
||||||
</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a><span class="s2"> </script></span>
|
</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a> <span class="p">)</span>
|
||||||
</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a><span class="s2"></div>"""</span>
|
</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a>
|
||||||
</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a>
|
</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"""<div></span>
|
||||||
</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a> <span class="k">def</span> <span class="nf">_repr_html_</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a><span class="s2"> <div id="sqlglot-lineage"></div></span>
|
||||||
</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="fm">__str__</span><span class="p">()</span>
|
</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a><span class="s2"> </span><span class="si">{</span><span class="n">imports</span><span class="si">}</span>
|
||||||
|
</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a><span class="s2"> <script type="text/javascript"></span>
|
||||||
|
</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a><span class="s2"> var nodes = new vis.DataSet(</span><span class="si">{</span><span class="n">nodes</span><span class="si">}</span><span class="s2">)</span>
|
||||||
|
</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a><span class="s2"> nodes.forEach(row => row["title"] = new DOMParser().parseFromString(row["title"], "text/html").body.childNodes[0])</span>
|
||||||
|
</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a>
|
||||||
|
</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a><span class="s2"> new vis.Network(</span>
|
||||||
|
</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a><span class="s2"> document.getElementById("sqlglot-lineage"),</span>
|
||||||
|
</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a><span class="s2"> </span><span class="se">{{</span>
|
||||||
|
</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a><span class="s2"> nodes: nodes,</span>
|
||||||
|
</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a><span class="s2"> edges: new vis.DataSet(</span><span class="si">{</span><span class="n">edges</span><span class="si">}</span><span class="s2">)</span>
|
||||||
|
</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a><span class="s2"> </span><span class="se">}}</span><span class="s2">,</span>
|
||||||
|
</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a><span class="s2"> </span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">,</span>
|
||||||
|
</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a><span class="s2"> )</span>
|
||||||
|
</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a><span class="s2"> </script></span>
|
||||||
|
</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a><span class="s2"></div>"""</span>
|
||||||
|
</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a>
|
||||||
|
</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a> <span class="k">def</span> <span class="nf">_repr_html_</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
|
</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="fm">__str__</span><span class="p">()</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -639,45 +656,62 @@
|
||||||
</span><span id="lineage-124"><a href="#lineage-124"><span class="linenos">124</span></a>
|
</span><span id="lineage-124"><a href="#lineage-124"><span class="linenos">124</span></a>
|
||||||
</span><span id="lineage-125"><a href="#lineage-125"><span class="linenos">125</span></a> <span class="k">return</span> <span class="n">upstream</span>
|
</span><span id="lineage-125"><a href="#lineage-125"><span class="linenos">125</span></a> <span class="k">return</span> <span class="n">upstream</span>
|
||||||
</span><span id="lineage-126"><a href="#lineage-126"><span class="linenos">126</span></a>
|
</span><span id="lineage-126"><a href="#lineage-126"><span class="linenos">126</span></a>
|
||||||
</span><span id="lineage-127"><a href="#lineage-127"><span class="linenos">127</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
|
</span><span id="lineage-127"><a href="#lineage-127"><span class="linenos">127</span></a> <span class="n">subquery</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">unalias</span><span class="p">()</span>
|
||||||
</span><span id="lineage-128"><a href="#lineage-128"><span class="linenos">128</span></a> <span class="c1"># For better ergonomics in our node labels, replace the full select with</span>
|
</span><span id="lineage-128"><a href="#lineage-128"><span class="linenos">128</span></a>
|
||||||
</span><span id="lineage-129"><a href="#lineage-129"><span class="linenos">129</span></a> <span class="c1"># a version that has only the column we care about.</span>
|
</span><span id="lineage-129"><a href="#lineage-129"><span class="linenos">129</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">subquery</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">):</span>
|
||||||
</span><span id="lineage-130"><a href="#lineage-130"><span class="linenos">130</span></a> <span class="c1"># "x", SELECT x, y FROM foo</span>
|
</span><span id="lineage-130"><a href="#lineage-130"><span class="linenos">130</span></a> <span class="n">upstream</span> <span class="o">=</span> <span class="n">upstream</span> <span class="ow">or</span> <span class="n">Node</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s2">"SUBQUERY"</span><span class="p">,</span> <span class="n">source</span><span class="o">=</span><span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">select</span><span class="p">)</span>
|
||||||
</span><span id="lineage-131"><a href="#lineage-131"><span class="linenos">131</span></a> <span class="c1"># => "x", SELECT x FROM foo</span>
|
</span><span id="lineage-131"><a href="#lineage-131"><span class="linenos">131</span></a> <span class="n">scope</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">Scope</span><span class="p">,</span> <span class="n">build_scope</span><span class="p">(</span><span class="n">subquery</span><span class="o">.</span><span class="n">unnest</span><span class="p">()))</span>
|
||||||
</span><span id="lineage-132"><a href="#lineage-132"><span class="linenos">132</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
|
</span><span id="lineage-132"><a href="#lineage-132"><span class="linenos">132</span></a>
|
||||||
</span><span id="lineage-133"><a href="#lineage-133"><span class="linenos">133</span></a> <span class="k">else</span><span class="p">:</span>
|
</span><span id="lineage-133"><a href="#lineage-133"><span class="linenos">133</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">subquery</span><span class="o">.</span><span class="n">named_selects</span><span class="p">:</span>
|
||||||
</span><span id="lineage-134"><a href="#lineage-134"><span class="linenos">134</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">expression</span>
|
</span><span id="lineage-134"><a href="#lineage-134"><span class="linenos">134</span></a> <span class="n">to_node</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">scope</span><span class="o">=</span><span class="n">scope</span><span class="p">,</span> <span class="n">upstream</span><span class="o">=</span><span class="n">upstream</span><span class="p">)</span>
|
||||||
</span><span id="lineage-135"><a href="#lineage-135"><span class="linenos">135</span></a>
|
</span><span id="lineage-135"><a href="#lineage-135"><span class="linenos">135</span></a>
|
||||||
</span><span id="lineage-136"><a href="#lineage-136"><span class="linenos">136</span></a> <span class="c1"># Create the node for this step in the lineage chain, and attach it to the previous one.</span>
|
</span><span id="lineage-136"><a href="#lineage-136"><span class="linenos">136</span></a> <span class="k">return</span> <span class="n">upstream</span>
|
||||||
</span><span id="lineage-137"><a href="#lineage-137"><span class="linenos">137</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">Node</span><span class="p">(</span>
|
</span><span id="lineage-137"><a href="#lineage-137"><span class="linenos">137</span></a>
|
||||||
</span><span id="lineage-138"><a href="#lineage-138"><span class="linenos">138</span></a> <span class="n">name</span><span class="o">=</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">scope_name</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">column</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">scope_name</span> <span class="k">else</span> <span class="nb">str</span><span class="p">(</span><span class="n">column</span><span class="p">),</span>
|
</span><span id="lineage-138"><a href="#lineage-138"><span class="linenos">138</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
|
||||||
</span><span id="lineage-139"><a href="#lineage-139"><span class="linenos">139</span></a> <span class="n">source</span><span class="o">=</span><span class="n">source</span><span class="p">,</span>
|
</span><span id="lineage-139"><a href="#lineage-139"><span class="linenos">139</span></a> <span class="c1"># For better ergonomics in our node labels, replace the full select with</span>
|
||||||
</span><span id="lineage-140"><a href="#lineage-140"><span class="linenos">140</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">select</span><span class="p">,</span>
|
</span><span id="lineage-140"><a href="#lineage-140"><span class="linenos">140</span></a> <span class="c1"># a version that has only the column we care about.</span>
|
||||||
</span><span id="lineage-141"><a href="#lineage-141"><span class="linenos">141</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span> <span class="ow">or</span> <span class="s2">""</span><span class="p">,</span>
|
</span><span id="lineage-141"><a href="#lineage-141"><span class="linenos">141</span></a> <span class="c1"># "x", SELECT x, y FROM foo</span>
|
||||||
</span><span id="lineage-142"><a href="#lineage-142"><span class="linenos">142</span></a> <span class="p">)</span>
|
</span><span id="lineage-142"><a href="#lineage-142"><span class="linenos">142</span></a> <span class="c1"># => "x", SELECT x FROM foo</span>
|
||||||
</span><span id="lineage-143"><a href="#lineage-143"><span class="linenos">143</span></a> <span class="k">if</span> <span class="n">upstream</span><span class="p">:</span>
|
</span><span id="lineage-143"><a href="#lineage-143"><span class="linenos">143</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
|
||||||
</span><span id="lineage-144"><a href="#lineage-144"><span class="linenos">144</span></a> <span class="n">upstream</span><span class="o">.</span><span class="n">downstream</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
|
</span><span id="lineage-144"><a href="#lineage-144"><span class="linenos">144</span></a> <span class="k">else</span><span class="p">:</span>
|
||||||
</span><span id="lineage-145"><a href="#lineage-145"><span class="linenos">145</span></a>
|
</span><span id="lineage-145"><a href="#lineage-145"><span class="linenos">145</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">expression</span>
|
||||||
</span><span id="lineage-146"><a href="#lineage-146"><span class="linenos">146</span></a> <span class="c1"># Find all columns that went into creating this one to list their lineage nodes.</span>
|
</span><span id="lineage-146"><a href="#lineage-146"><span class="linenos">146</span></a>
|
||||||
</span><span id="lineage-147"><a href="#lineage-147"><span class="linenos">147</span></a> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="nb">set</span><span class="p">(</span><span class="n">select</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)):</span>
|
</span><span id="lineage-147"><a href="#lineage-147"><span class="linenos">147</span></a> <span class="c1"># Create the node for this step in the lineage chain, and attach it to the previous one.</span>
|
||||||
</span><span id="lineage-148"><a href="#lineage-148"><span class="linenos">148</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">table</span>
|
</span><span id="lineage-148"><a href="#lineage-148"><span class="linenos">148</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">Node</span><span class="p">(</span>
|
||||||
</span><span id="lineage-149"><a href="#lineage-149"><span class="linenos">149</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
|
</span><span id="lineage-149"><a href="#lineage-149"><span class="linenos">149</span></a> <span class="n">name</span><span class="o">=</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">scope_name</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">column</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">scope_name</span> <span class="k">else</span> <span class="nb">str</span><span class="p">(</span><span class="n">column</span><span class="p">),</span>
|
||||||
</span><span id="lineage-150"><a href="#lineage-150"><span class="linenos">150</span></a>
|
</span><span id="lineage-150"><a href="#lineage-150"><span class="linenos">150</span></a> <span class="n">source</span><span class="o">=</span><span class="n">source</span><span class="p">,</span>
|
||||||
</span><span id="lineage-151"><a href="#lineage-151"><span class="linenos">151</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">Scope</span><span class="p">):</span>
|
</span><span id="lineage-151"><a href="#lineage-151"><span class="linenos">151</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">select</span><span class="p">,</span>
|
||||||
</span><span id="lineage-152"><a href="#lineage-152"><span class="linenos">152</span></a> <span class="c1"># The table itself came from a more specific scope. Recurse into that one using the unaliased column name.</span>
|
</span><span id="lineage-152"><a href="#lineage-152"><span class="linenos">152</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span> <span class="ow">or</span> <span class="s2">""</span><span class="p">,</span>
|
||||||
</span><span id="lineage-153"><a href="#lineage-153"><span class="linenos">153</span></a> <span class="n">to_node</span><span class="p">(</span>
|
</span><span id="lineage-153"><a href="#lineage-153"><span class="linenos">153</span></a> <span class="p">)</span>
|
||||||
</span><span id="lineage-154"><a href="#lineage-154"><span class="linenos">154</span></a> <span class="n">c</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">scope</span><span class="o">=</span><span class="n">source</span><span class="p">,</span> <span class="n">scope_name</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">upstream</span><span class="o">=</span><span class="n">node</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">aliases</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
|
</span><span id="lineage-154"><a href="#lineage-154"><span class="linenos">154</span></a> <span class="k">if</span> <span class="n">upstream</span><span class="p">:</span>
|
||||||
</span><span id="lineage-155"><a href="#lineage-155"><span class="linenos">155</span></a> <span class="p">)</span>
|
</span><span id="lineage-155"><a href="#lineage-155"><span class="linenos">155</span></a> <span class="n">upstream</span><span class="o">.</span><span class="n">downstream</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
|
||||||
</span><span id="lineage-156"><a href="#lineage-156"><span class="linenos">156</span></a> <span class="k">else</span><span class="p">:</span>
|
</span><span id="lineage-156"><a href="#lineage-156"><span class="linenos">156</span></a>
|
||||||
</span><span id="lineage-157"><a href="#lineage-157"><span class="linenos">157</span></a> <span class="c1"># The source is not a scope - we've reached the end of the line. At this point, if a source is not found</span>
|
</span><span id="lineage-157"><a href="#lineage-157"><span class="linenos">157</span></a> <span class="c1"># Find all columns that went into creating this one to list their lineage nodes.</span>
|
||||||
</span><span id="lineage-158"><a href="#lineage-158"><span class="linenos">158</span></a> <span class="c1"># it means this column's lineage is unknown. This can happen if the definition of a source used in a query</span>
|
</span><span id="lineage-158"><a href="#lineage-158"><span class="linenos">158</span></a> <span class="n">source_columns</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">select</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">))</span>
|
||||||
</span><span id="lineage-159"><a href="#lineage-159"><span class="linenos">159</span></a> <span class="c1"># is not passed into the `sources` map.</span>
|
</span><span id="lineage-159"><a href="#lineage-159"><span class="linenos">159</span></a>
|
||||||
</span><span id="lineage-160"><a href="#lineage-160"><span class="linenos">160</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">source</span> <span class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">Placeholder</span><span class="p">()</span>
|
</span><span id="lineage-160"><a href="#lineage-160"><span class="linenos">160</span></a> <span class="c1"># If the source is a UDTF find columns used in the UTDF to generate the table</span>
|
||||||
</span><span id="lineage-161"><a href="#lineage-161"><span class="linenos">161</span></a> <span class="n">node</span><span class="o">.</span><span class="n">downstream</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Node</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">c</span><span class="o">.</span><span class="n">sql</span><span class="p">(),</span> <span class="n">source</span><span class="o">=</span><span class="n">source</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">source</span><span class="p">))</span>
|
</span><span id="lineage-161"><a href="#lineage-161"><span class="linenos">161</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UDTF</span><span class="p">):</span>
|
||||||
</span><span id="lineage-162"><a href="#lineage-162"><span class="linenos">162</span></a>
|
</span><span id="lineage-162"><a href="#lineage-162"><span class="linenos">162</span></a> <span class="n">source_columns</span> <span class="o">|=</span> <span class="nb">set</span><span class="p">(</span><span class="n">source</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">))</span>
|
||||||
</span><span id="lineage-163"><a href="#lineage-163"><span class="linenos">163</span></a> <span class="k">return</span> <span class="n">node</span>
|
</span><span id="lineage-163"><a href="#lineage-163"><span class="linenos">163</span></a>
|
||||||
</span><span id="lineage-164"><a href="#lineage-164"><span class="linenos">164</span></a>
|
</span><span id="lineage-164"><a href="#lineage-164"><span class="linenos">164</span></a> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">source_columns</span><span class="p">:</span>
|
||||||
</span><span id="lineage-165"><a href="#lineage-165"><span class="linenos">165</span></a> <span class="k">return</span> <span class="n">to_node</span><span class="p">(</span><span class="n">column</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">scope</span><span class="p">)</span>
|
</span><span id="lineage-165"><a href="#lineage-165"><span class="linenos">165</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">table</span>
|
||||||
|
</span><span id="lineage-166"><a href="#lineage-166"><span class="linenos">166</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
|
||||||
|
</span><span id="lineage-167"><a href="#lineage-167"><span class="linenos">167</span></a>
|
||||||
|
</span><span id="lineage-168"><a href="#lineage-168"><span class="linenos">168</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">Scope</span><span class="p">):</span>
|
||||||
|
</span><span id="lineage-169"><a href="#lineage-169"><span class="linenos">169</span></a> <span class="c1"># The table itself came from a more specific scope. Recurse into that one using the unaliased column name.</span>
|
||||||
|
</span><span id="lineage-170"><a href="#lineage-170"><span class="linenos">170</span></a> <span class="n">to_node</span><span class="p">(</span>
|
||||||
|
</span><span id="lineage-171"><a href="#lineage-171"><span class="linenos">171</span></a> <span class="n">c</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">scope</span><span class="o">=</span><span class="n">source</span><span class="p">,</span> <span class="n">scope_name</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">upstream</span><span class="o">=</span><span class="n">node</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">aliases</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
|
||||||
|
</span><span id="lineage-172"><a href="#lineage-172"><span class="linenos">172</span></a> <span class="p">)</span>
|
||||||
|
</span><span id="lineage-173"><a href="#lineage-173"><span class="linenos">173</span></a> <span class="k">else</span><span class="p">:</span>
|
||||||
|
</span><span id="lineage-174"><a href="#lineage-174"><span class="linenos">174</span></a> <span class="c1"># The source is not a scope - we've reached the end of the line. At this point, if a source is not found</span>
|
||||||
|
</span><span id="lineage-175"><a href="#lineage-175"><span class="linenos">175</span></a> <span class="c1"># it means this column's lineage is unknown. This can happen if the definition of a source used in a query</span>
|
||||||
|
</span><span id="lineage-176"><a href="#lineage-176"><span class="linenos">176</span></a> <span class="c1"># is not passed into the `sources` map.</span>
|
||||||
|
</span><span id="lineage-177"><a href="#lineage-177"><span class="linenos">177</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">source</span> <span class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">Placeholder</span><span class="p">()</span>
|
||||||
|
</span><span id="lineage-178"><a href="#lineage-178"><span class="linenos">178</span></a> <span class="n">node</span><span class="o">.</span><span class="n">downstream</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Node</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">c</span><span class="o">.</span><span class="n">sql</span><span class="p">(),</span> <span class="n">source</span><span class="o">=</span><span class="n">source</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">source</span><span class="p">))</span>
|
||||||
|
</span><span id="lineage-179"><a href="#lineage-179"><span class="linenos">179</span></a>
|
||||||
|
</span><span id="lineage-180"><a href="#lineage-180"><span class="linenos">180</span></a> <span class="k">return</span> <span class="n">node</span>
|
||||||
|
</span><span id="lineage-181"><a href="#lineage-181"><span class="linenos">181</span></a>
|
||||||
|
</span><span id="lineage-182"><a href="#lineage-182"><span class="linenos">182</span></a> <span class="k">return</span> <span class="n">to_node</span><span class="p">(</span><span class="n">column</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">scope</span><span class="p">)</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -714,115 +748,115 @@
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#LineageHTML"></a>
|
<a class="headerlink" href="#LineageHTML"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="LineageHTML-168"><a href="#LineageHTML-168"><span class="linenos">168</span></a><span class="k">class</span> <span class="nc">LineageHTML</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="LineageHTML-185"><a href="#LineageHTML-185"><span class="linenos">185</span></a><span class="k">class</span> <span class="nc">LineageHTML</span><span class="p">:</span>
|
||||||
</span><span id="LineageHTML-169"><a href="#LineageHTML-169"><span class="linenos">169</span></a><span class="w"> </span><span class="sd">"""Node to HTML generator using vis.js.</span>
|
</span><span id="LineageHTML-186"><a href="#LineageHTML-186"><span class="linenos">186</span></a><span class="w"> </span><span class="sd">"""Node to HTML generator using vis.js.</span>
|
||||||
</span><span id="LineageHTML-170"><a href="#LineageHTML-170"><span class="linenos">170</span></a>
|
</span><span id="LineageHTML-187"><a href="#LineageHTML-187"><span class="linenos">187</span></a>
|
||||||
</span><span id="LineageHTML-171"><a href="#LineageHTML-171"><span class="linenos">171</span></a><span class="sd"> https://visjs.github.io/vis-network/docs/network/</span>
|
</span><span id="LineageHTML-188"><a href="#LineageHTML-188"><span class="linenos">188</span></a><span class="sd"> https://visjs.github.io/vis-network/docs/network/</span>
|
||||||
</span><span id="LineageHTML-172"><a href="#LineageHTML-172"><span class="linenos">172</span></a><span class="sd"> """</span>
|
</span><span id="LineageHTML-189"><a href="#LineageHTML-189"><span class="linenos">189</span></a><span class="sd"> """</span>
|
||||||
</span><span id="LineageHTML-173"><a href="#LineageHTML-173"><span class="linenos">173</span></a>
|
</span><span id="LineageHTML-190"><a href="#LineageHTML-190"><span class="linenos">190</span></a>
|
||||||
</span><span id="LineageHTML-174"><a href="#LineageHTML-174"><span class="linenos">174</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
|
</span><span id="LineageHTML-191"><a href="#LineageHTML-191"><span class="linenos">191</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
|
||||||
</span><span id="LineageHTML-175"><a href="#LineageHTML-175"><span class="linenos">175</span></a> <span class="bp">self</span><span class="p">,</span>
|
</span><span id="LineageHTML-192"><a href="#LineageHTML-192"><span class="linenos">192</span></a> <span class="bp">self</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML-176"><a href="#LineageHTML-176"><span class="linenos">176</span></a> <span class="n">node</span><span class="p">:</span> <span class="n">Node</span><span class="p">,</span>
|
</span><span id="LineageHTML-193"><a href="#LineageHTML-193"><span class="linenos">193</span></a> <span class="n">node</span><span class="p">:</span> <span class="n">Node</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML-177"><a href="#LineageHTML-177"><span class="linenos">177</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
</span><span id="LineageHTML-194"><a href="#LineageHTML-194"><span class="linenos">194</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML-178"><a href="#LineageHTML-178"><span class="linenos">178</span></a> <span class="n">imports</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
|
</span><span id="LineageHTML-195"><a href="#LineageHTML-195"><span class="linenos">195</span></a> <span class="n">imports</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML-179"><a href="#LineageHTML-179"><span class="linenos">179</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">,</span>
|
</span><span id="LineageHTML-196"><a href="#LineageHTML-196"><span class="linenos">196</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML-180"><a href="#LineageHTML-180"><span class="linenos">180</span></a> <span class="p">):</span>
|
</span><span id="LineageHTML-197"><a href="#LineageHTML-197"><span class="linenos">197</span></a> <span class="p">):</span>
|
||||||
</span><span id="LineageHTML-181"><a href="#LineageHTML-181"><span class="linenos">181</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">node</span> <span class="o">=</span> <span class="n">node</span>
|
</span><span id="LineageHTML-198"><a href="#LineageHTML-198"><span class="linenos">198</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">node</span> <span class="o">=</span> <span class="n">node</span>
|
||||||
</span><span id="LineageHTML-182"><a href="#LineageHTML-182"><span class="linenos">182</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">imports</span> <span class="o">=</span> <span class="n">imports</span>
|
</span><span id="LineageHTML-199"><a href="#LineageHTML-199"><span class="linenos">199</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">imports</span> <span class="o">=</span> <span class="n">imports</span>
|
||||||
</span><span id="LineageHTML-183"><a href="#LineageHTML-183"><span class="linenos">183</span></a>
|
</span><span id="LineageHTML-200"><a href="#LineageHTML-200"><span class="linenos">200</span></a>
|
||||||
</span><span id="LineageHTML-184"><a href="#LineageHTML-184"><span class="linenos">184</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">options</span> <span class="o">=</span> <span class="p">{</span>
|
</span><span id="LineageHTML-201"><a href="#LineageHTML-201"><span class="linenos">201</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">options</span> <span class="o">=</span> <span class="p">{</span>
|
||||||
</span><span id="LineageHTML-185"><a href="#LineageHTML-185"><span class="linenos">185</span></a> <span class="s2">"height"</span><span class="p">:</span> <span class="s2">"500px"</span><span class="p">,</span>
|
</span><span id="LineageHTML-202"><a href="#LineageHTML-202"><span class="linenos">202</span></a> <span class="s2">"height"</span><span class="p">:</span> <span class="s2">"500px"</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML-186"><a href="#LineageHTML-186"><span class="linenos">186</span></a> <span class="s2">"width"</span><span class="p">:</span> <span class="s2">"100%"</span><span class="p">,</span>
|
</span><span id="LineageHTML-203"><a href="#LineageHTML-203"><span class="linenos">203</span></a> <span class="s2">"width"</span><span class="p">:</span> <span class="s2">"100%"</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML-187"><a href="#LineageHTML-187"><span class="linenos">187</span></a> <span class="s2">"layout"</span><span class="p">:</span> <span class="p">{</span>
|
</span><span id="LineageHTML-204"><a href="#LineageHTML-204"><span class="linenos">204</span></a> <span class="s2">"layout"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
</span><span id="LineageHTML-188"><a href="#LineageHTML-188"><span class="linenos">188</span></a> <span class="s2">"hierarchical"</span><span class="p">:</span> <span class="p">{</span>
|
</span><span id="LineageHTML-205"><a href="#LineageHTML-205"><span class="linenos">205</span></a> <span class="s2">"hierarchical"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
</span><span id="LineageHTML-189"><a href="#LineageHTML-189"><span class="linenos">189</span></a> <span class="s2">"enabled"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
</span><span id="LineageHTML-206"><a href="#LineageHTML-206"><span class="linenos">206</span></a> <span class="s2">"enabled"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML-190"><a href="#LineageHTML-190"><span class="linenos">190</span></a> <span class="s2">"nodeSpacing"</span><span class="p">:</span> <span class="mi">200</span><span class="p">,</span>
|
</span><span id="LineageHTML-207"><a href="#LineageHTML-207"><span class="linenos">207</span></a> <span class="s2">"nodeSpacing"</span><span class="p">:</span> <span class="mi">200</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML-191"><a href="#LineageHTML-191"><span class="linenos">191</span></a> <span class="s2">"sortMethod"</span><span class="p">:</span> <span class="s2">"directed"</span><span class="p">,</span>
|
</span><span id="LineageHTML-208"><a href="#LineageHTML-208"><span class="linenos">208</span></a> <span class="s2">"sortMethod"</span><span class="p">:</span> <span class="s2">"directed"</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML-192"><a href="#LineageHTML-192"><span class="linenos">192</span></a> <span class="p">},</span>
|
|
||||||
</span><span id="LineageHTML-193"><a href="#LineageHTML-193"><span class="linenos">193</span></a> <span class="p">},</span>
|
|
||||||
</span><span id="LineageHTML-194"><a href="#LineageHTML-194"><span class="linenos">194</span></a> <span class="s2">"interaction"</span><span class="p">:</span> <span class="p">{</span>
|
|
||||||
</span><span id="LineageHTML-195"><a href="#LineageHTML-195"><span class="linenos">195</span></a> <span class="s2">"dragNodes"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
|
||||||
</span><span id="LineageHTML-196"><a href="#LineageHTML-196"><span class="linenos">196</span></a> <span class="s2">"selectable"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
|
||||||
</span><span id="LineageHTML-197"><a href="#LineageHTML-197"><span class="linenos">197</span></a> <span class="p">},</span>
|
|
||||||
</span><span id="LineageHTML-198"><a href="#LineageHTML-198"><span class="linenos">198</span></a> <span class="s2">"physics"</span><span class="p">:</span> <span class="p">{</span>
|
|
||||||
</span><span id="LineageHTML-199"><a href="#LineageHTML-199"><span class="linenos">199</span></a> <span class="s2">"enabled"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
|
||||||
</span><span id="LineageHTML-200"><a href="#LineageHTML-200"><span class="linenos">200</span></a> <span class="p">},</span>
|
|
||||||
</span><span id="LineageHTML-201"><a href="#LineageHTML-201"><span class="linenos">201</span></a> <span class="s2">"edges"</span><span class="p">:</span> <span class="p">{</span>
|
|
||||||
</span><span id="LineageHTML-202"><a href="#LineageHTML-202"><span class="linenos">202</span></a> <span class="s2">"arrows"</span><span class="p">:</span> <span class="s2">"to"</span><span class="p">,</span>
|
|
||||||
</span><span id="LineageHTML-203"><a href="#LineageHTML-203"><span class="linenos">203</span></a> <span class="p">},</span>
|
|
||||||
</span><span id="LineageHTML-204"><a href="#LineageHTML-204"><span class="linenos">204</span></a> <span class="s2">"nodes"</span><span class="p">:</span> <span class="p">{</span>
|
|
||||||
</span><span id="LineageHTML-205"><a href="#LineageHTML-205"><span class="linenos">205</span></a> <span class="s2">"font"</span><span class="p">:</span> <span class="s2">"20px monaco"</span><span class="p">,</span>
|
|
||||||
</span><span id="LineageHTML-206"><a href="#LineageHTML-206"><span class="linenos">206</span></a> <span class="s2">"shape"</span><span class="p">:</span> <span class="s2">"box"</span><span class="p">,</span>
|
|
||||||
</span><span id="LineageHTML-207"><a href="#LineageHTML-207"><span class="linenos">207</span></a> <span class="s2">"widthConstraint"</span><span class="p">:</span> <span class="p">{</span>
|
|
||||||
</span><span id="LineageHTML-208"><a href="#LineageHTML-208"><span class="linenos">208</span></a> <span class="s2">"maximum"</span><span class="p">:</span> <span class="mi">300</span><span class="p">,</span>
|
|
||||||
</span><span id="LineageHTML-209"><a href="#LineageHTML-209"><span class="linenos">209</span></a> <span class="p">},</span>
|
</span><span id="LineageHTML-209"><a href="#LineageHTML-209"><span class="linenos">209</span></a> <span class="p">},</span>
|
||||||
</span><span id="LineageHTML-210"><a href="#LineageHTML-210"><span class="linenos">210</span></a> <span class="p">},</span>
|
</span><span id="LineageHTML-210"><a href="#LineageHTML-210"><span class="linenos">210</span></a> <span class="p">},</span>
|
||||||
</span><span id="LineageHTML-211"><a href="#LineageHTML-211"><span class="linenos">211</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
|
</span><span id="LineageHTML-211"><a href="#LineageHTML-211"><span class="linenos">211</span></a> <span class="s2">"interaction"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
</span><span id="LineageHTML-212"><a href="#LineageHTML-212"><span class="linenos">212</span></a> <span class="p">}</span>
|
</span><span id="LineageHTML-212"><a href="#LineageHTML-212"><span class="linenos">212</span></a> <span class="s2">"dragNodes"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML-213"><a href="#LineageHTML-213"><span class="linenos">213</span></a>
|
</span><span id="LineageHTML-213"><a href="#LineageHTML-213"><span class="linenos">213</span></a> <span class="s2">"selectable"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML-214"><a href="#LineageHTML-214"><span class="linenos">214</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">nodes</span> <span class="o">=</span> <span class="p">{}</span>
|
</span><span id="LineageHTML-214"><a href="#LineageHTML-214"><span class="linenos">214</span></a> <span class="p">},</span>
|
||||||
</span><span id="LineageHTML-215"><a href="#LineageHTML-215"><span class="linenos">215</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">edges</span> <span class="o">=</span> <span class="p">[]</span>
|
</span><span id="LineageHTML-215"><a href="#LineageHTML-215"><span class="linenos">215</span></a> <span class="s2">"physics"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
</span><span id="LineageHTML-216"><a href="#LineageHTML-216"><span class="linenos">216</span></a>
|
</span><span id="LineageHTML-216"><a href="#LineageHTML-216"><span class="linenos">216</span></a> <span class="s2">"enabled"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML-217"><a href="#LineageHTML-217"><span class="linenos">217</span></a> <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">walk</span><span class="p">():</span>
|
</span><span id="LineageHTML-217"><a href="#LineageHTML-217"><span class="linenos">217</span></a> <span class="p">},</span>
|
||||||
</span><span id="LineageHTML-218"><a href="#LineageHTML-218"><span class="linenos">218</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">):</span>
|
</span><span id="LineageHTML-218"><a href="#LineageHTML-218"><span class="linenos">218</span></a> <span class="s2">"edges"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
</span><span id="LineageHTML-219"><a href="#LineageHTML-219"><span class="linenos">219</span></a> <span class="n">label</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"FROM </span><span class="si">{</span><span class="n">node</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="si">}</span><span class="s2">"</span>
|
</span><span id="LineageHTML-219"><a href="#LineageHTML-219"><span class="linenos">219</span></a> <span class="s2">"arrows"</span><span class="p">:</span> <span class="s2">"to"</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML-220"><a href="#LineageHTML-220"><span class="linenos">220</span></a> <span class="n">title</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"<pre>SELECT </span><span class="si">{</span><span class="n">node</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> FROM </span><span class="si">{</span><span class="n">node</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="si">}</span><span class="s2"></pre>"</span>
|
</span><span id="LineageHTML-220"><a href="#LineageHTML-220"><span class="linenos">220</span></a> <span class="p">},</span>
|
||||||
</span><span id="LineageHTML-221"><a href="#LineageHTML-221"><span class="linenos">221</span></a> <span class="n">group</span> <span class="o">=</span> <span class="mi">1</span>
|
</span><span id="LineageHTML-221"><a href="#LineageHTML-221"><span class="linenos">221</span></a> <span class="s2">"nodes"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
</span><span id="LineageHTML-222"><a href="#LineageHTML-222"><span class="linenos">222</span></a> <span class="k">else</span><span class="p">:</span>
|
</span><span id="LineageHTML-222"><a href="#LineageHTML-222"><span class="linenos">222</span></a> <span class="s2">"font"</span><span class="p">:</span> <span class="s2">"20px monaco"</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML-223"><a href="#LineageHTML-223"><span class="linenos">223</span></a> <span class="n">label</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">pretty</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span>
|
</span><span id="LineageHTML-223"><a href="#LineageHTML-223"><span class="linenos">223</span></a> <span class="s2">"shape"</span><span class="p">:</span> <span class="s2">"box"</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML-224"><a href="#LineageHTML-224"><span class="linenos">224</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">source</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
|
</span><span id="LineageHTML-224"><a href="#LineageHTML-224"><span class="linenos">224</span></a> <span class="s2">"widthConstraint"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
</span><span id="LineageHTML-225"><a href="#LineageHTML-225"><span class="linenos">225</span></a> <span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Tag</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">n</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">"<b>"</span><span class="p">,</span> <span class="n">postfix</span><span class="o">=</span><span class="s2">"</b>"</span><span class="p">)</span>
|
</span><span id="LineageHTML-225"><a href="#LineageHTML-225"><span class="linenos">225</span></a> <span class="s2">"maximum"</span><span class="p">:</span> <span class="mi">300</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML-226"><a href="#LineageHTML-226"><span class="linenos">226</span></a> <span class="k">if</span> <span class="n">n</span> <span class="ow">is</span> <span class="n">node</span><span class="o">.</span><span class="n">expression</span>
|
</span><span id="LineageHTML-226"><a href="#LineageHTML-226"><span class="linenos">226</span></a> <span class="p">},</span>
|
||||||
</span><span id="LineageHTML-227"><a href="#LineageHTML-227"><span class="linenos">227</span></a> <span class="k">else</span> <span class="n">n</span><span class="p">,</span>
|
</span><span id="LineageHTML-227"><a href="#LineageHTML-227"><span class="linenos">227</span></a> <span class="p">},</span>
|
||||||
</span><span id="LineageHTML-228"><a href="#LineageHTML-228"><span class="linenos">228</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
</span><span id="LineageHTML-228"><a href="#LineageHTML-228"><span class="linenos">228</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML-229"><a href="#LineageHTML-229"><span class="linenos">229</span></a> <span class="p">)</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">pretty</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span>
|
</span><span id="LineageHTML-229"><a href="#LineageHTML-229"><span class="linenos">229</span></a> <span class="p">}</span>
|
||||||
</span><span id="LineageHTML-230"><a href="#LineageHTML-230"><span class="linenos">230</span></a> <span class="n">title</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"<pre></span><span class="si">{</span><span class="n">source</span><span class="si">}</span><span class="s2"></pre>"</span>
|
</span><span id="LineageHTML-230"><a href="#LineageHTML-230"><span class="linenos">230</span></a>
|
||||||
</span><span id="LineageHTML-231"><a href="#LineageHTML-231"><span class="linenos">231</span></a> <span class="n">group</span> <span class="o">=</span> <span class="mi">0</span>
|
</span><span id="LineageHTML-231"><a href="#LineageHTML-231"><span class="linenos">231</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">nodes</span> <span class="o">=</span> <span class="p">{}</span>
|
||||||
</span><span id="LineageHTML-232"><a href="#LineageHTML-232"><span class="linenos">232</span></a>
|
</span><span id="LineageHTML-232"><a href="#LineageHTML-232"><span class="linenos">232</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">edges</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
</span><span id="LineageHTML-233"><a href="#LineageHTML-233"><span class="linenos">233</span></a> <span class="n">node_id</span> <span class="o">=</span> <span class="nb">id</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
|
</span><span id="LineageHTML-233"><a href="#LineageHTML-233"><span class="linenos">233</span></a>
|
||||||
</span><span id="LineageHTML-234"><a href="#LineageHTML-234"><span class="linenos">234</span></a>
|
</span><span id="LineageHTML-234"><a href="#LineageHTML-234"><span class="linenos">234</span></a> <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">walk</span><span class="p">():</span>
|
||||||
</span><span id="LineageHTML-235"><a href="#LineageHTML-235"><span class="linenos">235</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">nodes</span><span class="p">[</span><span class="n">node_id</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
|
</span><span id="LineageHTML-235"><a href="#LineageHTML-235"><span class="linenos">235</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">):</span>
|
||||||
</span><span id="LineageHTML-236"><a href="#LineageHTML-236"><span class="linenos">236</span></a> <span class="s2">"id"</span><span class="p">:</span> <span class="n">node_id</span><span class="p">,</span>
|
</span><span id="LineageHTML-236"><a href="#LineageHTML-236"><span class="linenos">236</span></a> <span class="n">label</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"FROM </span><span class="si">{</span><span class="n">node</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="si">}</span><span class="s2">"</span>
|
||||||
</span><span id="LineageHTML-237"><a href="#LineageHTML-237"><span class="linenos">237</span></a> <span class="s2">"label"</span><span class="p">:</span> <span class="n">label</span><span class="p">,</span>
|
</span><span id="LineageHTML-237"><a href="#LineageHTML-237"><span class="linenos">237</span></a> <span class="n">title</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"<pre>SELECT </span><span class="si">{</span><span class="n">node</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> FROM </span><span class="si">{</span><span class="n">node</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="si">}</span><span class="s2"></pre>"</span>
|
||||||
</span><span id="LineageHTML-238"><a href="#LineageHTML-238"><span class="linenos">238</span></a> <span class="s2">"title"</span><span class="p">:</span> <span class="n">title</span><span class="p">,</span>
|
</span><span id="LineageHTML-238"><a href="#LineageHTML-238"><span class="linenos">238</span></a> <span class="n">group</span> <span class="o">=</span> <span class="mi">1</span>
|
||||||
</span><span id="LineageHTML-239"><a href="#LineageHTML-239"><span class="linenos">239</span></a> <span class="s2">"group"</span><span class="p">:</span> <span class="n">group</span><span class="p">,</span>
|
</span><span id="LineageHTML-239"><a href="#LineageHTML-239"><span class="linenos">239</span></a> <span class="k">else</span><span class="p">:</span>
|
||||||
</span><span id="LineageHTML-240"><a href="#LineageHTML-240"><span class="linenos">240</span></a> <span class="p">}</span>
|
</span><span id="LineageHTML-240"><a href="#LineageHTML-240"><span class="linenos">240</span></a> <span class="n">label</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">pretty</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span>
|
||||||
</span><span id="LineageHTML-241"><a href="#LineageHTML-241"><span class="linenos">241</span></a>
|
</span><span id="LineageHTML-241"><a href="#LineageHTML-241"><span class="linenos">241</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">source</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
|
||||||
</span><span id="LineageHTML-242"><a href="#LineageHTML-242"><span class="linenos">242</span></a> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">downstream</span><span class="p">:</span>
|
</span><span id="LineageHTML-242"><a href="#LineageHTML-242"><span class="linenos">242</span></a> <span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Tag</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">n</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">"<b>"</span><span class="p">,</span> <span class="n">postfix</span><span class="o">=</span><span class="s2">"</b>"</span><span class="p">)</span>
|
||||||
</span><span id="LineageHTML-243"><a href="#LineageHTML-243"><span class="linenos">243</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">edges</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s2">"from"</span><span class="p">:</span> <span class="n">node_id</span><span class="p">,</span> <span class="s2">"to"</span><span class="p">:</span> <span class="nb">id</span><span class="p">(</span><span class="n">d</span><span class="p">)})</span>
|
</span><span id="LineageHTML-243"><a href="#LineageHTML-243"><span class="linenos">243</span></a> <span class="k">if</span> <span class="n">n</span> <span class="ow">is</span> <span class="n">node</span><span class="o">.</span><span class="n">expression</span>
|
||||||
</span><span id="LineageHTML-244"><a href="#LineageHTML-244"><span class="linenos">244</span></a>
|
</span><span id="LineageHTML-244"><a href="#LineageHTML-244"><span class="linenos">244</span></a> <span class="k">else</span> <span class="n">n</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML-245"><a href="#LineageHTML-245"><span class="linenos">245</span></a> <span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
</span><span id="LineageHTML-245"><a href="#LineageHTML-245"><span class="linenos">245</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML-246"><a href="#LineageHTML-246"><span class="linenos">246</span></a> <span class="n">nodes</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">nodes</span><span class="o">.</span><span class="n">values</span><span class="p">()))</span>
|
</span><span id="LineageHTML-246"><a href="#LineageHTML-246"><span class="linenos">246</span></a> <span class="p">)</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">pretty</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span>
|
||||||
</span><span id="LineageHTML-247"><a href="#LineageHTML-247"><span class="linenos">247</span></a> <span class="n">edges</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">edges</span><span class="p">)</span>
|
</span><span id="LineageHTML-247"><a href="#LineageHTML-247"><span class="linenos">247</span></a> <span class="n">title</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"<pre></span><span class="si">{</span><span class="n">source</span><span class="si">}</span><span class="s2"></pre>"</span>
|
||||||
</span><span id="LineageHTML-248"><a href="#LineageHTML-248"><span class="linenos">248</span></a> <span class="n">options</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="p">)</span>
|
</span><span id="LineageHTML-248"><a href="#LineageHTML-248"><span class="linenos">248</span></a> <span class="n">group</span> <span class="o">=</span> <span class="mi">0</span>
|
||||||
</span><span id="LineageHTML-249"><a href="#LineageHTML-249"><span class="linenos">249</span></a> <span class="n">imports</span> <span class="o">=</span> <span class="p">(</span>
|
</span><span id="LineageHTML-249"><a href="#LineageHTML-249"><span class="linenos">249</span></a>
|
||||||
</span><span id="LineageHTML-250"><a href="#LineageHTML-250"><span class="linenos">250</span></a><span class="w"> </span><span class="sd">"""<script type="text/javascript" src="https://unpkg.com/vis-data@latest/peer/umd/vis-data.min.js"></script></span>
|
</span><span id="LineageHTML-250"><a href="#LineageHTML-250"><span class="linenos">250</span></a> <span class="n">node_id</span> <span class="o">=</span> <span class="nb">id</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
|
||||||
</span><span id="LineageHTML-251"><a href="#LineageHTML-251"><span class="linenos">251</span></a><span class="sd"> <script type="text/javascript" src="https://unpkg.com/vis-network@latest/peer/umd/vis-network.min.js"></script></span>
|
</span><span id="LineageHTML-251"><a href="#LineageHTML-251"><span class="linenos">251</span></a>
|
||||||
</span><span id="LineageHTML-252"><a href="#LineageHTML-252"><span class="linenos">252</span></a><span class="sd"> <link rel="stylesheet" type="text/css" href="https://unpkg.com/vis-network/styles/vis-network.min.css" />"""</span>
|
</span><span id="LineageHTML-252"><a href="#LineageHTML-252"><span class="linenos">252</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">nodes</span><span class="p">[</span><span class="n">node_id</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
|
||||||
</span><span id="LineageHTML-253"><a href="#LineageHTML-253"><span class="linenos">253</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">imports</span>
|
</span><span id="LineageHTML-253"><a href="#LineageHTML-253"><span class="linenos">253</span></a> <span class="s2">"id"</span><span class="p">:</span> <span class="n">node_id</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML-254"><a href="#LineageHTML-254"><span class="linenos">254</span></a> <span class="k">else</span> <span class="s2">""</span>
|
</span><span id="LineageHTML-254"><a href="#LineageHTML-254"><span class="linenos">254</span></a> <span class="s2">"label"</span><span class="p">:</span> <span class="n">label</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML-255"><a href="#LineageHTML-255"><span class="linenos">255</span></a> <span class="p">)</span>
|
</span><span id="LineageHTML-255"><a href="#LineageHTML-255"><span class="linenos">255</span></a> <span class="s2">"title"</span><span class="p">:</span> <span class="n">title</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML-256"><a href="#LineageHTML-256"><span class="linenos">256</span></a>
|
</span><span id="LineageHTML-256"><a href="#LineageHTML-256"><span class="linenos">256</span></a> <span class="s2">"group"</span><span class="p">:</span> <span class="n">group</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML-257"><a href="#LineageHTML-257"><span class="linenos">257</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"""<div></span>
|
</span><span id="LineageHTML-257"><a href="#LineageHTML-257"><span class="linenos">257</span></a> <span class="p">}</span>
|
||||||
</span><span id="LineageHTML-258"><a href="#LineageHTML-258"><span class="linenos">258</span></a><span class="s2"> <div id="sqlglot-lineage"></div></span>
|
</span><span id="LineageHTML-258"><a href="#LineageHTML-258"><span class="linenos">258</span></a>
|
||||||
</span><span id="LineageHTML-259"><a href="#LineageHTML-259"><span class="linenos">259</span></a><span class="s2"> </span><span class="si">{</span><span class="n">imports</span><span class="si">}</span>
|
</span><span id="LineageHTML-259"><a href="#LineageHTML-259"><span class="linenos">259</span></a> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">downstream</span><span class="p">:</span>
|
||||||
</span><span id="LineageHTML-260"><a href="#LineageHTML-260"><span class="linenos">260</span></a><span class="s2"> <script type="text/javascript"></span>
|
</span><span id="LineageHTML-260"><a href="#LineageHTML-260"><span class="linenos">260</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">edges</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s2">"from"</span><span class="p">:</span> <span class="n">node_id</span><span class="p">,</span> <span class="s2">"to"</span><span class="p">:</span> <span class="nb">id</span><span class="p">(</span><span class="n">d</span><span class="p">)})</span>
|
||||||
</span><span id="LineageHTML-261"><a href="#LineageHTML-261"><span class="linenos">261</span></a><span class="s2"> var nodes = new vis.DataSet(</span><span class="si">{</span><span class="n">nodes</span><span class="si">}</span><span class="s2">)</span>
|
</span><span id="LineageHTML-261"><a href="#LineageHTML-261"><span class="linenos">261</span></a>
|
||||||
</span><span id="LineageHTML-262"><a href="#LineageHTML-262"><span class="linenos">262</span></a><span class="s2"> nodes.forEach(row => row["title"] = new DOMParser().parseFromString(row["title"], "text/html").body.childNodes[0])</span>
|
</span><span id="LineageHTML-262"><a href="#LineageHTML-262"><span class="linenos">262</span></a> <span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
</span><span id="LineageHTML-263"><a href="#LineageHTML-263"><span class="linenos">263</span></a>
|
</span><span id="LineageHTML-263"><a href="#LineageHTML-263"><span class="linenos">263</span></a> <span class="n">nodes</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">nodes</span><span class="o">.</span><span class="n">values</span><span class="p">()))</span>
|
||||||
</span><span id="LineageHTML-264"><a href="#LineageHTML-264"><span class="linenos">264</span></a><span class="s2"> new vis.Network(</span>
|
</span><span id="LineageHTML-264"><a href="#LineageHTML-264"><span class="linenos">264</span></a> <span class="n">edges</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">edges</span><span class="p">)</span>
|
||||||
</span><span id="LineageHTML-265"><a href="#LineageHTML-265"><span class="linenos">265</span></a><span class="s2"> document.getElementById("sqlglot-lineage"),</span>
|
</span><span id="LineageHTML-265"><a href="#LineageHTML-265"><span class="linenos">265</span></a> <span class="n">options</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="p">)</span>
|
||||||
</span><span id="LineageHTML-266"><a href="#LineageHTML-266"><span class="linenos">266</span></a><span class="s2"> </span><span class="se">{{</span>
|
</span><span id="LineageHTML-266"><a href="#LineageHTML-266"><span class="linenos">266</span></a> <span class="n">imports</span> <span class="o">=</span> <span class="p">(</span>
|
||||||
</span><span id="LineageHTML-267"><a href="#LineageHTML-267"><span class="linenos">267</span></a><span class="s2"> nodes: nodes,</span>
|
</span><span id="LineageHTML-267"><a href="#LineageHTML-267"><span class="linenos">267</span></a><span class="w"> </span><span class="sd">"""<script type="text/javascript" src="https://unpkg.com/vis-data@latest/peer/umd/vis-data.min.js"></script></span>
|
||||||
</span><span id="LineageHTML-268"><a href="#LineageHTML-268"><span class="linenos">268</span></a><span class="s2"> edges: new vis.DataSet(</span><span class="si">{</span><span class="n">edges</span><span class="si">}</span><span class="s2">)</span>
|
</span><span id="LineageHTML-268"><a href="#LineageHTML-268"><span class="linenos">268</span></a><span class="sd"> <script type="text/javascript" src="https://unpkg.com/vis-network@latest/peer/umd/vis-network.min.js"></script></span>
|
||||||
</span><span id="LineageHTML-269"><a href="#LineageHTML-269"><span class="linenos">269</span></a><span class="s2"> </span><span class="se">}}</span><span class="s2">,</span>
|
</span><span id="LineageHTML-269"><a href="#LineageHTML-269"><span class="linenos">269</span></a><span class="sd"> <link rel="stylesheet" type="text/css" href="https://unpkg.com/vis-network/styles/vis-network.min.css" />"""</span>
|
||||||
</span><span id="LineageHTML-270"><a href="#LineageHTML-270"><span class="linenos">270</span></a><span class="s2"> </span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">,</span>
|
</span><span id="LineageHTML-270"><a href="#LineageHTML-270"><span class="linenos">270</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">imports</span>
|
||||||
</span><span id="LineageHTML-271"><a href="#LineageHTML-271"><span class="linenos">271</span></a><span class="s2"> )</span>
|
</span><span id="LineageHTML-271"><a href="#LineageHTML-271"><span class="linenos">271</span></a> <span class="k">else</span> <span class="s2">""</span>
|
||||||
</span><span id="LineageHTML-272"><a href="#LineageHTML-272"><span class="linenos">272</span></a><span class="s2"> </script></span>
|
</span><span id="LineageHTML-272"><a href="#LineageHTML-272"><span class="linenos">272</span></a> <span class="p">)</span>
|
||||||
</span><span id="LineageHTML-273"><a href="#LineageHTML-273"><span class="linenos">273</span></a><span class="s2"></div>"""</span>
|
</span><span id="LineageHTML-273"><a href="#LineageHTML-273"><span class="linenos">273</span></a>
|
||||||
</span><span id="LineageHTML-274"><a href="#LineageHTML-274"><span class="linenos">274</span></a>
|
</span><span id="LineageHTML-274"><a href="#LineageHTML-274"><span class="linenos">274</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"""<div></span>
|
||||||
</span><span id="LineageHTML-275"><a href="#LineageHTML-275"><span class="linenos">275</span></a> <span class="k">def</span> <span class="nf">_repr_html_</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
</span><span id="LineageHTML-275"><a href="#LineageHTML-275"><span class="linenos">275</span></a><span class="s2"> <div id="sqlglot-lineage"></div></span>
|
||||||
</span><span id="LineageHTML-276"><a href="#LineageHTML-276"><span class="linenos">276</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="fm">__str__</span><span class="p">()</span>
|
</span><span id="LineageHTML-276"><a href="#LineageHTML-276"><span class="linenos">276</span></a><span class="s2"> </span><span class="si">{</span><span class="n">imports</span><span class="si">}</span>
|
||||||
|
</span><span id="LineageHTML-277"><a href="#LineageHTML-277"><span class="linenos">277</span></a><span class="s2"> <script type="text/javascript"></span>
|
||||||
|
</span><span id="LineageHTML-278"><a href="#LineageHTML-278"><span class="linenos">278</span></a><span class="s2"> var nodes = new vis.DataSet(</span><span class="si">{</span><span class="n">nodes</span><span class="si">}</span><span class="s2">)</span>
|
||||||
|
</span><span id="LineageHTML-279"><a href="#LineageHTML-279"><span class="linenos">279</span></a><span class="s2"> nodes.forEach(row => row["title"] = new DOMParser().parseFromString(row["title"], "text/html").body.childNodes[0])</span>
|
||||||
|
</span><span id="LineageHTML-280"><a href="#LineageHTML-280"><span class="linenos">280</span></a>
|
||||||
|
</span><span id="LineageHTML-281"><a href="#LineageHTML-281"><span class="linenos">281</span></a><span class="s2"> new vis.Network(</span>
|
||||||
|
</span><span id="LineageHTML-282"><a href="#LineageHTML-282"><span class="linenos">282</span></a><span class="s2"> document.getElementById("sqlglot-lineage"),</span>
|
||||||
|
</span><span id="LineageHTML-283"><a href="#LineageHTML-283"><span class="linenos">283</span></a><span class="s2"> </span><span class="se">{{</span>
|
||||||
|
</span><span id="LineageHTML-284"><a href="#LineageHTML-284"><span class="linenos">284</span></a><span class="s2"> nodes: nodes,</span>
|
||||||
|
</span><span id="LineageHTML-285"><a href="#LineageHTML-285"><span class="linenos">285</span></a><span class="s2"> edges: new vis.DataSet(</span><span class="si">{</span><span class="n">edges</span><span class="si">}</span><span class="s2">)</span>
|
||||||
|
</span><span id="LineageHTML-286"><a href="#LineageHTML-286"><span class="linenos">286</span></a><span class="s2"> </span><span class="se">}}</span><span class="s2">,</span>
|
||||||
|
</span><span id="LineageHTML-287"><a href="#LineageHTML-287"><span class="linenos">287</span></a><span class="s2"> </span><span class="si">{</span><span class="n">options</span><span class="si">}</span><span class="s2">,</span>
|
||||||
|
</span><span id="LineageHTML-288"><a href="#LineageHTML-288"><span class="linenos">288</span></a><span class="s2"> )</span>
|
||||||
|
</span><span id="LineageHTML-289"><a href="#LineageHTML-289"><span class="linenos">289</span></a><span class="s2"> </script></span>
|
||||||
|
</span><span id="LineageHTML-290"><a href="#LineageHTML-290"><span class="linenos">290</span></a><span class="s2"></div>"""</span>
|
||||||
|
</span><span id="LineageHTML-291"><a href="#LineageHTML-291"><span class="linenos">291</span></a>
|
||||||
|
</span><span id="LineageHTML-292"><a href="#LineageHTML-292"><span class="linenos">292</span></a> <span class="k">def</span> <span class="nf">_repr_html_</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
|
</span><span id="LineageHTML-293"><a href="#LineageHTML-293"><span class="linenos">293</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="fm">__str__</span><span class="p">()</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -842,76 +876,76 @@
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#LineageHTML.__init__"></a>
|
<a class="headerlink" href="#LineageHTML.__init__"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="LineageHTML.__init__-174"><a href="#LineageHTML.__init__-174"><span class="linenos">174</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="LineageHTML.__init__-191"><a href="#LineageHTML.__init__-191"><span class="linenos">191</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
|
||||||
</span><span id="LineageHTML.__init__-175"><a href="#LineageHTML.__init__-175"><span class="linenos">175</span></a> <span class="bp">self</span><span class="p">,</span>
|
</span><span id="LineageHTML.__init__-192"><a href="#LineageHTML.__init__-192"><span class="linenos">192</span></a> <span class="bp">self</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML.__init__-176"><a href="#LineageHTML.__init__-176"><span class="linenos">176</span></a> <span class="n">node</span><span class="p">:</span> <span class="n">Node</span><span class="p">,</span>
|
</span><span id="LineageHTML.__init__-193"><a href="#LineageHTML.__init__-193"><span class="linenos">193</span></a> <span class="n">node</span><span class="p">:</span> <span class="n">Node</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML.__init__-177"><a href="#LineageHTML.__init__-177"><span class="linenos">177</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
</span><span id="LineageHTML.__init__-194"><a href="#LineageHTML.__init__-194"><span class="linenos">194</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML.__init__-178"><a href="#LineageHTML.__init__-178"><span class="linenos">178</span></a> <span class="n">imports</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
|
</span><span id="LineageHTML.__init__-195"><a href="#LineageHTML.__init__-195"><span class="linenos">195</span></a> <span class="n">imports</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML.__init__-179"><a href="#LineageHTML.__init__-179"><span class="linenos">179</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">,</span>
|
</span><span id="LineageHTML.__init__-196"><a href="#LineageHTML.__init__-196"><span class="linenos">196</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML.__init__-180"><a href="#LineageHTML.__init__-180"><span class="linenos">180</span></a> <span class="p">):</span>
|
</span><span id="LineageHTML.__init__-197"><a href="#LineageHTML.__init__-197"><span class="linenos">197</span></a> <span class="p">):</span>
|
||||||
</span><span id="LineageHTML.__init__-181"><a href="#LineageHTML.__init__-181"><span class="linenos">181</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">node</span> <span class="o">=</span> <span class="n">node</span>
|
</span><span id="LineageHTML.__init__-198"><a href="#LineageHTML.__init__-198"><span class="linenos">198</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">node</span> <span class="o">=</span> <span class="n">node</span>
|
||||||
</span><span id="LineageHTML.__init__-182"><a href="#LineageHTML.__init__-182"><span class="linenos">182</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">imports</span> <span class="o">=</span> <span class="n">imports</span>
|
</span><span id="LineageHTML.__init__-199"><a href="#LineageHTML.__init__-199"><span class="linenos">199</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">imports</span> <span class="o">=</span> <span class="n">imports</span>
|
||||||
</span><span id="LineageHTML.__init__-183"><a href="#LineageHTML.__init__-183"><span class="linenos">183</span></a>
|
</span><span id="LineageHTML.__init__-200"><a href="#LineageHTML.__init__-200"><span class="linenos">200</span></a>
|
||||||
</span><span id="LineageHTML.__init__-184"><a href="#LineageHTML.__init__-184"><span class="linenos">184</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">options</span> <span class="o">=</span> <span class="p">{</span>
|
</span><span id="LineageHTML.__init__-201"><a href="#LineageHTML.__init__-201"><span class="linenos">201</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">options</span> <span class="o">=</span> <span class="p">{</span>
|
||||||
</span><span id="LineageHTML.__init__-185"><a href="#LineageHTML.__init__-185"><span class="linenos">185</span></a> <span class="s2">"height"</span><span class="p">:</span> <span class="s2">"500px"</span><span class="p">,</span>
|
</span><span id="LineageHTML.__init__-202"><a href="#LineageHTML.__init__-202"><span class="linenos">202</span></a> <span class="s2">"height"</span><span class="p">:</span> <span class="s2">"500px"</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML.__init__-186"><a href="#LineageHTML.__init__-186"><span class="linenos">186</span></a> <span class="s2">"width"</span><span class="p">:</span> <span class="s2">"100%"</span><span class="p">,</span>
|
</span><span id="LineageHTML.__init__-203"><a href="#LineageHTML.__init__-203"><span class="linenos">203</span></a> <span class="s2">"width"</span><span class="p">:</span> <span class="s2">"100%"</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML.__init__-187"><a href="#LineageHTML.__init__-187"><span class="linenos">187</span></a> <span class="s2">"layout"</span><span class="p">:</span> <span class="p">{</span>
|
</span><span id="LineageHTML.__init__-204"><a href="#LineageHTML.__init__-204"><span class="linenos">204</span></a> <span class="s2">"layout"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
</span><span id="LineageHTML.__init__-188"><a href="#LineageHTML.__init__-188"><span class="linenos">188</span></a> <span class="s2">"hierarchical"</span><span class="p">:</span> <span class="p">{</span>
|
</span><span id="LineageHTML.__init__-205"><a href="#LineageHTML.__init__-205"><span class="linenos">205</span></a> <span class="s2">"hierarchical"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
</span><span id="LineageHTML.__init__-189"><a href="#LineageHTML.__init__-189"><span class="linenos">189</span></a> <span class="s2">"enabled"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
</span><span id="LineageHTML.__init__-206"><a href="#LineageHTML.__init__-206"><span class="linenos">206</span></a> <span class="s2">"enabled"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML.__init__-190"><a href="#LineageHTML.__init__-190"><span class="linenos">190</span></a> <span class="s2">"nodeSpacing"</span><span class="p">:</span> <span class="mi">200</span><span class="p">,</span>
|
</span><span id="LineageHTML.__init__-207"><a href="#LineageHTML.__init__-207"><span class="linenos">207</span></a> <span class="s2">"nodeSpacing"</span><span class="p">:</span> <span class="mi">200</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML.__init__-191"><a href="#LineageHTML.__init__-191"><span class="linenos">191</span></a> <span class="s2">"sortMethod"</span><span class="p">:</span> <span class="s2">"directed"</span><span class="p">,</span>
|
</span><span id="LineageHTML.__init__-208"><a href="#LineageHTML.__init__-208"><span class="linenos">208</span></a> <span class="s2">"sortMethod"</span><span class="p">:</span> <span class="s2">"directed"</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML.__init__-192"><a href="#LineageHTML.__init__-192"><span class="linenos">192</span></a> <span class="p">},</span>
|
|
||||||
</span><span id="LineageHTML.__init__-193"><a href="#LineageHTML.__init__-193"><span class="linenos">193</span></a> <span class="p">},</span>
|
|
||||||
</span><span id="LineageHTML.__init__-194"><a href="#LineageHTML.__init__-194"><span class="linenos">194</span></a> <span class="s2">"interaction"</span><span class="p">:</span> <span class="p">{</span>
|
|
||||||
</span><span id="LineageHTML.__init__-195"><a href="#LineageHTML.__init__-195"><span class="linenos">195</span></a> <span class="s2">"dragNodes"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
|
||||||
</span><span id="LineageHTML.__init__-196"><a href="#LineageHTML.__init__-196"><span class="linenos">196</span></a> <span class="s2">"selectable"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
|
||||||
</span><span id="LineageHTML.__init__-197"><a href="#LineageHTML.__init__-197"><span class="linenos">197</span></a> <span class="p">},</span>
|
|
||||||
</span><span id="LineageHTML.__init__-198"><a href="#LineageHTML.__init__-198"><span class="linenos">198</span></a> <span class="s2">"physics"</span><span class="p">:</span> <span class="p">{</span>
|
|
||||||
</span><span id="LineageHTML.__init__-199"><a href="#LineageHTML.__init__-199"><span class="linenos">199</span></a> <span class="s2">"enabled"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
|
||||||
</span><span id="LineageHTML.__init__-200"><a href="#LineageHTML.__init__-200"><span class="linenos">200</span></a> <span class="p">},</span>
|
|
||||||
</span><span id="LineageHTML.__init__-201"><a href="#LineageHTML.__init__-201"><span class="linenos">201</span></a> <span class="s2">"edges"</span><span class="p">:</span> <span class="p">{</span>
|
|
||||||
</span><span id="LineageHTML.__init__-202"><a href="#LineageHTML.__init__-202"><span class="linenos">202</span></a> <span class="s2">"arrows"</span><span class="p">:</span> <span class="s2">"to"</span><span class="p">,</span>
|
|
||||||
</span><span id="LineageHTML.__init__-203"><a href="#LineageHTML.__init__-203"><span class="linenos">203</span></a> <span class="p">},</span>
|
|
||||||
</span><span id="LineageHTML.__init__-204"><a href="#LineageHTML.__init__-204"><span class="linenos">204</span></a> <span class="s2">"nodes"</span><span class="p">:</span> <span class="p">{</span>
|
|
||||||
</span><span id="LineageHTML.__init__-205"><a href="#LineageHTML.__init__-205"><span class="linenos">205</span></a> <span class="s2">"font"</span><span class="p">:</span> <span class="s2">"20px monaco"</span><span class="p">,</span>
|
|
||||||
</span><span id="LineageHTML.__init__-206"><a href="#LineageHTML.__init__-206"><span class="linenos">206</span></a> <span class="s2">"shape"</span><span class="p">:</span> <span class="s2">"box"</span><span class="p">,</span>
|
|
||||||
</span><span id="LineageHTML.__init__-207"><a href="#LineageHTML.__init__-207"><span class="linenos">207</span></a> <span class="s2">"widthConstraint"</span><span class="p">:</span> <span class="p">{</span>
|
|
||||||
</span><span id="LineageHTML.__init__-208"><a href="#LineageHTML.__init__-208"><span class="linenos">208</span></a> <span class="s2">"maximum"</span><span class="p">:</span> <span class="mi">300</span><span class="p">,</span>
|
|
||||||
</span><span id="LineageHTML.__init__-209"><a href="#LineageHTML.__init__-209"><span class="linenos">209</span></a> <span class="p">},</span>
|
</span><span id="LineageHTML.__init__-209"><a href="#LineageHTML.__init__-209"><span class="linenos">209</span></a> <span class="p">},</span>
|
||||||
</span><span id="LineageHTML.__init__-210"><a href="#LineageHTML.__init__-210"><span class="linenos">210</span></a> <span class="p">},</span>
|
</span><span id="LineageHTML.__init__-210"><a href="#LineageHTML.__init__-210"><span class="linenos">210</span></a> <span class="p">},</span>
|
||||||
</span><span id="LineageHTML.__init__-211"><a href="#LineageHTML.__init__-211"><span class="linenos">211</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
|
</span><span id="LineageHTML.__init__-211"><a href="#LineageHTML.__init__-211"><span class="linenos">211</span></a> <span class="s2">"interaction"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
</span><span id="LineageHTML.__init__-212"><a href="#LineageHTML.__init__-212"><span class="linenos">212</span></a> <span class="p">}</span>
|
</span><span id="LineageHTML.__init__-212"><a href="#LineageHTML.__init__-212"><span class="linenos">212</span></a> <span class="s2">"dragNodes"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML.__init__-213"><a href="#LineageHTML.__init__-213"><span class="linenos">213</span></a>
|
</span><span id="LineageHTML.__init__-213"><a href="#LineageHTML.__init__-213"><span class="linenos">213</span></a> <span class="s2">"selectable"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML.__init__-214"><a href="#LineageHTML.__init__-214"><span class="linenos">214</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">nodes</span> <span class="o">=</span> <span class="p">{}</span>
|
</span><span id="LineageHTML.__init__-214"><a href="#LineageHTML.__init__-214"><span class="linenos">214</span></a> <span class="p">},</span>
|
||||||
</span><span id="LineageHTML.__init__-215"><a href="#LineageHTML.__init__-215"><span class="linenos">215</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">edges</span> <span class="o">=</span> <span class="p">[]</span>
|
</span><span id="LineageHTML.__init__-215"><a href="#LineageHTML.__init__-215"><span class="linenos">215</span></a> <span class="s2">"physics"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
</span><span id="LineageHTML.__init__-216"><a href="#LineageHTML.__init__-216"><span class="linenos">216</span></a>
|
</span><span id="LineageHTML.__init__-216"><a href="#LineageHTML.__init__-216"><span class="linenos">216</span></a> <span class="s2">"enabled"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML.__init__-217"><a href="#LineageHTML.__init__-217"><span class="linenos">217</span></a> <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">walk</span><span class="p">():</span>
|
</span><span id="LineageHTML.__init__-217"><a href="#LineageHTML.__init__-217"><span class="linenos">217</span></a> <span class="p">},</span>
|
||||||
</span><span id="LineageHTML.__init__-218"><a href="#LineageHTML.__init__-218"><span class="linenos">218</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">):</span>
|
</span><span id="LineageHTML.__init__-218"><a href="#LineageHTML.__init__-218"><span class="linenos">218</span></a> <span class="s2">"edges"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
</span><span id="LineageHTML.__init__-219"><a href="#LineageHTML.__init__-219"><span class="linenos">219</span></a> <span class="n">label</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"FROM </span><span class="si">{</span><span class="n">node</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="si">}</span><span class="s2">"</span>
|
</span><span id="LineageHTML.__init__-219"><a href="#LineageHTML.__init__-219"><span class="linenos">219</span></a> <span class="s2">"arrows"</span><span class="p">:</span> <span class="s2">"to"</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML.__init__-220"><a href="#LineageHTML.__init__-220"><span class="linenos">220</span></a> <span class="n">title</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"<pre>SELECT </span><span class="si">{</span><span class="n">node</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> FROM </span><span class="si">{</span><span class="n">node</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="si">}</span><span class="s2"></pre>"</span>
|
</span><span id="LineageHTML.__init__-220"><a href="#LineageHTML.__init__-220"><span class="linenos">220</span></a> <span class="p">},</span>
|
||||||
</span><span id="LineageHTML.__init__-221"><a href="#LineageHTML.__init__-221"><span class="linenos">221</span></a> <span class="n">group</span> <span class="o">=</span> <span class="mi">1</span>
|
</span><span id="LineageHTML.__init__-221"><a href="#LineageHTML.__init__-221"><span class="linenos">221</span></a> <span class="s2">"nodes"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
</span><span id="LineageHTML.__init__-222"><a href="#LineageHTML.__init__-222"><span class="linenos">222</span></a> <span class="k">else</span><span class="p">:</span>
|
</span><span id="LineageHTML.__init__-222"><a href="#LineageHTML.__init__-222"><span class="linenos">222</span></a> <span class="s2">"font"</span><span class="p">:</span> <span class="s2">"20px monaco"</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML.__init__-223"><a href="#LineageHTML.__init__-223"><span class="linenos">223</span></a> <span class="n">label</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">pretty</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span>
|
</span><span id="LineageHTML.__init__-223"><a href="#LineageHTML.__init__-223"><span class="linenos">223</span></a> <span class="s2">"shape"</span><span class="p">:</span> <span class="s2">"box"</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML.__init__-224"><a href="#LineageHTML.__init__-224"><span class="linenos">224</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">source</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
|
</span><span id="LineageHTML.__init__-224"><a href="#LineageHTML.__init__-224"><span class="linenos">224</span></a> <span class="s2">"widthConstraint"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
</span><span id="LineageHTML.__init__-225"><a href="#LineageHTML.__init__-225"><span class="linenos">225</span></a> <span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Tag</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">n</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">"<b>"</span><span class="p">,</span> <span class="n">postfix</span><span class="o">=</span><span class="s2">"</b>"</span><span class="p">)</span>
|
</span><span id="LineageHTML.__init__-225"><a href="#LineageHTML.__init__-225"><span class="linenos">225</span></a> <span class="s2">"maximum"</span><span class="p">:</span> <span class="mi">300</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML.__init__-226"><a href="#LineageHTML.__init__-226"><span class="linenos">226</span></a> <span class="k">if</span> <span class="n">n</span> <span class="ow">is</span> <span class="n">node</span><span class="o">.</span><span class="n">expression</span>
|
</span><span id="LineageHTML.__init__-226"><a href="#LineageHTML.__init__-226"><span class="linenos">226</span></a> <span class="p">},</span>
|
||||||
</span><span id="LineageHTML.__init__-227"><a href="#LineageHTML.__init__-227"><span class="linenos">227</span></a> <span class="k">else</span> <span class="n">n</span><span class="p">,</span>
|
</span><span id="LineageHTML.__init__-227"><a href="#LineageHTML.__init__-227"><span class="linenos">227</span></a> <span class="p">},</span>
|
||||||
</span><span id="LineageHTML.__init__-228"><a href="#LineageHTML.__init__-228"><span class="linenos">228</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
</span><span id="LineageHTML.__init__-228"><a href="#LineageHTML.__init__-228"><span class="linenos">228</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
|
||||||
</span><span id="LineageHTML.__init__-229"><a href="#LineageHTML.__init__-229"><span class="linenos">229</span></a> <span class="p">)</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">pretty</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span>
|
</span><span id="LineageHTML.__init__-229"><a href="#LineageHTML.__init__-229"><span class="linenos">229</span></a> <span class="p">}</span>
|
||||||
</span><span id="LineageHTML.__init__-230"><a href="#LineageHTML.__init__-230"><span class="linenos">230</span></a> <span class="n">title</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"<pre></span><span class="si">{</span><span class="n">source</span><span class="si">}</span><span class="s2"></pre>"</span>
|
</span><span id="LineageHTML.__init__-230"><a href="#LineageHTML.__init__-230"><span class="linenos">230</span></a>
|
||||||
</span><span id="LineageHTML.__init__-231"><a href="#LineageHTML.__init__-231"><span class="linenos">231</span></a> <span class="n">group</span> <span class="o">=</span> <span class="mi">0</span>
|
</span><span id="LineageHTML.__init__-231"><a href="#LineageHTML.__init__-231"><span class="linenos">231</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">nodes</span> <span class="o">=</span> <span class="p">{}</span>
|
||||||
</span><span id="LineageHTML.__init__-232"><a href="#LineageHTML.__init__-232"><span class="linenos">232</span></a>
|
</span><span id="LineageHTML.__init__-232"><a href="#LineageHTML.__init__-232"><span class="linenos">232</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">edges</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
</span><span id="LineageHTML.__init__-233"><a href="#LineageHTML.__init__-233"><span class="linenos">233</span></a> <span class="n">node_id</span> <span class="o">=</span> <span class="nb">id</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
|
</span><span id="LineageHTML.__init__-233"><a href="#LineageHTML.__init__-233"><span class="linenos">233</span></a>
|
||||||
</span><span id="LineageHTML.__init__-234"><a href="#LineageHTML.__init__-234"><span class="linenos">234</span></a>
|
</span><span id="LineageHTML.__init__-234"><a href="#LineageHTML.__init__-234"><span class="linenos">234</span></a> <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">walk</span><span class="p">():</span>
|
||||||
</span><span id="LineageHTML.__init__-235"><a href="#LineageHTML.__init__-235"><span class="linenos">235</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">nodes</span><span class="p">[</span><span class="n">node_id</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
|
</span><span id="LineageHTML.__init__-235"><a href="#LineageHTML.__init__-235"><span class="linenos">235</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">):</span>
|
||||||
</span><span id="LineageHTML.__init__-236"><a href="#LineageHTML.__init__-236"><span class="linenos">236</span></a> <span class="s2">"id"</span><span class="p">:</span> <span class="n">node_id</span><span class="p">,</span>
|
</span><span id="LineageHTML.__init__-236"><a href="#LineageHTML.__init__-236"><span class="linenos">236</span></a> <span class="n">label</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"FROM </span><span class="si">{</span><span class="n">node</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="si">}</span><span class="s2">"</span>
|
||||||
</span><span id="LineageHTML.__init__-237"><a href="#LineageHTML.__init__-237"><span class="linenos">237</span></a> <span class="s2">"label"</span><span class="p">:</span> <span class="n">label</span><span class="p">,</span>
|
</span><span id="LineageHTML.__init__-237"><a href="#LineageHTML.__init__-237"><span class="linenos">237</span></a> <span class="n">title</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"<pre>SELECT </span><span class="si">{</span><span class="n">node</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> FROM </span><span class="si">{</span><span class="n">node</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="si">}</span><span class="s2"></pre>"</span>
|
||||||
</span><span id="LineageHTML.__init__-238"><a href="#LineageHTML.__init__-238"><span class="linenos">238</span></a> <span class="s2">"title"</span><span class="p">:</span> <span class="n">title</span><span class="p">,</span>
|
</span><span id="LineageHTML.__init__-238"><a href="#LineageHTML.__init__-238"><span class="linenos">238</span></a> <span class="n">group</span> <span class="o">=</span> <span class="mi">1</span>
|
||||||
</span><span id="LineageHTML.__init__-239"><a href="#LineageHTML.__init__-239"><span class="linenos">239</span></a> <span class="s2">"group"</span><span class="p">:</span> <span class="n">group</span><span class="p">,</span>
|
</span><span id="LineageHTML.__init__-239"><a href="#LineageHTML.__init__-239"><span class="linenos">239</span></a> <span class="k">else</span><span class="p">:</span>
|
||||||
</span><span id="LineageHTML.__init__-240"><a href="#LineageHTML.__init__-240"><span class="linenos">240</span></a> <span class="p">}</span>
|
</span><span id="LineageHTML.__init__-240"><a href="#LineageHTML.__init__-240"><span class="linenos">240</span></a> <span class="n">label</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">pretty</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span>
|
||||||
</span><span id="LineageHTML.__init__-241"><a href="#LineageHTML.__init__-241"><span class="linenos">241</span></a>
|
</span><span id="LineageHTML.__init__-241"><a href="#LineageHTML.__init__-241"><span class="linenos">241</span></a> <span class="n">source</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">source</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
|
||||||
</span><span id="LineageHTML.__init__-242"><a href="#LineageHTML.__init__-242"><span class="linenos">242</span></a> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">downstream</span><span class="p">:</span>
|
</span><span id="LineageHTML.__init__-242"><a href="#LineageHTML.__init__-242"><span class="linenos">242</span></a> <span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Tag</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">n</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">"<b>"</span><span class="p">,</span> <span class="n">postfix</span><span class="o">=</span><span class="s2">"</b>"</span><span class="p">)</span>
|
||||||
</span><span id="LineageHTML.__init__-243"><a href="#LineageHTML.__init__-243"><span class="linenos">243</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">edges</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s2">"from"</span><span class="p">:</span> <span class="n">node_id</span><span class="p">,</span> <span class="s2">"to"</span><span class="p">:</span> <span class="nb">id</span><span class="p">(</span><span class="n">d</span><span class="p">)})</span>
|
</span><span id="LineageHTML.__init__-243"><a href="#LineageHTML.__init__-243"><span class="linenos">243</span></a> <span class="k">if</span> <span class="n">n</span> <span class="ow">is</span> <span class="n">node</span><span class="o">.</span><span class="n">expression</span>
|
||||||
|
</span><span id="LineageHTML.__init__-244"><a href="#LineageHTML.__init__-244"><span class="linenos">244</span></a> <span class="k">else</span> <span class="n">n</span><span class="p">,</span>
|
||||||
|
</span><span id="LineageHTML.__init__-245"><a href="#LineageHTML.__init__-245"><span class="linenos">245</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||||
|
</span><span id="LineageHTML.__init__-246"><a href="#LineageHTML.__init__-246"><span class="linenos">246</span></a> <span class="p">)</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">pretty</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span>
|
||||||
|
</span><span id="LineageHTML.__init__-247"><a href="#LineageHTML.__init__-247"><span class="linenos">247</span></a> <span class="n">title</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"<pre></span><span class="si">{</span><span class="n">source</span><span class="si">}</span><span class="s2"></pre>"</span>
|
||||||
|
</span><span id="LineageHTML.__init__-248"><a href="#LineageHTML.__init__-248"><span class="linenos">248</span></a> <span class="n">group</span> <span class="o">=</span> <span class="mi">0</span>
|
||||||
|
</span><span id="LineageHTML.__init__-249"><a href="#LineageHTML.__init__-249"><span class="linenos">249</span></a>
|
||||||
|
</span><span id="LineageHTML.__init__-250"><a href="#LineageHTML.__init__-250"><span class="linenos">250</span></a> <span class="n">node_id</span> <span class="o">=</span> <span class="nb">id</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
|
||||||
|
</span><span id="LineageHTML.__init__-251"><a href="#LineageHTML.__init__-251"><span class="linenos">251</span></a>
|
||||||
|
</span><span id="LineageHTML.__init__-252"><a href="#LineageHTML.__init__-252"><span class="linenos">252</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">nodes</span><span class="p">[</span><span class="n">node_id</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
|
||||||
|
</span><span id="LineageHTML.__init__-253"><a href="#LineageHTML.__init__-253"><span class="linenos">253</span></a> <span class="s2">"id"</span><span class="p">:</span> <span class="n">node_id</span><span class="p">,</span>
|
||||||
|
</span><span id="LineageHTML.__init__-254"><a href="#LineageHTML.__init__-254"><span class="linenos">254</span></a> <span class="s2">"label"</span><span class="p">:</span> <span class="n">label</span><span class="p">,</span>
|
||||||
|
</span><span id="LineageHTML.__init__-255"><a href="#LineageHTML.__init__-255"><span class="linenos">255</span></a> <span class="s2">"title"</span><span class="p">:</span> <span class="n">title</span><span class="p">,</span>
|
||||||
|
</span><span id="LineageHTML.__init__-256"><a href="#LineageHTML.__init__-256"><span class="linenos">256</span></a> <span class="s2">"group"</span><span class="p">:</span> <span class="n">group</span><span class="p">,</span>
|
||||||
|
</span><span id="LineageHTML.__init__-257"><a href="#LineageHTML.__init__-257"><span class="linenos">257</span></a> <span class="p">}</span>
|
||||||
|
</span><span id="LineageHTML.__init__-258"><a href="#LineageHTML.__init__-258"><span class="linenos">258</span></a>
|
||||||
|
</span><span id="LineageHTML.__init__-259"><a href="#LineageHTML.__init__-259"><span class="linenos">259</span></a> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">downstream</span><span class="p">:</span>
|
||||||
|
</span><span id="LineageHTML.__init__-260"><a href="#LineageHTML.__init__-260"><span class="linenos">260</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">edges</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s2">"from"</span><span class="p">:</span> <span class="n">node_id</span><span class="p">,</span> <span class="s2">"to"</span><span class="p">:</span> <span class="nb">id</span><span class="p">(</span><span class="n">d</span><span class="p">)})</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -145,41 +145,45 @@
|
||||||
</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="n">_replace_int_predicate</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
|
</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="n">_replace_int_predicate</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
|
||||||
</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="n">_replace_int_predicate</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
|
</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="n">_replace_int_predicate</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
|
||||||
</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a>
|
</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a>
|
||||||
</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Having</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">)):</span>
|
</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Having</span><span class="p">))</span> <span class="ow">or</span> <span class="p">(</span>
|
||||||
</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="n">_replace_int_predicate</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
|
</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="c1"># We can't replace num in CASE x WHEN num ..., because it's not the full predicate</span>
|
||||||
</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a>
|
</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">)</span>
|
||||||
</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="k">return</span> <span class="n">expression</span>
|
</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
|
||||||
</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a>
|
</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="p">):</span>
|
||||||
</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a>
|
</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="n">_replace_int_predicate</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
|
||||||
</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a><span class="k">def</span> <span class="nf">remove_ascending_order</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
|
</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a>
|
||||||
</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Ordered</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"desc"</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">False</span><span class="p">:</span>
|
</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||||
</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="c1"># Convert ORDER BY a ASC to ORDER BY a</span>
|
</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a>
|
||||||
</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"desc"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a>
|
||||||
</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a>
|
</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a><span class="k">def</span> <span class="nf">remove_ascending_order</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
|
||||||
</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="k">return</span> <span class="n">expression</span>
|
</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Ordered</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"desc"</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">False</span><span class="p">:</span>
|
||||||
</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a>
|
</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="c1"># Convert ORDER BY a ASC to ORDER BY a</span>
|
||||||
</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a>
|
</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"desc"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||||
</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a><span class="k">def</span> <span class="nf">_coerce_date</span><span class="p">(</span><span class="n">a</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">b</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a>
|
||||||
</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="k">for</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">itertools</span><span class="o">.</span><span class="n">permutations</span><span class="p">([</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">]):</span>
|
</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||||
</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="k">if</span> <span class="p">(</span>
|
</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a>
|
||||||
</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="n">a</span><span class="o">.</span><span class="n">type</span>
|
</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a>
|
||||||
</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="ow">and</span> <span class="n">a</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span>
|
</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a><span class="k">def</span> <span class="nf">_coerce_date</span><span class="p">(</span><span class="n">a</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">b</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||||
</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="ow">and</span> <span class="n">b</span><span class="o">.</span><span class="n">type</span>
|
</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="k">for</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">itertools</span><span class="o">.</span><span class="n">permutations</span><span class="p">([</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">]):</span>
|
||||||
</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="ow">and</span> <span class="n">b</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">)</span>
|
</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="k">if</span> <span class="p">(</span>
|
||||||
</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="p">):</span>
|
</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="n">a</span><span class="o">.</span><span class="n">type</span>
|
||||||
</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="n">_replace_cast</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">)</span>
|
</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="ow">and</span> <span class="n">a</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span>
|
||||||
</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a>
|
</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="ow">and</span> <span class="n">b</span><span class="o">.</span><span class="n">type</span>
|
||||||
</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a>
|
</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="ow">and</span> <span class="n">b</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">)</span>
|
||||||
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a><span class="k">def</span> <span class="nf">_replace_cast</span><span class="p">(</span><span class="n">node</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">to</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="p">):</span>
|
||||||
</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="n">node</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">))</span>
|
</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="n">_replace_cast</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">)</span>
|
||||||
</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a>
|
</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a>
|
||||||
</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a>
|
</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a>
|
||||||
</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a><span class="k">def</span> <span class="nf">_replace_int_predicate</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a><span class="k">def</span> <span class="nf">_replace_cast</span><span class="p">(</span><span class="n">node</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">to</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||||
</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="p">):</span>
|
</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">node</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">))</span>
|
||||||
</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">child</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">iter_expressions</span><span class="p">():</span>
|
</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a>
|
||||||
</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="n">_replace_int_predicate</span><span class="p">(</span><span class="n">child</span><span class="p">)</span>
|
</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a>
|
||||||
</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">INTEGER_TYPES</span><span class="p">:</span>
|
</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a><span class="k">def</span> <span class="nf">_replace_int_predicate</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||||
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">NEQ</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">0</span><span class="p">)))</span>
|
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="p">):</span>
|
||||||
|
</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">child</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">iter_expressions</span><span class="p">():</span>
|
||||||
|
</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="n">_replace_int_predicate</span><span class="p">(</span><span class="n">child</span><span class="p">)</span>
|
||||||
|
</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">type</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">INTEGER_TYPES</span><span class="p">:</span>
|
||||||
|
</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">NEQ</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">0</span><span class="p">)))</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -345,10 +349,14 @@ conversions rely on type inference.</p>
|
||||||
</span><span id="ensure_bool_predicates-70"><a href="#ensure_bool_predicates-70"><span class="linenos">70</span></a> <span class="n">_replace_int_predicate</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
|
</span><span id="ensure_bool_predicates-70"><a href="#ensure_bool_predicates-70"><span class="linenos">70</span></a> <span class="n">_replace_int_predicate</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
|
||||||
</span><span id="ensure_bool_predicates-71"><a href="#ensure_bool_predicates-71"><span class="linenos">71</span></a> <span class="n">_replace_int_predicate</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
|
</span><span id="ensure_bool_predicates-71"><a href="#ensure_bool_predicates-71"><span class="linenos">71</span></a> <span class="n">_replace_int_predicate</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
|
||||||
</span><span id="ensure_bool_predicates-72"><a href="#ensure_bool_predicates-72"><span class="linenos">72</span></a>
|
</span><span id="ensure_bool_predicates-72"><a href="#ensure_bool_predicates-72"><span class="linenos">72</span></a>
|
||||||
</span><span id="ensure_bool_predicates-73"><a href="#ensure_bool_predicates-73"><span class="linenos">73</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Having</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">)):</span>
|
</span><span id="ensure_bool_predicates-73"><a href="#ensure_bool_predicates-73"><span class="linenos">73</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Having</span><span class="p">))</span> <span class="ow">or</span> <span class="p">(</span>
|
||||||
</span><span id="ensure_bool_predicates-74"><a href="#ensure_bool_predicates-74"><span class="linenos">74</span></a> <span class="n">_replace_int_predicate</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
|
</span><span id="ensure_bool_predicates-74"><a href="#ensure_bool_predicates-74"><span class="linenos">74</span></a> <span class="c1"># We can't replace num in CASE x WHEN num ..., because it's not the full predicate</span>
|
||||||
</span><span id="ensure_bool_predicates-75"><a href="#ensure_bool_predicates-75"><span class="linenos">75</span></a>
|
</span><span id="ensure_bool_predicates-75"><a href="#ensure_bool_predicates-75"><span class="linenos">75</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">)</span>
|
||||||
</span><span id="ensure_bool_predicates-76"><a href="#ensure_bool_predicates-76"><span class="linenos">76</span></a> <span class="k">return</span> <span class="n">expression</span>
|
</span><span id="ensure_bool_predicates-76"><a href="#ensure_bool_predicates-76"><span class="linenos">76</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
|
||||||
|
</span><span id="ensure_bool_predicates-77"><a href="#ensure_bool_predicates-77"><span class="linenos">77</span></a> <span class="p">):</span>
|
||||||
|
</span><span id="ensure_bool_predicates-78"><a href="#ensure_bool_predicates-78"><span class="linenos">78</span></a> <span class="n">_replace_int_predicate</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
|
||||||
|
</span><span id="ensure_bool_predicates-79"><a href="#ensure_bool_predicates-79"><span class="linenos">79</span></a>
|
||||||
|
</span><span id="ensure_bool_predicates-80"><a href="#ensure_bool_predicates-80"><span class="linenos">80</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -366,12 +374,12 @@ conversions rely on type inference.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#remove_ascending_order"></a>
|
<a class="headerlink" href="#remove_ascending_order"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="remove_ascending_order-79"><a href="#remove_ascending_order-79"><span class="linenos">79</span></a><span class="k">def</span> <span class="nf">remove_ascending_order</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="remove_ascending_order-83"><a href="#remove_ascending_order-83"><span class="linenos">83</span></a><span class="k">def</span> <span class="nf">remove_ascending_order</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
|
||||||
</span><span id="remove_ascending_order-80"><a href="#remove_ascending_order-80"><span class="linenos">80</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Ordered</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"desc"</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">False</span><span class="p">:</span>
|
</span><span id="remove_ascending_order-84"><a href="#remove_ascending_order-84"><span class="linenos">84</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Ordered</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"desc"</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">False</span><span class="p">:</span>
|
||||||
</span><span id="remove_ascending_order-81"><a href="#remove_ascending_order-81"><span class="linenos">81</span></a> <span class="c1"># Convert ORDER BY a ASC to ORDER BY a</span>
|
</span><span id="remove_ascending_order-85"><a href="#remove_ascending_order-85"><span class="linenos">85</span></a> <span class="c1"># Convert ORDER BY a ASC to ORDER BY a</span>
|
||||||
</span><span id="remove_ascending_order-82"><a href="#remove_ascending_order-82"><span class="linenos">82</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"desc"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
</span><span id="remove_ascending_order-86"><a href="#remove_ascending_order-86"><span class="linenos">86</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"desc"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||||
</span><span id="remove_ascending_order-83"><a href="#remove_ascending_order-83"><span class="linenos">83</span></a>
|
</span><span id="remove_ascending_order-87"><a href="#remove_ascending_order-87"><span class="linenos">87</span></a>
|
||||||
</span><span id="remove_ascending_order-84"><a href="#remove_ascending_order-84"><span class="linenos">84</span></a> <span class="k">return</span> <span class="n">expression</span>
|
</span><span id="remove_ascending_order-88"><a href="#remove_ascending_order-88"><span class="linenos">88</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -568,7 +568,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">{'locks', 'distribute', 'settings', 'having', 'format', 'pivots', 'match', 'qualify', 'distinct', 'windows', 'with', 'connect', 'group', 'into', 'kind', 'cluster', 'sort', 'laterals', 'limit', 'sample', 'offset'}</span>
|
<label class="view-value-button pdoc-button" for="UNMERGABLE_ARGS-view-value"></label><span class="default_value">{'qualify', 'pivots', 'sample', 'locks', 'windows', 'distribute', 'laterals', 'sort', 'match', 'kind', 'settings', 'having', 'connect', 'format', 'into', 'offset', 'limit', 'distinct', 'with', 'cluster', 'group'}</span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -375,8 +375,8 @@
|
||||||
</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collected</span><span class="p">:</span>
|
</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collected</span><span class="p">:</span>
|
||||||
</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_collect</span><span class="p">()</span>
|
</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_collect</span><span class="p">()</span>
|
||||||
</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a>
|
</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a>
|
||||||
</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="k">def</span> <span class="nf">walk</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="k">def</span> <span class="nf">walk</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">prune</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="k">return</span> <span class="n">walk_in_scope</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">)</span>
|
</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="k">return</span> <span class="n">walk_in_scope</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">,</span> <span class="n">prune</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
|
||||||
</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a>
|
</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a>
|
||||||
</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="k">def</span> <span class="nf">find</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="k">def</span> <span class="nf">find</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
||||||
</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="k">return</span> <span class="n">find_in_scope</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">)</span>
|
</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="k">return</span> <span class="n">find_in_scope</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">)</span>
|
||||||
|
@ -969,7 +969,7 @@
|
||||||
</span><span id="L-731"><a href="#L-731"><span class="linenos">731</span></a> <span class="k">yield from</span> <span class="n">_traverse_scope</span><span class="p">(</span><span class="n">query_scope</span><span class="p">)</span>
|
</span><span id="L-731"><a href="#L-731"><span class="linenos">731</span></a> <span class="k">yield from</span> <span class="n">_traverse_scope</span><span class="p">(</span><span class="n">query_scope</span><span class="p">)</span>
|
||||||
</span><span id="L-732"><a href="#L-732"><span class="linenos">732</span></a>
|
</span><span id="L-732"><a href="#L-732"><span class="linenos">732</span></a>
|
||||||
</span><span id="L-733"><a href="#L-733"><span class="linenos">733</span></a>
|
</span><span id="L-733"><a href="#L-733"><span class="linenos">733</span></a>
|
||||||
</span><span id="L-734"><a href="#L-734"><span class="linenos">734</span></a><span class="k">def</span> <span class="nf">walk_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
</span><span id="L-734"><a href="#L-734"><span class="linenos">734</span></a><span class="k">def</span> <span class="nf">walk_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">prune</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
</span><span id="L-735"><a href="#L-735"><span class="linenos">735</span></a><span class="w"> </span><span class="sd">"""</span>
|
</span><span id="L-735"><a href="#L-735"><span class="linenos">735</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||||
</span><span id="L-736"><a href="#L-736"><span class="linenos">736</span></a><span class="sd"> Returns a generator object which visits all nodes in the syntrax tree, stopping at</span>
|
</span><span id="L-736"><a href="#L-736"><span class="linenos">736</span></a><span class="sd"> Returns a generator object which visits all nodes in the syntrax tree, stopping at</span>
|
||||||
</span><span id="L-737"><a href="#L-737"><span class="linenos">737</span></a><span class="sd"> nodes that start child scopes.</span>
|
</span><span id="L-737"><a href="#L-737"><span class="linenos">737</span></a><span class="sd"> nodes that start child scopes.</span>
|
||||||
|
@ -978,76 +978,80 @@
|
||||||
</span><span id="L-740"><a href="#L-740"><span class="linenos">740</span></a><span class="sd"> expression (exp.Expression):</span>
|
</span><span id="L-740"><a href="#L-740"><span class="linenos">740</span></a><span class="sd"> expression (exp.Expression):</span>
|
||||||
</span><span id="L-741"><a href="#L-741"><span class="linenos">741</span></a><span class="sd"> bfs (bool): if set to True the BFS traversal order will be applied,</span>
|
</span><span id="L-741"><a href="#L-741"><span class="linenos">741</span></a><span class="sd"> bfs (bool): if set to True the BFS traversal order will be applied,</span>
|
||||||
</span><span id="L-742"><a href="#L-742"><span class="linenos">742</span></a><span class="sd"> otherwise the DFS traversal will be used instead.</span>
|
</span><span id="L-742"><a href="#L-742"><span class="linenos">742</span></a><span class="sd"> otherwise the DFS traversal will be used instead.</span>
|
||||||
</span><span id="L-743"><a href="#L-743"><span class="linenos">743</span></a>
|
</span><span id="L-743"><a href="#L-743"><span class="linenos">743</span></a><span class="sd"> prune ((node, parent, arg_key) -> bool): callable that returns True if</span>
|
||||||
</span><span id="L-744"><a href="#L-744"><span class="linenos">744</span></a><span class="sd"> Yields:</span>
|
</span><span id="L-744"><a href="#L-744"><span class="linenos">744</span></a><span class="sd"> the generator should stop traversing this branch of the tree.</span>
|
||||||
</span><span id="L-745"><a href="#L-745"><span class="linenos">745</span></a><span class="sd"> tuple[exp.Expression, Optional[exp.Expression], str]: node, parent, arg key</span>
|
</span><span id="L-745"><a href="#L-745"><span class="linenos">745</span></a>
|
||||||
</span><span id="L-746"><a href="#L-746"><span class="linenos">746</span></a><span class="sd"> """</span>
|
</span><span id="L-746"><a href="#L-746"><span class="linenos">746</span></a><span class="sd"> Yields:</span>
|
||||||
</span><span id="L-747"><a href="#L-747"><span class="linenos">747</span></a> <span class="c1"># We'll use this variable to pass state into the dfs generator.</span>
|
</span><span id="L-747"><a href="#L-747"><span class="linenos">747</span></a><span class="sd"> tuple[exp.Expression, Optional[exp.Expression], str]: node, parent, arg key</span>
|
||||||
</span><span id="L-748"><a href="#L-748"><span class="linenos">748</span></a> <span class="c1"># Whenever we set it to True, we exclude a subtree from traversal.</span>
|
</span><span id="L-748"><a href="#L-748"><span class="linenos">748</span></a><span class="sd"> """</span>
|
||||||
</span><span id="L-749"><a href="#L-749"><span class="linenos">749</span></a> <span class="n">prune</span> <span class="o">=</span> <span class="kc">False</span>
|
</span><span id="L-749"><a href="#L-749"><span class="linenos">749</span></a> <span class="c1"># We'll use this variable to pass state into the dfs generator.</span>
|
||||||
</span><span id="L-750"><a href="#L-750"><span class="linenos">750</span></a>
|
</span><span id="L-750"><a href="#L-750"><span class="linenos">750</span></a> <span class="c1"># Whenever we set it to True, we exclude a subtree from traversal.</span>
|
||||||
</span><span id="L-751"><a href="#L-751"><span class="linenos">751</span></a> <span class="k">for</span> <span class="n">node</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">walk</span><span class="p">(</span><span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">,</span> <span class="n">prune</span><span class="o">=</span><span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="n">prune</span><span class="p">):</span>
|
</span><span id="L-751"><a href="#L-751"><span class="linenos">751</span></a> <span class="n">crossed_scope_boundary</span> <span class="o">=</span> <span class="kc">False</span>
|
||||||
</span><span id="L-752"><a href="#L-752"><span class="linenos">752</span></a> <span class="n">prune</span> <span class="o">=</span> <span class="kc">False</span>
|
</span><span id="L-752"><a href="#L-752"><span class="linenos">752</span></a>
|
||||||
</span><span id="L-753"><a href="#L-753"><span class="linenos">753</span></a>
|
</span><span id="L-753"><a href="#L-753"><span class="linenos">753</span></a> <span class="k">for</span> <span class="n">node</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">walk</span><span class="p">(</span>
|
||||||
</span><span id="L-754"><a href="#L-754"><span class="linenos">754</span></a> <span class="k">yield</span> <span class="n">node</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="n">key</span>
|
</span><span id="L-754"><a href="#L-754"><span class="linenos">754</span></a> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">,</span> <span class="n">prune</span><span class="o">=</span><span class="k">lambda</span> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">crossed_scope_boundary</span> <span class="ow">or</span> <span class="p">(</span><span class="n">prune</span> <span class="ow">and</span> <span class="n">prune</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">))</span>
|
||||||
</span><span id="L-755"><a href="#L-755"><span class="linenos">755</span></a>
|
</span><span id="L-755"><a href="#L-755"><span class="linenos">755</span></a> <span class="p">):</span>
|
||||||
</span><span id="L-756"><a href="#L-756"><span class="linenos">756</span></a> <span class="k">if</span> <span class="n">node</span> <span class="ow">is</span> <span class="n">expression</span><span class="p">:</span>
|
</span><span id="L-756"><a href="#L-756"><span class="linenos">756</span></a> <span class="n">crossed_scope_boundary</span> <span class="o">=</span> <span class="kc">False</span>
|
||||||
</span><span id="L-757"><a href="#L-757"><span class="linenos">757</span></a> <span class="k">continue</span>
|
</span><span id="L-757"><a href="#L-757"><span class="linenos">757</span></a>
|
||||||
</span><span id="L-758"><a href="#L-758"><span class="linenos">758</span></a> <span class="k">if</span> <span class="p">(</span>
|
</span><span id="L-758"><a href="#L-758"><span class="linenos">758</span></a> <span class="k">yield</span> <span class="n">node</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="n">key</span>
|
||||||
</span><span id="L-759"><a href="#L-759"><span class="linenos">759</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span>
|
</span><span id="L-759"><a href="#L-759"><span class="linenos">759</span></a>
|
||||||
</span><span id="L-760"><a href="#L-760"><span class="linenos">760</span></a> <span class="ow">or</span> <span class="p">(</span>
|
</span><span id="L-760"><a href="#L-760"><span class="linenos">760</span></a> <span class="k">if</span> <span class="n">node</span> <span class="ow">is</span> <span class="n">expression</span><span class="p">:</span>
|
||||||
</span><span id="L-761"><a href="#L-761"><span class="linenos">761</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">)</span>
|
</span><span id="L-761"><a href="#L-761"><span class="linenos">761</span></a> <span class="k">continue</span>
|
||||||
</span><span id="L-762"><a href="#L-762"><span class="linenos">762</span></a> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">))</span>
|
</span><span id="L-762"><a href="#L-762"><span class="linenos">762</span></a> <span class="k">if</span> <span class="p">(</span>
|
||||||
</span><span id="L-763"><a href="#L-763"><span class="linenos">763</span></a> <span class="ow">and</span> <span class="n">_is_derived_table</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
|
</span><span id="L-763"><a href="#L-763"><span class="linenos">763</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span>
|
||||||
</span><span id="L-764"><a href="#L-764"><span class="linenos">764</span></a> <span class="p">)</span>
|
</span><span id="L-764"><a href="#L-764"><span class="linenos">764</span></a> <span class="ow">or</span> <span class="p">(</span>
|
||||||
</span><span id="L-765"><a href="#L-765"><span class="linenos">765</span></a> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UDTF</span><span class="p">)</span>
|
</span><span id="L-765"><a href="#L-765"><span class="linenos">765</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">)</span>
|
||||||
</span><span id="L-766"><a href="#L-766"><span class="linenos">766</span></a> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">)</span>
|
</span><span id="L-766"><a href="#L-766"><span class="linenos">766</span></a> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">))</span>
|
||||||
</span><span id="L-767"><a href="#L-767"><span class="linenos">767</span></a> <span class="p">):</span>
|
</span><span id="L-767"><a href="#L-767"><span class="linenos">767</span></a> <span class="ow">and</span> <span class="n">_is_derived_table</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
|
||||||
</span><span id="L-768"><a href="#L-768"><span class="linenos">768</span></a> <span class="n">prune</span> <span class="o">=</span> <span class="kc">True</span>
|
</span><span id="L-768"><a href="#L-768"><span class="linenos">768</span></a> <span class="p">)</span>
|
||||||
</span><span id="L-769"><a href="#L-769"><span class="linenos">769</span></a>
|
</span><span id="L-769"><a href="#L-769"><span class="linenos">769</span></a> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UDTF</span><span class="p">)</span>
|
||||||
</span><span id="L-770"><a href="#L-770"><span class="linenos">770</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UDTF</span><span class="p">)):</span>
|
</span><span id="L-770"><a href="#L-770"><span class="linenos">770</span></a> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">)</span>
|
||||||
</span><span id="L-771"><a href="#L-771"><span class="linenos">771</span></a> <span class="c1"># The following args are not actually in the inner scope, so we should visit them</span>
|
</span><span id="L-771"><a href="#L-771"><span class="linenos">771</span></a> <span class="p">):</span>
|
||||||
</span><span id="L-772"><a href="#L-772"><span class="linenos">772</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"joins"</span><span class="p">,</span> <span class="s2">"laterals"</span><span class="p">,</span> <span class="s2">"pivots"</span><span class="p">):</span>
|
</span><span id="L-772"><a href="#L-772"><span class="linenos">772</span></a> <span class="n">crossed_scope_boundary</span> <span class="o">=</span> <span class="kc">True</span>
|
||||||
</span><span id="L-773"><a href="#L-773"><span class="linenos">773</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]:</span>
|
</span><span id="L-773"><a href="#L-773"><span class="linenos">773</span></a>
|
||||||
</span><span id="L-774"><a href="#L-774"><span class="linenos">774</span></a> <span class="k">yield from</span> <span class="n">walk_in_scope</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">)</span>
|
</span><span id="L-774"><a href="#L-774"><span class="linenos">774</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UDTF</span><span class="p">)):</span>
|
||||||
</span><span id="L-775"><a href="#L-775"><span class="linenos">775</span></a>
|
</span><span id="L-775"><a href="#L-775"><span class="linenos">775</span></a> <span class="c1"># The following args are not actually in the inner scope, so we should visit them</span>
|
||||||
</span><span id="L-776"><a href="#L-776"><span class="linenos">776</span></a>
|
</span><span id="L-776"><a href="#L-776"><span class="linenos">776</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"joins"</span><span class="p">,</span> <span class="s2">"laterals"</span><span class="p">,</span> <span class="s2">"pivots"</span><span class="p">):</span>
|
||||||
</span><span id="L-777"><a href="#L-777"><span class="linenos">777</span></a><span class="k">def</span> <span class="nf">find_all_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
</span><span id="L-777"><a href="#L-777"><span class="linenos">777</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]:</span>
|
||||||
</span><span id="L-778"><a href="#L-778"><span class="linenos">778</span></a><span class="w"> </span><span class="sd">"""</span>
|
</span><span id="L-778"><a href="#L-778"><span class="linenos">778</span></a> <span class="k">yield from</span> <span class="n">walk_in_scope</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">)</span>
|
||||||
</span><span id="L-779"><a href="#L-779"><span class="linenos">779</span></a><span class="sd"> Returns a generator object which visits all nodes in this scope and only yields those that</span>
|
</span><span id="L-779"><a href="#L-779"><span class="linenos">779</span></a>
|
||||||
</span><span id="L-780"><a href="#L-780"><span class="linenos">780</span></a><span class="sd"> match at least one of the specified expression types.</span>
|
</span><span id="L-780"><a href="#L-780"><span class="linenos">780</span></a>
|
||||||
</span><span id="L-781"><a href="#L-781"><span class="linenos">781</span></a>
|
</span><span id="L-781"><a href="#L-781"><span class="linenos">781</span></a><span class="k">def</span> <span class="nf">find_all_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
||||||
</span><span id="L-782"><a href="#L-782"><span class="linenos">782</span></a><span class="sd"> This does NOT traverse into subscopes.</span>
|
</span><span id="L-782"><a href="#L-782"><span class="linenos">782</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||||
</span><span id="L-783"><a href="#L-783"><span class="linenos">783</span></a>
|
</span><span id="L-783"><a href="#L-783"><span class="linenos">783</span></a><span class="sd"> Returns a generator object which visits all nodes in this scope and only yields those that</span>
|
||||||
</span><span id="L-784"><a href="#L-784"><span class="linenos">784</span></a><span class="sd"> Args:</span>
|
</span><span id="L-784"><a href="#L-784"><span class="linenos">784</span></a><span class="sd"> match at least one of the specified expression types.</span>
|
||||||
</span><span id="L-785"><a href="#L-785"><span class="linenos">785</span></a><span class="sd"> expression (exp.Expression):</span>
|
</span><span id="L-785"><a href="#L-785"><span class="linenos">785</span></a>
|
||||||
</span><span id="L-786"><a href="#L-786"><span class="linenos">786</span></a><span class="sd"> expression_types (tuple[type]|type): the expression type(s) to match.</span>
|
</span><span id="L-786"><a href="#L-786"><span class="linenos">786</span></a><span class="sd"> This does NOT traverse into subscopes.</span>
|
||||||
</span><span id="L-787"><a href="#L-787"><span class="linenos">787</span></a><span class="sd"> bfs (bool): True to use breadth-first search, False to use depth-first.</span>
|
</span><span id="L-787"><a href="#L-787"><span class="linenos">787</span></a>
|
||||||
</span><span id="L-788"><a href="#L-788"><span class="linenos">788</span></a>
|
</span><span id="L-788"><a href="#L-788"><span class="linenos">788</span></a><span class="sd"> Args:</span>
|
||||||
</span><span id="L-789"><a href="#L-789"><span class="linenos">789</span></a><span class="sd"> Yields:</span>
|
</span><span id="L-789"><a href="#L-789"><span class="linenos">789</span></a><span class="sd"> expression (exp.Expression):</span>
|
||||||
</span><span id="L-790"><a href="#L-790"><span class="linenos">790</span></a><span class="sd"> exp.Expression: nodes</span>
|
</span><span id="L-790"><a href="#L-790"><span class="linenos">790</span></a><span class="sd"> expression_types (tuple[type]|type): the expression type(s) to match.</span>
|
||||||
</span><span id="L-791"><a href="#L-791"><span class="linenos">791</span></a><span class="sd"> """</span>
|
</span><span id="L-791"><a href="#L-791"><span class="linenos">791</span></a><span class="sd"> bfs (bool): True to use breadth-first search, False to use depth-first.</span>
|
||||||
</span><span id="L-792"><a href="#L-792"><span class="linenos">792</span></a> <span class="k">for</span> <span class="n">expression</span><span class="p">,</span> <span class="o">*</span><span class="n">_</span> <span class="ow">in</span> <span class="n">walk_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">):</span>
|
</span><span id="L-792"><a href="#L-792"><span class="linenos">792</span></a>
|
||||||
</span><span id="L-793"><a href="#L-793"><span class="linenos">793</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">ensure_collection</span><span class="p">(</span><span class="n">expression_types</span><span class="p">))):</span>
|
</span><span id="L-793"><a href="#L-793"><span class="linenos">793</span></a><span class="sd"> Yields:</span>
|
||||||
</span><span id="L-794"><a href="#L-794"><span class="linenos">794</span></a> <span class="k">yield</span> <span class="n">expression</span>
|
</span><span id="L-794"><a href="#L-794"><span class="linenos">794</span></a><span class="sd"> exp.Expression: nodes</span>
|
||||||
</span><span id="L-795"><a href="#L-795"><span class="linenos">795</span></a>
|
</span><span id="L-795"><a href="#L-795"><span class="linenos">795</span></a><span class="sd"> """</span>
|
||||||
</span><span id="L-796"><a href="#L-796"><span class="linenos">796</span></a>
|
</span><span id="L-796"><a href="#L-796"><span class="linenos">796</span></a> <span class="k">for</span> <span class="n">expression</span><span class="p">,</span> <span class="o">*</span><span class="n">_</span> <span class="ow">in</span> <span class="n">walk_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">):</span>
|
||||||
</span><span id="L-797"><a href="#L-797"><span class="linenos">797</span></a><span class="k">def</span> <span class="nf">find_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
</span><span id="L-797"><a href="#L-797"><span class="linenos">797</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">ensure_collection</span><span class="p">(</span><span class="n">expression_types</span><span class="p">))):</span>
|
||||||
</span><span id="L-798"><a href="#L-798"><span class="linenos">798</span></a><span class="w"> </span><span class="sd">"""</span>
|
</span><span id="L-798"><a href="#L-798"><span class="linenos">798</span></a> <span class="k">yield</span> <span class="n">expression</span>
|
||||||
</span><span id="L-799"><a href="#L-799"><span class="linenos">799</span></a><span class="sd"> Returns the first node in this scope which matches at least one of the specified types.</span>
|
</span><span id="L-799"><a href="#L-799"><span class="linenos">799</span></a>
|
||||||
</span><span id="L-800"><a href="#L-800"><span class="linenos">800</span></a>
|
</span><span id="L-800"><a href="#L-800"><span class="linenos">800</span></a>
|
||||||
</span><span id="L-801"><a href="#L-801"><span class="linenos">801</span></a><span class="sd"> This does NOT traverse into subscopes.</span>
|
</span><span id="L-801"><a href="#L-801"><span class="linenos">801</span></a><span class="k">def</span> <span class="nf">find_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
||||||
</span><span id="L-802"><a href="#L-802"><span class="linenos">802</span></a>
|
</span><span id="L-802"><a href="#L-802"><span class="linenos">802</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||||
</span><span id="L-803"><a href="#L-803"><span class="linenos">803</span></a><span class="sd"> Args:</span>
|
</span><span id="L-803"><a href="#L-803"><span class="linenos">803</span></a><span class="sd"> Returns the first node in this scope which matches at least one of the specified types.</span>
|
||||||
</span><span id="L-804"><a href="#L-804"><span class="linenos">804</span></a><span class="sd"> expression (exp.Expression):</span>
|
</span><span id="L-804"><a href="#L-804"><span class="linenos">804</span></a>
|
||||||
</span><span id="L-805"><a href="#L-805"><span class="linenos">805</span></a><span class="sd"> expression_types (tuple[type]|type): the expression type(s) to match.</span>
|
</span><span id="L-805"><a href="#L-805"><span class="linenos">805</span></a><span class="sd"> This does NOT traverse into subscopes.</span>
|
||||||
</span><span id="L-806"><a href="#L-806"><span class="linenos">806</span></a><span class="sd"> bfs (bool): True to use breadth-first search, False to use depth-first.</span>
|
</span><span id="L-806"><a href="#L-806"><span class="linenos">806</span></a>
|
||||||
</span><span id="L-807"><a href="#L-807"><span class="linenos">807</span></a>
|
</span><span id="L-807"><a href="#L-807"><span class="linenos">807</span></a><span class="sd"> Args:</span>
|
||||||
</span><span id="L-808"><a href="#L-808"><span class="linenos">808</span></a><span class="sd"> Returns:</span>
|
</span><span id="L-808"><a href="#L-808"><span class="linenos">808</span></a><span class="sd"> expression (exp.Expression):</span>
|
||||||
</span><span id="L-809"><a href="#L-809"><span class="linenos">809</span></a><span class="sd"> exp.Expression: the node which matches the criteria or None if no node matching</span>
|
</span><span id="L-809"><a href="#L-809"><span class="linenos">809</span></a><span class="sd"> expression_types (tuple[type]|type): the expression type(s) to match.</span>
|
||||||
</span><span id="L-810"><a href="#L-810"><span class="linenos">810</span></a><span class="sd"> the criteria was found.</span>
|
</span><span id="L-810"><a href="#L-810"><span class="linenos">810</span></a><span class="sd"> bfs (bool): True to use breadth-first search, False to use depth-first.</span>
|
||||||
</span><span id="L-811"><a href="#L-811"><span class="linenos">811</span></a><span class="sd"> """</span>
|
</span><span id="L-811"><a href="#L-811"><span class="linenos">811</span></a>
|
||||||
</span><span id="L-812"><a href="#L-812"><span class="linenos">812</span></a> <span class="k">return</span> <span class="nb">next</span><span class="p">(</span><span class="n">find_all_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">),</span> <span class="kc">None</span><span class="p">)</span>
|
</span><span id="L-812"><a href="#L-812"><span class="linenos">812</span></a><span class="sd"> Returns:</span>
|
||||||
|
</span><span id="L-813"><a href="#L-813"><span class="linenos">813</span></a><span class="sd"> exp.Expression: the node which matches the criteria or None if no node matching</span>
|
||||||
|
</span><span id="L-814"><a href="#L-814"><span class="linenos">814</span></a><span class="sd"> the criteria was found.</span>
|
||||||
|
</span><span id="L-815"><a href="#L-815"><span class="linenos">815</span></a><span class="sd"> """</span>
|
||||||
|
</span><span id="L-816"><a href="#L-816"><span class="linenos">816</span></a> <span class="k">return</span> <span class="nb">next</span><span class="p">(</span><span class="n">find_all_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">),</span> <span class="kc">None</span><span class="p">)</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -1300,8 +1304,8 @@
|
||||||
</span><span id="Scope-138"><a href="#Scope-138"><span class="linenos">138</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collected</span><span class="p">:</span>
|
</span><span id="Scope-138"><a href="#Scope-138"><span class="linenos">138</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_collected</span><span class="p">:</span>
|
||||||
</span><span id="Scope-139"><a href="#Scope-139"><span class="linenos">139</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_collect</span><span class="p">()</span>
|
</span><span id="Scope-139"><a href="#Scope-139"><span class="linenos">139</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_collect</span><span class="p">()</span>
|
||||||
</span><span id="Scope-140"><a href="#Scope-140"><span class="linenos">140</span></a>
|
</span><span id="Scope-140"><a href="#Scope-140"><span class="linenos">140</span></a>
|
||||||
</span><span id="Scope-141"><a href="#Scope-141"><span class="linenos">141</span></a> <span class="k">def</span> <span class="nf">walk</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
</span><span id="Scope-141"><a href="#Scope-141"><span class="linenos">141</span></a> <span class="k">def</span> <span class="nf">walk</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">prune</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
</span><span id="Scope-142"><a href="#Scope-142"><span class="linenos">142</span></a> <span class="k">return</span> <span class="n">walk_in_scope</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">)</span>
|
</span><span id="Scope-142"><a href="#Scope-142"><span class="linenos">142</span></a> <span class="k">return</span> <span class="n">walk_in_scope</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">,</span> <span class="n">prune</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
|
||||||
</span><span id="Scope-143"><a href="#Scope-143"><span class="linenos">143</span></a>
|
</span><span id="Scope-143"><a href="#Scope-143"><span class="linenos">143</span></a>
|
||||||
</span><span id="Scope-144"><a href="#Scope-144"><span class="linenos">144</span></a> <span class="k">def</span> <span class="nf">find</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
</span><span id="Scope-144"><a href="#Scope-144"><span class="linenos">144</span></a> <span class="k">def</span> <span class="nf">find</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
||||||
</span><span id="Scope-145"><a href="#Scope-145"><span class="linenos">145</span></a> <span class="k">return</span> <span class="n">find_in_scope</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">)</span>
|
</span><span id="Scope-145"><a href="#Scope-145"><span class="linenos">145</span></a> <span class="k">return</span> <span class="n">find_in_scope</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">)</span>
|
||||||
|
@ -1891,14 +1895,14 @@ a list of the left and right child scopes.</li>
|
||||||
<div class="attr function">
|
<div class="attr function">
|
||||||
|
|
||||||
<span class="def">def</span>
|
<span class="def">def</span>
|
||||||
<span class="name">walk</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">bfs</span><span class="o">=</span><span class="kc">True</span></span><span class="return-annotation">):</span></span>
|
<span class="name">walk</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">bfs</span><span class="o">=</span><span class="kc">True</span>, </span><span class="param"><span class="n">prune</span><span class="o">=</span><span class="kc">None</span></span><span class="return-annotation">):</span></span>
|
||||||
|
|
||||||
<label class="view-source-button" for="Scope.walk-view-source"><span>View Source</span></label>
|
<label class="view-source-button" for="Scope.walk-view-source"><span>View Source</span></label>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#Scope.walk"></a>
|
<a class="headerlink" href="#Scope.walk"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="Scope.walk-141"><a href="#Scope.walk-141"><span class="linenos">141</span></a> <span class="k">def</span> <span class="nf">walk</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="Scope.walk-141"><a href="#Scope.walk-141"><span class="linenos">141</span></a> <span class="k">def</span> <span class="nf">walk</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">prune</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
</span><span id="Scope.walk-142"><a href="#Scope.walk-142"><span class="linenos">142</span></a> <span class="k">return</span> <span class="n">walk_in_scope</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">)</span>
|
</span><span id="Scope.walk-142"><a href="#Scope.walk-142"><span class="linenos">142</span></a> <span class="k">return</span> <span class="n">walk_in_scope</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">,</span> <span class="n">prune</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -2642,13 +2646,13 @@ incomplete properties which is confusing.</p>
|
||||||
<div class="attr function">
|
<div class="attr function">
|
||||||
|
|
||||||
<span class="def">def</span>
|
<span class="def">def</span>
|
||||||
<span class="name">walk_in_scope</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">expression</span>, </span><span class="param"><span class="n">bfs</span><span class="o">=</span><span class="kc">True</span></span><span class="return-annotation">):</span></span>
|
<span class="name">walk_in_scope</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">expression</span>, </span><span class="param"><span class="n">bfs</span><span class="o">=</span><span class="kc">True</span>, </span><span class="param"><span class="n">prune</span><span class="o">=</span><span class="kc">None</span></span><span class="return-annotation">):</span></span>
|
||||||
|
|
||||||
<label class="view-source-button" for="walk_in_scope-view-source"><span>View Source</span></label>
|
<label class="view-source-button" for="walk_in_scope-view-source"><span>View Source</span></label>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#walk_in_scope"></a>
|
<a class="headerlink" href="#walk_in_scope"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="walk_in_scope-735"><a href="#walk_in_scope-735"><span class="linenos">735</span></a><span class="k">def</span> <span class="nf">walk_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="walk_in_scope-735"><a href="#walk_in_scope-735"><span class="linenos">735</span></a><span class="k">def</span> <span class="nf">walk_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">prune</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
</span><span id="walk_in_scope-736"><a href="#walk_in_scope-736"><span class="linenos">736</span></a><span class="w"> </span><span class="sd">"""</span>
|
</span><span id="walk_in_scope-736"><a href="#walk_in_scope-736"><span class="linenos">736</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||||
</span><span id="walk_in_scope-737"><a href="#walk_in_scope-737"><span class="linenos">737</span></a><span class="sd"> Returns a generator object which visits all nodes in the syntrax tree, stopping at</span>
|
</span><span id="walk_in_scope-737"><a href="#walk_in_scope-737"><span class="linenos">737</span></a><span class="sd"> Returns a generator object which visits all nodes in the syntrax tree, stopping at</span>
|
||||||
</span><span id="walk_in_scope-738"><a href="#walk_in_scope-738"><span class="linenos">738</span></a><span class="sd"> nodes that start child scopes.</span>
|
</span><span id="walk_in_scope-738"><a href="#walk_in_scope-738"><span class="linenos">738</span></a><span class="sd"> nodes that start child scopes.</span>
|
||||||
|
@ -2657,38 +2661,42 @@ incomplete properties which is confusing.</p>
|
||||||
</span><span id="walk_in_scope-741"><a href="#walk_in_scope-741"><span class="linenos">741</span></a><span class="sd"> expression (exp.Expression):</span>
|
</span><span id="walk_in_scope-741"><a href="#walk_in_scope-741"><span class="linenos">741</span></a><span class="sd"> expression (exp.Expression):</span>
|
||||||
</span><span id="walk_in_scope-742"><a href="#walk_in_scope-742"><span class="linenos">742</span></a><span class="sd"> bfs (bool): if set to True the BFS traversal order will be applied,</span>
|
</span><span id="walk_in_scope-742"><a href="#walk_in_scope-742"><span class="linenos">742</span></a><span class="sd"> bfs (bool): if set to True the BFS traversal order will be applied,</span>
|
||||||
</span><span id="walk_in_scope-743"><a href="#walk_in_scope-743"><span class="linenos">743</span></a><span class="sd"> otherwise the DFS traversal will be used instead.</span>
|
</span><span id="walk_in_scope-743"><a href="#walk_in_scope-743"><span class="linenos">743</span></a><span class="sd"> otherwise the DFS traversal will be used instead.</span>
|
||||||
</span><span id="walk_in_scope-744"><a href="#walk_in_scope-744"><span class="linenos">744</span></a>
|
</span><span id="walk_in_scope-744"><a href="#walk_in_scope-744"><span class="linenos">744</span></a><span class="sd"> prune ((node, parent, arg_key) -> bool): callable that returns True if</span>
|
||||||
</span><span id="walk_in_scope-745"><a href="#walk_in_scope-745"><span class="linenos">745</span></a><span class="sd"> Yields:</span>
|
</span><span id="walk_in_scope-745"><a href="#walk_in_scope-745"><span class="linenos">745</span></a><span class="sd"> the generator should stop traversing this branch of the tree.</span>
|
||||||
</span><span id="walk_in_scope-746"><a href="#walk_in_scope-746"><span class="linenos">746</span></a><span class="sd"> tuple[exp.Expression, Optional[exp.Expression], str]: node, parent, arg key</span>
|
</span><span id="walk_in_scope-746"><a href="#walk_in_scope-746"><span class="linenos">746</span></a>
|
||||||
</span><span id="walk_in_scope-747"><a href="#walk_in_scope-747"><span class="linenos">747</span></a><span class="sd"> """</span>
|
</span><span id="walk_in_scope-747"><a href="#walk_in_scope-747"><span class="linenos">747</span></a><span class="sd"> Yields:</span>
|
||||||
</span><span id="walk_in_scope-748"><a href="#walk_in_scope-748"><span class="linenos">748</span></a> <span class="c1"># We'll use this variable to pass state into the dfs generator.</span>
|
</span><span id="walk_in_scope-748"><a href="#walk_in_scope-748"><span class="linenos">748</span></a><span class="sd"> tuple[exp.Expression, Optional[exp.Expression], str]: node, parent, arg key</span>
|
||||||
</span><span id="walk_in_scope-749"><a href="#walk_in_scope-749"><span class="linenos">749</span></a> <span class="c1"># Whenever we set it to True, we exclude a subtree from traversal.</span>
|
</span><span id="walk_in_scope-749"><a href="#walk_in_scope-749"><span class="linenos">749</span></a><span class="sd"> """</span>
|
||||||
</span><span id="walk_in_scope-750"><a href="#walk_in_scope-750"><span class="linenos">750</span></a> <span class="n">prune</span> <span class="o">=</span> <span class="kc">False</span>
|
</span><span id="walk_in_scope-750"><a href="#walk_in_scope-750"><span class="linenos">750</span></a> <span class="c1"># We'll use this variable to pass state into the dfs generator.</span>
|
||||||
</span><span id="walk_in_scope-751"><a href="#walk_in_scope-751"><span class="linenos">751</span></a>
|
</span><span id="walk_in_scope-751"><a href="#walk_in_scope-751"><span class="linenos">751</span></a> <span class="c1"># Whenever we set it to True, we exclude a subtree from traversal.</span>
|
||||||
</span><span id="walk_in_scope-752"><a href="#walk_in_scope-752"><span class="linenos">752</span></a> <span class="k">for</span> <span class="n">node</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">walk</span><span class="p">(</span><span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">,</span> <span class="n">prune</span><span class="o">=</span><span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="n">prune</span><span class="p">):</span>
|
</span><span id="walk_in_scope-752"><a href="#walk_in_scope-752"><span class="linenos">752</span></a> <span class="n">crossed_scope_boundary</span> <span class="o">=</span> <span class="kc">False</span>
|
||||||
</span><span id="walk_in_scope-753"><a href="#walk_in_scope-753"><span class="linenos">753</span></a> <span class="n">prune</span> <span class="o">=</span> <span class="kc">False</span>
|
</span><span id="walk_in_scope-753"><a href="#walk_in_scope-753"><span class="linenos">753</span></a>
|
||||||
</span><span id="walk_in_scope-754"><a href="#walk_in_scope-754"><span class="linenos">754</span></a>
|
</span><span id="walk_in_scope-754"><a href="#walk_in_scope-754"><span class="linenos">754</span></a> <span class="k">for</span> <span class="n">node</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">walk</span><span class="p">(</span>
|
||||||
</span><span id="walk_in_scope-755"><a href="#walk_in_scope-755"><span class="linenos">755</span></a> <span class="k">yield</span> <span class="n">node</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="n">key</span>
|
</span><span id="walk_in_scope-755"><a href="#walk_in_scope-755"><span class="linenos">755</span></a> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">,</span> <span class="n">prune</span><span class="o">=</span><span class="k">lambda</span> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">crossed_scope_boundary</span> <span class="ow">or</span> <span class="p">(</span><span class="n">prune</span> <span class="ow">and</span> <span class="n">prune</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">))</span>
|
||||||
</span><span id="walk_in_scope-756"><a href="#walk_in_scope-756"><span class="linenos">756</span></a>
|
</span><span id="walk_in_scope-756"><a href="#walk_in_scope-756"><span class="linenos">756</span></a> <span class="p">):</span>
|
||||||
</span><span id="walk_in_scope-757"><a href="#walk_in_scope-757"><span class="linenos">757</span></a> <span class="k">if</span> <span class="n">node</span> <span class="ow">is</span> <span class="n">expression</span><span class="p">:</span>
|
</span><span id="walk_in_scope-757"><a href="#walk_in_scope-757"><span class="linenos">757</span></a> <span class="n">crossed_scope_boundary</span> <span class="o">=</span> <span class="kc">False</span>
|
||||||
</span><span id="walk_in_scope-758"><a href="#walk_in_scope-758"><span class="linenos">758</span></a> <span class="k">continue</span>
|
</span><span id="walk_in_scope-758"><a href="#walk_in_scope-758"><span class="linenos">758</span></a>
|
||||||
</span><span id="walk_in_scope-759"><a href="#walk_in_scope-759"><span class="linenos">759</span></a> <span class="k">if</span> <span class="p">(</span>
|
</span><span id="walk_in_scope-759"><a href="#walk_in_scope-759"><span class="linenos">759</span></a> <span class="k">yield</span> <span class="n">node</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="n">key</span>
|
||||||
</span><span id="walk_in_scope-760"><a href="#walk_in_scope-760"><span class="linenos">760</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span>
|
</span><span id="walk_in_scope-760"><a href="#walk_in_scope-760"><span class="linenos">760</span></a>
|
||||||
</span><span id="walk_in_scope-761"><a href="#walk_in_scope-761"><span class="linenos">761</span></a> <span class="ow">or</span> <span class="p">(</span>
|
</span><span id="walk_in_scope-761"><a href="#walk_in_scope-761"><span class="linenos">761</span></a> <span class="k">if</span> <span class="n">node</span> <span class="ow">is</span> <span class="n">expression</span><span class="p">:</span>
|
||||||
</span><span id="walk_in_scope-762"><a href="#walk_in_scope-762"><span class="linenos">762</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">)</span>
|
</span><span id="walk_in_scope-762"><a href="#walk_in_scope-762"><span class="linenos">762</span></a> <span class="k">continue</span>
|
||||||
</span><span id="walk_in_scope-763"><a href="#walk_in_scope-763"><span class="linenos">763</span></a> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">))</span>
|
</span><span id="walk_in_scope-763"><a href="#walk_in_scope-763"><span class="linenos">763</span></a> <span class="k">if</span> <span class="p">(</span>
|
||||||
</span><span id="walk_in_scope-764"><a href="#walk_in_scope-764"><span class="linenos">764</span></a> <span class="ow">and</span> <span class="n">_is_derived_table</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
|
</span><span id="walk_in_scope-764"><a href="#walk_in_scope-764"><span class="linenos">764</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span>
|
||||||
</span><span id="walk_in_scope-765"><a href="#walk_in_scope-765"><span class="linenos">765</span></a> <span class="p">)</span>
|
</span><span id="walk_in_scope-765"><a href="#walk_in_scope-765"><span class="linenos">765</span></a> <span class="ow">or</span> <span class="p">(</span>
|
||||||
</span><span id="walk_in_scope-766"><a href="#walk_in_scope-766"><span class="linenos">766</span></a> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UDTF</span><span class="p">)</span>
|
</span><span id="walk_in_scope-766"><a href="#walk_in_scope-766"><span class="linenos">766</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">)</span>
|
||||||
</span><span id="walk_in_scope-767"><a href="#walk_in_scope-767"><span class="linenos">767</span></a> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">)</span>
|
</span><span id="walk_in_scope-767"><a href="#walk_in_scope-767"><span class="linenos">767</span></a> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">))</span>
|
||||||
</span><span id="walk_in_scope-768"><a href="#walk_in_scope-768"><span class="linenos">768</span></a> <span class="p">):</span>
|
</span><span id="walk_in_scope-768"><a href="#walk_in_scope-768"><span class="linenos">768</span></a> <span class="ow">and</span> <span class="n">_is_derived_table</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
|
||||||
</span><span id="walk_in_scope-769"><a href="#walk_in_scope-769"><span class="linenos">769</span></a> <span class="n">prune</span> <span class="o">=</span> <span class="kc">True</span>
|
</span><span id="walk_in_scope-769"><a href="#walk_in_scope-769"><span class="linenos">769</span></a> <span class="p">)</span>
|
||||||
</span><span id="walk_in_scope-770"><a href="#walk_in_scope-770"><span class="linenos">770</span></a>
|
</span><span id="walk_in_scope-770"><a href="#walk_in_scope-770"><span class="linenos">770</span></a> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UDTF</span><span class="p">)</span>
|
||||||
</span><span id="walk_in_scope-771"><a href="#walk_in_scope-771"><span class="linenos">771</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UDTF</span><span class="p">)):</span>
|
</span><span id="walk_in_scope-771"><a href="#walk_in_scope-771"><span class="linenos">771</span></a> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">)</span>
|
||||||
</span><span id="walk_in_scope-772"><a href="#walk_in_scope-772"><span class="linenos">772</span></a> <span class="c1"># The following args are not actually in the inner scope, so we should visit them</span>
|
</span><span id="walk_in_scope-772"><a href="#walk_in_scope-772"><span class="linenos">772</span></a> <span class="p">):</span>
|
||||||
</span><span id="walk_in_scope-773"><a href="#walk_in_scope-773"><span class="linenos">773</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"joins"</span><span class="p">,</span> <span class="s2">"laterals"</span><span class="p">,</span> <span class="s2">"pivots"</span><span class="p">):</span>
|
</span><span id="walk_in_scope-773"><a href="#walk_in_scope-773"><span class="linenos">773</span></a> <span class="n">crossed_scope_boundary</span> <span class="o">=</span> <span class="kc">True</span>
|
||||||
</span><span id="walk_in_scope-774"><a href="#walk_in_scope-774"><span class="linenos">774</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]:</span>
|
</span><span id="walk_in_scope-774"><a href="#walk_in_scope-774"><span class="linenos">774</span></a>
|
||||||
</span><span id="walk_in_scope-775"><a href="#walk_in_scope-775"><span class="linenos">775</span></a> <span class="k">yield from</span> <span class="n">walk_in_scope</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">)</span>
|
</span><span id="walk_in_scope-775"><a href="#walk_in_scope-775"><span class="linenos">775</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UDTF</span><span class="p">)):</span>
|
||||||
|
</span><span id="walk_in_scope-776"><a href="#walk_in_scope-776"><span class="linenos">776</span></a> <span class="c1"># The following args are not actually in the inner scope, so we should visit them</span>
|
||||||
|
</span><span id="walk_in_scope-777"><a href="#walk_in_scope-777"><span class="linenos">777</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"joins"</span><span class="p">,</span> <span class="s2">"laterals"</span><span class="p">,</span> <span class="s2">"pivots"</span><span class="p">):</span>
|
||||||
|
</span><span id="walk_in_scope-778"><a href="#walk_in_scope-778"><span class="linenos">778</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]:</span>
|
||||||
|
</span><span id="walk_in_scope-779"><a href="#walk_in_scope-779"><span class="linenos">779</span></a> <span class="k">yield from</span> <span class="n">walk_in_scope</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">)</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -2701,6 +2709,8 @@ nodes that start child scopes.</p>
|
||||||
<li><strong>expression (exp.Expression):</strong> </li>
|
<li><strong>expression (exp.Expression):</strong> </li>
|
||||||
<li><strong>bfs (bool):</strong> if set to True the BFS traversal order will be applied,
|
<li><strong>bfs (bool):</strong> if set to True the BFS traversal order will be applied,
|
||||||
otherwise the DFS traversal will be used instead.</li>
|
otherwise the DFS traversal will be used instead.</li>
|
||||||
|
<li><strong>prune ((node, parent, arg_key) -> bool):</strong> callable that returns True if
|
||||||
|
the generator should stop traversing this branch of the tree.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h6 id="yields">Yields:</h6>
|
<h6 id="yields">Yields:</h6>
|
||||||
|
@ -2723,24 +2733,24 @@ otherwise the DFS traversal will be used instead.</li>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#find_all_in_scope"></a>
|
<a class="headerlink" href="#find_all_in_scope"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="find_all_in_scope-778"><a href="#find_all_in_scope-778"><span class="linenos">778</span></a><span class="k">def</span> <span class="nf">find_all_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="find_all_in_scope-782"><a href="#find_all_in_scope-782"><span class="linenos">782</span></a><span class="k">def</span> <span class="nf">find_all_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
||||||
</span><span id="find_all_in_scope-779"><a href="#find_all_in_scope-779"><span class="linenos">779</span></a><span class="w"> </span><span class="sd">"""</span>
|
</span><span id="find_all_in_scope-783"><a href="#find_all_in_scope-783"><span class="linenos">783</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||||
</span><span id="find_all_in_scope-780"><a href="#find_all_in_scope-780"><span class="linenos">780</span></a><span class="sd"> Returns a generator object which visits all nodes in this scope and only yields those that</span>
|
</span><span id="find_all_in_scope-784"><a href="#find_all_in_scope-784"><span class="linenos">784</span></a><span class="sd"> Returns a generator object which visits all nodes in this scope and only yields those that</span>
|
||||||
</span><span id="find_all_in_scope-781"><a href="#find_all_in_scope-781"><span class="linenos">781</span></a><span class="sd"> match at least one of the specified expression types.</span>
|
</span><span id="find_all_in_scope-785"><a href="#find_all_in_scope-785"><span class="linenos">785</span></a><span class="sd"> match at least one of the specified expression types.</span>
|
||||||
</span><span id="find_all_in_scope-782"><a href="#find_all_in_scope-782"><span class="linenos">782</span></a>
|
</span><span id="find_all_in_scope-786"><a href="#find_all_in_scope-786"><span class="linenos">786</span></a>
|
||||||
</span><span id="find_all_in_scope-783"><a href="#find_all_in_scope-783"><span class="linenos">783</span></a><span class="sd"> This does NOT traverse into subscopes.</span>
|
</span><span id="find_all_in_scope-787"><a href="#find_all_in_scope-787"><span class="linenos">787</span></a><span class="sd"> This does NOT traverse into subscopes.</span>
|
||||||
</span><span id="find_all_in_scope-784"><a href="#find_all_in_scope-784"><span class="linenos">784</span></a>
|
</span><span id="find_all_in_scope-788"><a href="#find_all_in_scope-788"><span class="linenos">788</span></a>
|
||||||
</span><span id="find_all_in_scope-785"><a href="#find_all_in_scope-785"><span class="linenos">785</span></a><span class="sd"> Args:</span>
|
</span><span id="find_all_in_scope-789"><a href="#find_all_in_scope-789"><span class="linenos">789</span></a><span class="sd"> Args:</span>
|
||||||
</span><span id="find_all_in_scope-786"><a href="#find_all_in_scope-786"><span class="linenos">786</span></a><span class="sd"> expression (exp.Expression):</span>
|
</span><span id="find_all_in_scope-790"><a href="#find_all_in_scope-790"><span class="linenos">790</span></a><span class="sd"> expression (exp.Expression):</span>
|
||||||
</span><span id="find_all_in_scope-787"><a href="#find_all_in_scope-787"><span class="linenos">787</span></a><span class="sd"> expression_types (tuple[type]|type): the expression type(s) to match.</span>
|
</span><span id="find_all_in_scope-791"><a href="#find_all_in_scope-791"><span class="linenos">791</span></a><span class="sd"> expression_types (tuple[type]|type): the expression type(s) to match.</span>
|
||||||
</span><span id="find_all_in_scope-788"><a href="#find_all_in_scope-788"><span class="linenos">788</span></a><span class="sd"> bfs (bool): True to use breadth-first search, False to use depth-first.</span>
|
</span><span id="find_all_in_scope-792"><a href="#find_all_in_scope-792"><span class="linenos">792</span></a><span class="sd"> bfs (bool): True to use breadth-first search, False to use depth-first.</span>
|
||||||
</span><span id="find_all_in_scope-789"><a href="#find_all_in_scope-789"><span class="linenos">789</span></a>
|
</span><span id="find_all_in_scope-793"><a href="#find_all_in_scope-793"><span class="linenos">793</span></a>
|
||||||
</span><span id="find_all_in_scope-790"><a href="#find_all_in_scope-790"><span class="linenos">790</span></a><span class="sd"> Yields:</span>
|
</span><span id="find_all_in_scope-794"><a href="#find_all_in_scope-794"><span class="linenos">794</span></a><span class="sd"> Yields:</span>
|
||||||
</span><span id="find_all_in_scope-791"><a href="#find_all_in_scope-791"><span class="linenos">791</span></a><span class="sd"> exp.Expression: nodes</span>
|
</span><span id="find_all_in_scope-795"><a href="#find_all_in_scope-795"><span class="linenos">795</span></a><span class="sd"> exp.Expression: nodes</span>
|
||||||
</span><span id="find_all_in_scope-792"><a href="#find_all_in_scope-792"><span class="linenos">792</span></a><span class="sd"> """</span>
|
</span><span id="find_all_in_scope-796"><a href="#find_all_in_scope-796"><span class="linenos">796</span></a><span class="sd"> """</span>
|
||||||
</span><span id="find_all_in_scope-793"><a href="#find_all_in_scope-793"><span class="linenos">793</span></a> <span class="k">for</span> <span class="n">expression</span><span class="p">,</span> <span class="o">*</span><span class="n">_</span> <span class="ow">in</span> <span class="n">walk_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">):</span>
|
</span><span id="find_all_in_scope-797"><a href="#find_all_in_scope-797"><span class="linenos">797</span></a> <span class="k">for</span> <span class="n">expression</span><span class="p">,</span> <span class="o">*</span><span class="n">_</span> <span class="ow">in</span> <span class="n">walk_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">):</span>
|
||||||
</span><span id="find_all_in_scope-794"><a href="#find_all_in_scope-794"><span class="linenos">794</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">ensure_collection</span><span class="p">(</span><span class="n">expression_types</span><span class="p">))):</span>
|
</span><span id="find_all_in_scope-798"><a href="#find_all_in_scope-798"><span class="linenos">798</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">ensure_collection</span><span class="p">(</span><span class="n">expression_types</span><span class="p">))):</span>
|
||||||
</span><span id="find_all_in_scope-795"><a href="#find_all_in_scope-795"><span class="linenos">795</span></a> <span class="k">yield</span> <span class="n">expression</span>
|
</span><span id="find_all_in_scope-799"><a href="#find_all_in_scope-799"><span class="linenos">799</span></a> <span class="k">yield</span> <span class="n">expression</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -2777,22 +2787,22 @@ match at least one of the specified expression types.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#find_in_scope"></a>
|
<a class="headerlink" href="#find_in_scope"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="find_in_scope-798"><a href="#find_in_scope-798"><span class="linenos">798</span></a><span class="k">def</span> <span class="nf">find_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="find_in_scope-802"><a href="#find_in_scope-802"><span class="linenos">802</span></a><span class="k">def</span> <span class="nf">find_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
||||||
</span><span id="find_in_scope-799"><a href="#find_in_scope-799"><span class="linenos">799</span></a><span class="w"> </span><span class="sd">"""</span>
|
</span><span id="find_in_scope-803"><a href="#find_in_scope-803"><span class="linenos">803</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||||
</span><span id="find_in_scope-800"><a href="#find_in_scope-800"><span class="linenos">800</span></a><span class="sd"> Returns the first node in this scope which matches at least one of the specified types.</span>
|
</span><span id="find_in_scope-804"><a href="#find_in_scope-804"><span class="linenos">804</span></a><span class="sd"> Returns the first node in this scope which matches at least one of the specified types.</span>
|
||||||
</span><span id="find_in_scope-801"><a href="#find_in_scope-801"><span class="linenos">801</span></a>
|
</span><span id="find_in_scope-805"><a href="#find_in_scope-805"><span class="linenos">805</span></a>
|
||||||
</span><span id="find_in_scope-802"><a href="#find_in_scope-802"><span class="linenos">802</span></a><span class="sd"> This does NOT traverse into subscopes.</span>
|
</span><span id="find_in_scope-806"><a href="#find_in_scope-806"><span class="linenos">806</span></a><span class="sd"> This does NOT traverse into subscopes.</span>
|
||||||
</span><span id="find_in_scope-803"><a href="#find_in_scope-803"><span class="linenos">803</span></a>
|
</span><span id="find_in_scope-807"><a href="#find_in_scope-807"><span class="linenos">807</span></a>
|
||||||
</span><span id="find_in_scope-804"><a href="#find_in_scope-804"><span class="linenos">804</span></a><span class="sd"> Args:</span>
|
</span><span id="find_in_scope-808"><a href="#find_in_scope-808"><span class="linenos">808</span></a><span class="sd"> Args:</span>
|
||||||
</span><span id="find_in_scope-805"><a href="#find_in_scope-805"><span class="linenos">805</span></a><span class="sd"> expression (exp.Expression):</span>
|
</span><span id="find_in_scope-809"><a href="#find_in_scope-809"><span class="linenos">809</span></a><span class="sd"> expression (exp.Expression):</span>
|
||||||
</span><span id="find_in_scope-806"><a href="#find_in_scope-806"><span class="linenos">806</span></a><span class="sd"> expression_types (tuple[type]|type): the expression type(s) to match.</span>
|
</span><span id="find_in_scope-810"><a href="#find_in_scope-810"><span class="linenos">810</span></a><span class="sd"> expression_types (tuple[type]|type): the expression type(s) to match.</span>
|
||||||
</span><span id="find_in_scope-807"><a href="#find_in_scope-807"><span class="linenos">807</span></a><span class="sd"> bfs (bool): True to use breadth-first search, False to use depth-first.</span>
|
</span><span id="find_in_scope-811"><a href="#find_in_scope-811"><span class="linenos">811</span></a><span class="sd"> bfs (bool): True to use breadth-first search, False to use depth-first.</span>
|
||||||
</span><span id="find_in_scope-808"><a href="#find_in_scope-808"><span class="linenos">808</span></a>
|
</span><span id="find_in_scope-812"><a href="#find_in_scope-812"><span class="linenos">812</span></a>
|
||||||
</span><span id="find_in_scope-809"><a href="#find_in_scope-809"><span class="linenos">809</span></a><span class="sd"> Returns:</span>
|
</span><span id="find_in_scope-813"><a href="#find_in_scope-813"><span class="linenos">813</span></a><span class="sd"> Returns:</span>
|
||||||
</span><span id="find_in_scope-810"><a href="#find_in_scope-810"><span class="linenos">810</span></a><span class="sd"> exp.Expression: the node which matches the criteria or None if no node matching</span>
|
</span><span id="find_in_scope-814"><a href="#find_in_scope-814"><span class="linenos">814</span></a><span class="sd"> exp.Expression: the node which matches the criteria or None if no node matching</span>
|
||||||
</span><span id="find_in_scope-811"><a href="#find_in_scope-811"><span class="linenos">811</span></a><span class="sd"> the criteria was found.</span>
|
</span><span id="find_in_scope-815"><a href="#find_in_scope-815"><span class="linenos">815</span></a><span class="sd"> the criteria was found.</span>
|
||||||
</span><span id="find_in_scope-812"><a href="#find_in_scope-812"><span class="linenos">812</span></a><span class="sd"> """</span>
|
</span><span id="find_in_scope-816"><a href="#find_in_scope-816"><span class="linenos">816</span></a><span class="sd"> """</span>
|
||||||
</span><span id="find_in_scope-813"><a href="#find_in_scope-813"><span class="linenos">813</span></a> <span class="k">return</span> <span class="nb">next</span><span class="p">(</span><span class="n">find_all_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">),</span> <span class="kc">None</span><span class="p">)</span>
|
</span><span id="find_in_scope-817"><a href="#find_in_scope-817"><span class="linenos">817</span></a> <span class="k">return</span> <span class="nb">next</span><span class="p">(</span><span class="n">find_all_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">expression_types</span><span class="p">,</span> <span class="n">bfs</span><span class="o">=</span><span class="n">bfs</span><span class="p">),</span> <span class="kc">None</span><span class="p">)</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load diff
20214
docs/sqlglot/parser.html
20214
docs/sqlglot/parser.html
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load diff
|
@ -63,9 +63,6 @@
|
||||||
<li>
|
<li>
|
||||||
<a class="function" href="#epoch_cast_to_ts">epoch_cast_to_ts</a>
|
<a class="function" href="#epoch_cast_to_ts">epoch_cast_to_ts</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
|
||||||
<a class="function" href="#timestamp_to_cast">timestamp_to_cast</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
<li>
|
||||||
<a class="function" href="#eliminate_semi_and_anti_joins">eliminate_semi_and_anti_joins</a>
|
<a class="function" href="#eliminate_semi_and_anti_joins">eliminate_semi_and_anti_joins</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -449,75 +446,66 @@
|
||||||
</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="k">return</span> <span class="n">expression</span>
|
</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||||
</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a>
|
</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a>
|
||||||
</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a>
|
</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a>
|
||||||
</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a><span class="k">def</span> <span class="nf">timestamp_to_cast</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
|
</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a><span class="k">def</span> <span class="nf">eliminate_semi_and_anti_joins</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
|
||||||
</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Timestamp</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">:</span>
|
</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
|
||||||
</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
|
</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"joins"</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]:</span>
|
||||||
</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
|
</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a> <span class="n">on</span> <span class="o">=</span> <span class="n">join</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"on"</span><span class="p">)</span>
|
||||||
</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a> <span class="n">to</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
|
</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a> <span class="k">if</span> <span class="n">on</span> <span class="ow">and</span> <span class="n">join</span><span class="o">.</span><span class="n">kind</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"SEMI"</span><span class="p">,</span> <span class="s2">"ANTI"</span><span class="p">):</span>
|
||||||
</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="p">)</span>
|
</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="n">subquery</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">"1"</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">join</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">on</span><span class="p">)</span>
|
||||||
</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a> <span class="k">return</span> <span class="n">expression</span>
|
</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Exists</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">subquery</span><span class="p">)</span>
|
||||||
</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a>
|
</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a> <span class="k">if</span> <span class="n">join</span><span class="o">.</span><span class="n">kind</span> <span class="o">==</span> <span class="s2">"ANTI"</span><span class="p">:</span>
|
||||||
</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a>
|
</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="n">exists</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||||
</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a><span class="k">def</span> <span class="nf">eliminate_semi_and_anti_joins</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
|
</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a>
|
||||||
</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
|
</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a> <span class="n">join</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
|
||||||
</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"joins"</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]:</span>
|
</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">exists</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||||
</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a> <span class="n">on</span> <span class="o">=</span> <span class="n">join</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"on"</span><span class="p">)</span>
|
</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a>
|
||||||
</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a> <span class="k">if</span> <span class="n">on</span> <span class="ow">and</span> <span class="n">join</span><span class="o">.</span><span class="n">kind</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"SEMI"</span><span class="p">,</span> <span class="s2">"ANTI"</span><span class="p">):</span>
|
</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||||
</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a> <span class="n">subquery</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">"1"</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">join</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">on</span><span class="p">)</span>
|
</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a>
|
||||||
</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Exists</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">subquery</span><span class="p">)</span>
|
</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a>
|
||||||
</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a> <span class="k">if</span> <span class="n">join</span><span class="o">.</span><span class="n">kind</span> <span class="o">==</span> <span class="s2">"ANTI"</span><span class="p">:</span>
|
</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a><span class="k">def</span> <span class="nf">preprocess</span><span class="p">(</span>
|
||||||
</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="n">exists</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="n">transforms</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]],</span>
|
||||||
</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a>
|
</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">Generator</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="nb">str</span><span class="p">]:</span>
|
||||||
</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> <span class="n">join</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
|
</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||||
</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">exists</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a><span class="sd"> Creates a new transform by chaining a sequence of transformations and converts the resulting</span>
|
||||||
</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a>
|
</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a><span class="sd"> expression to SQL, using either the "_sql" method corresponding to the resulting expression,</span>
|
||||||
</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a> <span class="k">return</span> <span class="n">expression</span>
|
</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a><span class="sd"> or the appropriate `Generator.TRANSFORMS` function (when applicable -- see below).</span>
|
||||||
</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a>
|
</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a>
|
||||||
</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a>
|
</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a><span class="sd"> Args:</span>
|
||||||
</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a><span class="k">def</span> <span class="nf">preprocess</span><span class="p">(</span>
|
</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a><span class="sd"> transforms: sequence of transform functions. These will be called in order.</span>
|
||||||
</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a> <span class="n">transforms</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]],</span>
|
</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a>
|
||||||
</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">Generator</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="nb">str</span><span class="p">]:</span>
|
</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a><span class="sd"> Returns:</span>
|
||||||
</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a><span class="w"> </span><span class="sd">"""</span>
|
</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a><span class="sd"> Function that can be used as a generator transform.</span>
|
||||||
</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a><span class="sd"> Creates a new transform by chaining a sequence of transformations and converts the resulting</span>
|
</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a><span class="sd"> """</span>
|
||||||
</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a><span class="sd"> expression to SQL, using either the "_sql" method corresponding to the resulting expression,</span>
|
</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a>
|
||||||
</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a><span class="sd"> or the appropriate `Generator.TRANSFORMS` function (when applicable -- see below).</span>
|
</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a> <span class="k">def</span> <span class="nf">_to_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a>
|
</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a> <span class="n">expression_type</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
|
||||||
</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a><span class="sd"> Args:</span>
|
</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a>
|
||||||
</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a><span class="sd"> transforms: sequence of transform functions. These will be called in order.</span>
|
</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">transforms</span><span class="p">[</span><span class="mi">0</span><span class="p">](</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
|
||||||
</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a>
|
</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">transforms</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
|
||||||
</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a><span class="sd"> Returns:</span>
|
</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">t</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
|
||||||
</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a><span class="sd"> Function that can be used as a generator transform.</span>
|
</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a>
|
||||||
</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a><span class="sd"> """</span>
|
</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a> <span class="n">_sql_handler</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">key</span> <span class="o">+</span> <span class="s2">"_sql"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||||
</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a>
|
</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="k">if</span> <span class="n">_sql_handler</span><span class="p">:</span>
|
||||||
</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a> <span class="k">def</span> <span class="nf">_to_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a> <span class="k">return</span> <span class="n">_sql_handler</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
|
||||||
</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a> <span class="n">expression_type</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
|
</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a>
|
||||||
</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a>
|
</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a> <span class="n">transforms_handler</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
|
||||||
</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">transforms</span><span class="p">[</span><span class="mi">0</span><span class="p">](</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
|
</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a> <span class="k">if</span> <span class="n">transforms_handler</span><span class="p">:</span>
|
||||||
</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">transforms</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
|
</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a> <span class="k">if</span> <span class="n">expression_type</span> <span class="ow">is</span> <span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
|
||||||
</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">t</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
|
</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Func</span><span class="p">):</span>
|
||||||
</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a>
|
</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
|
||||||
</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a> <span class="n">_sql_handler</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">key</span> <span class="o">+</span> <span class="s2">"_sql"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a>
|
||||||
</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a> <span class="k">if</span> <span class="n">_sql_handler</span><span class="p">:</span>
|
</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a> <span class="c1"># Ensures we don't enter an infinite loop. This can happen when the original expression</span>
|
||||||
</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a> <span class="k">return</span> <span class="n">_sql_handler</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
|
</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a> <span class="c1"># has the same type as the final expression and there's no _sql method available for it,</span>
|
||||||
</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a>
|
</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a> <span class="c1"># because then it'd re-enter _to_sql.</span>
|
||||||
</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a> <span class="n">transforms_handler</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
|
</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
|
||||||
</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a> <span class="k">if</span> <span class="n">transforms_handler</span><span class="p">:</span>
|
</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a> <span class="sa">f</span><span class="s2">"Expression type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2"> requires a _sql method in order to be transformed."</span>
|
||||||
</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a> <span class="k">if</span> <span class="n">expression_type</span> <span class="ow">is</span> <span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
|
</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a> <span class="p">)</span>
|
||||||
</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Func</span><span class="p">):</span>
|
</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a>
|
||||||
</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
|
</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a> <span class="k">return</span> <span class="n">transforms_handler</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
|
||||||
</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a>
|
</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a>
|
||||||
</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a> <span class="c1"># Ensures we don't enter an infinite loop. This can happen when the original expression</span>
|
</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Unsupported expression type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">."</span><span class="p">)</span>
|
||||||
</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a> <span class="c1"># has the same type as the final expression and there's no _sql method available for it,</span>
|
</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a>
|
||||||
</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a> <span class="c1"># because then it'd re-enter _to_sql.</span>
|
</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a> <span class="k">return</span> <span class="n">_to_sql</span>
|
||||||
</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
|
|
||||||
</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a> <span class="sa">f</span><span class="s2">"Expression type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2"> requires a _sql method in order to be transformed."</span>
|
|
||||||
</span><span id="L-417"><a href="#L-417"><span class="linenos">417</span></a> <span class="p">)</span>
|
|
||||||
</span><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a>
|
|
||||||
</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a> <span class="k">return</span> <span class="n">transforms_handler</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
|
|
||||||
</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a>
|
|
||||||
</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Unsupported expression type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">."</span><span class="p">)</span>
|
|
||||||
</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a>
|
|
||||||
</span><span id="L-423"><a href="#L-423"><span class="linenos">423</span></a> <span class="k">return</span> <span class="n">_to_sql</span>
|
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -1079,30 +1067,6 @@ other expressions. This transforms removes the precision from parameterized type
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section id="timestamp_to_cast">
|
|
||||||
<input id="timestamp_to_cast-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
|
||||||
<div class="attr function">
|
|
||||||
|
|
||||||
<span class="def">def</span>
|
|
||||||
<span class="name">timestamp_to_cast</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="expressions.html#Expression">sqlglot.expressions.Expression</a></span></span><span class="return-annotation">) -> <span class="n"><a href="expressions.html#Expression">sqlglot.expressions.Expression</a></span>:</span></span>
|
|
||||||
|
|
||||||
<label class="view-source-button" for="timestamp_to_cast-view-source"><span>View Source</span></label>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<a class="headerlink" href="#timestamp_to_cast"></a>
|
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="timestamp_to_cast-356"><a href="#timestamp_to_cast-356"><span class="linenos">356</span></a><span class="k">def</span> <span class="nf">timestamp_to_cast</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
|
|
||||||
</span><span id="timestamp_to_cast-357"><a href="#timestamp_to_cast-357"><span class="linenos">357</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Timestamp</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">:</span>
|
|
||||||
</span><span id="timestamp_to_cast-358"><a href="#timestamp_to_cast-358"><span class="linenos">358</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
|
|
||||||
</span><span id="timestamp_to_cast-359"><a href="#timestamp_to_cast-359"><span class="linenos">359</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
|
|
||||||
</span><span id="timestamp_to_cast-360"><a href="#timestamp_to_cast-360"><span class="linenos">360</span></a> <span class="n">to</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
|
|
||||||
</span><span id="timestamp_to_cast-361"><a href="#timestamp_to_cast-361"><span class="linenos">361</span></a> <span class="p">)</span>
|
|
||||||
</span><span id="timestamp_to_cast-362"><a href="#timestamp_to_cast-362"><span class="linenos">362</span></a> <span class="k">return</span> <span class="n">expression</span>
|
|
||||||
</span></pre></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
<section id="eliminate_semi_and_anti_joins">
|
<section id="eliminate_semi_and_anti_joins">
|
||||||
<input id="eliminate_semi_and_anti_joins-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
<input id="eliminate_semi_and_anti_joins-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||||
|
@ -1115,20 +1079,20 @@ other expressions. This transforms removes the precision from parameterized type
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#eliminate_semi_and_anti_joins"></a>
|
<a class="headerlink" href="#eliminate_semi_and_anti_joins"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="eliminate_semi_and_anti_joins-365"><a href="#eliminate_semi_and_anti_joins-365"><span class="linenos">365</span></a><span class="k">def</span> <span class="nf">eliminate_semi_and_anti_joins</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="eliminate_semi_and_anti_joins-356"><a href="#eliminate_semi_and_anti_joins-356"><span class="linenos">356</span></a><span class="k">def</span> <span class="nf">eliminate_semi_and_anti_joins</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
|
||||||
</span><span id="eliminate_semi_and_anti_joins-366"><a href="#eliminate_semi_and_anti_joins-366"><span class="linenos">366</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
|
</span><span id="eliminate_semi_and_anti_joins-357"><a href="#eliminate_semi_and_anti_joins-357"><span class="linenos">357</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
|
||||||
</span><span id="eliminate_semi_and_anti_joins-367"><a href="#eliminate_semi_and_anti_joins-367"><span class="linenos">367</span></a> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"joins"</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]:</span>
|
</span><span id="eliminate_semi_and_anti_joins-358"><a href="#eliminate_semi_and_anti_joins-358"><span class="linenos">358</span></a> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"joins"</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]:</span>
|
||||||
</span><span id="eliminate_semi_and_anti_joins-368"><a href="#eliminate_semi_and_anti_joins-368"><span class="linenos">368</span></a> <span class="n">on</span> <span class="o">=</span> <span class="n">join</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"on"</span><span class="p">)</span>
|
</span><span id="eliminate_semi_and_anti_joins-359"><a href="#eliminate_semi_and_anti_joins-359"><span class="linenos">359</span></a> <span class="n">on</span> <span class="o">=</span> <span class="n">join</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"on"</span><span class="p">)</span>
|
||||||
</span><span id="eliminate_semi_and_anti_joins-369"><a href="#eliminate_semi_and_anti_joins-369"><span class="linenos">369</span></a> <span class="k">if</span> <span class="n">on</span> <span class="ow">and</span> <span class="n">join</span><span class="o">.</span><span class="n">kind</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"SEMI"</span><span class="p">,</span> <span class="s2">"ANTI"</span><span class="p">):</span>
|
</span><span id="eliminate_semi_and_anti_joins-360"><a href="#eliminate_semi_and_anti_joins-360"><span class="linenos">360</span></a> <span class="k">if</span> <span class="n">on</span> <span class="ow">and</span> <span class="n">join</span><span class="o">.</span><span class="n">kind</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"SEMI"</span><span class="p">,</span> <span class="s2">"ANTI"</span><span class="p">):</span>
|
||||||
</span><span id="eliminate_semi_and_anti_joins-370"><a href="#eliminate_semi_and_anti_joins-370"><span class="linenos">370</span></a> <span class="n">subquery</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">"1"</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">join</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">on</span><span class="p">)</span>
|
</span><span id="eliminate_semi_and_anti_joins-361"><a href="#eliminate_semi_and_anti_joins-361"><span class="linenos">361</span></a> <span class="n">subquery</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">"1"</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">join</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">on</span><span class="p">)</span>
|
||||||
</span><span id="eliminate_semi_and_anti_joins-371"><a href="#eliminate_semi_and_anti_joins-371"><span class="linenos">371</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Exists</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">subquery</span><span class="p">)</span>
|
</span><span id="eliminate_semi_and_anti_joins-362"><a href="#eliminate_semi_and_anti_joins-362"><span class="linenos">362</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Exists</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">subquery</span><span class="p">)</span>
|
||||||
</span><span id="eliminate_semi_and_anti_joins-372"><a href="#eliminate_semi_and_anti_joins-372"><span class="linenos">372</span></a> <span class="k">if</span> <span class="n">join</span><span class="o">.</span><span class="n">kind</span> <span class="o">==</span> <span class="s2">"ANTI"</span><span class="p">:</span>
|
</span><span id="eliminate_semi_and_anti_joins-363"><a href="#eliminate_semi_and_anti_joins-363"><span class="linenos">363</span></a> <span class="k">if</span> <span class="n">join</span><span class="o">.</span><span class="n">kind</span> <span class="o">==</span> <span class="s2">"ANTI"</span><span class="p">:</span>
|
||||||
</span><span id="eliminate_semi_and_anti_joins-373"><a href="#eliminate_semi_and_anti_joins-373"><span class="linenos">373</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="n">exists</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
</span><span id="eliminate_semi_and_anti_joins-364"><a href="#eliminate_semi_and_anti_joins-364"><span class="linenos">364</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="n">exists</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||||
</span><span id="eliminate_semi_and_anti_joins-374"><a href="#eliminate_semi_and_anti_joins-374"><span class="linenos">374</span></a>
|
</span><span id="eliminate_semi_and_anti_joins-365"><a href="#eliminate_semi_and_anti_joins-365"><span class="linenos">365</span></a>
|
||||||
</span><span id="eliminate_semi_and_anti_joins-375"><a href="#eliminate_semi_and_anti_joins-375"><span class="linenos">375</span></a> <span class="n">join</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
|
</span><span id="eliminate_semi_and_anti_joins-366"><a href="#eliminate_semi_and_anti_joins-366"><span class="linenos">366</span></a> <span class="n">join</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
|
||||||
</span><span id="eliminate_semi_and_anti_joins-376"><a href="#eliminate_semi_and_anti_joins-376"><span class="linenos">376</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">exists</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
</span><span id="eliminate_semi_and_anti_joins-367"><a href="#eliminate_semi_and_anti_joins-367"><span class="linenos">367</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">exists</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||||
</span><span id="eliminate_semi_and_anti_joins-377"><a href="#eliminate_semi_and_anti_joins-377"><span class="linenos">377</span></a>
|
</span><span id="eliminate_semi_and_anti_joins-368"><a href="#eliminate_semi_and_anti_joins-368"><span class="linenos">368</span></a>
|
||||||
</span><span id="eliminate_semi_and_anti_joins-378"><a href="#eliminate_semi_and_anti_joins-378"><span class="linenos">378</span></a> <span class="k">return</span> <span class="n">expression</span>
|
</span><span id="eliminate_semi_and_anti_joins-369"><a href="#eliminate_semi_and_anti_joins-369"><span class="linenos">369</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -1146,50 +1110,50 @@ other expressions. This transforms removes the precision from parameterized type
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#preprocess"></a>
|
<a class="headerlink" href="#preprocess"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="preprocess-381"><a href="#preprocess-381"><span class="linenos">381</span></a><span class="k">def</span> <span class="nf">preprocess</span><span class="p">(</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="preprocess-372"><a href="#preprocess-372"><span class="linenos">372</span></a><span class="k">def</span> <span class="nf">preprocess</span><span class="p">(</span>
|
||||||
</span><span id="preprocess-382"><a href="#preprocess-382"><span class="linenos">382</span></a> <span class="n">transforms</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]],</span>
|
</span><span id="preprocess-373"><a href="#preprocess-373"><span class="linenos">373</span></a> <span class="n">transforms</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]],</span>
|
||||||
</span><span id="preprocess-383"><a href="#preprocess-383"><span class="linenos">383</span></a><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">Generator</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="nb">str</span><span class="p">]:</span>
|
</span><span id="preprocess-374"><a href="#preprocess-374"><span class="linenos">374</span></a><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">Generator</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="nb">str</span><span class="p">]:</span>
|
||||||
</span><span id="preprocess-384"><a href="#preprocess-384"><span class="linenos">384</span></a><span class="w"> </span><span class="sd">"""</span>
|
</span><span id="preprocess-375"><a href="#preprocess-375"><span class="linenos">375</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||||
</span><span id="preprocess-385"><a href="#preprocess-385"><span class="linenos">385</span></a><span class="sd"> Creates a new transform by chaining a sequence of transformations and converts the resulting</span>
|
</span><span id="preprocess-376"><a href="#preprocess-376"><span class="linenos">376</span></a><span class="sd"> Creates a new transform by chaining a sequence of transformations and converts the resulting</span>
|
||||||
</span><span id="preprocess-386"><a href="#preprocess-386"><span class="linenos">386</span></a><span class="sd"> expression to SQL, using either the "_sql" method corresponding to the resulting expression,</span>
|
</span><span id="preprocess-377"><a href="#preprocess-377"><span class="linenos">377</span></a><span class="sd"> expression to SQL, using either the "_sql" method corresponding to the resulting expression,</span>
|
||||||
</span><span id="preprocess-387"><a href="#preprocess-387"><span class="linenos">387</span></a><span class="sd"> or the appropriate `Generator.TRANSFORMS` function (when applicable -- see below).</span>
|
</span><span id="preprocess-378"><a href="#preprocess-378"><span class="linenos">378</span></a><span class="sd"> or the appropriate `Generator.TRANSFORMS` function (when applicable -- see below).</span>
|
||||||
</span><span id="preprocess-388"><a href="#preprocess-388"><span class="linenos">388</span></a>
|
</span><span id="preprocess-379"><a href="#preprocess-379"><span class="linenos">379</span></a>
|
||||||
</span><span id="preprocess-389"><a href="#preprocess-389"><span class="linenos">389</span></a><span class="sd"> Args:</span>
|
</span><span id="preprocess-380"><a href="#preprocess-380"><span class="linenos">380</span></a><span class="sd"> Args:</span>
|
||||||
</span><span id="preprocess-390"><a href="#preprocess-390"><span class="linenos">390</span></a><span class="sd"> transforms: sequence of transform functions. These will be called in order.</span>
|
</span><span id="preprocess-381"><a href="#preprocess-381"><span class="linenos">381</span></a><span class="sd"> transforms: sequence of transform functions. These will be called in order.</span>
|
||||||
</span><span id="preprocess-391"><a href="#preprocess-391"><span class="linenos">391</span></a>
|
</span><span id="preprocess-382"><a href="#preprocess-382"><span class="linenos">382</span></a>
|
||||||
</span><span id="preprocess-392"><a href="#preprocess-392"><span class="linenos">392</span></a><span class="sd"> Returns:</span>
|
</span><span id="preprocess-383"><a href="#preprocess-383"><span class="linenos">383</span></a><span class="sd"> Returns:</span>
|
||||||
</span><span id="preprocess-393"><a href="#preprocess-393"><span class="linenos">393</span></a><span class="sd"> Function that can be used as a generator transform.</span>
|
</span><span id="preprocess-384"><a href="#preprocess-384"><span class="linenos">384</span></a><span class="sd"> Function that can be used as a generator transform.</span>
|
||||||
</span><span id="preprocess-394"><a href="#preprocess-394"><span class="linenos">394</span></a><span class="sd"> """</span>
|
</span><span id="preprocess-385"><a href="#preprocess-385"><span class="linenos">385</span></a><span class="sd"> """</span>
|
||||||
</span><span id="preprocess-395"><a href="#preprocess-395"><span class="linenos">395</span></a>
|
</span><span id="preprocess-386"><a href="#preprocess-386"><span class="linenos">386</span></a>
|
||||||
</span><span id="preprocess-396"><a href="#preprocess-396"><span class="linenos">396</span></a> <span class="k">def</span> <span class="nf">_to_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
</span><span id="preprocess-387"><a href="#preprocess-387"><span class="linenos">387</span></a> <span class="k">def</span> <span class="nf">_to_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||||
</span><span id="preprocess-397"><a href="#preprocess-397"><span class="linenos">397</span></a> <span class="n">expression_type</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
|
</span><span id="preprocess-388"><a href="#preprocess-388"><span class="linenos">388</span></a> <span class="n">expression_type</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
|
||||||
</span><span id="preprocess-398"><a href="#preprocess-398"><span class="linenos">398</span></a>
|
</span><span id="preprocess-389"><a href="#preprocess-389"><span class="linenos">389</span></a>
|
||||||
</span><span id="preprocess-399"><a href="#preprocess-399"><span class="linenos">399</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">transforms</span><span class="p">[</span><span class="mi">0</span><span class="p">](</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
|
</span><span id="preprocess-390"><a href="#preprocess-390"><span class="linenos">390</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">transforms</span><span class="p">[</span><span class="mi">0</span><span class="p">](</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
|
||||||
</span><span id="preprocess-400"><a href="#preprocess-400"><span class="linenos">400</span></a> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">transforms</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
|
</span><span id="preprocess-391"><a href="#preprocess-391"><span class="linenos">391</span></a> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">transforms</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
|
||||||
</span><span id="preprocess-401"><a href="#preprocess-401"><span class="linenos">401</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">t</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
|
</span><span id="preprocess-392"><a href="#preprocess-392"><span class="linenos">392</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">t</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
|
||||||
</span><span id="preprocess-402"><a href="#preprocess-402"><span class="linenos">402</span></a>
|
</span><span id="preprocess-393"><a href="#preprocess-393"><span class="linenos">393</span></a>
|
||||||
</span><span id="preprocess-403"><a href="#preprocess-403"><span class="linenos">403</span></a> <span class="n">_sql_handler</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">key</span> <span class="o">+</span> <span class="s2">"_sql"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
</span><span id="preprocess-394"><a href="#preprocess-394"><span class="linenos">394</span></a> <span class="n">_sql_handler</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">key</span> <span class="o">+</span> <span class="s2">"_sql"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||||
</span><span id="preprocess-404"><a href="#preprocess-404"><span class="linenos">404</span></a> <span class="k">if</span> <span class="n">_sql_handler</span><span class="p">:</span>
|
</span><span id="preprocess-395"><a href="#preprocess-395"><span class="linenos">395</span></a> <span class="k">if</span> <span class="n">_sql_handler</span><span class="p">:</span>
|
||||||
</span><span id="preprocess-405"><a href="#preprocess-405"><span class="linenos">405</span></a> <span class="k">return</span> <span class="n">_sql_handler</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
|
</span><span id="preprocess-396"><a href="#preprocess-396"><span class="linenos">396</span></a> <span class="k">return</span> <span class="n">_sql_handler</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
|
||||||
</span><span id="preprocess-406"><a href="#preprocess-406"><span class="linenos">406</span></a>
|
</span><span id="preprocess-397"><a href="#preprocess-397"><span class="linenos">397</span></a>
|
||||||
</span><span id="preprocess-407"><a href="#preprocess-407"><span class="linenos">407</span></a> <span class="n">transforms_handler</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
|
</span><span id="preprocess-398"><a href="#preprocess-398"><span class="linenos">398</span></a> <span class="n">transforms_handler</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
|
||||||
</span><span id="preprocess-408"><a href="#preprocess-408"><span class="linenos">408</span></a> <span class="k">if</span> <span class="n">transforms_handler</span><span class="p">:</span>
|
</span><span id="preprocess-399"><a href="#preprocess-399"><span class="linenos">399</span></a> <span class="k">if</span> <span class="n">transforms_handler</span><span class="p">:</span>
|
||||||
</span><span id="preprocess-409"><a href="#preprocess-409"><span class="linenos">409</span></a> <span class="k">if</span> <span class="n">expression_type</span> <span class="ow">is</span> <span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
|
</span><span id="preprocess-400"><a href="#preprocess-400"><span class="linenos">400</span></a> <span class="k">if</span> <span class="n">expression_type</span> <span class="ow">is</span> <span class="nb">type</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
|
||||||
</span><span id="preprocess-410"><a href="#preprocess-410"><span class="linenos">410</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Func</span><span class="p">):</span>
|
</span><span id="preprocess-401"><a href="#preprocess-401"><span class="linenos">401</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Func</span><span class="p">):</span>
|
||||||
</span><span id="preprocess-411"><a href="#preprocess-411"><span class="linenos">411</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
|
</span><span id="preprocess-402"><a href="#preprocess-402"><span class="linenos">402</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
|
||||||
|
</span><span id="preprocess-403"><a href="#preprocess-403"><span class="linenos">403</span></a>
|
||||||
|
</span><span id="preprocess-404"><a href="#preprocess-404"><span class="linenos">404</span></a> <span class="c1"># Ensures we don't enter an infinite loop. This can happen when the original expression</span>
|
||||||
|
</span><span id="preprocess-405"><a href="#preprocess-405"><span class="linenos">405</span></a> <span class="c1"># has the same type as the final expression and there's no _sql method available for it,</span>
|
||||||
|
</span><span id="preprocess-406"><a href="#preprocess-406"><span class="linenos">406</span></a> <span class="c1"># because then it'd re-enter _to_sql.</span>
|
||||||
|
</span><span id="preprocess-407"><a href="#preprocess-407"><span class="linenos">407</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
|
||||||
|
</span><span id="preprocess-408"><a href="#preprocess-408"><span class="linenos">408</span></a> <span class="sa">f</span><span class="s2">"Expression type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2"> requires a _sql method in order to be transformed."</span>
|
||||||
|
</span><span id="preprocess-409"><a href="#preprocess-409"><span class="linenos">409</span></a> <span class="p">)</span>
|
||||||
|
</span><span id="preprocess-410"><a href="#preprocess-410"><span class="linenos">410</span></a>
|
||||||
|
</span><span id="preprocess-411"><a href="#preprocess-411"><span class="linenos">411</span></a> <span class="k">return</span> <span class="n">transforms_handler</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
|
||||||
</span><span id="preprocess-412"><a href="#preprocess-412"><span class="linenos">412</span></a>
|
</span><span id="preprocess-412"><a href="#preprocess-412"><span class="linenos">412</span></a>
|
||||||
</span><span id="preprocess-413"><a href="#preprocess-413"><span class="linenos">413</span></a> <span class="c1"># Ensures we don't enter an infinite loop. This can happen when the original expression</span>
|
</span><span id="preprocess-413"><a href="#preprocess-413"><span class="linenos">413</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Unsupported expression type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">."</span><span class="p">)</span>
|
||||||
</span><span id="preprocess-414"><a href="#preprocess-414"><span class="linenos">414</span></a> <span class="c1"># has the same type as the final expression and there's no _sql method available for it,</span>
|
</span><span id="preprocess-414"><a href="#preprocess-414"><span class="linenos">414</span></a>
|
||||||
</span><span id="preprocess-415"><a href="#preprocess-415"><span class="linenos">415</span></a> <span class="c1"># because then it'd re-enter _to_sql.</span>
|
</span><span id="preprocess-415"><a href="#preprocess-415"><span class="linenos">415</span></a> <span class="k">return</span> <span class="n">_to_sql</span>
|
||||||
</span><span id="preprocess-416"><a href="#preprocess-416"><span class="linenos">416</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
|
|
||||||
</span><span id="preprocess-417"><a href="#preprocess-417"><span class="linenos">417</span></a> <span class="sa">f</span><span class="s2">"Expression type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2"> requires a _sql method in order to be transformed."</span>
|
|
||||||
</span><span id="preprocess-418"><a href="#preprocess-418"><span class="linenos">418</span></a> <span class="p">)</span>
|
|
||||||
</span><span id="preprocess-419"><a href="#preprocess-419"><span class="linenos">419</span></a>
|
|
||||||
</span><span id="preprocess-420"><a href="#preprocess-420"><span class="linenos">420</span></a> <span class="k">return</span> <span class="n">transforms_handler</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
|
|
||||||
</span><span id="preprocess-421"><a href="#preprocess-421"><span class="linenos">421</span></a>
|
|
||||||
</span><span id="preprocess-422"><a href="#preprocess-422"><span class="linenos">422</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Unsupported expression type </span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">."</span><span class="p">)</span>
|
|
||||||
</span><span id="preprocess-423"><a href="#preprocess-423"><span class="linenos">423</span></a>
|
|
||||||
</span><span id="preprocess-424"><a href="#preprocess-424"><span class="linenos">424</span></a> <span class="k">return</span> <span class="n">_to_sql</span>
|
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -58,6 +58,12 @@ parser.add_argument(
|
||||||
default="IMMEDIATE",
|
default="IMMEDIATE",
|
||||||
help="IGNORE, WARN, RAISE, IMMEDIATE (default)",
|
help="IGNORE, WARN, RAISE, IMMEDIATE (default)",
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--version",
|
||||||
|
action="version",
|
||||||
|
version=sqlglot.__version__,
|
||||||
|
help="Display the SQLGlot version",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
|
@ -84,11 +84,11 @@ def min(col: ColumnOrName) -> Column:
|
||||||
|
|
||||||
|
|
||||||
def max_by(col: ColumnOrName, ord: ColumnOrName) -> Column:
|
def max_by(col: ColumnOrName, ord: ColumnOrName) -> Column:
|
||||||
return Column.invoke_anonymous_function(col, "MAX_BY", ord)
|
return Column.invoke_expression_over_column(col, expression.ArgMax, expression=ord)
|
||||||
|
|
||||||
|
|
||||||
def min_by(col: ColumnOrName, ord: ColumnOrName) -> Column:
|
def min_by(col: ColumnOrName, ord: ColumnOrName) -> Column:
|
||||||
return Column.invoke_anonymous_function(col, "MIN_BY", ord)
|
return Column.invoke_expression_over_column(col, expression.ArgMin, expression=ord)
|
||||||
|
|
||||||
|
|
||||||
def count(col: ColumnOrName) -> Column:
|
def count(col: ColumnOrName) -> Column:
|
||||||
|
@ -1113,7 +1113,7 @@ def reverse(col: ColumnOrName) -> Column:
|
||||||
|
|
||||||
|
|
||||||
def flatten(col: ColumnOrName) -> Column:
|
def flatten(col: ColumnOrName) -> Column:
|
||||||
return Column.invoke_anonymous_function(col, "FLATTEN")
|
return Column.invoke_expression_over_column(col, expression.Flatten)
|
||||||
|
|
||||||
|
|
||||||
def map_keys(col: ColumnOrName) -> Column:
|
def map_keys(col: ColumnOrName) -> Column:
|
||||||
|
|
|
@ -8,6 +8,7 @@ from sqlglot import exp, generator, parser, tokens, transforms
|
||||||
from sqlglot._typing import E
|
from sqlglot._typing import E
|
||||||
from sqlglot.dialects.dialect import (
|
from sqlglot.dialects.dialect import (
|
||||||
Dialect,
|
Dialect,
|
||||||
|
arg_max_or_min_no_count,
|
||||||
binary_from_function,
|
binary_from_function,
|
||||||
date_add_interval_sql,
|
date_add_interval_sql,
|
||||||
datestrtodate_sql,
|
datestrtodate_sql,
|
||||||
|
@ -434,8 +435,13 @@ class BigQuery(Dialect):
|
||||||
TRANSFORMS = {
|
TRANSFORMS = {
|
||||||
**generator.Generator.TRANSFORMS,
|
**generator.Generator.TRANSFORMS,
|
||||||
exp.ApproxDistinct: rename_func("APPROX_COUNT_DISTINCT"),
|
exp.ApproxDistinct: rename_func("APPROX_COUNT_DISTINCT"),
|
||||||
|
exp.ArgMax: arg_max_or_min_no_count("MAX_BY"),
|
||||||
|
exp.ArgMin: arg_max_or_min_no_count("MIN_BY"),
|
||||||
exp.ArraySize: rename_func("ARRAY_LENGTH"),
|
exp.ArraySize: rename_func("ARRAY_LENGTH"),
|
||||||
exp.Cast: transforms.preprocess([transforms.remove_precision_parameterized_types]),
|
exp.Cast: transforms.preprocess([transforms.remove_precision_parameterized_types]),
|
||||||
|
exp.CollateProperty: lambda self, e: f"DEFAULT COLLATE {self.sql(e, 'this')}"
|
||||||
|
if e.args.get("default")
|
||||||
|
else f"COLLATE {self.sql(e, 'this')}",
|
||||||
exp.Create: _create_sql,
|
exp.Create: _create_sql,
|
||||||
exp.CTE: transforms.preprocess([_pushdown_cte_column_names]),
|
exp.CTE: transforms.preprocess([_pushdown_cte_column_names]),
|
||||||
exp.DateAdd: date_add_interval_sql("DATE", "ADD"),
|
exp.DateAdd: date_add_interval_sql("DATE", "ADD"),
|
||||||
|
@ -632,6 +638,13 @@ class BigQuery(Dialect):
|
||||||
"within",
|
"within",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def eq_sql(self, expression: exp.EQ) -> str:
|
||||||
|
# Operands of = cannot be NULL in BigQuery
|
||||||
|
if isinstance(expression.left, exp.Null) or isinstance(expression.right, exp.Null):
|
||||||
|
return "NULL"
|
||||||
|
|
||||||
|
return self.binary(expression, "=")
|
||||||
|
|
||||||
def attimezone_sql(self, expression: exp.AtTimeZone) -> str:
|
def attimezone_sql(self, expression: exp.AtTimeZone) -> str:
|
||||||
parent = expression.parent
|
parent = expression.parent
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ import typing as t
|
||||||
from sqlglot import exp, generator, parser, tokens, transforms
|
from sqlglot import exp, generator, parser, tokens, transforms
|
||||||
from sqlglot.dialects.dialect import (
|
from sqlglot.dialects.dialect import (
|
||||||
Dialect,
|
Dialect,
|
||||||
|
arg_max_or_min_no_count,
|
||||||
inline_array_sql,
|
inline_array_sql,
|
||||||
no_pivot_sql,
|
no_pivot_sql,
|
||||||
rename_func,
|
rename_func,
|
||||||
|
@ -373,8 +374,11 @@ class ClickHouse(Dialect):
|
||||||
exp.Select: transforms.preprocess([transforms.eliminate_qualify]),
|
exp.Select: transforms.preprocess([transforms.eliminate_qualify]),
|
||||||
exp.AnyValue: rename_func("any"),
|
exp.AnyValue: rename_func("any"),
|
||||||
exp.ApproxDistinct: rename_func("uniq"),
|
exp.ApproxDistinct: rename_func("uniq"),
|
||||||
|
exp.ArgMax: arg_max_or_min_no_count("argMax"),
|
||||||
|
exp.ArgMin: arg_max_or_min_no_count("argMin"),
|
||||||
exp.Array: inline_array_sql,
|
exp.Array: inline_array_sql,
|
||||||
exp.CastToStrType: rename_func("CAST"),
|
exp.CastToStrType: rename_func("CAST"),
|
||||||
|
exp.CurrentDate: lambda self, e: self.func("CURRENT_DATE"),
|
||||||
exp.DateAdd: lambda self, e: self.func(
|
exp.DateAdd: lambda self, e: self.func(
|
||||||
"DATE_ADD", exp.Literal.string(e.text("unit") or "day"), e.expression, e.this
|
"DATE_ADD", exp.Literal.string(e.text("unit") or "day"), e.expression, e.this
|
||||||
),
|
),
|
||||||
|
@ -418,6 +422,33 @@ class ClickHouse(Dialect):
|
||||||
"NAMED COLLECTION",
|
"NAMED COLLECTION",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def _any_to_has(
|
||||||
|
self,
|
||||||
|
expression: exp.EQ | exp.NEQ,
|
||||||
|
default: t.Callable[[t.Any], str],
|
||||||
|
prefix: str = "",
|
||||||
|
) -> str:
|
||||||
|
if isinstance(expression.left, exp.Any):
|
||||||
|
arr = expression.left
|
||||||
|
this = expression.right
|
||||||
|
elif isinstance(expression.right, exp.Any):
|
||||||
|
arr = expression.right
|
||||||
|
this = expression.left
|
||||||
|
else:
|
||||||
|
return default(expression)
|
||||||
|
return prefix + self.func("has", arr.this.unnest(), this)
|
||||||
|
|
||||||
|
def eq_sql(self, expression: exp.EQ) -> str:
|
||||||
|
return self._any_to_has(expression, super().eq_sql)
|
||||||
|
|
||||||
|
def neq_sql(self, expression: exp.NEQ) -> str:
|
||||||
|
return self._any_to_has(expression, super().neq_sql, "NOT ")
|
||||||
|
|
||||||
|
def regexpilike_sql(self, expression: exp.RegexpILike) -> str:
|
||||||
|
# Manually add a flag to make the search case-insensitive
|
||||||
|
regex = self.func("CONCAT", "'(?i)'", expression.expression)
|
||||||
|
return f"match({self.format_args(expression.this, regex)})"
|
||||||
|
|
||||||
def datatype_sql(self, expression: exp.DataType) -> str:
|
def datatype_sql(self, expression: exp.DataType) -> str:
|
||||||
# String is the standard ClickHouse type, every other variant is just an alias.
|
# String is the standard ClickHouse type, every other variant is just an alias.
|
||||||
# Additionally, any supplied length parameter will be ignored.
|
# Additionally, any supplied length parameter will be ignored.
|
||||||
|
|
|
@ -10,7 +10,7 @@ from sqlglot.errors import ParseError
|
||||||
from sqlglot.generator import Generator
|
from sqlglot.generator import Generator
|
||||||
from sqlglot.helper import flatten, seq_get
|
from sqlglot.helper import flatten, seq_get
|
||||||
from sqlglot.parser import Parser
|
from sqlglot.parser import Parser
|
||||||
from sqlglot.time import format_time
|
from sqlglot.time import TIMEZONES, format_time
|
||||||
from sqlglot.tokens import Token, Tokenizer, TokenType
|
from sqlglot.tokens import Token, Tokenizer, TokenType
|
||||||
from sqlglot.trie import new_trie
|
from sqlglot.trie import new_trie
|
||||||
|
|
||||||
|
@ -595,6 +595,19 @@ def timestamptrunc_sql(self: Generator, expression: exp.TimestampTrunc) -> str:
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def no_timestamp_sql(self: Generator, expression: exp.Timestamp) -> str:
|
||||||
|
if not expression.expression:
|
||||||
|
return self.sql(exp.cast(expression.this, to=exp.DataType.Type.TIMESTAMP))
|
||||||
|
if expression.text("expression").lower() in TIMEZONES:
|
||||||
|
return self.sql(
|
||||||
|
exp.AtTimeZone(
|
||||||
|
this=exp.cast(expression.this, to=exp.DataType.Type.TIMESTAMP),
|
||||||
|
zone=expression.expression,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return self.function_fallback_sql(expression)
|
||||||
|
|
||||||
|
|
||||||
def locate_to_strposition(args: t.List) -> exp.Expression:
|
def locate_to_strposition(args: t.List) -> exp.Expression:
|
||||||
return exp.StrPosition(
|
return exp.StrPosition(
|
||||||
this=seq_get(args, 1), substr=seq_get(args, 0), position=seq_get(args, 2)
|
this=seq_get(args, 1), substr=seq_get(args, 0), position=seq_get(args, 2)
|
||||||
|
@ -691,9 +704,13 @@ def ts_or_ds_to_date_sql(dialect: str) -> t.Callable:
|
||||||
_dialect = Dialect.get_or_raise(dialect)
|
_dialect = Dialect.get_or_raise(dialect)
|
||||||
time_format = self.format_time(expression)
|
time_format = self.format_time(expression)
|
||||||
if time_format and time_format not in (_dialect.TIME_FORMAT, _dialect.DATE_FORMAT):
|
if time_format and time_format not in (_dialect.TIME_FORMAT, _dialect.DATE_FORMAT):
|
||||||
return self.sql(exp.cast(str_to_time_sql(self, expression), "date"))
|
return self.sql(
|
||||||
|
exp.cast(
|
||||||
return self.sql(exp.cast(self.sql(expression, "this"), "date"))
|
exp.StrToTime(this=expression.this, format=expression.args["format"]),
|
||||||
|
"date",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return self.sql(exp.cast(expression.this, "date"))
|
||||||
|
|
||||||
return _ts_or_ds_to_date_sql
|
return _ts_or_ds_to_date_sql
|
||||||
|
|
||||||
|
@ -725,7 +742,9 @@ def regexp_extract_sql(self: Generator, expression: exp.RegexpExtract) -> str:
|
||||||
|
|
||||||
|
|
||||||
def regexp_replace_sql(self: Generator, expression: exp.RegexpReplace) -> str:
|
def regexp_replace_sql(self: Generator, expression: exp.RegexpReplace) -> str:
|
||||||
bad_args = list(filter(expression.args.get, ("position", "occurrence", "parameters")))
|
bad_args = list(
|
||||||
|
filter(expression.args.get, ("position", "occurrence", "parameters", "modifiers"))
|
||||||
|
)
|
||||||
if bad_args:
|
if bad_args:
|
||||||
self.unsupported(f"REGEXP_REPLACE does not support the following arg(s): {bad_args}")
|
self.unsupported(f"REGEXP_REPLACE does not support the following arg(s): {bad_args}")
|
||||||
|
|
||||||
|
@ -756,15 +775,6 @@ def pivot_column_names(aggregations: t.List[exp.Expression], dialect: DialectTyp
|
||||||
return names
|
return names
|
||||||
|
|
||||||
|
|
||||||
def simplify_literal(expression: E) -> E:
|
|
||||||
if not isinstance(expression.expression, exp.Literal):
|
|
||||||
from sqlglot.optimizer.simplify import simplify
|
|
||||||
|
|
||||||
simplify(expression.expression)
|
|
||||||
|
|
||||||
return expression
|
|
||||||
|
|
||||||
|
|
||||||
def binary_from_function(expr_type: t.Type[B]) -> t.Callable[[t.List], B]:
|
def binary_from_function(expr_type: t.Type[B]) -> t.Callable[[t.List], B]:
|
||||||
return lambda args: expr_type(this=seq_get(args, 0), expression=seq_get(args, 1))
|
return lambda args: expr_type(this=seq_get(args, 0), expression=seq_get(args, 1))
|
||||||
|
|
||||||
|
@ -804,3 +814,21 @@ def move_insert_cte_sql(self: Generator, expression: exp.Insert) -> str:
|
||||||
expression = expression.copy()
|
expression = expression.copy()
|
||||||
expression.set("with", expression.expression.args["with"].pop())
|
expression.set("with", expression.expression.args["with"].pop())
|
||||||
return self.insert_sql(expression)
|
return self.insert_sql(expression)
|
||||||
|
|
||||||
|
|
||||||
|
def generatedasidentitycolumnconstraint_sql(
|
||||||
|
self: Generator, expression: exp.GeneratedAsIdentityColumnConstraint
|
||||||
|
) -> str:
|
||||||
|
start = self.sql(expression, "start") or "1"
|
||||||
|
increment = self.sql(expression, "increment") or "1"
|
||||||
|
return f"IDENTITY({start}, {increment})"
|
||||||
|
|
||||||
|
|
||||||
|
def arg_max_or_min_no_count(name: str) -> t.Callable[[Generator, exp.ArgMax | exp.ArgMin], str]:
|
||||||
|
def _arg_max_or_min_sql(self: Generator, expression: exp.ArgMax | exp.ArgMin) -> str:
|
||||||
|
if expression.args.get("count"):
|
||||||
|
self.unsupported(f"Only two arguments are supported in function {name}.")
|
||||||
|
|
||||||
|
return self.func(name, expression.this, expression.expression)
|
||||||
|
|
||||||
|
return _arg_max_or_min_sql
|
||||||
|
|
|
@ -6,6 +6,7 @@ from sqlglot import exp, generator, parser, tokens
|
||||||
from sqlglot.dialects.dialect import (
|
from sqlglot.dialects.dialect import (
|
||||||
Dialect,
|
Dialect,
|
||||||
approx_count_distinct_sql,
|
approx_count_distinct_sql,
|
||||||
|
arg_max_or_min_no_count,
|
||||||
arrow_json_extract_scalar_sql,
|
arrow_json_extract_scalar_sql,
|
||||||
arrow_json_extract_sql,
|
arrow_json_extract_sql,
|
||||||
binary_from_function,
|
binary_from_function,
|
||||||
|
@ -18,9 +19,9 @@ from sqlglot.dialects.dialect import (
|
||||||
no_comment_column_constraint_sql,
|
no_comment_column_constraint_sql,
|
||||||
no_properties_sql,
|
no_properties_sql,
|
||||||
no_safe_divide_sql,
|
no_safe_divide_sql,
|
||||||
|
no_timestamp_sql,
|
||||||
pivot_column_names,
|
pivot_column_names,
|
||||||
regexp_extract_sql,
|
regexp_extract_sql,
|
||||||
regexp_replace_sql,
|
|
||||||
rename_func,
|
rename_func,
|
||||||
str_position_sql,
|
str_position_sql,
|
||||||
str_to_time_sql,
|
str_to_time_sql,
|
||||||
|
@ -172,6 +173,12 @@ class DuckDB(Dialect):
|
||||||
this=seq_get(args, 0), expression=seq_get(args, 1), group=seq_get(args, 2)
|
this=seq_get(args, 0), expression=seq_get(args, 1), group=seq_get(args, 2)
|
||||||
),
|
),
|
||||||
"REGEXP_MATCHES": exp.RegexpLike.from_arg_list,
|
"REGEXP_MATCHES": exp.RegexpLike.from_arg_list,
|
||||||
|
"REGEXP_REPLACE": lambda args: exp.RegexpReplace(
|
||||||
|
this=seq_get(args, 0),
|
||||||
|
expression=seq_get(args, 1),
|
||||||
|
replacement=seq_get(args, 2),
|
||||||
|
modifiers=seq_get(args, 3),
|
||||||
|
),
|
||||||
"STRFTIME": format_time_lambda(exp.TimeToStr, "duckdb"),
|
"STRFTIME": format_time_lambda(exp.TimeToStr, "duckdb"),
|
||||||
"STRING_SPLIT": exp.Split.from_arg_list,
|
"STRING_SPLIT": exp.Split.from_arg_list,
|
||||||
"STRING_SPLIT_REGEX": exp.RegexpSplit.from_arg_list,
|
"STRING_SPLIT_REGEX": exp.RegexpSplit.from_arg_list,
|
||||||
|
@ -243,6 +250,8 @@ class DuckDB(Dialect):
|
||||||
if e.expressions and e.expressions[0].find(exp.Select)
|
if e.expressions and e.expressions[0].find(exp.Select)
|
||||||
else inline_array_sql(self, e),
|
else inline_array_sql(self, e),
|
||||||
exp.ArraySize: rename_func("ARRAY_LENGTH"),
|
exp.ArraySize: rename_func("ARRAY_LENGTH"),
|
||||||
|
exp.ArgMax: arg_max_or_min_no_count("ARG_MAX"),
|
||||||
|
exp.ArgMin: arg_max_or_min_no_count("ARG_MIN"),
|
||||||
exp.ArraySort: _array_sort_sql,
|
exp.ArraySort: _array_sort_sql,
|
||||||
exp.ArraySum: rename_func("LIST_SUM"),
|
exp.ArraySum: rename_func("LIST_SUM"),
|
||||||
exp.BitwiseXor: rename_func("XOR"),
|
exp.BitwiseXor: rename_func("XOR"),
|
||||||
|
@ -287,7 +296,13 @@ class DuckDB(Dialect):
|
||||||
exp.PercentileDisc: rename_func("QUANTILE_DISC"),
|
exp.PercentileDisc: rename_func("QUANTILE_DISC"),
|
||||||
exp.Properties: no_properties_sql,
|
exp.Properties: no_properties_sql,
|
||||||
exp.RegexpExtract: regexp_extract_sql,
|
exp.RegexpExtract: regexp_extract_sql,
|
||||||
exp.RegexpReplace: regexp_replace_sql,
|
exp.RegexpReplace: lambda self, e: self.func(
|
||||||
|
"REGEXP_REPLACE",
|
||||||
|
e.this,
|
||||||
|
e.expression,
|
||||||
|
e.args.get("replacement"),
|
||||||
|
e.args.get("modifiers"),
|
||||||
|
),
|
||||||
exp.RegexpLike: rename_func("REGEXP_MATCHES"),
|
exp.RegexpLike: rename_func("REGEXP_MATCHES"),
|
||||||
exp.RegexpSplit: rename_func("STR_SPLIT_REGEX"),
|
exp.RegexpSplit: rename_func("STR_SPLIT_REGEX"),
|
||||||
exp.SafeDivide: no_safe_divide_sql,
|
exp.SafeDivide: no_safe_divide_sql,
|
||||||
|
@ -298,6 +313,7 @@ class DuckDB(Dialect):
|
||||||
exp.StrToTime: str_to_time_sql,
|
exp.StrToTime: str_to_time_sql,
|
||||||
exp.StrToUnix: lambda self, e: f"EPOCH(STRPTIME({self.sql(e, 'this')}, {self.format_time(e)}))",
|
exp.StrToUnix: lambda self, e: f"EPOCH(STRPTIME({self.sql(e, 'this')}, {self.format_time(e)}))",
|
||||||
exp.Struct: _struct_sql,
|
exp.Struct: _struct_sql,
|
||||||
|
exp.Timestamp: no_timestamp_sql,
|
||||||
exp.TimestampTrunc: timestamptrunc_sql,
|
exp.TimestampTrunc: timestamptrunc_sql,
|
||||||
exp.TimeStrToDate: lambda self, e: f"CAST({self.sql(e, 'this')} AS DATE)",
|
exp.TimeStrToDate: lambda self, e: f"CAST({self.sql(e, 'this')} AS DATE)",
|
||||||
exp.TimeStrToTime: timestrtotime_sql,
|
exp.TimeStrToTime: timestrtotime_sql,
|
||||||
|
|
|
@ -6,6 +6,7 @@ from sqlglot import exp, generator, parser, tokens, transforms
|
||||||
from sqlglot.dialects.dialect import (
|
from sqlglot.dialects.dialect import (
|
||||||
Dialect,
|
Dialect,
|
||||||
approx_count_distinct_sql,
|
approx_count_distinct_sql,
|
||||||
|
arg_max_or_min_no_count,
|
||||||
create_with_partitions_sql,
|
create_with_partitions_sql,
|
||||||
format_time_lambda,
|
format_time_lambda,
|
||||||
if_sql,
|
if_sql,
|
||||||
|
@ -106,11 +107,16 @@ def _date_diff_sql(self: Hive.Generator, expression: exp.DateDiff) -> str:
|
||||||
sec_diff = f"UNIX_TIMESTAMP({left}) - UNIX_TIMESTAMP({right})"
|
sec_diff = f"UNIX_TIMESTAMP({left}) - UNIX_TIMESTAMP({right})"
|
||||||
return f"({sec_diff}){factor}" if factor else sec_diff
|
return f"({sec_diff}){factor}" if factor else sec_diff
|
||||||
|
|
||||||
sql_func = "MONTHS_BETWEEN" if unit in DIFF_MONTH_SWITCH else "DATEDIFF"
|
months_between = unit in DIFF_MONTH_SWITCH
|
||||||
|
sql_func = "MONTHS_BETWEEN" if months_between else "DATEDIFF"
|
||||||
_, multiplier = DATE_DELTA_INTERVAL.get(unit, ("", 1))
|
_, multiplier = DATE_DELTA_INTERVAL.get(unit, ("", 1))
|
||||||
multiplier_sql = f" / {multiplier}" if multiplier > 1 else ""
|
multiplier_sql = f" / {multiplier}" if multiplier > 1 else ""
|
||||||
diff_sql = f"{sql_func}({self.format_args(expression.this, expression.expression)})"
|
diff_sql = f"{sql_func}({self.format_args(expression.this, expression.expression)})"
|
||||||
|
|
||||||
|
if months_between:
|
||||||
|
# MONTHS_BETWEEN returns a float, so we need to truncate the fractional part
|
||||||
|
diff_sql = f"CAST({diff_sql} AS INT)"
|
||||||
|
|
||||||
return f"{diff_sql}{multiplier_sql}"
|
return f"{diff_sql}{multiplier_sql}"
|
||||||
|
|
||||||
|
|
||||||
|
@ -426,6 +432,8 @@ class Hive(Dialect):
|
||||||
exp.Property: _property_sql,
|
exp.Property: _property_sql,
|
||||||
exp.AnyValue: rename_func("FIRST"),
|
exp.AnyValue: rename_func("FIRST"),
|
||||||
exp.ApproxDistinct: approx_count_distinct_sql,
|
exp.ApproxDistinct: approx_count_distinct_sql,
|
||||||
|
exp.ArgMax: arg_max_or_min_no_count("MAX_BY"),
|
||||||
|
exp.ArgMin: arg_max_or_min_no_count("MIN_BY"),
|
||||||
exp.ArrayConcat: rename_func("CONCAT"),
|
exp.ArrayConcat: rename_func("CONCAT"),
|
||||||
exp.ArrayJoin: lambda self, e: self.func("CONCAT_WS", e.expression, e.this),
|
exp.ArrayJoin: lambda self, e: self.func("CONCAT_WS", e.expression, e.this),
|
||||||
exp.ArraySize: rename_func("SIZE"),
|
exp.ArraySize: rename_func("SIZE"),
|
||||||
|
|
|
@ -21,7 +21,6 @@ from sqlglot.dialects.dialect import (
|
||||||
no_trycast_sql,
|
no_trycast_sql,
|
||||||
parse_date_delta_with_interval,
|
parse_date_delta_with_interval,
|
||||||
rename_func,
|
rename_func,
|
||||||
simplify_literal,
|
|
||||||
strposition_to_locate_sql,
|
strposition_to_locate_sql,
|
||||||
)
|
)
|
||||||
from sqlglot.helper import seq_get
|
from sqlglot.helper import seq_get
|
||||||
|
@ -689,6 +688,8 @@ class MySQL(Dialect):
|
||||||
|
|
||||||
LIMIT_FETCH = "LIMIT"
|
LIMIT_FETCH = "LIMIT"
|
||||||
|
|
||||||
|
LIMIT_ONLY_LITERALS = True
|
||||||
|
|
||||||
# MySQL doesn't support many datatypes in cast.
|
# MySQL doesn't support many datatypes in cast.
|
||||||
# https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#function_cast
|
# https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#function_cast
|
||||||
CAST_MAPPING = {
|
CAST_MAPPING = {
|
||||||
|
@ -712,16 +713,6 @@ class MySQL(Dialect):
|
||||||
result = f"{result} UNSIGNED"
|
result = f"{result} UNSIGNED"
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def limit_sql(self, expression: exp.Limit, top: bool = False) -> str:
|
|
||||||
# MySQL requires simple literal values for its LIMIT clause.
|
|
||||||
expression = simplify_literal(expression.copy())
|
|
||||||
return super().limit_sql(expression, top=top)
|
|
||||||
|
|
||||||
def offset_sql(self, expression: exp.Offset) -> str:
|
|
||||||
# MySQL requires simple literal values for its OFFSET clause.
|
|
||||||
expression = simplify_literal(expression.copy())
|
|
||||||
return super().offset_sql(expression)
|
|
||||||
|
|
||||||
def xor_sql(self, expression: exp.Xor) -> str:
|
def xor_sql(self, expression: exp.Xor) -> str:
|
||||||
if expression.expressions:
|
if expression.expressions:
|
||||||
return self.expressions(expression, sep=" XOR ")
|
return self.expressions(expression, sep=" XOR ")
|
||||||
|
|
|
@ -20,7 +20,6 @@ from sqlglot.dialects.dialect import (
|
||||||
no_trycast_sql,
|
no_trycast_sql,
|
||||||
parse_timestamp_trunc,
|
parse_timestamp_trunc,
|
||||||
rename_func,
|
rename_func,
|
||||||
simplify_literal,
|
|
||||||
str_position_sql,
|
str_position_sql,
|
||||||
struct_extract_sql,
|
struct_extract_sql,
|
||||||
timestamptrunc_sql,
|
timestamptrunc_sql,
|
||||||
|
@ -49,7 +48,7 @@ def _date_add_sql(kind: str) -> t.Callable[[Postgres.Generator, exp.DateAdd | ex
|
||||||
this = self.sql(expression, "this")
|
this = self.sql(expression, "this")
|
||||||
unit = expression.args.get("unit")
|
unit = expression.args.get("unit")
|
||||||
|
|
||||||
expression = simplify_literal(expression).expression
|
expression = self._simplify_unless_literal(expression.expression)
|
||||||
if not isinstance(expression, exp.Literal):
|
if not isinstance(expression, exp.Literal):
|
||||||
self.unsupported("Cannot add non literal")
|
self.unsupported("Cannot add non literal")
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@ from sqlglot.dialects.dialect import (
|
||||||
no_ilike_sql,
|
no_ilike_sql,
|
||||||
no_pivot_sql,
|
no_pivot_sql,
|
||||||
no_safe_divide_sql,
|
no_safe_divide_sql,
|
||||||
|
no_timestamp_sql,
|
||||||
regexp_extract_sql,
|
regexp_extract_sql,
|
||||||
rename_func,
|
rename_func,
|
||||||
right_to_substring_sql,
|
right_to_substring_sql,
|
||||||
|
@ -69,9 +70,10 @@ def _schema_sql(self: Presto.Generator, expression: exp.Schema) -> str:
|
||||||
|
|
||||||
if expression.parent:
|
if expression.parent:
|
||||||
for schema in expression.parent.find_all(exp.Schema):
|
for schema in expression.parent.find_all(exp.Schema):
|
||||||
if isinstance(schema.parent, exp.Property):
|
column_defs = schema.find_all(exp.ColumnDef)
|
||||||
|
if column_defs and isinstance(schema.parent, exp.Property):
|
||||||
expression = expression.copy()
|
expression = expression.copy()
|
||||||
expression.expressions.extend(schema.expressions)
|
expression.expressions.extend(column_defs)
|
||||||
|
|
||||||
return self.schema_sql(expression)
|
return self.schema_sql(expression)
|
||||||
|
|
||||||
|
@ -252,6 +254,7 @@ class Presto(Dialect):
|
||||||
TZ_TO_WITH_TIME_ZONE = True
|
TZ_TO_WITH_TIME_ZONE = True
|
||||||
NVL2_SUPPORTED = False
|
NVL2_SUPPORTED = False
|
||||||
STRUCT_DELIMITER = ("(", ")")
|
STRUCT_DELIMITER = ("(", ")")
|
||||||
|
LIMIT_ONLY_LITERALS = True
|
||||||
|
|
||||||
PROPERTIES_LOCATION = {
|
PROPERTIES_LOCATION = {
|
||||||
**generator.Generator.PROPERTIES_LOCATION,
|
**generator.Generator.PROPERTIES_LOCATION,
|
||||||
|
@ -277,6 +280,8 @@ class Presto(Dialect):
|
||||||
exp.AnyValue: rename_func("ARBITRARY"),
|
exp.AnyValue: rename_func("ARBITRARY"),
|
||||||
exp.ApproxDistinct: _approx_distinct_sql,
|
exp.ApproxDistinct: _approx_distinct_sql,
|
||||||
exp.ApproxQuantile: rename_func("APPROX_PERCENTILE"),
|
exp.ApproxQuantile: rename_func("APPROX_PERCENTILE"),
|
||||||
|
exp.ArgMax: rename_func("MAX_BY"),
|
||||||
|
exp.ArgMin: rename_func("MIN_BY"),
|
||||||
exp.Array: lambda self, e: f"ARRAY[{self.expressions(e, flat=True)}]",
|
exp.Array: lambda self, e: f"ARRAY[{self.expressions(e, flat=True)}]",
|
||||||
exp.ArrayConcat: rename_func("CONCAT"),
|
exp.ArrayConcat: rename_func("CONCAT"),
|
||||||
exp.ArrayContains: rename_func("CONTAINS"),
|
exp.ArrayContains: rename_func("CONTAINS"),
|
||||||
|
@ -348,6 +353,7 @@ class Presto(Dialect):
|
||||||
exp.StrToUnix: lambda self, e: f"TO_UNIXTIME(DATE_PARSE({self.sql(e, 'this')}, {self.format_time(e)}))",
|
exp.StrToUnix: lambda self, e: f"TO_UNIXTIME(DATE_PARSE({self.sql(e, 'this')}, {self.format_time(e)}))",
|
||||||
exp.StructExtract: struct_extract_sql,
|
exp.StructExtract: struct_extract_sql,
|
||||||
exp.Table: transforms.preprocess([_unnest_sequence]),
|
exp.Table: transforms.preprocess([_unnest_sequence]),
|
||||||
|
exp.Timestamp: no_timestamp_sql,
|
||||||
exp.TimestampTrunc: timestamptrunc_sql,
|
exp.TimestampTrunc: timestamptrunc_sql,
|
||||||
exp.TimeStrToDate: timestrtotime_sql,
|
exp.TimeStrToDate: timestrtotime_sql,
|
||||||
exp.TimeStrToTime: timestrtotime_sql,
|
exp.TimeStrToTime: timestrtotime_sql,
|
||||||
|
@ -367,7 +373,6 @@ class Presto(Dialect):
|
||||||
exp.WithinGroup: transforms.preprocess(
|
exp.WithinGroup: transforms.preprocess(
|
||||||
[transforms.remove_within_group_for_percentiles]
|
[transforms.remove_within_group_for_percentiles]
|
||||||
),
|
),
|
||||||
exp.Timestamp: transforms.preprocess([transforms.timestamp_to_cast]),
|
|
||||||
exp.Xor: bool_xor_sql,
|
exp.Xor: bool_xor_sql,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -418,3 +423,15 @@ class Presto(Dialect):
|
||||||
self.sql(expression, "offset"),
|
self.sql(expression, "offset"),
|
||||||
self.sql(limit),
|
self.sql(limit),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
def create_sql(self, expression: exp.Create) -> str:
|
||||||
|
"""
|
||||||
|
Presto doesn't support CREATE VIEW with expressions (ex: `CREATE VIEW x (cola)` then `(cola)` is the expression),
|
||||||
|
so we need to remove them
|
||||||
|
"""
|
||||||
|
kind = expression.args["kind"]
|
||||||
|
schema = expression.this
|
||||||
|
if kind == "VIEW" and schema.expressions:
|
||||||
|
expression = expression.copy()
|
||||||
|
expression.this.set("expressions", None)
|
||||||
|
return super().create_sql(expression)
|
||||||
|
|
|
@ -6,6 +6,7 @@ from sqlglot import exp, transforms
|
||||||
from sqlglot.dialects.dialect import (
|
from sqlglot.dialects.dialect import (
|
||||||
concat_to_dpipe_sql,
|
concat_to_dpipe_sql,
|
||||||
concat_ws_to_dpipe_sql,
|
concat_ws_to_dpipe_sql,
|
||||||
|
generatedasidentitycolumnconstraint_sql,
|
||||||
rename_func,
|
rename_func,
|
||||||
ts_or_ds_to_date_sql,
|
ts_or_ds_to_date_sql,
|
||||||
)
|
)
|
||||||
|
@ -171,8 +172,10 @@ class Redshift(Postgres):
|
||||||
exp.DistKeyProperty: lambda self, e: f"DISTKEY({e.name})",
|
exp.DistKeyProperty: lambda self, e: f"DISTKEY({e.name})",
|
||||||
exp.DistStyleProperty: lambda self, e: self.naked_property(e),
|
exp.DistStyleProperty: lambda self, e: self.naked_property(e),
|
||||||
exp.FromBase: rename_func("STRTOL"),
|
exp.FromBase: rename_func("STRTOL"),
|
||||||
|
exp.GeneratedAsIdentityColumnConstraint: generatedasidentitycolumnconstraint_sql,
|
||||||
exp.JSONExtract: _json_sql,
|
exp.JSONExtract: _json_sql,
|
||||||
exp.JSONExtractScalar: _json_sql,
|
exp.JSONExtractScalar: _json_sql,
|
||||||
|
exp.ParseJSON: rename_func("JSON_PARSE"),
|
||||||
exp.SafeConcat: concat_to_dpipe_sql,
|
exp.SafeConcat: concat_to_dpipe_sql,
|
||||||
exp.Select: transforms.preprocess(
|
exp.Select: transforms.preprocess(
|
||||||
[transforms.eliminate_distinct_on, transforms.eliminate_semi_and_anti_joins]
|
[transforms.eliminate_distinct_on, transforms.eliminate_semi_and_anti_joins]
|
||||||
|
|
|
@ -262,6 +262,7 @@ class Snowflake(Dialect):
|
||||||
),
|
),
|
||||||
"DATEDIFF": _parse_datediff,
|
"DATEDIFF": _parse_datediff,
|
||||||
"DIV0": _div0_to_if,
|
"DIV0": _div0_to_if,
|
||||||
|
"FLATTEN": exp.Explode.from_arg_list,
|
||||||
"IFF": exp.If.from_arg_list,
|
"IFF": exp.If.from_arg_list,
|
||||||
"LISTAGG": exp.GroupConcat.from_arg_list,
|
"LISTAGG": exp.GroupConcat.from_arg_list,
|
||||||
"NULLIFZERO": _nullifzero_to_if,
|
"NULLIFZERO": _nullifzero_to_if,
|
||||||
|
@ -308,6 +309,7 @@ class Snowflake(Dialect):
|
||||||
expressions=self._parse_csv(self._parse_id_var),
|
expressions=self._parse_csv(self._parse_id_var),
|
||||||
unset=True,
|
unset=True,
|
||||||
),
|
),
|
||||||
|
"SWAP": lambda self: self._parse_alter_table_swap(),
|
||||||
}
|
}
|
||||||
|
|
||||||
STATEMENT_PARSERS = {
|
STATEMENT_PARSERS = {
|
||||||
|
@ -325,6 +327,22 @@ class Snowflake(Dialect):
|
||||||
TokenType.MOD,
|
TokenType.MOD,
|
||||||
TokenType.SLASH,
|
TokenType.SLASH,
|
||||||
}
|
}
|
||||||
|
FLATTEN_COLUMNS = ["SEQ", "KEY", "PATH", "INDEX", "VALUE", "THIS"]
|
||||||
|
|
||||||
|
def _parse_lateral(self) -> t.Optional[exp.Lateral]:
|
||||||
|
lateral = super()._parse_lateral()
|
||||||
|
if not lateral:
|
||||||
|
return lateral
|
||||||
|
|
||||||
|
if isinstance(lateral.this, exp.Explode):
|
||||||
|
table_alias = lateral.args.get("alias")
|
||||||
|
columns = [exp.to_identifier(col) for col in self.FLATTEN_COLUMNS]
|
||||||
|
if table_alias and not table_alias.args.get("columns"):
|
||||||
|
table_alias.set("columns", columns)
|
||||||
|
elif not table_alias:
|
||||||
|
exp.alias_(lateral, "_flattened", table=columns, copy=False)
|
||||||
|
|
||||||
|
return lateral
|
||||||
|
|
||||||
def _parse_table_parts(self, schema: bool = False) -> exp.Table:
|
def _parse_table_parts(self, schema: bool = False) -> exp.Table:
|
||||||
# https://docs.snowflake.com/en/user-guide/querying-stage
|
# https://docs.snowflake.com/en/user-guide/querying-stage
|
||||||
|
@ -389,6 +407,10 @@ class Snowflake(Dialect):
|
||||||
|
|
||||||
return self.expression(exp.Show, this=this, scope=scope, scope_kind=scope_kind)
|
return self.expression(exp.Show, this=this, scope=scope, scope_kind=scope_kind)
|
||||||
|
|
||||||
|
def _parse_alter_table_swap(self) -> exp.SwapTable:
|
||||||
|
self._match_text_seq("WITH")
|
||||||
|
return self.expression(exp.SwapTable, this=self._parse_table(schema=True))
|
||||||
|
|
||||||
class Tokenizer(tokens.Tokenizer):
|
class Tokenizer(tokens.Tokenizer):
|
||||||
STRING_ESCAPES = ["\\", "'"]
|
STRING_ESCAPES = ["\\", "'"]
|
||||||
HEX_STRINGS = [("x'", "'"), ("X'", "'")]
|
HEX_STRINGS = [("x'", "'"), ("X'", "'")]
|
||||||
|
@ -438,6 +460,8 @@ class Snowflake(Dialect):
|
||||||
|
|
||||||
TRANSFORMS = {
|
TRANSFORMS = {
|
||||||
**generator.Generator.TRANSFORMS,
|
**generator.Generator.TRANSFORMS,
|
||||||
|
exp.ArgMax: rename_func("MAX_BY"),
|
||||||
|
exp.ArgMin: rename_func("MIN_BY"),
|
||||||
exp.Array: inline_array_sql,
|
exp.Array: inline_array_sql,
|
||||||
exp.ArrayConcat: rename_func("ARRAY_CAT"),
|
exp.ArrayConcat: rename_func("ARRAY_CAT"),
|
||||||
exp.ArrayJoin: rename_func("ARRAY_TO_STRING"),
|
exp.ArrayJoin: rename_func("ARRAY_TO_STRING"),
|
||||||
|
@ -451,7 +475,10 @@ class Snowflake(Dialect):
|
||||||
),
|
),
|
||||||
exp.DateStrToDate: datestrtodate_sql,
|
exp.DateStrToDate: datestrtodate_sql,
|
||||||
exp.DataType: _datatype_sql,
|
exp.DataType: _datatype_sql,
|
||||||
|
exp.DayOfMonth: rename_func("DAYOFMONTH"),
|
||||||
exp.DayOfWeek: rename_func("DAYOFWEEK"),
|
exp.DayOfWeek: rename_func("DAYOFWEEK"),
|
||||||
|
exp.DayOfYear: rename_func("DAYOFYEAR"),
|
||||||
|
exp.Explode: rename_func("FLATTEN"),
|
||||||
exp.Extract: rename_func("DATE_PART"),
|
exp.Extract: rename_func("DATE_PART"),
|
||||||
exp.GenerateSeries: lambda self, e: self.func(
|
exp.GenerateSeries: lambda self, e: self.func(
|
||||||
"ARRAY_GENERATE_RANGE", e.args["start"], e.args["end"] + 1, e.args.get("step")
|
"ARRAY_GENERATE_RANGE", e.args["start"], e.args["end"] + 1, e.args.get("step")
|
||||||
|
@ -520,6 +547,12 @@ class Snowflake(Dialect):
|
||||||
exp.VolatileProperty: exp.Properties.Location.UNSUPPORTED,
|
exp.VolatileProperty: exp.Properties.Location.UNSUPPORTED,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def log_sql(self, expression: exp.Log) -> str:
|
||||||
|
if not expression.expression:
|
||||||
|
return self.func("LN", expression.this)
|
||||||
|
|
||||||
|
return super().log_sql(expression)
|
||||||
|
|
||||||
def unnest_sql(self, expression: exp.Unnest) -> str:
|
def unnest_sql(self, expression: exp.Unnest) -> str:
|
||||||
selects = ["value"]
|
selects = ["value"]
|
||||||
unnest_alias = expression.args.get("alias")
|
unnest_alias = expression.args.get("alias")
|
||||||
|
@ -596,3 +629,7 @@ class Snowflake(Dialect):
|
||||||
increment = expression.args.get("increment")
|
increment = expression.args.get("increment")
|
||||||
increment = f" INCREMENT {increment}" if increment else ""
|
increment = f" INCREMENT {increment}" if increment else ""
|
||||||
return f"AUTOINCREMENT{start}{increment}"
|
return f"AUTOINCREMENT{start}{increment}"
|
||||||
|
|
||||||
|
def swaptable_sql(self, expression: exp.SwapTable) -> str:
|
||||||
|
this = self.sql(expression, "this")
|
||||||
|
return f"SWAP WITH {this}"
|
||||||
|
|
|
@ -3,7 +3,7 @@ from __future__ import annotations
|
||||||
import typing as t
|
import typing as t
|
||||||
|
|
||||||
from sqlglot import exp, generator, parser, tokens, transforms
|
from sqlglot import exp, generator, parser, tokens, transforms
|
||||||
from sqlglot.dialects.dialect import Dialect, max_or_greatest, min_or_least
|
from sqlglot.dialects.dialect import Dialect, max_or_greatest, min_or_least, rename_func
|
||||||
from sqlglot.tokens import TokenType
|
from sqlglot.tokens import TokenType
|
||||||
|
|
||||||
|
|
||||||
|
@ -150,6 +150,7 @@ class Teradata(Dialect):
|
||||||
return self.expression(exp.RangeN, this=this, expressions=expressions, each=each)
|
return self.expression(exp.RangeN, this=this, expressions=expressions, each=each)
|
||||||
|
|
||||||
class Generator(generator.Generator):
|
class Generator(generator.Generator):
|
||||||
|
LIMIT_IS_TOP = True
|
||||||
JOIN_HINTS = False
|
JOIN_HINTS = False
|
||||||
TABLE_HINTS = False
|
TABLE_HINTS = False
|
||||||
QUERY_HINTS = False
|
QUERY_HINTS = False
|
||||||
|
@ -168,6 +169,8 @@ class Teradata(Dialect):
|
||||||
|
|
||||||
TRANSFORMS = {
|
TRANSFORMS = {
|
||||||
**generator.Generator.TRANSFORMS,
|
**generator.Generator.TRANSFORMS,
|
||||||
|
exp.ArgMax: rename_func("MAX_BY"),
|
||||||
|
exp.ArgMin: rename_func("MIN_BY"),
|
||||||
exp.Max: max_or_greatest,
|
exp.Max: max_or_greatest,
|
||||||
exp.Min: min_or_least,
|
exp.Min: min_or_least,
|
||||||
exp.Select: transforms.preprocess(
|
exp.Select: transforms.preprocess(
|
||||||
|
|
|
@ -8,6 +8,7 @@ from sqlglot import exp, generator, parser, tokens, transforms
|
||||||
from sqlglot.dialects.dialect import (
|
from sqlglot.dialects.dialect import (
|
||||||
Dialect,
|
Dialect,
|
||||||
any_value_to_max_sql,
|
any_value_to_max_sql,
|
||||||
|
generatedasidentitycolumnconstraint_sql,
|
||||||
max_or_greatest,
|
max_or_greatest,
|
||||||
min_or_least,
|
min_or_least,
|
||||||
move_insert_cte_sql,
|
move_insert_cte_sql,
|
||||||
|
@ -603,6 +604,7 @@ class TSQL(Dialect):
|
||||||
exp.DataType.Type.DATETIME: "DATETIME2",
|
exp.DataType.Type.DATETIME: "DATETIME2",
|
||||||
exp.DataType.Type.DOUBLE: "FLOAT",
|
exp.DataType.Type.DOUBLE: "FLOAT",
|
||||||
exp.DataType.Type.INT: "INTEGER",
|
exp.DataType.Type.INT: "INTEGER",
|
||||||
|
exp.DataType.Type.TEXT: "VARCHAR(MAX)",
|
||||||
exp.DataType.Type.TIMESTAMP: "DATETIME2",
|
exp.DataType.Type.TIMESTAMP: "DATETIME2",
|
||||||
exp.DataType.Type.TIMESTAMPTZ: "DATETIMEOFFSET",
|
exp.DataType.Type.TIMESTAMPTZ: "DATETIMEOFFSET",
|
||||||
exp.DataType.Type.VARIANT: "SQL_VARIANT",
|
exp.DataType.Type.VARIANT: "SQL_VARIANT",
|
||||||
|
@ -617,6 +619,7 @@ class TSQL(Dialect):
|
||||||
exp.CurrentDate: rename_func("GETDATE"),
|
exp.CurrentDate: rename_func("GETDATE"),
|
||||||
exp.CurrentTimestamp: rename_func("GETDATE"),
|
exp.CurrentTimestamp: rename_func("GETDATE"),
|
||||||
exp.Extract: rename_func("DATEPART"),
|
exp.Extract: rename_func("DATEPART"),
|
||||||
|
exp.GeneratedAsIdentityColumnConstraint: generatedasidentitycolumnconstraint_sql,
|
||||||
exp.GroupConcat: _string_agg_sql,
|
exp.GroupConcat: _string_agg_sql,
|
||||||
exp.If: rename_func("IIF"),
|
exp.If: rename_func("IIF"),
|
||||||
exp.Insert: move_insert_cte_sql,
|
exp.Insert: move_insert_cte_sql,
|
||||||
|
@ -778,11 +781,3 @@ class TSQL(Dialect):
|
||||||
this = self.sql(expression, "this")
|
this = self.sql(expression, "this")
|
||||||
expressions = self.expressions(expression, flat=True, sep=" ")
|
expressions = self.expressions(expression, flat=True, sep=" ")
|
||||||
return f"CONSTRAINT {this} {expressions}"
|
return f"CONSTRAINT {this} {expressions}"
|
||||||
|
|
||||||
# https://learn.microsoft.com/en-us/answers/questions/448821/create-table-in-sql-server
|
|
||||||
def generatedasidentitycolumnconstraint_sql(
|
|
||||||
self, expression: exp.GeneratedAsIdentityColumnConstraint
|
|
||||||
) -> str:
|
|
||||||
start = self.sql(expression, "start") or "1"
|
|
||||||
increment = self.sql(expression, "increment") or "1"
|
|
||||||
return f"IDENTITY({start}, {increment})"
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ from enum import auto
|
||||||
from functools import reduce
|
from functools import reduce
|
||||||
|
|
||||||
from sqlglot._typing import E
|
from sqlglot._typing import E
|
||||||
from sqlglot.errors import ParseError
|
from sqlglot.errors import ErrorLevel, ParseError
|
||||||
from sqlglot.helper import (
|
from sqlglot.helper import (
|
||||||
AutoName,
|
AutoName,
|
||||||
camel_to_snake_case,
|
camel_to_snake_case,
|
||||||
|
@ -120,14 +120,14 @@ class Expression(metaclass=_Expression):
|
||||||
return hash((self.__class__, self.hashable_args))
|
return hash((self.__class__, self.hashable_args))
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def this(self):
|
def this(self) -> t.Any:
|
||||||
"""
|
"""
|
||||||
Retrieves the argument with key "this".
|
Retrieves the argument with key "this".
|
||||||
"""
|
"""
|
||||||
return self.args.get("this")
|
return self.args.get("this")
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def expression(self):
|
def expression(self) -> t.Any:
|
||||||
"""
|
"""
|
||||||
Retrieves the argument with key "expression".
|
Retrieves the argument with key "expression".
|
||||||
"""
|
"""
|
||||||
|
@ -1235,6 +1235,10 @@ class RenameTable(Expression):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class SwapTable(Expression):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class Comment(Expression):
|
class Comment(Expression):
|
||||||
arg_types = {"this": True, "kind": True, "expression": True, "exists": False}
|
arg_types = {"this": True, "kind": True, "expression": True, "exists": False}
|
||||||
|
|
||||||
|
@ -1979,7 +1983,7 @@ class ChecksumProperty(Property):
|
||||||
|
|
||||||
|
|
||||||
class CollateProperty(Property):
|
class CollateProperty(Property):
|
||||||
arg_types = {"this": True}
|
arg_types = {"this": True, "default": False}
|
||||||
|
|
||||||
|
|
||||||
class CopyGrantsProperty(Property):
|
class CopyGrantsProperty(Property):
|
||||||
|
@ -2607,11 +2611,11 @@ class Union(Subqueryable):
|
||||||
return self.this.unnest().selects
|
return self.this.unnest().selects
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def left(self):
|
def left(self) -> Expression:
|
||||||
return self.this
|
return self.this
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def right(self):
|
def right(self) -> Expression:
|
||||||
return self.expression
|
return self.expression
|
||||||
|
|
||||||
|
|
||||||
|
@ -3700,7 +3704,9 @@ class DataType(Expression):
|
||||||
return DataType(this=DataType.Type.UNKNOWN, **kwargs)
|
return DataType(this=DataType.Type.UNKNOWN, **kwargs)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
data_type_exp = parse_one(dtype, read=dialect, into=DataType)
|
data_type_exp = parse_one(
|
||||||
|
dtype, read=dialect, into=DataType, error_level=ErrorLevel.IGNORE
|
||||||
|
)
|
||||||
except ParseError:
|
except ParseError:
|
||||||
if udt:
|
if udt:
|
||||||
return DataType(this=DataType.Type.USERDEFINED, kind=dtype, **kwargs)
|
return DataType(this=DataType.Type.USERDEFINED, kind=dtype, **kwargs)
|
||||||
|
@ -3804,11 +3810,11 @@ class Binary(Condition):
|
||||||
arg_types = {"this": True, "expression": True}
|
arg_types = {"this": True, "expression": True}
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def left(self):
|
def left(self) -> Expression:
|
||||||
return self.this
|
return self.this
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def right(self):
|
def right(self) -> Expression:
|
||||||
return self.expression
|
return self.expression
|
||||||
|
|
||||||
|
|
||||||
|
@ -4063,10 +4069,25 @@ class TimeUnit(Expression):
|
||||||
|
|
||||||
arg_types = {"unit": False}
|
arg_types = {"unit": False}
|
||||||
|
|
||||||
|
UNABBREVIATED_UNIT_NAME = {
|
||||||
|
"d": "day",
|
||||||
|
"h": "hour",
|
||||||
|
"m": "minute",
|
||||||
|
"ms": "millisecond",
|
||||||
|
"ns": "nanosecond",
|
||||||
|
"q": "quarter",
|
||||||
|
"s": "second",
|
||||||
|
"us": "microsecond",
|
||||||
|
"w": "week",
|
||||||
|
"y": "year",
|
||||||
|
}
|
||||||
|
|
||||||
|
VAR_LIKE = (Column, Literal, Var)
|
||||||
|
|
||||||
def __init__(self, **args):
|
def __init__(self, **args):
|
||||||
unit = args.get("unit")
|
unit = args.get("unit")
|
||||||
if isinstance(unit, (Column, Literal)):
|
if isinstance(unit, self.VAR_LIKE):
|
||||||
args["unit"] = Var(this=unit.name)
|
args["unit"] = Var(this=self.UNABBREVIATED_UNIT_NAME.get(unit.name) or unit.name)
|
||||||
elif isinstance(unit, Week):
|
elif isinstance(unit, Week):
|
||||||
unit.set("this", Var(this=unit.this.name))
|
unit.set("this", Var(this=unit.this.name))
|
||||||
|
|
||||||
|
@ -4168,6 +4189,24 @@ class Abs(Func):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class ArgMax(AggFunc):
|
||||||
|
arg_types = {"this": True, "expression": True, "count": False}
|
||||||
|
_sql_names = ["ARG_MAX", "ARGMAX", "MAX_BY"]
|
||||||
|
|
||||||
|
|
||||||
|
class ArgMin(AggFunc):
|
||||||
|
arg_types = {"this": True, "expression": True, "count": False}
|
||||||
|
_sql_names = ["ARG_MIN", "ARGMIN", "MIN_BY"]
|
||||||
|
|
||||||
|
|
||||||
|
class ApproxTopK(AggFunc):
|
||||||
|
arg_types = {"this": True, "expression": False, "counters": False}
|
||||||
|
|
||||||
|
|
||||||
|
class Flatten(Func):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
# https://spark.apache.org/docs/latest/api/sql/index.html#transform
|
# https://spark.apache.org/docs/latest/api/sql/index.html#transform
|
||||||
class Transform(Func):
|
class Transform(Func):
|
||||||
arg_types = {"this": True, "expression": True}
|
arg_types = {"this": True, "expression": True}
|
||||||
|
@ -4540,8 +4579,10 @@ class Exp(Func):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
# https://docs.snowflake.com/en/sql-reference/functions/flatten
|
||||||
class Explode(Func):
|
class Explode(Func):
|
||||||
pass
|
arg_types = {"this": True, "expressions": False}
|
||||||
|
is_var_len_args = True
|
||||||
|
|
||||||
|
|
||||||
class ExplodeOuter(Explode):
|
class ExplodeOuter(Explode):
|
||||||
|
@ -4698,6 +4739,8 @@ class JSONArrayContains(Binary, Predicate, Func):
|
||||||
class ParseJSON(Func):
|
class ParseJSON(Func):
|
||||||
# BigQuery, Snowflake have PARSE_JSON, Presto has JSON_PARSE
|
# BigQuery, Snowflake have PARSE_JSON, Presto has JSON_PARSE
|
||||||
_sql_names = ["PARSE_JSON", "JSON_PARSE"]
|
_sql_names = ["PARSE_JSON", "JSON_PARSE"]
|
||||||
|
arg_types = {"this": True, "expressions": False}
|
||||||
|
is_var_len_args = True
|
||||||
|
|
||||||
|
|
||||||
class Least(Func):
|
class Least(Func):
|
||||||
|
@ -4758,6 +4801,16 @@ class Lower(Func):
|
||||||
class Map(Func):
|
class Map(Func):
|
||||||
arg_types = {"keys": False, "values": False}
|
arg_types = {"keys": False, "values": False}
|
||||||
|
|
||||||
|
@property
|
||||||
|
def keys(self) -> t.List[Expression]:
|
||||||
|
keys = self.args.get("keys")
|
||||||
|
return keys.expressions if keys else []
|
||||||
|
|
||||||
|
@property
|
||||||
|
def values(self) -> t.List[Expression]:
|
||||||
|
values = self.args.get("values")
|
||||||
|
return values.expressions if values else []
|
||||||
|
|
||||||
|
|
||||||
class MapFromEntries(Func):
|
class MapFromEntries(Func):
|
||||||
pass
|
pass
|
||||||
|
@ -4870,6 +4923,7 @@ class RegexpReplace(Func):
|
||||||
"position": False,
|
"position": False,
|
||||||
"occurrence": False,
|
"occurrence": False,
|
||||||
"parameters": False,
|
"parameters": False,
|
||||||
|
"modifiers": False,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -4877,7 +4931,7 @@ class RegexpLike(Binary, Func):
|
||||||
arg_types = {"this": True, "expression": True, "flag": False}
|
arg_types = {"this": True, "expression": True, "flag": False}
|
||||||
|
|
||||||
|
|
||||||
class RegexpILike(Func):
|
class RegexpILike(Binary, Func):
|
||||||
arg_types = {"this": True, "expression": True, "flag": False}
|
arg_types = {"this": True, "expression": True, "flag": False}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,9 @@ from sqlglot.helper import apply_index_offset, csv, seq_get
|
||||||
from sqlglot.time import format_time
|
from sqlglot.time import format_time
|
||||||
from sqlglot.tokens import Tokenizer, TokenType
|
from sqlglot.tokens import Tokenizer, TokenType
|
||||||
|
|
||||||
|
if t.TYPE_CHECKING:
|
||||||
|
from sqlglot._typing import E
|
||||||
|
|
||||||
logger = logging.getLogger("sqlglot")
|
logger = logging.getLogger("sqlglot")
|
||||||
|
|
||||||
|
|
||||||
|
@ -141,6 +144,9 @@ class Generator:
|
||||||
# Whether or not limit and fetch are supported (possible values: "ALL", "LIMIT", "FETCH")
|
# Whether or not limit and fetch are supported (possible values: "ALL", "LIMIT", "FETCH")
|
||||||
LIMIT_FETCH = "ALL"
|
LIMIT_FETCH = "ALL"
|
||||||
|
|
||||||
|
# Whether or not limit and fetch allows expresions or just limits
|
||||||
|
LIMIT_ONLY_LITERALS = False
|
||||||
|
|
||||||
# Whether or not a table is allowed to be renamed with a db
|
# Whether or not a table is allowed to be renamed with a db
|
||||||
RENAME_TABLE_WITH_DB = True
|
RENAME_TABLE_WITH_DB = True
|
||||||
|
|
||||||
|
@ -341,6 +347,12 @@ class Generator:
|
||||||
exp.With,
|
exp.With,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Expressions that should not have their comments generated in maybe_comment
|
||||||
|
EXCLUDE_COMMENTS: t.Tuple[t.Type[exp.Expression], ...] = (
|
||||||
|
exp.Binary,
|
||||||
|
exp.Union,
|
||||||
|
)
|
||||||
|
|
||||||
# Expressions that can remain unwrapped when appearing in the context of an INTERVAL
|
# Expressions that can remain unwrapped when appearing in the context of an INTERVAL
|
||||||
UNWRAPPED_INTERVAL_VALUES: t.Tuple[t.Type[exp.Expression], ...] = (
|
UNWRAPPED_INTERVAL_VALUES: t.Tuple[t.Type[exp.Expression], ...] = (
|
||||||
exp.Column,
|
exp.Column,
|
||||||
|
@ -501,7 +513,7 @@ class Generator:
|
||||||
else None
|
else None
|
||||||
)
|
)
|
||||||
|
|
||||||
if not comments or isinstance(expression, exp.Binary):
|
if not comments or isinstance(expression, self.EXCLUDE_COMMENTS):
|
||||||
return sql
|
return sql
|
||||||
|
|
||||||
comments_sql = " ".join(
|
comments_sql = " ".join(
|
||||||
|
@ -879,6 +891,10 @@ class Generator:
|
||||||
alias = self.sql(expression, "this")
|
alias = self.sql(expression, "this")
|
||||||
columns = self.expressions(expression, key="columns", flat=True)
|
columns = self.expressions(expression, key="columns", flat=True)
|
||||||
columns = f"({columns})" if columns else ""
|
columns = f"({columns})" if columns else ""
|
||||||
|
|
||||||
|
if not alias and not self.UNNEST_COLUMN_ONLY:
|
||||||
|
alias = "_t"
|
||||||
|
|
||||||
return f"{alias}{columns}"
|
return f"{alias}{columns}"
|
||||||
|
|
||||||
def bitstring_sql(self, expression: exp.BitString) -> str:
|
def bitstring_sql(self, expression: exp.BitString) -> str:
|
||||||
|
@ -1611,9 +1627,6 @@ class Generator:
|
||||||
def lateral_sql(self, expression: exp.Lateral) -> str:
|
def lateral_sql(self, expression: exp.Lateral) -> str:
|
||||||
this = self.sql(expression, "this")
|
this = self.sql(expression, "this")
|
||||||
|
|
||||||
if isinstance(expression.this, exp.Subquery):
|
|
||||||
return f"LATERAL {this}"
|
|
||||||
|
|
||||||
if expression.args.get("view"):
|
if expression.args.get("view"):
|
||||||
alias = expression.args["alias"]
|
alias = expression.args["alias"]
|
||||||
columns = self.expressions(alias, key="columns", flat=True)
|
columns = self.expressions(alias, key="columns", flat=True)
|
||||||
|
@ -1629,18 +1642,19 @@ class Generator:
|
||||||
def limit_sql(self, expression: exp.Limit, top: bool = False) -> str:
|
def limit_sql(self, expression: exp.Limit, top: bool = False) -> str:
|
||||||
this = self.sql(expression, "this")
|
this = self.sql(expression, "this")
|
||||||
args = ", ".join(
|
args = ", ".join(
|
||||||
sql
|
self.sql(self._simplify_unless_literal(e) if self.LIMIT_ONLY_LITERALS else e)
|
||||||
for sql in (
|
for e in (expression.args.get(k) for k in ("offset", "expression"))
|
||||||
self.sql(expression, "offset"),
|
if e
|
||||||
self.sql(expression, "expression"),
|
|
||||||
)
|
|
||||||
if sql
|
|
||||||
)
|
)
|
||||||
return f"{this}{self.seg('TOP' if top else 'LIMIT')} {args}"
|
return f"{this}{self.seg('TOP' if top else 'LIMIT')} {args}"
|
||||||
|
|
||||||
def offset_sql(self, expression: exp.Offset) -> str:
|
def offset_sql(self, expression: exp.Offset) -> str:
|
||||||
this = self.sql(expression, "this")
|
this = self.sql(expression, "this")
|
||||||
return f"{this}{self.seg('OFFSET')} {self.sql(expression, 'expression')}"
|
expression = expression.expression
|
||||||
|
expression = (
|
||||||
|
self._simplify_unless_literal(expression) if self.LIMIT_ONLY_LITERALS else expression
|
||||||
|
)
|
||||||
|
return f"{this}{self.seg('OFFSET')} {self.sql(expression)}"
|
||||||
|
|
||||||
def setitem_sql(self, expression: exp.SetItem) -> str:
|
def setitem_sql(self, expression: exp.SetItem) -> str:
|
||||||
kind = self.sql(expression, "kind")
|
kind = self.sql(expression, "kind")
|
||||||
|
@ -1895,12 +1909,13 @@ class Generator:
|
||||||
|
|
||||||
def schema_sql(self, expression: exp.Schema) -> str:
|
def schema_sql(self, expression: exp.Schema) -> str:
|
||||||
this = self.sql(expression, "this")
|
this = self.sql(expression, "this")
|
||||||
this = f"{this} " if this else ""
|
|
||||||
sql = self.schema_columns_sql(expression)
|
sql = self.schema_columns_sql(expression)
|
||||||
return f"{this}{sql}"
|
return f"{this} {sql}" if this and sql else this or sql
|
||||||
|
|
||||||
def schema_columns_sql(self, expression: exp.Schema) -> str:
|
def schema_columns_sql(self, expression: exp.Schema) -> str:
|
||||||
|
if expression.expressions:
|
||||||
return f"({self.sep('')}{self.expressions(expression)}{self.seg(')', sep='')}"
|
return f"({self.sep('')}{self.expressions(expression)}{self.seg(')', sep='')}"
|
||||||
|
return ""
|
||||||
|
|
||||||
def star_sql(self, expression: exp.Star) -> str:
|
def star_sql(self, expression: exp.Star) -> str:
|
||||||
except_ = self.expressions(expression, key="except", flat=True)
|
except_ = self.expressions(expression, key="except", flat=True)
|
||||||
|
@ -2708,8 +2723,8 @@ class Generator:
|
||||||
self.unsupported(f"Unsupported property {expression.__class__.__name__}")
|
self.unsupported(f"Unsupported property {expression.__class__.__name__}")
|
||||||
return f"{property_name} {self.sql(expression, 'this')}"
|
return f"{property_name} {self.sql(expression, 'this')}"
|
||||||
|
|
||||||
def set_operation(self, expression: exp.Expression, op: str) -> str:
|
def set_operation(self, expression: exp.Union, op: str) -> str:
|
||||||
this = self.sql(expression, "this")
|
this = self.maybe_comment(self.sql(expression, "this"), comments=expression.comments)
|
||||||
op = self.seg(op)
|
op = self.seg(op)
|
||||||
return self.query_modifiers(
|
return self.query_modifiers(
|
||||||
expression, f"{this}{op}{self.sep()}{self.sql(expression, 'expression')}"
|
expression, f"{this}{op}{self.sep()}{self.sql(expression, 'expression')}"
|
||||||
|
@ -2912,6 +2927,14 @@ class Generator:
|
||||||
parameters = self.sql(expression, "params_struct")
|
parameters = self.sql(expression, "params_struct")
|
||||||
return self.func("PREDICT", model, table, parameters or None)
|
return self.func("PREDICT", model, table, parameters or None)
|
||||||
|
|
||||||
|
def _simplify_unless_literal(self, expression: E) -> E:
|
||||||
|
if not isinstance(expression, exp.Literal):
|
||||||
|
from sqlglot.optimizer.simplify import simplify
|
||||||
|
|
||||||
|
expression = simplify(expression.copy())
|
||||||
|
|
||||||
|
return expression
|
||||||
|
|
||||||
|
|
||||||
def cached_generator(
|
def cached_generator(
|
||||||
cache: t.Optional[t.Dict[int, str]] = None
|
cache: t.Optional[t.Dict[int, str]] = None
|
||||||
|
|
|
@ -112,17 +112,34 @@ def lineage(
|
||||||
column
|
column
|
||||||
if isinstance(column, int)
|
if isinstance(column, int)
|
||||||
else next(
|
else next(
|
||||||
|
(
|
||||||
i
|
i
|
||||||
for i, select in enumerate(scope.expression.selects)
|
for i, select in enumerate(scope.expression.selects)
|
||||||
if select.alias_or_name == column
|
if select.alias_or_name == column or select.is_star
|
||||||
|
),
|
||||||
|
-1, # mypy will not allow a None here, but a negative index should never be returned
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if index == -1:
|
||||||
|
raise ValueError(f"Could not find {column} in {scope.expression}")
|
||||||
|
|
||||||
for s in scope.union_scopes:
|
for s in scope.union_scopes:
|
||||||
to_node(index, scope=s, upstream=upstream)
|
to_node(index, scope=s, upstream=upstream)
|
||||||
|
|
||||||
return upstream
|
return upstream
|
||||||
|
|
||||||
|
subquery = select.unalias()
|
||||||
|
|
||||||
|
if isinstance(subquery, exp.Subquery):
|
||||||
|
upstream = upstream or Node(name="SUBQUERY", source=scope.expression, expression=select)
|
||||||
|
scope = t.cast(Scope, build_scope(subquery.unnest()))
|
||||||
|
|
||||||
|
for select in subquery.named_selects:
|
||||||
|
to_node(select, scope=scope, upstream=upstream)
|
||||||
|
|
||||||
|
return upstream
|
||||||
|
|
||||||
if isinstance(scope.expression, exp.Select):
|
if isinstance(scope.expression, exp.Select):
|
||||||
# For better ergonomics in our node labels, replace the full select with
|
# For better ergonomics in our node labels, replace the full select with
|
||||||
# a version that has only the column we care about.
|
# a version that has only the column we care about.
|
||||||
|
@ -142,8 +159,19 @@ def lineage(
|
||||||
if upstream:
|
if upstream:
|
||||||
upstream.downstream.append(node)
|
upstream.downstream.append(node)
|
||||||
|
|
||||||
|
# if the select is a star add all scope sources as downstreams
|
||||||
|
if select.is_star:
|
||||||
|
for source in scope.sources.values():
|
||||||
|
node.downstream.append(Node(name=select.sql(), source=source, expression=source))
|
||||||
|
|
||||||
# Find all columns that went into creating this one to list their lineage nodes.
|
# Find all columns that went into creating this one to list their lineage nodes.
|
||||||
for c in set(select.find_all(exp.Column)):
|
source_columns = set(select.find_all(exp.Column))
|
||||||
|
|
||||||
|
# If the source is a UDTF find columns used in the UTDF to generate the table
|
||||||
|
if isinstance(source, exp.UDTF):
|
||||||
|
source_columns |= set(source.find_all(exp.Column))
|
||||||
|
|
||||||
|
for c in source_columns:
|
||||||
table = c.table
|
table = c.table
|
||||||
source = scope.sources.get(table)
|
source = scope.sources.get(table)
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ import typing as t
|
||||||
|
|
||||||
from sqlglot import exp
|
from sqlglot import exp
|
||||||
from sqlglot._typing import E
|
from sqlglot._typing import E
|
||||||
from sqlglot.helper import ensure_list, subclasses
|
from sqlglot.helper import ensure_list, seq_get, subclasses
|
||||||
from sqlglot.optimizer.scope import Scope, traverse_scope
|
from sqlglot.optimizer.scope import Scope, traverse_scope
|
||||||
from sqlglot.schema import Schema, ensure_schema
|
from sqlglot.schema import Schema, ensure_schema
|
||||||
|
|
||||||
|
@ -271,6 +271,7 @@ class TypeAnnotator(metaclass=_TypeAnnotator):
|
||||||
exp.Array: lambda self, e: self._annotate_by_args(e, "expressions", array=True),
|
exp.Array: lambda self, e: self._annotate_by_args(e, "expressions", array=True),
|
||||||
exp.ArrayAgg: lambda self, e: self._annotate_by_args(e, "this", array=True),
|
exp.ArrayAgg: lambda self, e: self._annotate_by_args(e, "this", array=True),
|
||||||
exp.ArrayConcat: lambda self, e: self._annotate_by_args(e, "this", "expressions"),
|
exp.ArrayConcat: lambda self, e: self._annotate_by_args(e, "this", "expressions"),
|
||||||
|
exp.Bracket: lambda self, e: self._annotate_bracket(e),
|
||||||
exp.Cast: lambda self, e: self._annotate_with_type(e, e.args["to"]),
|
exp.Cast: lambda self, e: self._annotate_with_type(e, e.args["to"]),
|
||||||
exp.Case: lambda self, e: self._annotate_by_args(e, "default", "ifs"),
|
exp.Case: lambda self, e: self._annotate_by_args(e, "default", "ifs"),
|
||||||
exp.Coalesce: lambda self, e: self._annotate_by_args(e, "this", "expressions"),
|
exp.Coalesce: lambda self, e: self._annotate_by_args(e, "this", "expressions"),
|
||||||
|
@ -287,6 +288,7 @@ class TypeAnnotator(metaclass=_TypeAnnotator):
|
||||||
exp.Max: lambda self, e: self._annotate_by_args(e, "this", "expressions"),
|
exp.Max: lambda self, e: self._annotate_by_args(e, "this", "expressions"),
|
||||||
exp.Min: lambda self, e: self._annotate_by_args(e, "this", "expressions"),
|
exp.Min: lambda self, e: self._annotate_by_args(e, "this", "expressions"),
|
||||||
exp.Null: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.NULL),
|
exp.Null: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.NULL),
|
||||||
|
exp.Slice: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.UNKNOWN),
|
||||||
exp.Sum: lambda self, e: self._annotate_by_args(e, "this", "expressions", promote=True),
|
exp.Sum: lambda self, e: self._annotate_by_args(e, "this", "expressions", promote=True),
|
||||||
exp.TryCast: lambda self, e: self._annotate_with_type(e, e.args["to"]),
|
exp.TryCast: lambda self, e: self._annotate_with_type(e, e.args["to"]),
|
||||||
exp.VarMap: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.MAP),
|
exp.VarMap: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.MAP),
|
||||||
|
@ -524,3 +526,24 @@ class TypeAnnotator(metaclass=_TypeAnnotator):
|
||||||
|
|
||||||
self._set_type(expression, datatype)
|
self._set_type(expression, datatype)
|
||||||
return expression
|
return expression
|
||||||
|
|
||||||
|
def _annotate_bracket(self, expression: exp.Bracket) -> exp.Bracket:
|
||||||
|
self._annotate_args(expression)
|
||||||
|
|
||||||
|
bracket_arg = expression.expressions[0]
|
||||||
|
this = expression.this
|
||||||
|
|
||||||
|
if isinstance(bracket_arg, exp.Slice):
|
||||||
|
self._set_type(expression, this.type)
|
||||||
|
elif this.type.is_type(exp.DataType.Type.ARRAY):
|
||||||
|
contained_type = seq_get(this.type.expressions, 0) or exp.DataType.Type.UNKNOWN
|
||||||
|
self._set_type(expression, contained_type)
|
||||||
|
elif isinstance(this, (exp.Map, exp.VarMap)) and bracket_arg in this.keys:
|
||||||
|
index = this.keys.index(bracket_arg)
|
||||||
|
value = seq_get(this.values, index)
|
||||||
|
value_type = value.type if value else exp.DataType.Type.UNKNOWN
|
||||||
|
self._set_type(expression, value_type or exp.DataType.Type.UNKNOWN)
|
||||||
|
else:
|
||||||
|
self._set_type(expression, exp.DataType.Type.UNKNOWN)
|
||||||
|
|
||||||
|
return expression
|
||||||
|
|
|
@ -69,7 +69,11 @@ def ensure_bool_predicates(expression: exp.Expression) -> exp.Expression:
|
||||||
_replace_int_predicate(expression.left)
|
_replace_int_predicate(expression.left)
|
||||||
_replace_int_predicate(expression.right)
|
_replace_int_predicate(expression.right)
|
||||||
|
|
||||||
elif isinstance(expression, (exp.Where, exp.Having, exp.If)):
|
elif isinstance(expression, (exp.Where, exp.Having)) or (
|
||||||
|
# We can't replace num in CASE x WHEN num ..., because it's not the full predicate
|
||||||
|
isinstance(expression, exp.If)
|
||||||
|
and not (isinstance(expression.parent, exp.Case) and expression.parent.this)
|
||||||
|
):
|
||||||
_replace_int_predicate(expression.this)
|
_replace_int_predicate(expression.this)
|
||||||
|
|
||||||
return expression
|
return expression
|
||||||
|
|
|
@ -70,6 +70,7 @@ def simplify(expression, constant_propagation=False):
|
||||||
node = uniq_sort(node, generate, root)
|
node = uniq_sort(node, generate, root)
|
||||||
node = absorb_and_eliminate(node, root)
|
node = absorb_and_eliminate(node, root)
|
||||||
node = simplify_concat(node)
|
node = simplify_concat(node)
|
||||||
|
node = simplify_conditionals(node)
|
||||||
|
|
||||||
if constant_propagation:
|
if constant_propagation:
|
||||||
node = propagate_constants(node, root)
|
node = propagate_constants(node, root)
|
||||||
|
@ -477,9 +478,11 @@ def simplify_equality(expression: exp.Expression) -> exp.Expression:
|
||||||
return expression
|
return expression
|
||||||
|
|
||||||
if l.__class__ in INVERSE_DATE_OPS:
|
if l.__class__ in INVERSE_DATE_OPS:
|
||||||
|
l = t.cast(exp.IntervalOp, l)
|
||||||
a = l.this
|
a = l.this
|
||||||
b = l.interval()
|
b = l.interval()
|
||||||
else:
|
else:
|
||||||
|
l = t.cast(exp.Binary, l)
|
||||||
a, b = l.left, l.right
|
a, b = l.left, l.right
|
||||||
|
|
||||||
if not a_predicate(a) and b_predicate(b):
|
if not a_predicate(a) and b_predicate(b):
|
||||||
|
@ -695,6 +698,32 @@ def simplify_concat(expression):
|
||||||
return concat_type(expressions=new_args)
|
return concat_type(expressions=new_args)
|
||||||
|
|
||||||
|
|
||||||
|
def simplify_conditionals(expression):
|
||||||
|
"""Simplifies expressions like IF, CASE if their condition is statically known."""
|
||||||
|
if isinstance(expression, exp.Case):
|
||||||
|
this = expression.this
|
||||||
|
for case in expression.args["ifs"]:
|
||||||
|
cond = case.this
|
||||||
|
if this:
|
||||||
|
# Convert CASE x WHEN matching_value ... to CASE WHEN x = matching_value ...
|
||||||
|
cond = cond.replace(this.pop().eq(cond))
|
||||||
|
|
||||||
|
if always_true(cond):
|
||||||
|
return case.args["true"]
|
||||||
|
|
||||||
|
if always_false(cond):
|
||||||
|
case.pop()
|
||||||
|
if not expression.args["ifs"]:
|
||||||
|
return expression.args.get("default") or exp.null()
|
||||||
|
elif isinstance(expression, exp.If) and not isinstance(expression.parent, exp.Case):
|
||||||
|
if always_true(expression.this):
|
||||||
|
return expression.args["true"]
|
||||||
|
if always_false(expression.this):
|
||||||
|
return expression.args.get("false") or exp.null()
|
||||||
|
|
||||||
|
return expression
|
||||||
|
|
||||||
|
|
||||||
DateRange = t.Tuple[datetime.date, datetime.date]
|
DateRange = t.Tuple[datetime.date, datetime.date]
|
||||||
|
|
||||||
|
|
||||||
|
@ -786,6 +815,7 @@ def simplify_datetrunc_predicate(expression: exp.Expression) -> exp.Expression:
|
||||||
else:
|
else:
|
||||||
return expression
|
return expression
|
||||||
|
|
||||||
|
l = t.cast(exp.DateTrunc, l)
|
||||||
unit = l.unit.name.lower()
|
unit = l.unit.name.lower()
|
||||||
date = extract_date(r)
|
date = extract_date(r)
|
||||||
|
|
||||||
|
@ -798,6 +828,7 @@ def simplify_datetrunc_predicate(expression: exp.Expression) -> exp.Expression:
|
||||||
rs = expression.expressions
|
rs = expression.expressions
|
||||||
|
|
||||||
if rs and all(_is_datetrunc_predicate(l, r) for r in rs):
|
if rs and all(_is_datetrunc_predicate(l, r) for r in rs):
|
||||||
|
l = t.cast(exp.DateTrunc, l)
|
||||||
unit = l.unit.name.lower()
|
unit = l.unit.name.lower()
|
||||||
|
|
||||||
ranges = []
|
ranges = []
|
||||||
|
@ -852,6 +883,10 @@ def always_true(expression):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def always_false(expression):
|
||||||
|
return is_false(expression) or is_null(expression)
|
||||||
|
|
||||||
|
|
||||||
def is_complement(a, b):
|
def is_complement(a, b):
|
||||||
return isinstance(b, exp.Not) and b.this == a
|
return isinstance(b, exp.Not) and b.this == a
|
||||||
|
|
||||||
|
|
|
@ -313,6 +313,7 @@ class Parser(metaclass=_Parser):
|
||||||
TokenType.UNIQUE,
|
TokenType.UNIQUE,
|
||||||
TokenType.UNPIVOT,
|
TokenType.UNPIVOT,
|
||||||
TokenType.UPDATE,
|
TokenType.UPDATE,
|
||||||
|
TokenType.USE,
|
||||||
TokenType.VOLATILE,
|
TokenType.VOLATILE,
|
||||||
TokenType.WINDOW,
|
TokenType.WINDOW,
|
||||||
*CREATABLES,
|
*CREATABLES,
|
||||||
|
@ -629,11 +630,14 @@ class Parser(metaclass=_Parser):
|
||||||
"ALGORITHM": lambda self: self._parse_property_assignment(exp.AlgorithmProperty),
|
"ALGORITHM": lambda self: self._parse_property_assignment(exp.AlgorithmProperty),
|
||||||
"AUTO_INCREMENT": lambda self: self._parse_property_assignment(exp.AutoIncrementProperty),
|
"AUTO_INCREMENT": lambda self: self._parse_property_assignment(exp.AutoIncrementProperty),
|
||||||
"BLOCKCOMPRESSION": lambda self: self._parse_blockcompression(),
|
"BLOCKCOMPRESSION": lambda self: self._parse_blockcompression(),
|
||||||
"CHARACTER SET": lambda self: self._parse_character_set(),
|
"CHARSET": lambda self, **kwargs: self._parse_character_set(**kwargs),
|
||||||
|
"CHARACTER SET": lambda self, **kwargs: self._parse_character_set(**kwargs),
|
||||||
"CHECKSUM": lambda self: self._parse_checksum(),
|
"CHECKSUM": lambda self: self._parse_checksum(),
|
||||||
"CLUSTER BY": lambda self: self._parse_cluster(),
|
"CLUSTER BY": lambda self: self._parse_cluster(),
|
||||||
"CLUSTERED": lambda self: self._parse_clustered_by(),
|
"CLUSTERED": lambda self: self._parse_clustered_by(),
|
||||||
"COLLATE": lambda self: self._parse_property_assignment(exp.CollateProperty),
|
"COLLATE": lambda self, **kwargs: self._parse_property_assignment(
|
||||||
|
exp.CollateProperty, **kwargs
|
||||||
|
),
|
||||||
"COMMENT": lambda self: self._parse_property_assignment(exp.SchemaCommentProperty),
|
"COMMENT": lambda self: self._parse_property_assignment(exp.SchemaCommentProperty),
|
||||||
"COPY": lambda self: self._parse_copy_property(),
|
"COPY": lambda self: self._parse_copy_property(),
|
||||||
"DATABLOCKSIZE": lambda self, **kwargs: self._parse_datablocksize(**kwargs),
|
"DATABLOCKSIZE": lambda self, **kwargs: self._parse_datablocksize(**kwargs),
|
||||||
|
@ -1443,8 +1447,8 @@ class Parser(metaclass=_Parser):
|
||||||
if self._match_texts(self.PROPERTY_PARSERS):
|
if self._match_texts(self.PROPERTY_PARSERS):
|
||||||
return self.PROPERTY_PARSERS[self._prev.text.upper()](self)
|
return self.PROPERTY_PARSERS[self._prev.text.upper()](self)
|
||||||
|
|
||||||
if self._match_pair(TokenType.DEFAULT, TokenType.CHARACTER_SET):
|
if self._match(TokenType.DEFAULT) and self._match_texts(self.PROPERTY_PARSERS):
|
||||||
return self._parse_character_set(default=True)
|
return self.PROPERTY_PARSERS[self._prev.text.upper()](self, default=True)
|
||||||
|
|
||||||
if self._match_text_seq("COMPOUND", "SORTKEY"):
|
if self._match_text_seq("COMPOUND", "SORTKEY"):
|
||||||
return self._parse_sortkey(compound=True)
|
return self._parse_sortkey(compound=True)
|
||||||
|
@ -1480,10 +1484,10 @@ class Parser(metaclass=_Parser):
|
||||||
else self._parse_var_or_string() or self._parse_number() or self._parse_id_var(),
|
else self._parse_var_or_string() or self._parse_number() or self._parse_id_var(),
|
||||||
)
|
)
|
||||||
|
|
||||||
def _parse_property_assignment(self, exp_class: t.Type[E]) -> E:
|
def _parse_property_assignment(self, exp_class: t.Type[E], **kwargs: t.Any) -> E:
|
||||||
self._match(TokenType.EQ)
|
self._match(TokenType.EQ)
|
||||||
self._match(TokenType.ALIAS)
|
self._match(TokenType.ALIAS)
|
||||||
return self.expression(exp_class, this=self._parse_field())
|
return self.expression(exp_class, this=self._parse_field(), **kwargs)
|
||||||
|
|
||||||
def _parse_properties(self, before: t.Optional[bool] = None) -> t.Optional[exp.Properties]:
|
def _parse_properties(self, before: t.Optional[bool] = None) -> t.Optional[exp.Properties]:
|
||||||
properties = []
|
properties = []
|
||||||
|
@ -2426,9 +2430,9 @@ class Parser(metaclass=_Parser):
|
||||||
table_alias: t.Optional[exp.TableAlias] = self.expression(
|
table_alias: t.Optional[exp.TableAlias] = self.expression(
|
||||||
exp.TableAlias, this=table, columns=columns
|
exp.TableAlias, this=table, columns=columns
|
||||||
)
|
)
|
||||||
elif isinstance(this, exp.Subquery) and this.alias:
|
elif isinstance(this, (exp.Subquery, exp.Unnest)) and this.alias:
|
||||||
# Ensures parity between the Subquery's and the Lateral's "alias" args
|
# We move the alias from the lateral's child node to the lateral itself
|
||||||
table_alias = this.args["alias"].copy()
|
table_alias = this.args["alias"].pop()
|
||||||
else:
|
else:
|
||||||
table_alias = self._parse_table_alias()
|
table_alias = self._parse_table_alias()
|
||||||
|
|
||||||
|
@ -2952,6 +2956,7 @@ class Parser(metaclass=_Parser):
|
||||||
cube = None
|
cube = None
|
||||||
totals = None
|
totals = None
|
||||||
|
|
||||||
|
index = self._index
|
||||||
with_ = self._match(TokenType.WITH)
|
with_ = self._match(TokenType.WITH)
|
||||||
if self._match(TokenType.ROLLUP):
|
if self._match(TokenType.ROLLUP):
|
||||||
rollup = with_ or self._parse_wrapped_csv(self._parse_column)
|
rollup = with_ or self._parse_wrapped_csv(self._parse_column)
|
||||||
|
@ -2966,6 +2971,8 @@ class Parser(metaclass=_Parser):
|
||||||
elements["totals"] = True # type: ignore
|
elements["totals"] = True # type: ignore
|
||||||
|
|
||||||
if not (grouping_sets or rollup or cube or totals):
|
if not (grouping_sets or rollup or cube or totals):
|
||||||
|
if with_:
|
||||||
|
self._retreat(index)
|
||||||
break
|
break
|
||||||
|
|
||||||
return self.expression(exp.Group, **elements) # type: ignore
|
return self.expression(exp.Group, **elements) # type: ignore
|
||||||
|
@ -3157,6 +3164,7 @@ class Parser(metaclass=_Parser):
|
||||||
|
|
||||||
return self.expression(
|
return self.expression(
|
||||||
expression,
|
expression,
|
||||||
|
comments=self._prev.comments,
|
||||||
this=this,
|
this=this,
|
||||||
distinct=self._match(TokenType.DISTINCT) or not self._match(TokenType.ALL),
|
distinct=self._match(TokenType.DISTINCT) or not self._match(TokenType.ALL),
|
||||||
by_name=self._match_text_seq("BY", "NAME"),
|
by_name=self._match_text_seq("BY", "NAME"),
|
||||||
|
@ -3618,6 +3626,32 @@ class Parser(metaclass=_Parser):
|
||||||
functions: t.Optional[t.Dict[str, t.Callable]] = None,
|
functions: t.Optional[t.Dict[str, t.Callable]] = None,
|
||||||
anonymous: bool = False,
|
anonymous: bool = False,
|
||||||
optional_parens: bool = True,
|
optional_parens: bool = True,
|
||||||
|
) -> t.Optional[exp.Expression]:
|
||||||
|
# This allows us to also parse {fn <function>} syntax (Snowflake, MySQL support this)
|
||||||
|
# See: https://community.snowflake.com/s/article/SQL-Escape-Sequences
|
||||||
|
fn_syntax = False
|
||||||
|
if (
|
||||||
|
self._match(TokenType.L_BRACE, advance=False)
|
||||||
|
and self._next
|
||||||
|
and self._next.text.upper() == "FN"
|
||||||
|
):
|
||||||
|
self._advance(2)
|
||||||
|
fn_syntax = True
|
||||||
|
|
||||||
|
func = self._parse_function_call(
|
||||||
|
functions=functions, anonymous=anonymous, optional_parens=optional_parens
|
||||||
|
)
|
||||||
|
|
||||||
|
if fn_syntax:
|
||||||
|
self._match(TokenType.R_BRACE)
|
||||||
|
|
||||||
|
return func
|
||||||
|
|
||||||
|
def _parse_function_call(
|
||||||
|
self,
|
||||||
|
functions: t.Optional[t.Dict[str, t.Callable]] = None,
|
||||||
|
anonymous: bool = False,
|
||||||
|
optional_parens: bool = True,
|
||||||
) -> t.Optional[exp.Expression]:
|
) -> t.Optional[exp.Expression]:
|
||||||
if not self._curr:
|
if not self._curr:
|
||||||
return None
|
return None
|
||||||
|
@ -3856,6 +3890,10 @@ class Parser(metaclass=_Parser):
|
||||||
|
|
||||||
if not identity:
|
if not identity:
|
||||||
this.set("expression", self._parse_bitwise())
|
this.set("expression", self._parse_bitwise())
|
||||||
|
elif not this.args.get("start") and self._match(TokenType.NUMBER, advance=False):
|
||||||
|
args = self._parse_csv(self._parse_bitwise)
|
||||||
|
this.set("start", seq_get(args, 0))
|
||||||
|
this.set("increment", seq_get(args, 1))
|
||||||
|
|
||||||
self._match_r_paren()
|
self._match_r_paren()
|
||||||
|
|
||||||
|
@ -4039,6 +4077,11 @@ class Parser(metaclass=_Parser):
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if not self._match(TokenType.R_BRACKET) and bracket_kind == TokenType.L_BRACKET:
|
||||||
|
self.raise_error("Expected ]")
|
||||||
|
elif not self._match(TokenType.R_BRACE) and bracket_kind == TokenType.L_BRACE:
|
||||||
|
self.raise_error("Expected }")
|
||||||
|
|
||||||
# https://duckdb.org/docs/sql/data_types/struct.html#creating-structs
|
# https://duckdb.org/docs/sql/data_types/struct.html#creating-structs
|
||||||
if bracket_kind == TokenType.L_BRACE:
|
if bracket_kind == TokenType.L_BRACE:
|
||||||
this = self.expression(exp.Struct, expressions=expressions)
|
this = self.expression(exp.Struct, expressions=expressions)
|
||||||
|
@ -4048,11 +4091,6 @@ class Parser(metaclass=_Parser):
|
||||||
expressions = apply_index_offset(this, expressions, -self.INDEX_OFFSET)
|
expressions = apply_index_offset(this, expressions, -self.INDEX_OFFSET)
|
||||||
this = self.expression(exp.Bracket, this=this, expressions=expressions)
|
this = self.expression(exp.Bracket, this=this, expressions=expressions)
|
||||||
|
|
||||||
if not self._match(TokenType.R_BRACKET) and bracket_kind == TokenType.L_BRACKET:
|
|
||||||
self.raise_error("Expected ]")
|
|
||||||
elif not self._match(TokenType.R_BRACE) and bracket_kind == TokenType.L_BRACE:
|
|
||||||
self.raise_error("Expected }")
|
|
||||||
|
|
||||||
self._add_comments(this)
|
self._add_comments(this)
|
||||||
return self._parse_bracket(this)
|
return self._parse_bracket(this)
|
||||||
|
|
||||||
|
|
603
sqlglot/time.py
603
sqlglot/time.py
|
@ -54,3 +54,606 @@ def format_time(
|
||||||
chunks.append(chars)
|
chunks.append(chars)
|
||||||
|
|
||||||
return "".join(mapping.get(chars, chars) for chars in chunks)
|
return "".join(mapping.get(chars, chars) for chars in chunks)
|
||||||
|
|
||||||
|
|
||||||
|
TIMEZONES = {
|
||||||
|
tz.lower()
|
||||||
|
for tz in (
|
||||||
|
"Africa/Abidjan",
|
||||||
|
"Africa/Accra",
|
||||||
|
"Africa/Addis_Ababa",
|
||||||
|
"Africa/Algiers",
|
||||||
|
"Africa/Asmara",
|
||||||
|
"Africa/Asmera",
|
||||||
|
"Africa/Bamako",
|
||||||
|
"Africa/Bangui",
|
||||||
|
"Africa/Banjul",
|
||||||
|
"Africa/Bissau",
|
||||||
|
"Africa/Blantyre",
|
||||||
|
"Africa/Brazzaville",
|
||||||
|
"Africa/Bujumbura",
|
||||||
|
"Africa/Cairo",
|
||||||
|
"Africa/Casablanca",
|
||||||
|
"Africa/Ceuta",
|
||||||
|
"Africa/Conakry",
|
||||||
|
"Africa/Dakar",
|
||||||
|
"Africa/Dar_es_Salaam",
|
||||||
|
"Africa/Djibouti",
|
||||||
|
"Africa/Douala",
|
||||||
|
"Africa/El_Aaiun",
|
||||||
|
"Africa/Freetown",
|
||||||
|
"Africa/Gaborone",
|
||||||
|
"Africa/Harare",
|
||||||
|
"Africa/Johannesburg",
|
||||||
|
"Africa/Juba",
|
||||||
|
"Africa/Kampala",
|
||||||
|
"Africa/Khartoum",
|
||||||
|
"Africa/Kigali",
|
||||||
|
"Africa/Kinshasa",
|
||||||
|
"Africa/Lagos",
|
||||||
|
"Africa/Libreville",
|
||||||
|
"Africa/Lome",
|
||||||
|
"Africa/Luanda",
|
||||||
|
"Africa/Lubumbashi",
|
||||||
|
"Africa/Lusaka",
|
||||||
|
"Africa/Malabo",
|
||||||
|
"Africa/Maputo",
|
||||||
|
"Africa/Maseru",
|
||||||
|
"Africa/Mbabane",
|
||||||
|
"Africa/Mogadishu",
|
||||||
|
"Africa/Monrovia",
|
||||||
|
"Africa/Nairobi",
|
||||||
|
"Africa/Ndjamena",
|
||||||
|
"Africa/Niamey",
|
||||||
|
"Africa/Nouakchott",
|
||||||
|
"Africa/Ouagadougou",
|
||||||
|
"Africa/Porto-Novo",
|
||||||
|
"Africa/Sao_Tome",
|
||||||
|
"Africa/Timbuktu",
|
||||||
|
"Africa/Tripoli",
|
||||||
|
"Africa/Tunis",
|
||||||
|
"Africa/Windhoek",
|
||||||
|
"America/Adak",
|
||||||
|
"America/Anchorage",
|
||||||
|
"America/Anguilla",
|
||||||
|
"America/Antigua",
|
||||||
|
"America/Araguaina",
|
||||||
|
"America/Argentina/Buenos_Aires",
|
||||||
|
"America/Argentina/Catamarca",
|
||||||
|
"America/Argentina/ComodRivadavia",
|
||||||
|
"America/Argentina/Cordoba",
|
||||||
|
"America/Argentina/Jujuy",
|
||||||
|
"America/Argentina/La_Rioja",
|
||||||
|
"America/Argentina/Mendoza",
|
||||||
|
"America/Argentina/Rio_Gallegos",
|
||||||
|
"America/Argentina/Salta",
|
||||||
|
"America/Argentina/San_Juan",
|
||||||
|
"America/Argentina/San_Luis",
|
||||||
|
"America/Argentina/Tucuman",
|
||||||
|
"America/Argentina/Ushuaia",
|
||||||
|
"America/Aruba",
|
||||||
|
"America/Asuncion",
|
||||||
|
"America/Atikokan",
|
||||||
|
"America/Atka",
|
||||||
|
"America/Bahia",
|
||||||
|
"America/Bahia_Banderas",
|
||||||
|
"America/Barbados",
|
||||||
|
"America/Belem",
|
||||||
|
"America/Belize",
|
||||||
|
"America/Blanc-Sablon",
|
||||||
|
"America/Boa_Vista",
|
||||||
|
"America/Bogota",
|
||||||
|
"America/Boise",
|
||||||
|
"America/Buenos_Aires",
|
||||||
|
"America/Cambridge_Bay",
|
||||||
|
"America/Campo_Grande",
|
||||||
|
"America/Cancun",
|
||||||
|
"America/Caracas",
|
||||||
|
"America/Catamarca",
|
||||||
|
"America/Cayenne",
|
||||||
|
"America/Cayman",
|
||||||
|
"America/Chicago",
|
||||||
|
"America/Chihuahua",
|
||||||
|
"America/Ciudad_Juarez",
|
||||||
|
"America/Coral_Harbour",
|
||||||
|
"America/Cordoba",
|
||||||
|
"America/Costa_Rica",
|
||||||
|
"America/Creston",
|
||||||
|
"America/Cuiaba",
|
||||||
|
"America/Curacao",
|
||||||
|
"America/Danmarkshavn",
|
||||||
|
"America/Dawson",
|
||||||
|
"America/Dawson_Creek",
|
||||||
|
"America/Denver",
|
||||||
|
"America/Detroit",
|
||||||
|
"America/Dominica",
|
||||||
|
"America/Edmonton",
|
||||||
|
"America/Eirunepe",
|
||||||
|
"America/El_Salvador",
|
||||||
|
"America/Ensenada",
|
||||||
|
"America/Fort_Nelson",
|
||||||
|
"America/Fort_Wayne",
|
||||||
|
"America/Fortaleza",
|
||||||
|
"America/Glace_Bay",
|
||||||
|
"America/Godthab",
|
||||||
|
"America/Goose_Bay",
|
||||||
|
"America/Grand_Turk",
|
||||||
|
"America/Grenada",
|
||||||
|
"America/Guadeloupe",
|
||||||
|
"America/Guatemala",
|
||||||
|
"America/Guayaquil",
|
||||||
|
"America/Guyana",
|
||||||
|
"America/Halifax",
|
||||||
|
"America/Havana",
|
||||||
|
"America/Hermosillo",
|
||||||
|
"America/Indiana/Indianapolis",
|
||||||
|
"America/Indiana/Knox",
|
||||||
|
"America/Indiana/Marengo",
|
||||||
|
"America/Indiana/Petersburg",
|
||||||
|
"America/Indiana/Tell_City",
|
||||||
|
"America/Indiana/Vevay",
|
||||||
|
"America/Indiana/Vincennes",
|
||||||
|
"America/Indiana/Winamac",
|
||||||
|
"America/Indianapolis",
|
||||||
|
"America/Inuvik",
|
||||||
|
"America/Iqaluit",
|
||||||
|
"America/Jamaica",
|
||||||
|
"America/Jujuy",
|
||||||
|
"America/Juneau",
|
||||||
|
"America/Kentucky/Louisville",
|
||||||
|
"America/Kentucky/Monticello",
|
||||||
|
"America/Knox_IN",
|
||||||
|
"America/Kralendijk",
|
||||||
|
"America/La_Paz",
|
||||||
|
"America/Lima",
|
||||||
|
"America/Los_Angeles",
|
||||||
|
"America/Louisville",
|
||||||
|
"America/Lower_Princes",
|
||||||
|
"America/Maceio",
|
||||||
|
"America/Managua",
|
||||||
|
"America/Manaus",
|
||||||
|
"America/Marigot",
|
||||||
|
"America/Martinique",
|
||||||
|
"America/Matamoros",
|
||||||
|
"America/Mazatlan",
|
||||||
|
"America/Mendoza",
|
||||||
|
"America/Menominee",
|
||||||
|
"America/Merida",
|
||||||
|
"America/Metlakatla",
|
||||||
|
"America/Mexico_City",
|
||||||
|
"America/Miquelon",
|
||||||
|
"America/Moncton",
|
||||||
|
"America/Monterrey",
|
||||||
|
"America/Montevideo",
|
||||||
|
"America/Montreal",
|
||||||
|
"America/Montserrat",
|
||||||
|
"America/Nassau",
|
||||||
|
"America/New_York",
|
||||||
|
"America/Nipigon",
|
||||||
|
"America/Nome",
|
||||||
|
"America/Noronha",
|
||||||
|
"America/North_Dakota/Beulah",
|
||||||
|
"America/North_Dakota/Center",
|
||||||
|
"America/North_Dakota/New_Salem",
|
||||||
|
"America/Nuuk",
|
||||||
|
"America/Ojinaga",
|
||||||
|
"America/Panama",
|
||||||
|
"America/Pangnirtung",
|
||||||
|
"America/Paramaribo",
|
||||||
|
"America/Phoenix",
|
||||||
|
"America/Port-au-Prince",
|
||||||
|
"America/Port_of_Spain",
|
||||||
|
"America/Porto_Acre",
|
||||||
|
"America/Porto_Velho",
|
||||||
|
"America/Puerto_Rico",
|
||||||
|
"America/Punta_Arenas",
|
||||||
|
"America/Rainy_River",
|
||||||
|
"America/Rankin_Inlet",
|
||||||
|
"America/Recife",
|
||||||
|
"America/Regina",
|
||||||
|
"America/Resolute",
|
||||||
|
"America/Rio_Branco",
|
||||||
|
"America/Rosario",
|
||||||
|
"America/Santa_Isabel",
|
||||||
|
"America/Santarem",
|
||||||
|
"America/Santiago",
|
||||||
|
"America/Santo_Domingo",
|
||||||
|
"America/Sao_Paulo",
|
||||||
|
"America/Scoresbysund",
|
||||||
|
"America/Shiprock",
|
||||||
|
"America/Sitka",
|
||||||
|
"America/St_Barthelemy",
|
||||||
|
"America/St_Johns",
|
||||||
|
"America/St_Kitts",
|
||||||
|
"America/St_Lucia",
|
||||||
|
"America/St_Thomas",
|
||||||
|
"America/St_Vincent",
|
||||||
|
"America/Swift_Current",
|
||||||
|
"America/Tegucigalpa",
|
||||||
|
"America/Thule",
|
||||||
|
"America/Thunder_Bay",
|
||||||
|
"America/Tijuana",
|
||||||
|
"America/Toronto",
|
||||||
|
"America/Tortola",
|
||||||
|
"America/Vancouver",
|
||||||
|
"America/Virgin",
|
||||||
|
"America/Whitehorse",
|
||||||
|
"America/Winnipeg",
|
||||||
|
"America/Yakutat",
|
||||||
|
"America/Yellowknife",
|
||||||
|
"Antarctica/Casey",
|
||||||
|
"Antarctica/Davis",
|
||||||
|
"Antarctica/DumontDUrville",
|
||||||
|
"Antarctica/Macquarie",
|
||||||
|
"Antarctica/Mawson",
|
||||||
|
"Antarctica/McMurdo",
|
||||||
|
"Antarctica/Palmer",
|
||||||
|
"Antarctica/Rothera",
|
||||||
|
"Antarctica/South_Pole",
|
||||||
|
"Antarctica/Syowa",
|
||||||
|
"Antarctica/Troll",
|
||||||
|
"Antarctica/Vostok",
|
||||||
|
"Arctic/Longyearbyen",
|
||||||
|
"Asia/Aden",
|
||||||
|
"Asia/Almaty",
|
||||||
|
"Asia/Amman",
|
||||||
|
"Asia/Anadyr",
|
||||||
|
"Asia/Aqtau",
|
||||||
|
"Asia/Aqtobe",
|
||||||
|
"Asia/Ashgabat",
|
||||||
|
"Asia/Ashkhabad",
|
||||||
|
"Asia/Atyrau",
|
||||||
|
"Asia/Baghdad",
|
||||||
|
"Asia/Bahrain",
|
||||||
|
"Asia/Baku",
|
||||||
|
"Asia/Bangkok",
|
||||||
|
"Asia/Barnaul",
|
||||||
|
"Asia/Beirut",
|
||||||
|
"Asia/Bishkek",
|
||||||
|
"Asia/Brunei",
|
||||||
|
"Asia/Calcutta",
|
||||||
|
"Asia/Chita",
|
||||||
|
"Asia/Choibalsan",
|
||||||
|
"Asia/Chongqing",
|
||||||
|
"Asia/Chungking",
|
||||||
|
"Asia/Colombo",
|
||||||
|
"Asia/Dacca",
|
||||||
|
"Asia/Damascus",
|
||||||
|
"Asia/Dhaka",
|
||||||
|
"Asia/Dili",
|
||||||
|
"Asia/Dubai",
|
||||||
|
"Asia/Dushanbe",
|
||||||
|
"Asia/Famagusta",
|
||||||
|
"Asia/Gaza",
|
||||||
|
"Asia/Harbin",
|
||||||
|
"Asia/Hebron",
|
||||||
|
"Asia/Ho_Chi_Minh",
|
||||||
|
"Asia/Hong_Kong",
|
||||||
|
"Asia/Hovd",
|
||||||
|
"Asia/Irkutsk",
|
||||||
|
"Asia/Istanbul",
|
||||||
|
"Asia/Jakarta",
|
||||||
|
"Asia/Jayapura",
|
||||||
|
"Asia/Jerusalem",
|
||||||
|
"Asia/Kabul",
|
||||||
|
"Asia/Kamchatka",
|
||||||
|
"Asia/Karachi",
|
||||||
|
"Asia/Kashgar",
|
||||||
|
"Asia/Kathmandu",
|
||||||
|
"Asia/Katmandu",
|
||||||
|
"Asia/Khandyga",
|
||||||
|
"Asia/Kolkata",
|
||||||
|
"Asia/Krasnoyarsk",
|
||||||
|
"Asia/Kuala_Lumpur",
|
||||||
|
"Asia/Kuching",
|
||||||
|
"Asia/Kuwait",
|
||||||
|
"Asia/Macao",
|
||||||
|
"Asia/Macau",
|
||||||
|
"Asia/Magadan",
|
||||||
|
"Asia/Makassar",
|
||||||
|
"Asia/Manila",
|
||||||
|
"Asia/Muscat",
|
||||||
|
"Asia/Nicosia",
|
||||||
|
"Asia/Novokuznetsk",
|
||||||
|
"Asia/Novosibirsk",
|
||||||
|
"Asia/Omsk",
|
||||||
|
"Asia/Oral",
|
||||||
|
"Asia/Phnom_Penh",
|
||||||
|
"Asia/Pontianak",
|
||||||
|
"Asia/Pyongyang",
|
||||||
|
"Asia/Qatar",
|
||||||
|
"Asia/Qostanay",
|
||||||
|
"Asia/Qyzylorda",
|
||||||
|
"Asia/Rangoon",
|
||||||
|
"Asia/Riyadh",
|
||||||
|
"Asia/Saigon",
|
||||||
|
"Asia/Sakhalin",
|
||||||
|
"Asia/Samarkand",
|
||||||
|
"Asia/Seoul",
|
||||||
|
"Asia/Shanghai",
|
||||||
|
"Asia/Singapore",
|
||||||
|
"Asia/Srednekolymsk",
|
||||||
|
"Asia/Taipei",
|
||||||
|
"Asia/Tashkent",
|
||||||
|
"Asia/Tbilisi",
|
||||||
|
"Asia/Tehran",
|
||||||
|
"Asia/Tel_Aviv",
|
||||||
|
"Asia/Thimbu",
|
||||||
|
"Asia/Thimphu",
|
||||||
|
"Asia/Tokyo",
|
||||||
|
"Asia/Tomsk",
|
||||||
|
"Asia/Ujung_Pandang",
|
||||||
|
"Asia/Ulaanbaatar",
|
||||||
|
"Asia/Ulan_Bator",
|
||||||
|
"Asia/Urumqi",
|
||||||
|
"Asia/Ust-Nera",
|
||||||
|
"Asia/Vientiane",
|
||||||
|
"Asia/Vladivostok",
|
||||||
|
"Asia/Yakutsk",
|
||||||
|
"Asia/Yangon",
|
||||||
|
"Asia/Yekaterinburg",
|
||||||
|
"Asia/Yerevan",
|
||||||
|
"Atlantic/Azores",
|
||||||
|
"Atlantic/Bermuda",
|
||||||
|
"Atlantic/Canary",
|
||||||
|
"Atlantic/Cape_Verde",
|
||||||
|
"Atlantic/Faeroe",
|
||||||
|
"Atlantic/Faroe",
|
||||||
|
"Atlantic/Jan_Mayen",
|
||||||
|
"Atlantic/Madeira",
|
||||||
|
"Atlantic/Reykjavik",
|
||||||
|
"Atlantic/South_Georgia",
|
||||||
|
"Atlantic/St_Helena",
|
||||||
|
"Atlantic/Stanley",
|
||||||
|
"Australia/ACT",
|
||||||
|
"Australia/Adelaide",
|
||||||
|
"Australia/Brisbane",
|
||||||
|
"Australia/Broken_Hill",
|
||||||
|
"Australia/Canberra",
|
||||||
|
"Australia/Currie",
|
||||||
|
"Australia/Darwin",
|
||||||
|
"Australia/Eucla",
|
||||||
|
"Australia/Hobart",
|
||||||
|
"Australia/LHI",
|
||||||
|
"Australia/Lindeman",
|
||||||
|
"Australia/Lord_Howe",
|
||||||
|
"Australia/Melbourne",
|
||||||
|
"Australia/NSW",
|
||||||
|
"Australia/North",
|
||||||
|
"Australia/Perth",
|
||||||
|
"Australia/Queensland",
|
||||||
|
"Australia/South",
|
||||||
|
"Australia/Sydney",
|
||||||
|
"Australia/Tasmania",
|
||||||
|
"Australia/Victoria",
|
||||||
|
"Australia/West",
|
||||||
|
"Australia/Yancowinna",
|
||||||
|
"Brazil/Acre",
|
||||||
|
"Brazil/DeNoronha",
|
||||||
|
"Brazil/East",
|
||||||
|
"Brazil/West",
|
||||||
|
"CET",
|
||||||
|
"CST6CDT",
|
||||||
|
"Canada/Atlantic",
|
||||||
|
"Canada/Central",
|
||||||
|
"Canada/Eastern",
|
||||||
|
"Canada/Mountain",
|
||||||
|
"Canada/Newfoundland",
|
||||||
|
"Canada/Pacific",
|
||||||
|
"Canada/Saskatchewan",
|
||||||
|
"Canada/Yukon",
|
||||||
|
"Chile/Continental",
|
||||||
|
"Chile/EasterIsland",
|
||||||
|
"Cuba",
|
||||||
|
"EET",
|
||||||
|
"EST",
|
||||||
|
"EST5EDT",
|
||||||
|
"Egypt",
|
||||||
|
"Eire",
|
||||||
|
"Etc/GMT",
|
||||||
|
"Etc/GMT+0",
|
||||||
|
"Etc/GMT+1",
|
||||||
|
"Etc/GMT+10",
|
||||||
|
"Etc/GMT+11",
|
||||||
|
"Etc/GMT+12",
|
||||||
|
"Etc/GMT+2",
|
||||||
|
"Etc/GMT+3",
|
||||||
|
"Etc/GMT+4",
|
||||||
|
"Etc/GMT+5",
|
||||||
|
"Etc/GMT+6",
|
||||||
|
"Etc/GMT+7",
|
||||||
|
"Etc/GMT+8",
|
||||||
|
"Etc/GMT+9",
|
||||||
|
"Etc/GMT-0",
|
||||||
|
"Etc/GMT-1",
|
||||||
|
"Etc/GMT-10",
|
||||||
|
"Etc/GMT-11",
|
||||||
|
"Etc/GMT-12",
|
||||||
|
"Etc/GMT-13",
|
||||||
|
"Etc/GMT-14",
|
||||||
|
"Etc/GMT-2",
|
||||||
|
"Etc/GMT-3",
|
||||||
|
"Etc/GMT-4",
|
||||||
|
"Etc/GMT-5",
|
||||||
|
"Etc/GMT-6",
|
||||||
|
"Etc/GMT-7",
|
||||||
|
"Etc/GMT-8",
|
||||||
|
"Etc/GMT-9",
|
||||||
|
"Etc/GMT0",
|
||||||
|
"Etc/Greenwich",
|
||||||
|
"Etc/UCT",
|
||||||
|
"Etc/UTC",
|
||||||
|
"Etc/Universal",
|
||||||
|
"Etc/Zulu",
|
||||||
|
"Europe/Amsterdam",
|
||||||
|
"Europe/Andorra",
|
||||||
|
"Europe/Astrakhan",
|
||||||
|
"Europe/Athens",
|
||||||
|
"Europe/Belfast",
|
||||||
|
"Europe/Belgrade",
|
||||||
|
"Europe/Berlin",
|
||||||
|
"Europe/Bratislava",
|
||||||
|
"Europe/Brussels",
|
||||||
|
"Europe/Bucharest",
|
||||||
|
"Europe/Budapest",
|
||||||
|
"Europe/Busingen",
|
||||||
|
"Europe/Chisinau",
|
||||||
|
"Europe/Copenhagen",
|
||||||
|
"Europe/Dublin",
|
||||||
|
"Europe/Gibraltar",
|
||||||
|
"Europe/Guernsey",
|
||||||
|
"Europe/Helsinki",
|
||||||
|
"Europe/Isle_of_Man",
|
||||||
|
"Europe/Istanbul",
|
||||||
|
"Europe/Jersey",
|
||||||
|
"Europe/Kaliningrad",
|
||||||
|
"Europe/Kiev",
|
||||||
|
"Europe/Kirov",
|
||||||
|
"Europe/Kyiv",
|
||||||
|
"Europe/Lisbon",
|
||||||
|
"Europe/Ljubljana",
|
||||||
|
"Europe/London",
|
||||||
|
"Europe/Luxembourg",
|
||||||
|
"Europe/Madrid",
|
||||||
|
"Europe/Malta",
|
||||||
|
"Europe/Mariehamn",
|
||||||
|
"Europe/Minsk",
|
||||||
|
"Europe/Monaco",
|
||||||
|
"Europe/Moscow",
|
||||||
|
"Europe/Nicosia",
|
||||||
|
"Europe/Oslo",
|
||||||
|
"Europe/Paris",
|
||||||
|
"Europe/Podgorica",
|
||||||
|
"Europe/Prague",
|
||||||
|
"Europe/Riga",
|
||||||
|
"Europe/Rome",
|
||||||
|
"Europe/Samara",
|
||||||
|
"Europe/San_Marino",
|
||||||
|
"Europe/Sarajevo",
|
||||||
|
"Europe/Saratov",
|
||||||
|
"Europe/Simferopol",
|
||||||
|
"Europe/Skopje",
|
||||||
|
"Europe/Sofia",
|
||||||
|
"Europe/Stockholm",
|
||||||
|
"Europe/Tallinn",
|
||||||
|
"Europe/Tirane",
|
||||||
|
"Europe/Tiraspol",
|
||||||
|
"Europe/Ulyanovsk",
|
||||||
|
"Europe/Uzhgorod",
|
||||||
|
"Europe/Vaduz",
|
||||||
|
"Europe/Vatican",
|
||||||
|
"Europe/Vienna",
|
||||||
|
"Europe/Vilnius",
|
||||||
|
"Europe/Volgograd",
|
||||||
|
"Europe/Warsaw",
|
||||||
|
"Europe/Zagreb",
|
||||||
|
"Europe/Zaporozhye",
|
||||||
|
"Europe/Zurich",
|
||||||
|
"GB",
|
||||||
|
"GB-Eire",
|
||||||
|
"GMT",
|
||||||
|
"GMT+0",
|
||||||
|
"GMT-0",
|
||||||
|
"GMT0",
|
||||||
|
"Greenwich",
|
||||||
|
"HST",
|
||||||
|
"Hongkong",
|
||||||
|
"Iceland",
|
||||||
|
"Indian/Antananarivo",
|
||||||
|
"Indian/Chagos",
|
||||||
|
"Indian/Christmas",
|
||||||
|
"Indian/Cocos",
|
||||||
|
"Indian/Comoro",
|
||||||
|
"Indian/Kerguelen",
|
||||||
|
"Indian/Mahe",
|
||||||
|
"Indian/Maldives",
|
||||||
|
"Indian/Mauritius",
|
||||||
|
"Indian/Mayotte",
|
||||||
|
"Indian/Reunion",
|
||||||
|
"Iran",
|
||||||
|
"Israel",
|
||||||
|
"Jamaica",
|
||||||
|
"Japan",
|
||||||
|
"Kwajalein",
|
||||||
|
"Libya",
|
||||||
|
"MET",
|
||||||
|
"MST",
|
||||||
|
"MST7MDT",
|
||||||
|
"Mexico/BajaNorte",
|
||||||
|
"Mexico/BajaSur",
|
||||||
|
"Mexico/General",
|
||||||
|
"NZ",
|
||||||
|
"NZ-CHAT",
|
||||||
|
"Navajo",
|
||||||
|
"PRC",
|
||||||
|
"PST8PDT",
|
||||||
|
"Pacific/Apia",
|
||||||
|
"Pacific/Auckland",
|
||||||
|
"Pacific/Bougainville",
|
||||||
|
"Pacific/Chatham",
|
||||||
|
"Pacific/Chuuk",
|
||||||
|
"Pacific/Easter",
|
||||||
|
"Pacific/Efate",
|
||||||
|
"Pacific/Enderbury",
|
||||||
|
"Pacific/Fakaofo",
|
||||||
|
"Pacific/Fiji",
|
||||||
|
"Pacific/Funafuti",
|
||||||
|
"Pacific/Galapagos",
|
||||||
|
"Pacific/Gambier",
|
||||||
|
"Pacific/Guadalcanal",
|
||||||
|
"Pacific/Guam",
|
||||||
|
"Pacific/Honolulu",
|
||||||
|
"Pacific/Johnston",
|
||||||
|
"Pacific/Kanton",
|
||||||
|
"Pacific/Kiritimati",
|
||||||
|
"Pacific/Kosrae",
|
||||||
|
"Pacific/Kwajalein",
|
||||||
|
"Pacific/Majuro",
|
||||||
|
"Pacific/Marquesas",
|
||||||
|
"Pacific/Midway",
|
||||||
|
"Pacific/Nauru",
|
||||||
|
"Pacific/Niue",
|
||||||
|
"Pacific/Norfolk",
|
||||||
|
"Pacific/Noumea",
|
||||||
|
"Pacific/Pago_Pago",
|
||||||
|
"Pacific/Palau",
|
||||||
|
"Pacific/Pitcairn",
|
||||||
|
"Pacific/Pohnpei",
|
||||||
|
"Pacific/Ponape",
|
||||||
|
"Pacific/Port_Moresby",
|
||||||
|
"Pacific/Rarotonga",
|
||||||
|
"Pacific/Saipan",
|
||||||
|
"Pacific/Samoa",
|
||||||
|
"Pacific/Tahiti",
|
||||||
|
"Pacific/Tarawa",
|
||||||
|
"Pacific/Tongatapu",
|
||||||
|
"Pacific/Truk",
|
||||||
|
"Pacific/Wake",
|
||||||
|
"Pacific/Wallis",
|
||||||
|
"Pacific/Yap",
|
||||||
|
"Poland",
|
||||||
|
"Portugal",
|
||||||
|
"ROC",
|
||||||
|
"ROK",
|
||||||
|
"Singapore",
|
||||||
|
"Turkey",
|
||||||
|
"UCT",
|
||||||
|
"US/Alaska",
|
||||||
|
"US/Aleutian",
|
||||||
|
"US/Arizona",
|
||||||
|
"US/Central",
|
||||||
|
"US/East-Indiana",
|
||||||
|
"US/Eastern",
|
||||||
|
"US/Hawaii",
|
||||||
|
"US/Indiana-Starke",
|
||||||
|
"US/Michigan",
|
||||||
|
"US/Mountain",
|
||||||
|
"US/Pacific",
|
||||||
|
"US/Samoa",
|
||||||
|
"UTC",
|
||||||
|
"Universal",
|
||||||
|
"W-SU",
|
||||||
|
"WET",
|
||||||
|
"Zulu",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
|
@ -1077,10 +1077,10 @@ class Tokenizer(metaclass=_Tokenizer):
|
||||||
literal = ""
|
literal = ""
|
||||||
|
|
||||||
while self._peek.strip() and self._peek not in self.SINGLE_TOKENS:
|
while self._peek.strip() and self._peek not in self.SINGLE_TOKENS:
|
||||||
literal += self._peek.upper()
|
literal += self._peek
|
||||||
self._advance()
|
self._advance()
|
||||||
|
|
||||||
token_type = self.KEYWORDS.get(self.NUMERIC_LITERALS.get(literal, ""))
|
token_type = self.KEYWORDS.get(self.NUMERIC_LITERALS.get(literal.upper(), ""))
|
||||||
|
|
||||||
if token_type:
|
if token_type:
|
||||||
self._add(TokenType.NUMBER, number_text)
|
self._add(TokenType.NUMBER, number_text)
|
||||||
|
|
|
@ -164,8 +164,9 @@ def unnest_to_explode(expression: exp.Expression) -> exp.Expression:
|
||||||
|
|
||||||
|
|
||||||
def explode_to_unnest(index_offset: int = 0) -> t.Callable[[exp.Expression], exp.Expression]:
|
def explode_to_unnest(index_offset: int = 0) -> t.Callable[[exp.Expression], exp.Expression]:
|
||||||
def _explode_to_unnest(expression: exp.Expression) -> exp.Expression:
|
|
||||||
"""Convert explode/posexplode into unnest (used in hive -> presto)."""
|
"""Convert explode/posexplode into unnest (used in hive -> presto)."""
|
||||||
|
|
||||||
|
def _explode_to_unnest(expression: exp.Expression) -> exp.Expression:
|
||||||
if isinstance(expression, exp.Select):
|
if isinstance(expression, exp.Select):
|
||||||
from sqlglot.optimizer.scope import Scope
|
from sqlglot.optimizer.scope import Scope
|
||||||
|
|
||||||
|
@ -297,6 +298,7 @@ PERCENTILES = (exp.PercentileCont, exp.PercentileDisc)
|
||||||
|
|
||||||
|
|
||||||
def add_within_group_for_percentiles(expression: exp.Expression) -> exp.Expression:
|
def add_within_group_for_percentiles(expression: exp.Expression) -> exp.Expression:
|
||||||
|
"""Transforms percentiles by adding a WITHIN GROUP clause to them."""
|
||||||
if (
|
if (
|
||||||
isinstance(expression, PERCENTILES)
|
isinstance(expression, PERCENTILES)
|
||||||
and not isinstance(expression.parent, exp.WithinGroup)
|
and not isinstance(expression.parent, exp.WithinGroup)
|
||||||
|
@ -311,6 +313,7 @@ def add_within_group_for_percentiles(expression: exp.Expression) -> exp.Expressi
|
||||||
|
|
||||||
|
|
||||||
def remove_within_group_for_percentiles(expression: exp.Expression) -> exp.Expression:
|
def remove_within_group_for_percentiles(expression: exp.Expression) -> exp.Expression:
|
||||||
|
"""Transforms percentiles by getting rid of their corresponding WITHIN GROUP clause."""
|
||||||
if (
|
if (
|
||||||
isinstance(expression, exp.WithinGroup)
|
isinstance(expression, exp.WithinGroup)
|
||||||
and isinstance(expression.this, PERCENTILES)
|
and isinstance(expression.this, PERCENTILES)
|
||||||
|
@ -324,6 +327,7 @@ def remove_within_group_for_percentiles(expression: exp.Expression) -> exp.Expre
|
||||||
|
|
||||||
|
|
||||||
def add_recursive_cte_column_names(expression: exp.Expression) -> exp.Expression:
|
def add_recursive_cte_column_names(expression: exp.Expression) -> exp.Expression:
|
||||||
|
"""Uses projection output names in recursive CTE definitions to define the CTEs' columns."""
|
||||||
if isinstance(expression, exp.With) and expression.recursive:
|
if isinstance(expression, exp.With) and expression.recursive:
|
||||||
next_name = name_sequence("_c_")
|
next_name = name_sequence("_c_")
|
||||||
|
|
||||||
|
@ -342,6 +346,7 @@ def add_recursive_cte_column_names(expression: exp.Expression) -> exp.Expression
|
||||||
|
|
||||||
|
|
||||||
def epoch_cast_to_ts(expression: exp.Expression) -> exp.Expression:
|
def epoch_cast_to_ts(expression: exp.Expression) -> exp.Expression:
|
||||||
|
"""Replace 'epoch' in casts by the equivalent date literal."""
|
||||||
if (
|
if (
|
||||||
isinstance(expression, (exp.Cast, exp.TryCast))
|
isinstance(expression, (exp.Cast, exp.TryCast))
|
||||||
and expression.name.lower() == "epoch"
|
and expression.name.lower() == "epoch"
|
||||||
|
@ -352,16 +357,8 @@ def epoch_cast_to_ts(expression: exp.Expression) -> exp.Expression:
|
||||||
return expression
|
return expression
|
||||||
|
|
||||||
|
|
||||||
def timestamp_to_cast(expression: exp.Expression) -> exp.Expression:
|
|
||||||
if isinstance(expression, exp.Timestamp) and not expression.expression:
|
|
||||||
return exp.cast(
|
|
||||||
expression.this,
|
|
||||||
to=exp.DataType.Type.TIMESTAMP,
|
|
||||||
)
|
|
||||||
return expression
|
|
||||||
|
|
||||||
|
|
||||||
def eliminate_semi_and_anti_joins(expression: exp.Expression) -> exp.Expression:
|
def eliminate_semi_and_anti_joins(expression: exp.Expression) -> exp.Expression:
|
||||||
|
"""Convert SEMI and ANTI joins into equivalent forms that use EXIST instead."""
|
||||||
if isinstance(expression, exp.Select):
|
if isinstance(expression, exp.Select):
|
||||||
for join in expression.args.get("joins") or []:
|
for join in expression.args.get("joins") or []:
|
||||||
on = join.args.get("on")
|
on = join.args.get("on")
|
||||||
|
|
|
@ -9,6 +9,10 @@ class TestBigQuery(Validator):
|
||||||
maxDiff = None
|
maxDiff = None
|
||||||
|
|
||||||
def test_bigquery(self):
|
def test_bigquery(self):
|
||||||
|
self.validate_identity("CREATE SCHEMA x DEFAULT COLLATE 'en'")
|
||||||
|
self.validate_identity("CREATE TABLE x (y INT64) DEFAULT COLLATE 'en'")
|
||||||
|
self.validate_identity("PARSE_JSON('{}', wide_number_mode => 'exact')")
|
||||||
|
|
||||||
with self.assertRaises(TokenError):
|
with self.assertRaises(TokenError):
|
||||||
transpile("'\\'", read="bigquery")
|
transpile("'\\'", read="bigquery")
|
||||||
|
|
||||||
|
@ -138,6 +142,20 @@ class TestBigQuery(Validator):
|
||||||
self.validate_all('x <> """"""', write={"bigquery": "x <> ''"})
|
self.validate_all('x <> """"""', write={"bigquery": "x <> ''"})
|
||||||
self.validate_all("x <> ''''''", write={"bigquery": "x <> ''"})
|
self.validate_all("x <> ''''''", write={"bigquery": "x <> ''"})
|
||||||
self.validate_all("CAST(x AS DATETIME)", read={"": "x::timestamp"})
|
self.validate_all("CAST(x AS DATETIME)", read={"": "x::timestamp"})
|
||||||
|
self.validate_all(
|
||||||
|
"SELECT * FROM t WHERE EXISTS(SELECT * FROM unnest(nums) AS x WHERE x > 1)",
|
||||||
|
write={
|
||||||
|
"bigquery": "SELECT * FROM t WHERE EXISTS(SELECT * FROM UNNEST(nums) AS x WHERE x > 1)",
|
||||||
|
"duckdb": "SELECT * FROM t WHERE EXISTS(SELECT * FROM UNNEST(nums) AS _t(x) WHERE x > 1)",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
self.validate_all(
|
||||||
|
"NULL",
|
||||||
|
read={
|
||||||
|
"duckdb": "NULL = a",
|
||||||
|
"postgres": "a = NULL",
|
||||||
|
},
|
||||||
|
)
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
"SELECT '\\n'",
|
"SELECT '\\n'",
|
||||||
read={
|
read={
|
||||||
|
@ -465,9 +483,8 @@ class TestBigQuery(Validator):
|
||||||
},
|
},
|
||||||
write={
|
write={
|
||||||
"bigquery": "SELECT * FROM UNNEST(['7', '14']) AS x",
|
"bigquery": "SELECT * FROM UNNEST(['7', '14']) AS x",
|
||||||
"presto": "SELECT * FROM UNNEST(ARRAY['7', '14']) AS (x)",
|
"presto": "SELECT * FROM UNNEST(ARRAY['7', '14']) AS _t(x)",
|
||||||
"hive": "SELECT * FROM UNNEST(ARRAY('7', '14')) AS (x)",
|
"spark": "SELECT * FROM UNNEST(ARRAY('7', '14')) AS _t(x)",
|
||||||
"spark": "SELECT * FROM UNNEST(ARRAY('7', '14')) AS (x)",
|
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
|
|
|
@ -6,6 +6,22 @@ class TestClickhouse(Validator):
|
||||||
dialect = "clickhouse"
|
dialect = "clickhouse"
|
||||||
|
|
||||||
def test_clickhouse(self):
|
def test_clickhouse(self):
|
||||||
|
self.validate_identity("x <> y")
|
||||||
|
|
||||||
|
self.validate_all(
|
||||||
|
"has([1], x)",
|
||||||
|
read={
|
||||||
|
"postgres": "x = any(array[1])",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
self.validate_all(
|
||||||
|
"NOT has([1], x)",
|
||||||
|
read={
|
||||||
|
"postgres": "any(array[1]) <> x",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
self.validate_identity("x = y")
|
||||||
|
|
||||||
string_types = [
|
string_types = [
|
||||||
"BLOB",
|
"BLOB",
|
||||||
"LONGBLOB",
|
"LONGBLOB",
|
||||||
|
@ -85,6 +101,39 @@ class TestClickhouse(Validator):
|
||||||
"CREATE MATERIALIZED VIEW test_view (id UInt8) TO db.table1 AS SELECT * FROM test_data"
|
"CREATE MATERIALIZED VIEW test_view (id UInt8) TO db.table1 AS SELECT * FROM test_data"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
self.validate_all(
|
||||||
|
"SELECT CAST('2020-01-01' AS TIMESTAMP) + INTERVAL '500' microsecond",
|
||||||
|
read={
|
||||||
|
"duckdb": "SELECT TIMESTAMP '2020-01-01' + INTERVAL '500 us'",
|
||||||
|
"postgres": "SELECT TIMESTAMP '2020-01-01' + INTERVAL '500 us'",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
self.validate_all(
|
||||||
|
"SELECT CURRENT_DATE()",
|
||||||
|
read={
|
||||||
|
"clickhouse": "SELECT CURRENT_DATE()",
|
||||||
|
"postgres": "SELECT CURRENT_DATE",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
self.validate_all(
|
||||||
|
"SELECT CURRENT_TIMESTAMP()",
|
||||||
|
read={
|
||||||
|
"clickhouse": "SELECT CURRENT_TIMESTAMP()",
|
||||||
|
"postgres": "SELECT CURRENT_TIMESTAMP",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
self.validate_all(
|
||||||
|
"SELECT match('ThOmAs', CONCAT('(?i)', 'thomas'))",
|
||||||
|
read={
|
||||||
|
"postgres": "SELECT 'ThOmAs' ~* 'thomas'",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
self.validate_all(
|
||||||
|
"SELECT match('ThOmAs', CONCAT('(?i)', x)) FROM t",
|
||||||
|
read={
|
||||||
|
"postgres": "SELECT 'ThOmAs' ~* x FROM t",
|
||||||
|
},
|
||||||
|
)
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
"SELECT '\\0'",
|
"SELECT '\\0'",
|
||||||
read={
|
read={
|
||||||
|
|
|
@ -6,8 +6,8 @@ class TestDatabricks(Validator):
|
||||||
|
|
||||||
def test_databricks(self):
|
def test_databricks(self):
|
||||||
self.validate_identity("CREATE TABLE t (c STRUCT<interval: DOUBLE COMMENT 'aaa'>)")
|
self.validate_identity("CREATE TABLE t (c STRUCT<interval: DOUBLE COMMENT 'aaa'>)")
|
||||||
self.validate_identity("CREATE TABLE my_table () TBLPROPERTIES (a.b=15)")
|
self.validate_identity("CREATE TABLE my_table TBLPROPERTIES (a.b=15)")
|
||||||
self.validate_identity("CREATE TABLE my_table () TBLPROPERTIES ('a.b'=15)")
|
self.validate_identity("CREATE TABLE my_table TBLPROPERTIES ('a.b'=15)")
|
||||||
self.validate_identity("SELECT CAST('11 23:4:0' AS INTERVAL DAY TO HOUR)")
|
self.validate_identity("SELECT CAST('11 23:4:0' AS INTERVAL DAY TO HOUR)")
|
||||||
self.validate_identity("SELECT CAST('11 23:4:0' AS INTERVAL DAY TO MINUTE)")
|
self.validate_identity("SELECT CAST('11 23:4:0' AS INTERVAL DAY TO MINUTE)")
|
||||||
self.validate_identity("SELECT CAST('11 23:4:0' AS INTERVAL DAY TO SECOND)")
|
self.validate_identity("SELECT CAST('11 23:4:0' AS INTERVAL DAY TO SECOND)")
|
||||||
|
|
|
@ -99,6 +99,7 @@ class TestDialect(Validator):
|
||||||
"snowflake": "CAST(a AS TEXT)",
|
"snowflake": "CAST(a AS TEXT)",
|
||||||
"spark": "CAST(a AS STRING)",
|
"spark": "CAST(a AS STRING)",
|
||||||
"starrocks": "CAST(a AS STRING)",
|
"starrocks": "CAST(a AS STRING)",
|
||||||
|
"tsql": "CAST(a AS VARCHAR(MAX))",
|
||||||
"doris": "CAST(a AS STRING)",
|
"doris": "CAST(a AS STRING)",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
@ -179,6 +180,7 @@ class TestDialect(Validator):
|
||||||
"snowflake": "CAST(a AS TEXT)",
|
"snowflake": "CAST(a AS TEXT)",
|
||||||
"spark": "CAST(a AS STRING)",
|
"spark": "CAST(a AS STRING)",
|
||||||
"starrocks": "CAST(a AS STRING)",
|
"starrocks": "CAST(a AS STRING)",
|
||||||
|
"tsql": "CAST(a AS VARCHAR(MAX))",
|
||||||
"doris": "CAST(a AS STRING)",
|
"doris": "CAST(a AS STRING)",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
@ -197,6 +199,7 @@ class TestDialect(Validator):
|
||||||
"snowflake": "CAST(a AS VARCHAR)",
|
"snowflake": "CAST(a AS VARCHAR)",
|
||||||
"spark": "CAST(a AS STRING)",
|
"spark": "CAST(a AS STRING)",
|
||||||
"starrocks": "CAST(a AS VARCHAR)",
|
"starrocks": "CAST(a AS VARCHAR)",
|
||||||
|
"tsql": "CAST(a AS VARCHAR)",
|
||||||
"doris": "CAST(a AS VARCHAR)",
|
"doris": "CAST(a AS VARCHAR)",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
@ -215,6 +218,7 @@ class TestDialect(Validator):
|
||||||
"snowflake": "CAST(a AS VARCHAR(3))",
|
"snowflake": "CAST(a AS VARCHAR(3))",
|
||||||
"spark": "CAST(a AS VARCHAR(3))",
|
"spark": "CAST(a AS VARCHAR(3))",
|
||||||
"starrocks": "CAST(a AS VARCHAR(3))",
|
"starrocks": "CAST(a AS VARCHAR(3))",
|
||||||
|
"tsql": "CAST(a AS VARCHAR(3))",
|
||||||
"doris": "CAST(a AS VARCHAR(3))",
|
"doris": "CAST(a AS VARCHAR(3))",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
|
@ -249,6 +249,7 @@ class TestDuckDB(Validator):
|
||||||
"SELECT ARRAY_LENGTH([0], 1) AS x",
|
"SELECT ARRAY_LENGTH([0], 1) AS x",
|
||||||
write={"duckdb": "SELECT ARRAY_LENGTH([0], 1) AS x"},
|
write={"duckdb": "SELECT ARRAY_LENGTH([0], 1) AS x"},
|
||||||
)
|
)
|
||||||
|
self.validate_identity("REGEXP_REPLACE(this, pattern, replacement, modifiers)")
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
"REGEXP_MATCHES(x, y)",
|
"REGEXP_MATCHES(x, y)",
|
||||||
write={
|
write={
|
||||||
|
|
|
@ -586,6 +586,8 @@ class TestMySQL(Validator):
|
||||||
write={
|
write={
|
||||||
"mysql": "SELECT * FROM test LIMIT 1 OFFSET 1",
|
"mysql": "SELECT * FROM test LIMIT 1 OFFSET 1",
|
||||||
"postgres": "SELECT * FROM test LIMIT 0 + 1 OFFSET 0 + 1",
|
"postgres": "SELECT * FROM test LIMIT 0 + 1 OFFSET 0 + 1",
|
||||||
|
"presto": "SELECT * FROM test OFFSET 1 LIMIT 1",
|
||||||
|
"trino": "SELECT * FROM test OFFSET 1 LIMIT 1",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
|
|
|
@ -732,3 +732,8 @@ class TestPostgres(Validator):
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
"VAR_POP(x)", read={"": "VARIANCE_POP(x)"}, write={"postgres": "VAR_POP(x)"}
|
"VAR_POP(x)", read={"": "VARIANCE_POP(x)"}, write={"postgres": "VAR_POP(x)"}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_regexp_binary(self):
|
||||||
|
"""See https://github.com/tobymao/sqlglot/pull/2404 for details."""
|
||||||
|
self.assertIsInstance(parse_one("'thomas' ~ '.*thomas.*'", read="postgres"), exp.Binary)
|
||||||
|
self.assertIsInstance(parse_one("'thomas' ~* '.*thomas.*'", read="postgres"), exp.Binary)
|
||||||
|
|
|
@ -367,6 +367,21 @@ class TestPresto(Validator):
|
||||||
"CAST(x AS TIMESTAMP)",
|
"CAST(x AS TIMESTAMP)",
|
||||||
read={"mysql": "TIMESTAMP(x)"},
|
read={"mysql": "TIMESTAMP(x)"},
|
||||||
)
|
)
|
||||||
|
self.validate_all(
|
||||||
|
"TIMESTAMP(x, 'America/Los_Angeles')",
|
||||||
|
write={
|
||||||
|
"duckdb": "CAST(x AS TIMESTAMP) AT TIME ZONE 'America/Los_Angeles'",
|
||||||
|
"presto": "CAST(x AS TIMESTAMP) AT TIME ZONE 'America/Los_Angeles'",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
# this case isn't really correct, but it's a fall back for mysql's version
|
||||||
|
self.validate_all(
|
||||||
|
"TIMESTAMP(x, '12:00:00')",
|
||||||
|
write={
|
||||||
|
"duckdb": "TIMESTAMP(x, '12:00:00')",
|
||||||
|
"presto": "TIMESTAMP(x, '12:00:00')",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
def test_ddl(self):
|
def test_ddl(self):
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
|
@ -441,6 +456,22 @@ class TestPresto(Validator):
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
self.validate_all(
|
||||||
|
"CREATE OR REPLACE VIEW x (cola) SELECT 1 as cola",
|
||||||
|
write={
|
||||||
|
"spark": "CREATE OR REPLACE VIEW x (cola) AS SELECT 1 AS cola",
|
||||||
|
"presto": "CREATE OR REPLACE VIEW x AS SELECT 1 AS cola",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
self.validate_all(
|
||||||
|
'CREATE TABLE IF NOT EXISTS x ("cola" INTEGER, "ds" TEXT) WITH (PARTITIONED BY=("ds"))',
|
||||||
|
write={
|
||||||
|
"spark": "CREATE TABLE IF NOT EXISTS x (`cola` INT, `ds` STRING) PARTITIONED BY (`ds`)",
|
||||||
|
"presto": """CREATE TABLE IF NOT EXISTS x ("cola" INTEGER, "ds" VARCHAR) WITH (PARTITIONED_BY=ARRAY['ds'])""",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
def test_quotes(self):
|
def test_quotes(self):
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
"''''",
|
"''''",
|
||||||
|
@ -527,6 +558,37 @@ class TestPresto(Validator):
|
||||||
"SELECT SPLIT_TO_MAP('a:1;b:2;a:3', ';', ':', (k, v1, v2) -> CONCAT(v1, v2))"
|
"SELECT SPLIT_TO_MAP('a:1;b:2;a:3', ';', ':', (k, v1, v2) -> CONCAT(v1, v2))"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
self.validate_all(
|
||||||
|
"SELECT MAX_BY(a.id, a.timestamp) FROM a",
|
||||||
|
read={
|
||||||
|
"bigquery": "SELECT MAX_BY(a.id, a.timestamp) FROM a",
|
||||||
|
"clickhouse": "SELECT argMax(a.id, a.timestamp) FROM a",
|
||||||
|
"duckdb": "SELECT MAX_BY(a.id, a.timestamp) FROM a",
|
||||||
|
"snowflake": "SELECT MAX_BY(a.id, a.timestamp) FROM a",
|
||||||
|
"spark": "SELECT MAX_BY(a.id, a.timestamp) FROM a",
|
||||||
|
"teradata": "SELECT MAX_BY(a.id, a.timestamp) FROM a",
|
||||||
|
},
|
||||||
|
write={
|
||||||
|
"bigquery": "SELECT MAX_BY(a.id, a.timestamp) FROM a",
|
||||||
|
"clickhouse": "SELECT argMax(a.id, a.timestamp) FROM a",
|
||||||
|
"duckdb": "SELECT ARG_MAX(a.id, a.timestamp) FROM a",
|
||||||
|
"presto": "SELECT MAX_BY(a.id, a.timestamp) FROM a",
|
||||||
|
"snowflake": "SELECT MAX_BY(a.id, a.timestamp) FROM a",
|
||||||
|
"spark": "SELECT MAX_BY(a.id, a.timestamp) FROM a",
|
||||||
|
"teradata": "SELECT MAX_BY(a.id, a.timestamp) FROM a",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
self.validate_all(
|
||||||
|
"SELECT MIN_BY(a.id, a.timestamp, 3) FROM a",
|
||||||
|
write={
|
||||||
|
"clickhouse": "SELECT argMin(a.id, a.timestamp) FROM a",
|
||||||
|
"duckdb": "SELECT ARG_MIN(a.id, a.timestamp) FROM a",
|
||||||
|
"presto": "SELECT MIN_BY(a.id, a.timestamp, 3) FROM a",
|
||||||
|
"snowflake": "SELECT MIN_BY(a.id, a.timestamp, 3) FROM a",
|
||||||
|
"spark": "SELECT MIN_BY(a.id, a.timestamp) FROM a",
|
||||||
|
"teradata": "SELECT MIN_BY(a.id, a.timestamp, 3) FROM a",
|
||||||
|
},
|
||||||
|
)
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
"""JSON '"foo"'""",
|
"""JSON '"foo"'""",
|
||||||
write={
|
write={
|
||||||
|
|
|
@ -6,6 +6,10 @@ class TestRedshift(Validator):
|
||||||
dialect = "redshift"
|
dialect = "redshift"
|
||||||
|
|
||||||
def test_redshift(self):
|
def test_redshift(self):
|
||||||
|
self.validate_identity(
|
||||||
|
"SELECT * FROM x WHERE y = DATEADD('month', -1, DATE_TRUNC('month', (SELECT y FROM #temp_table)))",
|
||||||
|
"SELECT * FROM x WHERE y = DATEADD(month, -1, CAST(DATE_TRUNC('month', (SELECT y FROM #temp_table)) AS DATE))",
|
||||||
|
)
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
"SELECT APPROXIMATE COUNT(DISTINCT y)",
|
"SELECT APPROXIMATE COUNT(DISTINCT y)",
|
||||||
read={
|
read={
|
||||||
|
@ -16,13 +20,6 @@ class TestRedshift(Validator):
|
||||||
"spark": "SELECT APPROX_COUNT_DISTINCT(y)",
|
"spark": "SELECT APPROX_COUNT_DISTINCT(y)",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
self.validate_identity("SELECT APPROXIMATE AS y")
|
|
||||||
|
|
||||||
self.validate_identity(
|
|
||||||
"SELECT 'a''b'",
|
|
||||||
"SELECT 'a\\'b'",
|
|
||||||
)
|
|
||||||
|
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
"x ~* 'pat'",
|
"x ~* 'pat'",
|
||||||
write={
|
write={
|
||||||
|
@ -30,7 +27,6 @@ class TestRedshift(Validator):
|
||||||
"snowflake": "REGEXP_LIKE(x, 'pat', 'i')",
|
"snowflake": "REGEXP_LIKE(x, 'pat', 'i')",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
"SELECT CAST('01:03:05.124' AS TIME(2) WITH TIME ZONE)",
|
"SELECT CAST('01:03:05.124' AS TIME(2) WITH TIME ZONE)",
|
||||||
read={
|
read={
|
||||||
|
@ -248,6 +244,19 @@ class TestRedshift(Validator):
|
||||||
self.validate_identity("CAST('foo' AS HLLSKETCH)")
|
self.validate_identity("CAST('foo' AS HLLSKETCH)")
|
||||||
self.validate_identity("'abc' SIMILAR TO '(b|c)%'")
|
self.validate_identity("'abc' SIMILAR TO '(b|c)%'")
|
||||||
self.validate_identity("CREATE TABLE datetable (start_date DATE, end_date DATE)")
|
self.validate_identity("CREATE TABLE datetable (start_date DATE, end_date DATE)")
|
||||||
|
self.validate_identity("SELECT APPROXIMATE AS y")
|
||||||
|
self.validate_identity("CREATE TABLE t (c BIGINT IDENTITY(0, 1))")
|
||||||
|
self.validate_identity(
|
||||||
|
"SELECT 'a''b'",
|
||||||
|
"SELECT 'a\\'b'",
|
||||||
|
)
|
||||||
|
self.validate_identity(
|
||||||
|
"CREATE TABLE t (c BIGINT GENERATED BY DEFAULT AS IDENTITY (0, 1))",
|
||||||
|
"CREATE TABLE t (c BIGINT IDENTITY(0, 1))",
|
||||||
|
)
|
||||||
|
self.validate_identity(
|
||||||
|
"CREATE OR REPLACE VIEW v1 AS SELECT id, AVG(average_metric1) AS m1, AVG(average_metric2) AS m2 FROM t GROUP BY id WITH NO SCHEMA BINDING"
|
||||||
|
)
|
||||||
self.validate_identity(
|
self.validate_identity(
|
||||||
"SELECT caldate + INTERVAL '1 second' AS dateplus FROM date WHERE caldate = '12-31-2008'"
|
"SELECT caldate + INTERVAL '1 second' AS dateplus FROM date WHERE caldate = '12-31-2008'"
|
||||||
)
|
)
|
||||||
|
@ -301,6 +310,7 @@ ORDER BY
|
||||||
self.validate_identity(
|
self.validate_identity(
|
||||||
"SELECT attr AS attr, JSON_TYPEOF(val) AS value_type FROM customer_orders_lineitem AS c, UNPIVOT c.c_orders AS val AT attr WHERE c_custkey = 9451"
|
"SELECT attr AS attr, JSON_TYPEOF(val) AS value_type FROM customer_orders_lineitem AS c, UNPIVOT c.c_orders AS val AT attr WHERE c_custkey = 9451"
|
||||||
)
|
)
|
||||||
|
self.validate_identity("SELECT JSON_PARSE('[]')")
|
||||||
|
|
||||||
def test_values(self):
|
def test_values(self):
|
||||||
# Test crazy-sized VALUES clause to UNION ALL conversion to ensure we don't get RecursionError
|
# Test crazy-sized VALUES clause to UNION ALL conversion to ensure we don't get RecursionError
|
||||||
|
|
|
@ -9,6 +9,12 @@ class TestSnowflake(Validator):
|
||||||
dialect = "snowflake"
|
dialect = "snowflake"
|
||||||
|
|
||||||
def test_snowflake(self):
|
def test_snowflake(self):
|
||||||
|
expr = parse_one("SELECT APPROX_TOP_K(C4, 3, 5) FROM t")
|
||||||
|
expr.selects[0].assert_is(exp.AggFunc)
|
||||||
|
self.assertEqual(expr.sql(dialect="snowflake"), "SELECT APPROX_TOP_K(C4, 3, 5) FROM t")
|
||||||
|
|
||||||
|
self.validate_identity("SELECT DAYOFMONTH(CURRENT_TIMESTAMP())")
|
||||||
|
self.validate_identity("SELECT DAYOFYEAR(CURRENT_TIMESTAMP())")
|
||||||
self.validate_identity("LISTAGG(data['some_field'], ',')")
|
self.validate_identity("LISTAGG(data['some_field'], ',')")
|
||||||
self.validate_identity("WEEKOFYEAR(tstamp)")
|
self.validate_identity("WEEKOFYEAR(tstamp)")
|
||||||
self.validate_identity("SELECT SUM(amount) FROM mytable GROUP BY ALL")
|
self.validate_identity("SELECT SUM(amount) FROM mytable GROUP BY ALL")
|
||||||
|
@ -36,6 +42,7 @@ class TestSnowflake(Validator):
|
||||||
self.validate_identity("COMMENT IF EXISTS ON TABLE foo IS 'bar'")
|
self.validate_identity("COMMENT IF EXISTS ON TABLE foo IS 'bar'")
|
||||||
self.validate_identity("SELECT CONVERT_TIMEZONE('UTC', 'America/Los_Angeles', col)")
|
self.validate_identity("SELECT CONVERT_TIMEZONE('UTC', 'America/Los_Angeles', col)")
|
||||||
self.validate_identity("REGEXP_REPLACE('target', 'pattern', '\n')")
|
self.validate_identity("REGEXP_REPLACE('target', 'pattern', '\n')")
|
||||||
|
self.validate_identity("ALTER TABLE a SWAP WITH b")
|
||||||
self.validate_identity(
|
self.validate_identity(
|
||||||
'DESCRIBE TABLE "SNOWFLAKE_SAMPLE_DATA"."TPCDS_SF100TCL"."WEB_SITE" type=stage'
|
'DESCRIBE TABLE "SNOWFLAKE_SAMPLE_DATA"."TPCDS_SF100TCL"."WEB_SITE" type=stage'
|
||||||
)
|
)
|
||||||
|
@ -58,6 +65,18 @@ class TestSnowflake(Validator):
|
||||||
"SELECT {'test': 'best'}::VARIANT",
|
"SELECT {'test': 'best'}::VARIANT",
|
||||||
"SELECT CAST(OBJECT_CONSTRUCT('test', 'best') AS VARIANT)",
|
"SELECT CAST(OBJECT_CONSTRUCT('test', 'best') AS VARIANT)",
|
||||||
)
|
)
|
||||||
|
self.validate_identity(
|
||||||
|
"SELECT {fn DAYNAME('2022-5-13')}",
|
||||||
|
"SELECT DAYNAME('2022-5-13')",
|
||||||
|
)
|
||||||
|
self.validate_identity(
|
||||||
|
"SELECT {fn LOG(5)}",
|
||||||
|
"SELECT LN(5)",
|
||||||
|
)
|
||||||
|
self.validate_identity(
|
||||||
|
"SELECT {fn CEILING(5.3)}",
|
||||||
|
"SELECT CEIL(5.3)",
|
||||||
|
)
|
||||||
|
|
||||||
self.validate_all("CAST(x AS BYTEINT)", write={"snowflake": "CAST(x AS INT)"})
|
self.validate_all("CAST(x AS BYTEINT)", write={"snowflake": "CAST(x AS INT)"})
|
||||||
self.validate_all("CAST(x AS CHAR VARYING)", write={"snowflake": "CAST(x AS VARCHAR)"})
|
self.validate_all("CAST(x AS CHAR VARYING)", write={"snowflake": "CAST(x AS VARCHAR)"})
|
||||||
|
@ -911,7 +930,23 @@ FROM cs.telescope.dag_report, TABLE(FLATTEN(input => SPLIT(operators, ','))) AS
|
||||||
f.value AS "Contact",
|
f.value AS "Contact",
|
||||||
f1.value['type'] AS "Type",
|
f1.value['type'] AS "Type",
|
||||||
f1.value['content'] AS "Details"
|
f1.value['content'] AS "Details"
|
||||||
FROM persons AS p, LATERAL FLATTEN(input => p.c, path => 'contact') AS f, LATERAL FLATTEN(input => f.value['business']) AS f1""",
|
FROM persons AS p, LATERAL FLATTEN(input => p.c, path => 'contact') AS f(SEQ, KEY, PATH, INDEX, VALUE, THIS), LATERAL FLATTEN(input => f.value['business']) AS f1(SEQ, KEY, PATH, INDEX, VALUE, THIS)""",
|
||||||
|
},
|
||||||
|
pretty=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.validate_all(
|
||||||
|
"""
|
||||||
|
SELECT id as "ID",
|
||||||
|
value AS "Contact"
|
||||||
|
FROM persons p,
|
||||||
|
lateral flatten(input => p.c, path => 'contact')
|
||||||
|
""",
|
||||||
|
write={
|
||||||
|
"snowflake": """SELECT
|
||||||
|
id AS "ID",
|
||||||
|
value AS "Contact"
|
||||||
|
FROM persons AS p, LATERAL FLATTEN(input => p.c, path => 'contact') AS _flattened(SEQ, KEY, PATH, INDEX, VALUE, THIS)""",
|
||||||
},
|
},
|
||||||
pretty=True,
|
pretty=True,
|
||||||
)
|
)
|
||||||
|
@ -1134,3 +1169,8 @@ MATCH_RECOGNIZE (
|
||||||
|
|
||||||
self.assertIsNotNone(table)
|
self.assertIsNotNone(table)
|
||||||
self.assertEqual(table.sql(dialect="snowflake"), '"TEST"."PUBLIC"."customers"')
|
self.assertEqual(table.sql(dialect="snowflake"), '"TEST"."PUBLIC"."customers"')
|
||||||
|
|
||||||
|
def test_swap(self):
|
||||||
|
ast = parse_one("ALTER TABLE a SWAP WITH b", read="snowflake")
|
||||||
|
assert isinstance(ast, exp.AlterTable)
|
||||||
|
assert isinstance(ast.args["actions"][0], exp.SwapTable)
|
||||||
|
|
|
@ -230,6 +230,7 @@ TBLPROPERTIES (
|
||||||
self.assertIsInstance(expr.args.get("ignore_nulls"), exp.Boolean)
|
self.assertIsInstance(expr.args.get("ignore_nulls"), exp.Boolean)
|
||||||
self.assertEqual(expr.sql(dialect="spark"), "ANY_VALUE(col, TRUE)")
|
self.assertEqual(expr.sql(dialect="spark"), "ANY_VALUE(col, TRUE)")
|
||||||
|
|
||||||
|
self.validate_identity("SELECT CASE WHEN a = NULL THEN 1 ELSE 2 END")
|
||||||
self.validate_identity("SELECT * FROM t1 SEMI JOIN t2 ON t1.x = t2.x")
|
self.validate_identity("SELECT * FROM t1 SEMI JOIN t2 ON t1.x = t2.x")
|
||||||
self.validate_identity("SELECT TRANSFORM(ARRAY(1, 2, 3), x -> x + 1)")
|
self.validate_identity("SELECT TRANSFORM(ARRAY(1, 2, 3), x -> x + 1)")
|
||||||
self.validate_identity("SELECT TRANSFORM(ARRAY(1, 2, 3), (x, i) -> x + i)")
|
self.validate_identity("SELECT TRANSFORM(ARRAY(1, 2, 3), (x, i) -> x + i)")
|
||||||
|
@ -295,7 +296,7 @@ TBLPROPERTIES (
|
||||||
},
|
},
|
||||||
write={
|
write={
|
||||||
"spark": "SELECT DATEDIFF(month, TO_DATE(CAST('1996-10-30' AS TIMESTAMP)), TO_DATE(CAST('1997-02-28 10:30:00' AS TIMESTAMP)))",
|
"spark": "SELECT DATEDIFF(month, TO_DATE(CAST('1996-10-30' AS TIMESTAMP)), TO_DATE(CAST('1997-02-28 10:30:00' AS TIMESTAMP)))",
|
||||||
"spark2": "SELECT MONTHS_BETWEEN(TO_DATE(CAST('1997-02-28 10:30:00' AS TIMESTAMP)), TO_DATE(CAST('1996-10-30' AS TIMESTAMP)))",
|
"spark2": "SELECT CAST(MONTHS_BETWEEN(TO_DATE(CAST('1997-02-28 10:30:00' AS TIMESTAMP)), TO_DATE(CAST('1996-10-30' AS TIMESTAMP))) AS INT)",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
|
@ -403,10 +404,10 @@ TBLPROPERTIES (
|
||||||
"SELECT DATEDIFF(MONTH, '2020-01-01', '2020-03-05')",
|
"SELECT DATEDIFF(MONTH, '2020-01-01', '2020-03-05')",
|
||||||
write={
|
write={
|
||||||
"databricks": "SELECT DATEDIFF(MONTH, TO_DATE('2020-01-01'), TO_DATE('2020-03-05'))",
|
"databricks": "SELECT DATEDIFF(MONTH, TO_DATE('2020-01-01'), TO_DATE('2020-03-05'))",
|
||||||
"hive": "SELECT MONTHS_BETWEEN(TO_DATE('2020-03-05'), TO_DATE('2020-01-01'))",
|
"hive": "SELECT CAST(MONTHS_BETWEEN(TO_DATE('2020-03-05'), TO_DATE('2020-01-01')) AS INT)",
|
||||||
"presto": "SELECT DATE_DIFF('MONTH', CAST(CAST('2020-01-01' AS TIMESTAMP) AS DATE), CAST(CAST('2020-03-05' AS TIMESTAMP) AS DATE))",
|
"presto": "SELECT DATE_DIFF('MONTH', CAST(CAST('2020-01-01' AS TIMESTAMP) AS DATE), CAST(CAST('2020-03-05' AS TIMESTAMP) AS DATE))",
|
||||||
"spark": "SELECT DATEDIFF(MONTH, TO_DATE('2020-01-01'), TO_DATE('2020-03-05'))",
|
"spark": "SELECT DATEDIFF(MONTH, TO_DATE('2020-01-01'), TO_DATE('2020-03-05'))",
|
||||||
"spark2": "SELECT MONTHS_BETWEEN(TO_DATE('2020-03-05'), TO_DATE('2020-01-01'))",
|
"spark2": "SELECT CAST(MONTHS_BETWEEN(TO_DATE('2020-03-05'), TO_DATE('2020-01-01')) AS INT)",
|
||||||
"trino": "SELECT DATE_DIFF('MONTH', CAST(CAST('2020-01-01' AS TIMESTAMP) AS DATE), CAST(CAST('2020-03-05' AS TIMESTAMP) AS DATE))",
|
"trino": "SELECT DATE_DIFF('MONTH', CAST(CAST('2020-01-01' AS TIMESTAMP) AS DATE), CAST(CAST('2020-03-05' AS TIMESTAMP) AS DATE))",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
|
@ -5,6 +5,7 @@ class TestTeradata(Validator):
|
||||||
dialect = "teradata"
|
dialect = "teradata"
|
||||||
|
|
||||||
def test_teradata(self):
|
def test_teradata(self):
|
||||||
|
self.validate_identity("SELECT TOP 10 * FROM tbl")
|
||||||
self.validate_identity("SELECT * FROM tbl SAMPLE 5")
|
self.validate_identity("SELECT * FROM tbl SAMPLE 5")
|
||||||
self.validate_identity(
|
self.validate_identity(
|
||||||
"SELECT * FROM tbl SAMPLE 0.33, .25, .1",
|
"SELECT * FROM tbl SAMPLE 0.33, .25, .1",
|
||||||
|
|
|
@ -1058,18 +1058,18 @@ WHERE
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
"SELECT DATEDIFF(year, '2020/01/01', '2021/01/01')",
|
"SELECT DATEDIFF(year, '2020-01-01', '2021-01-01')",
|
||||||
write={
|
write={
|
||||||
"tsql": "SELECT DATEDIFF(year, CAST('2020/01/01' AS DATETIME2), CAST('2021/01/01' AS DATETIME2))",
|
"tsql": "SELECT DATEDIFF(year, CAST('2020-01-01' AS DATETIME2), CAST('2021-01-01' AS DATETIME2))",
|
||||||
"spark": "SELECT DATEDIFF(year, CAST('2020/01/01' AS TIMESTAMP), CAST('2021/01/01' AS TIMESTAMP))",
|
"spark": "SELECT DATEDIFF(year, CAST('2020-01-01' AS TIMESTAMP), CAST('2021-01-01' AS TIMESTAMP))",
|
||||||
"spark2": "SELECT MONTHS_BETWEEN(CAST('2021/01/01' AS TIMESTAMP), CAST('2020/01/01' AS TIMESTAMP)) / 12",
|
"spark2": "SELECT CAST(MONTHS_BETWEEN(CAST('2021-01-01' AS TIMESTAMP), CAST('2020-01-01' AS TIMESTAMP)) AS INT) / 12",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
"SELECT DATEDIFF(mm, 'start', 'end')",
|
"SELECT DATEDIFF(mm, 'start', 'end')",
|
||||||
write={
|
write={
|
||||||
"databricks": "SELECT DATEDIFF(month, CAST('start' AS TIMESTAMP), CAST('end' AS TIMESTAMP))",
|
"databricks": "SELECT DATEDIFF(month, CAST('start' AS TIMESTAMP), CAST('end' AS TIMESTAMP))",
|
||||||
"spark2": "SELECT MONTHS_BETWEEN(CAST('end' AS TIMESTAMP), CAST('start' AS TIMESTAMP))",
|
"spark2": "SELECT CAST(MONTHS_BETWEEN(CAST('end' AS TIMESTAMP), CAST('start' AS TIMESTAMP)) AS INT)",
|
||||||
"tsql": "SELECT DATEDIFF(month, CAST('start' AS DATETIME2), CAST('end' AS DATETIME2))",
|
"tsql": "SELECT DATEDIFF(month, CAST('start' AS DATETIME2), CAST('end' AS DATETIME2))",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
@ -1078,7 +1078,7 @@ WHERE
|
||||||
write={
|
write={
|
||||||
"databricks": "SELECT DATEDIFF(quarter, CAST('start' AS TIMESTAMP), CAST('end' AS TIMESTAMP))",
|
"databricks": "SELECT DATEDIFF(quarter, CAST('start' AS TIMESTAMP), CAST('end' AS TIMESTAMP))",
|
||||||
"spark": "SELECT DATEDIFF(quarter, CAST('start' AS TIMESTAMP), CAST('end' AS TIMESTAMP))",
|
"spark": "SELECT DATEDIFF(quarter, CAST('start' AS TIMESTAMP), CAST('end' AS TIMESTAMP))",
|
||||||
"spark2": "SELECT MONTHS_BETWEEN(CAST('end' AS TIMESTAMP), CAST('start' AS TIMESTAMP)) / 3",
|
"spark2": "SELECT CAST(MONTHS_BETWEEN(CAST('end' AS TIMESTAMP), CAST('start' AS TIMESTAMP)) AS INT) / 3",
|
||||||
"tsql": "SELECT DATEDIFF(quarter, CAST('start' AS DATETIME2), CAST('end' AS DATETIME2))",
|
"tsql": "SELECT DATEDIFF(quarter, CAST('start' AS DATETIME2), CAST('end' AS DATETIME2))",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
@ -1374,7 +1374,7 @@ FROM OPENJSON(@json) WITH (
|
||||||
Date DATETIME2 '$.Order.Date',
|
Date DATETIME2 '$.Order.Date',
|
||||||
Customer VARCHAR(200) '$.AccountNumber',
|
Customer VARCHAR(200) '$.AccountNumber',
|
||||||
Quantity INTEGER '$.Item.Quantity',
|
Quantity INTEGER '$.Item.Quantity',
|
||||||
"Order" TEXT AS JSON
|
"Order" VARCHAR(MAX) AS JSON
|
||||||
)"""
|
)"""
|
||||||
},
|
},
|
||||||
pretty=True,
|
pretty=True,
|
||||||
|
|
1
tests/fixtures/identity.sql
vendored
1
tests/fixtures/identity.sql
vendored
|
@ -866,3 +866,4 @@ KILL CONNECTION 123
|
||||||
KILL QUERY '123'
|
KILL QUERY '123'
|
||||||
CHR(97)
|
CHR(97)
|
||||||
SELECT * FROM UNNEST(x) WITH ORDINALITY UNION ALL SELECT * FROM UNNEST(y) WITH ORDINALITY
|
SELECT * FROM UNNEST(x) WITH ORDINALITY UNION ALL SELECT * FROM UNNEST(y) WITH ORDINALITY
|
||||||
|
WITH use(use) AS (SELECT 1) SELECT use FROM use
|
||||||
|
|
1
tests/fixtures/optimizer/canonicalize.sql
vendored
1
tests/fixtures/optimizer/canonicalize.sql
vendored
|
@ -16,7 +16,6 @@ SELECT CAST('2022-01-01' AS DATE) + INTERVAL '1' day AS "_col_0";
|
||||||
--------------------------------------
|
--------------------------------------
|
||||||
-- Ensure boolean predicates
|
-- Ensure boolean predicates
|
||||||
--------------------------------------
|
--------------------------------------
|
||||||
|
|
||||||
SELECT a FROM x WHERE b;
|
SELECT a FROM x WHERE b;
|
||||||
SELECT "x"."a" AS "a" FROM "x" AS "x" WHERE "x"."b" <> 0;
|
SELECT "x"."a" AS "a" FROM "x" AS "x" WHERE "x"."b" <> 0;
|
||||||
|
|
||||||
|
|
8
tests/fixtures/optimizer/qualify_tables.sql
vendored
8
tests/fixtures/optimizer/qualify_tables.sql
vendored
|
@ -109,3 +109,11 @@ SELECT * FROM ((SELECT * FROM c.db.t AS t) AS _q_0);
|
||||||
# title: wrapped subquery without alias joined with a table
|
# title: wrapped subquery without alias joined with a table
|
||||||
SELECT * FROM ((SELECT * FROM t1) INNER JOIN t2 ON a = b);
|
SELECT * FROM ((SELECT * FROM t1) INNER JOIN t2 ON a = b);
|
||||||
SELECT * FROM ((SELECT * FROM c.db.t1 AS t1) AS _q_0 INNER JOIN c.db.t2 AS t2 ON a = b);
|
SELECT * FROM ((SELECT * FROM c.db.t1 AS t1) AS _q_0 INNER JOIN c.db.t2 AS t2 ON a = b);
|
||||||
|
|
||||||
|
# title: lateral unnest with alias
|
||||||
|
SELECT x FROM t, LATERAL UNNEST(t.xs) AS x;
|
||||||
|
SELECT x FROM c.db.t AS t, LATERAL UNNEST(t.xs) AS x;
|
||||||
|
|
||||||
|
# title: lateral unnest without alias
|
||||||
|
SELECT x FROM t, LATERAL UNNEST(t.xs);
|
||||||
|
SELECT x FROM c.db.t AS t, LATERAL UNNEST(t.xs) AS _q_0;
|
||||||
|
|
67
tests/fixtures/optimizer/simplify.sql
vendored
67
tests/fixtures/optimizer/simplify.sql
vendored
|
@ -911,13 +911,76 @@ t1.a = 39 AND t2.b = t1.a AND t3.c = t2.b;
|
||||||
t1.a = 39 AND t2.b = 39 AND t3.c = 39;
|
t1.a = 39 AND t2.b = 39 AND t3.c = 39;
|
||||||
|
|
||||||
x = 1 AND CASE WHEN x = 5 THEN FALSE ELSE TRUE END;
|
x = 1 AND CASE WHEN x = 5 THEN FALSE ELSE TRUE END;
|
||||||
x = 1 AND CASE WHEN FALSE THEN FALSE ELSE TRUE END;
|
x = 1;
|
||||||
|
|
||||||
x = 1 AND IF(x = 5, FALSE, TRUE);
|
x = 1 AND IF(x = 5, FALSE, TRUE);
|
||||||
x = 1 AND CASE WHEN FALSE THEN FALSE ELSE TRUE END;
|
x = 1;
|
||||||
|
|
||||||
|
x = 1 AND CASE x WHEN 5 THEN FALSE ELSE TRUE END;
|
||||||
|
x = 1;
|
||||||
|
|
||||||
x = y AND CASE WHEN x = 5 THEN FALSE ELSE TRUE END;
|
x = y AND CASE WHEN x = 5 THEN FALSE ELSE TRUE END;
|
||||||
x = y AND CASE WHEN x = 5 THEN FALSE ELSE TRUE END;
|
x = y AND CASE WHEN x = 5 THEN FALSE ELSE TRUE END;
|
||||||
|
|
||||||
x = 1 AND CASE WHEN y = 5 THEN x = z END;
|
x = 1 AND CASE WHEN y = 5 THEN x = z END;
|
||||||
x = 1 AND CASE WHEN y = 5 THEN 1 = z END;
|
x = 1 AND CASE WHEN y = 5 THEN 1 = z END;
|
||||||
|
|
||||||
|
--------------------------------------
|
||||||
|
-- Simplify Conditionals
|
||||||
|
--------------------------------------
|
||||||
|
IF(TRUE, x, y);
|
||||||
|
x;
|
||||||
|
|
||||||
|
IF(FALSE, x, y);
|
||||||
|
y;
|
||||||
|
|
||||||
|
IF(FALSE, x);
|
||||||
|
NULL;
|
||||||
|
|
||||||
|
IF(NULL, x, y);
|
||||||
|
y;
|
||||||
|
|
||||||
|
IF(cond, x, y);
|
||||||
|
CASE WHEN cond THEN x ELSE y END;
|
||||||
|
|
||||||
|
CASE WHEN TRUE THEN x ELSE y END;
|
||||||
|
x;
|
||||||
|
|
||||||
|
CASE WHEN FALSE THEN x ELSE y END;
|
||||||
|
y;
|
||||||
|
|
||||||
|
CASE WHEN FALSE THEN x WHEN FALSE THEN y WHEN TRUE THEN z END;
|
||||||
|
z;
|
||||||
|
|
||||||
|
CASE NULL WHEN NULL THEN x ELSE y END;
|
||||||
|
y;
|
||||||
|
|
||||||
|
CASE 4 WHEN 1 THEN x WHEN 2 THEN y WHEN 3 THEN z ELSE w END;
|
||||||
|
w;
|
||||||
|
|
||||||
|
CASE 4 WHEN 1 THEN x WHEN 2 THEN y WHEN 3 THEN z WHEN 4 THEN w END;
|
||||||
|
w;
|
||||||
|
|
||||||
|
CASE WHEN value = 1 THEN x ELSE y END;
|
||||||
|
CASE WHEN value = 1 THEN x ELSE y END;
|
||||||
|
|
||||||
|
CASE WHEN FALSE THEN x END;
|
||||||
|
NULL;
|
||||||
|
|
||||||
|
CASE 1 WHEN 1 + 1 THEN x END;
|
||||||
|
NULL;
|
||||||
|
|
||||||
|
CASE WHEN cond THEN x ELSE y END;
|
||||||
|
CASE WHEN cond THEN x ELSE y END;
|
||||||
|
|
||||||
|
CASE WHEN cond THEN x END;
|
||||||
|
CASE WHEN cond THEN x END;
|
||||||
|
|
||||||
|
CASE x WHEN y THEN z ELSE w END;
|
||||||
|
CASE WHEN x = y THEN z ELSE w END;
|
||||||
|
|
||||||
|
CASE x WHEN y THEN z END;
|
||||||
|
CASE WHEN x = y THEN z END;
|
||||||
|
|
||||||
|
CASE x1 + x2 WHEN x3 THEN x4 WHEN x5 + x6 THEN x7 ELSE x8 END;
|
||||||
|
CASE WHEN (x1 + x2) = x3 THEN x4 WHEN (x1 + x2) = (x5 + x6) THEN x7 ELSE x8 END;
|
||||||
|
|
4
tests/fixtures/optimizer/tpc-ds/tpc-ds.sql
vendored
4
tests/fixtures/optimizer/tpc-ds/tpc-ds.sql
vendored
|
@ -4808,10 +4808,10 @@ WITH "foo" AS (
|
||||||
"foo"."i_item_sk" AS "i_item_sk",
|
"foo"."i_item_sk" AS "i_item_sk",
|
||||||
"foo"."d_moy" AS "d_moy",
|
"foo"."d_moy" AS "d_moy",
|
||||||
"foo"."mean" AS "mean",
|
"foo"."mean" AS "mean",
|
||||||
CASE "foo"."mean" WHEN FALSE THEN NULL ELSE "foo"."stdev" / "foo"."mean" END AS "cov"
|
CASE WHEN "foo"."mean" = 0 THEN NULL ELSE "foo"."stdev" / "foo"."mean" END AS "cov"
|
||||||
FROM "foo" AS "foo"
|
FROM "foo" AS "foo"
|
||||||
WHERE
|
WHERE
|
||||||
CASE "foo"."mean" WHEN FALSE THEN 0 ELSE "foo"."stdev" / "foo"."mean" END > 1
|
CASE WHEN "foo"."mean" = 0 THEN 0 ELSE "foo"."stdev" / "foo"."mean" END > 1
|
||||||
)
|
)
|
||||||
SELECT
|
SELECT
|
||||||
"inv1"."w_warehouse_sk" AS "w_warehouse_sk",
|
"inv1"."w_warehouse_sk" AS "w_warehouse_sk",
|
||||||
|
|
|
@ -632,6 +632,11 @@ class TestExpressions(unittest.TestCase):
|
||||||
week = unit.find(exp.Week)
|
week = unit.find(exp.Week)
|
||||||
self.assertEqual(week.this, exp.var("thursday"))
|
self.assertEqual(week.this, exp.var("thursday"))
|
||||||
|
|
||||||
|
for abbreviated_unit, unnabreviated_unit in exp.TimeUnit.UNABBREVIATED_UNIT_NAME.items():
|
||||||
|
interval = parse_one(f"interval '500 {abbreviated_unit}'")
|
||||||
|
self.assertIsInstance(interval.unit, exp.Var)
|
||||||
|
self.assertEqual(interval.unit.name, unnabreviated_unit)
|
||||||
|
|
||||||
def test_identifier(self):
|
def test_identifier(self):
|
||||||
self.assertTrue(exp.to_identifier('"x"').quoted)
|
self.assertTrue(exp.to_identifier('"x"').quoted)
|
||||||
self.assertFalse(exp.to_identifier("x").quoted)
|
self.assertFalse(exp.to_identifier("x").quoted)
|
||||||
|
@ -861,6 +866,10 @@ FROM foo""",
|
||||||
|
|
||||||
self.assertEqual(exp.DataType.build("ARRAY<UNKNOWN>").sql(), "ARRAY<UNKNOWN>")
|
self.assertEqual(exp.DataType.build("ARRAY<UNKNOWN>").sql(), "ARRAY<UNKNOWN>")
|
||||||
self.assertEqual(exp.DataType.build("ARRAY<NULL>").sql(), "ARRAY<NULL>")
|
self.assertEqual(exp.DataType.build("ARRAY<NULL>").sql(), "ARRAY<NULL>")
|
||||||
|
self.assertEqual(exp.DataType.build("varchar(100) collate 'en-ci'").sql(), "VARCHAR(100)")
|
||||||
|
|
||||||
|
with self.assertRaises(ParseError):
|
||||||
|
exp.DataType.build("varchar(")
|
||||||
|
|
||||||
def test_rename_table(self):
|
def test_rename_table(self):
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
|
|
|
@ -199,3 +199,77 @@ class TestLineage(unittest.TestCase):
|
||||||
"SELECT x FROM (SELECT ax AS x FROM a UNION SELECT bx FROM b UNION SELECT cx FROM c)",
|
"SELECT x FROM (SELECT ax AS x FROM a UNION SELECT bx FROM b UNION SELECT cx FROM c)",
|
||||||
)
|
)
|
||||||
assert len(node.downstream) == 3
|
assert len(node.downstream) == 3
|
||||||
|
|
||||||
|
def test_lineage_lateral_flatten(self) -> None:
|
||||||
|
node = lineage(
|
||||||
|
"VALUE",
|
||||||
|
"SELECT FLATTENED.VALUE FROM TEST_TABLE, LATERAL FLATTEN(INPUT => RESULT, OUTER => TRUE) FLATTENED",
|
||||||
|
dialect="snowflake",
|
||||||
|
)
|
||||||
|
self.assertEqual(node.name, "VALUE")
|
||||||
|
|
||||||
|
downstream = node.downstream[0]
|
||||||
|
self.assertEqual(downstream.name, "FLATTENED.VALUE")
|
||||||
|
self.assertEqual(
|
||||||
|
downstream.source.sql(dialect="snowflake"),
|
||||||
|
"LATERAL FLATTEN(INPUT => TEST_TABLE.RESULT, OUTER => TRUE) AS FLATTENED(SEQ, KEY, PATH, INDEX, VALUE, THIS)",
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
downstream.expression.sql(dialect="snowflake"),
|
||||||
|
"VALUE",
|
||||||
|
)
|
||||||
|
self.assertEqual(len(downstream.downstream), 1)
|
||||||
|
|
||||||
|
downstream = downstream.downstream[0]
|
||||||
|
self.assertEqual(downstream.name, "TEST_TABLE.RESULT")
|
||||||
|
self.assertEqual(downstream.source.sql(dialect="snowflake"), "TEST_TABLE AS TEST_TABLE")
|
||||||
|
|
||||||
|
def test_subquery(self) -> None:
|
||||||
|
node = lineage(
|
||||||
|
"output",
|
||||||
|
"SELECT (SELECT max(t3.my_column) my_column FROM foo t3) AS output FROM table3",
|
||||||
|
)
|
||||||
|
self.assertEqual(node.name, "SUBQUERY")
|
||||||
|
node = node.downstream[0]
|
||||||
|
self.assertEqual(node.name, "my_column")
|
||||||
|
node = node.downstream[0]
|
||||||
|
self.assertEqual(node.name, "t3.my_column")
|
||||||
|
self.assertEqual(node.source.sql(), "foo AS t3")
|
||||||
|
|
||||||
|
def test_lineage_cte_union(self) -> None:
|
||||||
|
query = """
|
||||||
|
WITH dataset AS (
|
||||||
|
SELECT *
|
||||||
|
FROM catalog.db.table_a
|
||||||
|
|
||||||
|
UNION
|
||||||
|
|
||||||
|
SELECT *
|
||||||
|
FROM catalog.db.table_b
|
||||||
|
)
|
||||||
|
|
||||||
|
SELECT x, created_at FROM dataset;
|
||||||
|
"""
|
||||||
|
node = lineage("x", query)
|
||||||
|
|
||||||
|
self.assertEqual(node.name, "x")
|
||||||
|
|
||||||
|
downstream_a = node.downstream[0]
|
||||||
|
self.assertEqual(downstream_a.name, "0")
|
||||||
|
self.assertEqual(downstream_a.source.sql(), "SELECT * FROM catalog.db.table_a AS table_a")
|
||||||
|
downstream_b = node.downstream[1]
|
||||||
|
self.assertEqual(downstream_b.name, "0")
|
||||||
|
self.assertEqual(downstream_b.source.sql(), "SELECT * FROM catalog.db.table_b AS table_b")
|
||||||
|
|
||||||
|
def test_select_star(self) -> None:
|
||||||
|
node = lineage("x", "SELECT x from (SELECT * from table_a)")
|
||||||
|
|
||||||
|
self.assertEqual(node.name, "x")
|
||||||
|
|
||||||
|
downstream = node.downstream[0]
|
||||||
|
self.assertEqual(downstream.name, "_q_0.x")
|
||||||
|
self.assertEqual(downstream.source.sql(), "SELECT * FROM table_a AS table_a")
|
||||||
|
|
||||||
|
downstream = downstream.downstream[0]
|
||||||
|
self.assertEqual(downstream.name, "*")
|
||||||
|
self.assertEqual(downstream.source.sql(), "table_a AS table_a")
|
||||||
|
|
|
@ -550,6 +550,47 @@ FROM READ_CSV('tests/fixtures/optimizer/tpc-h/nation.csv.gz', 'delimiter', '|')
|
||||||
self.assertEqual(expression.right.this.left.type.this, exp.DataType.Type.INT)
|
self.assertEqual(expression.right.this.left.type.this, exp.DataType.Type.INT)
|
||||||
self.assertEqual(expression.right.this.right.type.this, exp.DataType.Type.INT)
|
self.assertEqual(expression.right.this.right.type.this, exp.DataType.Type.INT)
|
||||||
|
|
||||||
|
def test_bracket_annotation(self):
|
||||||
|
expression = annotate_types(parse_one("SELECT A[:]")).expressions[0]
|
||||||
|
|
||||||
|
self.assertEqual(expression.type.this, exp.DataType.Type.UNKNOWN)
|
||||||
|
self.assertEqual(expression.expressions[0].type.this, exp.DataType.Type.UNKNOWN)
|
||||||
|
|
||||||
|
expression = annotate_types(parse_one("SELECT ARRAY[1, 2, 3][1]")).expressions[0]
|
||||||
|
self.assertEqual(expression.this.type.sql(), "ARRAY<INT>")
|
||||||
|
self.assertEqual(expression.type.this, exp.DataType.Type.INT)
|
||||||
|
|
||||||
|
expression = annotate_types(parse_one("SELECT ARRAY[1, 2, 3][1 : 2]")).expressions[0]
|
||||||
|
self.assertEqual(expression.this.type.sql(), "ARRAY<INT>")
|
||||||
|
self.assertEqual(expression.type.sql(), "ARRAY<INT>")
|
||||||
|
|
||||||
|
expression = annotate_types(
|
||||||
|
parse_one("SELECT ARRAY[ARRAY[1], ARRAY[2], ARRAY[3]][1][2]")
|
||||||
|
).expressions[0]
|
||||||
|
self.assertEqual(expression.this.this.type.sql(), "ARRAY<ARRAY<INT>>")
|
||||||
|
self.assertEqual(expression.this.type.sql(), "ARRAY<INT>")
|
||||||
|
self.assertEqual(expression.type.this, exp.DataType.Type.INT)
|
||||||
|
|
||||||
|
expression = annotate_types(
|
||||||
|
parse_one("SELECT ARRAY[ARRAY[1], ARRAY[2], ARRAY[3]][1:2]")
|
||||||
|
).expressions[0]
|
||||||
|
self.assertEqual(expression.type.sql(), "ARRAY<ARRAY<INT>>")
|
||||||
|
|
||||||
|
expression = annotate_types(parse_one("MAP(1.0, 2, '2', 3.0)['2']", read="spark"))
|
||||||
|
self.assertEqual(expression.type.this, exp.DataType.Type.DOUBLE)
|
||||||
|
|
||||||
|
expression = annotate_types(parse_one("MAP(1.0, 2, x, 3.0)[2]", read="spark"))
|
||||||
|
self.assertEqual(expression.type.this, exp.DataType.Type.UNKNOWN)
|
||||||
|
|
||||||
|
expression = annotate_types(parse_one("MAP(ARRAY(1.0, x), ARRAY(2, 3.0))[x]"))
|
||||||
|
self.assertEqual(expression.type.this, exp.DataType.Type.DOUBLE)
|
||||||
|
|
||||||
|
expression = annotate_types(
|
||||||
|
parse_one("SELECT MAP(1.0, 2, 2, t.y)[2] FROM t", read="spark"),
|
||||||
|
schema={"t": {"y": "int"}},
|
||||||
|
).expressions[0]
|
||||||
|
self.assertEqual(expression.type.this, exp.DataType.Type.INT)
|
||||||
|
|
||||||
def test_interval_math_annotation(self):
|
def test_interval_math_annotation(self):
|
||||||
schema = {
|
schema = {
|
||||||
"x": {
|
"x": {
|
||||||
|
|
|
@ -234,6 +234,9 @@ class TestParser(unittest.TestCase):
|
||||||
"CREATE TABLE t (i UInt8) ENGINE=AggregatingMergeTree() ORDER BY tuple()",
|
"CREATE TABLE t (i UInt8) ENGINE=AggregatingMergeTree() ORDER BY tuple()",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
with self.assertRaises(ParseError):
|
||||||
|
parse_one("SELECT A[:")
|
||||||
|
|
||||||
def test_space(self):
|
def test_space(self):
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
parse_one("SELECT ROW() OVER(PARTITION BY x) FROM x GROUP BY y").sql(),
|
parse_one("SELECT ROW() OVER(PARTITION BY x) FROM x GROUP BY y").sql(),
|
||||||
|
|
|
@ -19,6 +19,9 @@ class TestTranspile(unittest.TestCase):
|
||||||
def validate(self, sql, target, **kwargs):
|
def validate(self, sql, target, **kwargs):
|
||||||
self.assertEqual(transpile(sql, **kwargs)[0], target)
|
self.assertEqual(transpile(sql, **kwargs)[0], target)
|
||||||
|
|
||||||
|
def test_weird_chars(self):
|
||||||
|
self.assertEqual(transpile("0Êß")[0], "0 AS Êß")
|
||||||
|
|
||||||
def test_alias(self):
|
def test_alias(self):
|
||||||
self.assertEqual(transpile("SELECT SUM(y) KEEP")[0], "SELECT SUM(y) AS KEEP")
|
self.assertEqual(transpile("SELECT SUM(y) KEEP")[0], "SELECT SUM(y) AS KEEP")
|
||||||
self.assertEqual(transpile("SELECT 1 overwrite")[0], "SELECT 1 AS overwrite")
|
self.assertEqual(transpile("SELECT 1 overwrite")[0], "SELECT 1 AS overwrite")
|
||||||
|
@ -87,7 +90,18 @@ class TestTranspile(unittest.TestCase):
|
||||||
self.validate("SELECT 3>=3", "SELECT 3 >= 3")
|
self.validate("SELECT 3>=3", "SELECT 3 >= 3")
|
||||||
|
|
||||||
def test_comments(self):
|
def test_comments(self):
|
||||||
self.validate("SELECT\n foo\n/* comments */\n;", "SELECT foo /* comments */")
|
self.validate(
|
||||||
|
"SELECT * FROM t1\n/*x*/\nUNION ALL SELECT * FROM t2",
|
||||||
|
"SELECT * FROM t1 /* x */ UNION ALL SELECT * FROM t2",
|
||||||
|
)
|
||||||
|
self.validate(
|
||||||
|
"SELECT * FROM t1\n/*x*/\nINTERSECT ALL SELECT * FROM t2",
|
||||||
|
"SELECT * FROM t1 /* x */ INTERSECT ALL SELECT * FROM t2",
|
||||||
|
)
|
||||||
|
self.validate(
|
||||||
|
"SELECT\n foo\n/* comments */\n;",
|
||||||
|
"SELECT foo /* comments */",
|
||||||
|
)
|
||||||
self.validate(
|
self.validate(
|
||||||
"SELECT * FROM a INNER /* comments */ JOIN b",
|
"SELECT * FROM a INNER /* comments */ JOIN b",
|
||||||
"SELECT * FROM a /* comments */ INNER JOIN b",
|
"SELECT * FROM a /* comments */ INNER JOIN b",
|
||||||
|
@ -379,6 +393,47 @@ LEFT OUTER JOIN b""",
|
||||||
FROM tbl""",
|
FROM tbl""",
|
||||||
pretty=True,
|
pretty=True,
|
||||||
)
|
)
|
||||||
|
self.validate(
|
||||||
|
"""
|
||||||
|
SELECT
|
||||||
|
'hotel1' AS hotel,
|
||||||
|
*
|
||||||
|
FROM dw_1_dw_1_1.exactonline_1.transactionlines
|
||||||
|
/*
|
||||||
|
UNION ALL
|
||||||
|
SELECT
|
||||||
|
'Thon Partner Hotel Jølster' AS hotel,
|
||||||
|
name,
|
||||||
|
date,
|
||||||
|
CAST(identifier AS VARCHAR) AS identifier,
|
||||||
|
value
|
||||||
|
FROM d2o_889_oupjr_1348.public.accountvalues_forecast
|
||||||
|
*/
|
||||||
|
UNION ALL
|
||||||
|
SELECT
|
||||||
|
'hotel2' AS hotel,
|
||||||
|
*
|
||||||
|
FROM dw_1_dw_1_1.exactonline_2.transactionlines""",
|
||||||
|
"""SELECT
|
||||||
|
'hotel1' AS hotel,
|
||||||
|
*
|
||||||
|
FROM dw_1_dw_1_1.exactonline_1.transactionlines /*
|
||||||
|
UNION ALL
|
||||||
|
SELECT
|
||||||
|
'Thon Partner Hotel Jølster' AS hotel,
|
||||||
|
name,
|
||||||
|
date,
|
||||||
|
CAST(identifier AS VARCHAR) AS identifier,
|
||||||
|
value
|
||||||
|
FROM d2o_889_oupjr_1348.public.accountvalues_forecast
|
||||||
|
*/
|
||||||
|
UNION ALL
|
||||||
|
SELECT
|
||||||
|
'hotel2' AS hotel,
|
||||||
|
*
|
||||||
|
FROM dw_1_dw_1_1.exactonline_2.transactionlines""",
|
||||||
|
pretty=True,
|
||||||
|
)
|
||||||
|
|
||||||
def test_types(self):
|
def test_types(self):
|
||||||
self.validate("INT 1", "CAST(1 AS INT)")
|
self.validate("INT 1", "CAST(1 AS INT)")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue