Merging upstream version 17.2.0.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
06c5965633
commit
ff2afd7448
91 changed files with 42856 additions and 42624 deletions
83
CHANGELOG.md
83
CHANGELOG.md
|
@ -1,6 +1,84 @@
|
||||||
Changelog
|
Changelog
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
## [v17.1.0] - 2023-07-04
|
||||||
|
### :sparkles: New Features
|
||||||
|
- [`b178e1c`](https://github.com/tobymao/sqlglot/commit/b178e1c3f48c2460c59d525a40363cbda488cad8) - dialect argument for parse_one *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
|
||||||
|
### :bug: Bug Fixes
|
||||||
|
- [`83db4c0`](https://github.com/tobymao/sqlglot/commit/83db4c0bc45cc34af7b7aa41153a9e44847c1f10) - **tsql**: rename EXTRACT to DATEPART closes [#1885](https://github.com/tobymao/sqlglot/pull/1885) *(commit by [@GeorgeSittas](https://github.com/GeorgeSittas))*
|
||||||
|
- [`5a84605`](https://github.com/tobymao/sqlglot/commit/5a84605324ad2aab5eb0e76016845d262b458cd3) - order by agg closes [#1887](https://github.com/tobymao/sqlglot/pull/1887) *(PR [#1889](https://github.com/tobymao/sqlglot/pull/1889) by [@tobymao](https://github.com/tobymao))*
|
||||||
|
- [`d1ad7da`](https://github.com/tobymao/sqlglot/commit/d1ad7da4446d58ef78f5ebfa4765818d06fa2c6b) - performance regression due to 6f80cc80 *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
|
||||||
|
|
||||||
|
## [v17.0.0] - 2023-07-04
|
||||||
|
### :boom: BREAKING CHANGES
|
||||||
|
- due to [`df4448d`](https://github.com/tobymao/sqlglot/commit/df4448dcb8d82470a2312d845506e9a429411451) - use a dictionary for query modifier search *(commit by [@tobymao](https://github.com/tobymao))*:
|
||||||
|
|
||||||
|
use a dictionary for query modifier search
|
||||||
|
|
||||||
|
- due to [`f747260`](https://github.com/tobymao/sqlglot/commit/f747260a66d1f59f26b697f3580b2ddc8c876bd3) - hashable args is now more efficient and identifiers no longer accomodate case insensitivity because that is dialect specific *(commit by [@tobymao](https://github.com/tobymao))*:
|
||||||
|
|
||||||
|
hashable args is now more efficient and identifiers no longer accomodate case insensitivity because that is dialect specific
|
||||||
|
|
||||||
|
|
||||||
|
### :sparkles: New Features
|
||||||
|
- [`47d999c`](https://github.com/tobymao/sqlglot/commit/47d999ce7db944b33239df6c5021d776c7d49062) - **mysql**: add support for the MEMBER OF operator *(PR [#1872](https://github.com/tobymao/sqlglot/pull/1872) by [@GeorgeSittas](https://github.com/GeorgeSittas))*
|
||||||
|
- :arrow_lower_right: *addresses issue [#1866](undefined) opened by [@brosoul](https://github.com/brosoul)*
|
||||||
|
- [`156afcd`](https://github.com/tobymao/sqlglot/commit/156afcd843c1be01b8d592ad5e1fe302184d3be8) - add the ability to parse nested joins implements [#1878](https://github.com/tobymao/sqlglot/pull/1878) *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
|
||||||
|
### :bug: Bug Fixes
|
||||||
|
- [`8a19d7a`](https://github.com/tobymao/sqlglot/commit/8a19d7ae6e88801706899497089e41484ed5c2d2) - **mysql**: improve parsing of INSERT .. SELECT statement *(PR [#1871](https://github.com/tobymao/sqlglot/pull/1871) by [@GeorgeSittas](https://github.com/GeorgeSittas))*
|
||||||
|
- :arrow_lower_right: *fixes issue [#1862](undefined) opened by [@brosoul](https://github.com/brosoul)*
|
||||||
|
- [`58e1683`](https://github.com/tobymao/sqlglot/commit/58e1683f2d7ba4962d80a3ef3a09b4f5f43ab30d) - **bigquery**: improve support for cast to timestamp with format, time zone *(PR [#1873](https://github.com/tobymao/sqlglot/pull/1873) by [@GeorgeSittas](https://github.com/GeorgeSittas))*
|
||||||
|
- :arrow_lower_right: *fixes issue [#1870](undefined) opened by [@dskarbrevik](https://github.com/dskarbrevik)*
|
||||||
|
- [`0197119`](https://github.com/tobymao/sqlglot/commit/019711981ed47dc7a66539769526bba78a115467) - convert JSONArrayContains to a Func expression *(commit by [@GeorgeSittas](https://github.com/GeorgeSittas))*
|
||||||
|
- [`f4fb1f4`](https://github.com/tobymao/sqlglot/commit/f4fb1f4a3ecd3ad1d91e55d7e58732b44759522c) - tsql datepart format casing closes [#1869](https://github.com/tobymao/sqlglot/pull/1869) *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
- [`fe69102`](https://github.com/tobymao/sqlglot/commit/fe69102b82591d13bc9d252234f243c57921b9a7) - duckdb date_trunc to time closes [#1875](https://github.com/tobymao/sqlglot/pull/1875) *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
- [`a957388`](https://github.com/tobymao/sqlglot/commit/a9573884953671d1bb38a7a2c534753372cb2e96) - **mysql**: add support more kind for MEMBER OF content *(PR [#1880](https://github.com/tobymao/sqlglot/pull/1880) by [@brosoul](https://github.com/brosoul))*
|
||||||
|
- [`6f80cc8`](https://github.com/tobymao/sqlglot/commit/6f80cc8096b7ba5765cab4d6eb5bf99f12709ca8) - **parser**: handle chained table join with consecutive USING clauses *(PR [#1883](https://github.com/tobymao/sqlglot/pull/1883) by [@GeorgeSittas](https://github.com/GeorgeSittas))*
|
||||||
|
- [`82f8fff`](https://github.com/tobymao/sqlglot/commit/82f8fff767034b57659f3eedc0d8b28c13cef78b) - bigquery don't strip nested types *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
- [`cf12c8a`](https://github.com/tobymao/sqlglot/commit/cf12c8ae22d2885225bbccd5e69c45b2daaf6299) - python is literal warning *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
|
||||||
|
### :recycle: Refactors
|
||||||
|
- [`df4448d`](https://github.com/tobymao/sqlglot/commit/df4448dcb8d82470a2312d845506e9a429411451) - use a dictionary for query modifier search *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
- [`f747260`](https://github.com/tobymao/sqlglot/commit/f747260a66d1f59f26b697f3580b2ddc8c876bd3) - hashable args is now more efficient and identifiers no longer accomodate case insensitivity because that is dialect specific *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
- [`f621e85`](https://github.com/tobymao/sqlglot/commit/f621e85ea252daf651bda091eb38c7d83e3067e5) - remove unused line, no tests fail *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
- [`0114b6d`](https://github.com/tobymao/sqlglot/commit/0114b6d77f4adccc32098072ad8079729dcb42ee) - change to lambda that returns tuple *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
|
||||||
|
|
||||||
|
## [v16.8.1] - 2023-06-30
|
||||||
|
### :bug: Bug Fixes
|
||||||
|
- [`154ece5`](https://github.com/tobymao/sqlglot/commit/154ece50d089bc1961cd20d9e424ccb32490379c) - don't normalize udf defs *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
|
||||||
|
|
||||||
|
## [v16.8.0] - 2023-06-30
|
||||||
|
### :boom: BREAKING CHANGES
|
||||||
|
- due to [`fcf7dd0`](https://github.com/tobymao/sqlglot/commit/fcf7dd0504a123c3b550a5f7c070da0a90e90c25) - big query single quotes does not support line breaks *(commit by [@tobymao](https://github.com/tobymao))*:
|
||||||
|
|
||||||
|
big query single quotes does not support line breaks
|
||||||
|
|
||||||
|
|
||||||
|
### :sparkles: New Features
|
||||||
|
- [`3800158`](https://github.com/tobymao/sqlglot/commit/38001582953423b6ea34b4694cf5715446e131f2) - datediff python executor *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
- [`2e1a2b8`](https://github.com/tobymao/sqlglot/commit/2e1a2b807250b4bdded90642cbbbaa3b6f9ee814) - **snowflake**: add support for GROUP BY ALL *(PR [#1864](https://github.com/tobymao/sqlglot/pull/1864) by [@GeorgeSittas](https://github.com/GeorgeSittas))*
|
||||||
|
- [`6e81ac6`](https://github.com/tobymao/sqlglot/commit/6e81ac6358fa5f842fc829a3108353ea7b50859e) - **makefile**: add rule to skip integration tests *(PR [#1865](https://github.com/tobymao/sqlglot/pull/1865) by [@GeorgeSittas](https://github.com/GeorgeSittas))*
|
||||||
|
|
||||||
|
### :bug: Bug Fixes
|
||||||
|
- [`2911bbb`](https://github.com/tobymao/sqlglot/commit/2911bbba122f505cde2c31591510ed00af1af2db) - typo *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
- [`d6c1569`](https://github.com/tobymao/sqlglot/commit/d6c1569c7489087eca624d335e8b78ddbea00af6) - **executor**: allow non-projected aggregates in ORDER BY *(PR [#1863](https://github.com/tobymao/sqlglot/pull/1863) by [@GeorgeSittas](https://github.com/GeorgeSittas))*
|
||||||
|
- :arrow_lower_right: *fixes issue [#1855](undefined) opened by [@stonyw](https://github.com/stonyw)*
|
||||||
|
- [`fcf7dd0`](https://github.com/tobymao/sqlglot/commit/fcf7dd0504a123c3b550a5f7c070da0a90e90c25) - big query single quotes does not support line breaks *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
|
||||||
|
### :recycle: Refactors
|
||||||
|
- [`d8eeda2`](https://github.com/tobymao/sqlglot/commit/d8eeda2f3c4b69b0d17962d7c500a23962d3cbd9) - move group by finalizer to simplify because that is who cares *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
|
||||||
|
|
||||||
|
## [v16.7.7] - 2023-06-30
|
||||||
|
### :bug: Bug Fixes
|
||||||
|
- [`3005306`](https://github.com/tobymao/sqlglot/commit/30053066bf9909ff521e8ac28fd3063a91159a81) - qualify column in func with equality *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
|
||||||
|
|
||||||
## [v16.7.6] - 2023-06-30
|
## [v16.7.6] - 2023-06-30
|
||||||
### :bug: Bug Fixes
|
### :bug: Bug Fixes
|
||||||
- [`9919e62`](https://github.com/tobymao/sqlglot/commit/9919e62046967f1fcbc40a638ab6234bc6082c65) - make bigquery unnest unalias more comprehensive *(commit by [@tobymao](https://github.com/tobymao))*
|
- [`9919e62`](https://github.com/tobymao/sqlglot/commit/9919e62046967f1fcbc40a638ab6234bc6082c65) - make bigquery unnest unalias more comprehensive *(commit by [@tobymao](https://github.com/tobymao))*
|
||||||
|
@ -729,3 +807,8 @@ Changelog
|
||||||
[v16.7.2]: https://github.com/tobymao/sqlglot/compare/v16.7.1...v16.7.2
|
[v16.7.2]: https://github.com/tobymao/sqlglot/compare/v16.7.1...v16.7.2
|
||||||
[v16.7.4]: https://github.com/tobymao/sqlglot/compare/v16.7.3...v16.7.4
|
[v16.7.4]: https://github.com/tobymao/sqlglot/compare/v16.7.3...v16.7.4
|
||||||
[v16.7.6]: https://github.com/tobymao/sqlglot/compare/v16.7.5...v16.7.6
|
[v16.7.6]: https://github.com/tobymao/sqlglot/compare/v16.7.5...v16.7.6
|
||||||
|
[v16.7.7]: https://github.com/tobymao/sqlglot/compare/v16.7.6...v16.7.7
|
||||||
|
[v16.8.0]: https://github.com/tobymao/sqlglot/compare/v16.7.7...v16.8.0
|
||||||
|
[v16.8.1]: https://github.com/tobymao/sqlglot/compare/v16.8.0...v16.8.1
|
||||||
|
[v17.0.0]: https://github.com/tobymao/sqlglot/compare/v16.8.1...v17.0.0
|
||||||
|
[v17.1.0]: https://github.com/tobymao/sqlglot/compare/v17.0.0...v17.1.0
|
5
Makefile
5
Makefile
|
@ -1,4 +1,4 @@
|
||||||
.PHONY: install install-dev install-pre-commit test style check docs docs-serve
|
.PHONY: install install-dev install-pre-commit test unit style check docs docs-serve
|
||||||
|
|
||||||
install:
|
install:
|
||||||
pip install -e .
|
pip install -e .
|
||||||
|
@ -12,6 +12,9 @@ install-pre-commit:
|
||||||
test:
|
test:
|
||||||
python -m unittest
|
python -m unittest
|
||||||
|
|
||||||
|
unit:
|
||||||
|
SKIP_INTEGRATION=1 python -m unittest
|
||||||
|
|
||||||
style:
|
style:
|
||||||
pre-commit run --all-files
|
pre-commit run --all-files
|
||||||
|
|
||||||
|
|
|
@ -205,10 +205,11 @@ except sqlglot.errors.ParseError as e:
|
||||||
[{
|
[{
|
||||||
'description': 'Expecting )',
|
'description': 'Expecting )',
|
||||||
'line': 1,
|
'line': 1,
|
||||||
'col': 13,
|
'col': 16,
|
||||||
'start_context': 'SELECT foo( ',
|
'start_context': 'SELECT foo( ',
|
||||||
'highlight': 'FROM',
|
'highlight': 'FROM',
|
||||||
'end_context': ' bar'
|
'end_context': ' bar',
|
||||||
|
'into_expression': None,
|
||||||
}]
|
}]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -470,7 +471,9 @@ make docs-serve
|
||||||
## Run Tests and Lint
|
## Run Tests and Lint
|
||||||
|
|
||||||
```
|
```
|
||||||
make check # Set SKIP_INTEGRATION=1 to skip integration tests
|
make style # Only linter checks
|
||||||
|
make unit # Only unit tests
|
||||||
|
make check # Full test suite & linter checks
|
||||||
```
|
```
|
||||||
|
|
||||||
## Benchmarks
|
## Benchmarks
|
||||||
|
|
|
@ -7,10 +7,10 @@ import timeit
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
import sqlfluff
|
#import sqlfluff
|
||||||
import moz_sql_parser
|
#import moz_sql_parser
|
||||||
import sqloxide
|
#import sqloxide
|
||||||
import sqlparse
|
#import sqlparse
|
||||||
import sqltree
|
import sqltree
|
||||||
|
|
||||||
import sqlglot
|
import sqlglot
|
||||||
|
@ -199,11 +199,11 @@ def diff(row, column):
|
||||||
|
|
||||||
libs = [
|
libs = [
|
||||||
"sqlglot",
|
"sqlglot",
|
||||||
"sqlfluff",
|
#"sqlfluff",
|
||||||
"sqltree",
|
"sqltree",
|
||||||
"sqlparse",
|
#"sqlparse",
|
||||||
"moz_sql_parser",
|
#"moz_sql_parser",
|
||||||
"sqloxide",
|
#"sqloxide",
|
||||||
]
|
]
|
||||||
table = []
|
table = []
|
||||||
|
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -313,10 +313,11 @@
|
||||||
<pre><span></span><code><span class="p">[{</span>
|
<pre><span></span><code><span class="p">[{</span>
|
||||||
<span class="s1">'description'</span><span class="p">:</span> <span class="s1">'Expecting )'</span><span class="p">,</span>
|
<span class="s1">'description'</span><span class="p">:</span> <span class="s1">'Expecting )'</span><span class="p">,</span>
|
||||||
<span class="s1">'line'</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
<span class="s1">'line'</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||||
<span class="s1">'col'</span><span class="p">:</span> <span class="mi">13</span><span class="p">,</span>
|
<span class="s1">'col'</span><span class="p">:</span> <span class="mi">16</span><span class="p">,</span>
|
||||||
<span class="s1">'start_context'</span><span class="p">:</span> <span class="s1">'SELECT foo( '</span><span class="p">,</span>
|
<span class="s1">'start_context'</span><span class="p">:</span> <span class="s1">'SELECT foo( '</span><span class="p">,</span>
|
||||||
<span class="s1">'highlight'</span><span class="p">:</span> <span class="s1">'FROM'</span><span class="p">,</span>
|
<span class="s1">'highlight'</span><span class="p">:</span> <span class="s1">'FROM'</span><span class="p">,</span>
|
||||||
<span class="s1">'end_context'</span><span class="p">:</span> <span class="s1">' bar'</span>
|
<span class="s1">'end_context'</span><span class="p">:</span> <span class="s1">' bar'</span><span class="p">,</span>
|
||||||
|
<span class="s1">'into_expression'</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
|
||||||
<span class="p">}]</span>
|
<span class="p">}]</span>
|
||||||
</code></pre>
|
</code></pre>
|
||||||
</div>
|
</div>
|
||||||
|
@ -595,7 +596,9 @@
|
||||||
|
|
||||||
<h2 id="run-tests-and-lint">Run Tests and Lint</h2>
|
<h2 id="run-tests-and-lint">Run Tests and Lint</h2>
|
||||||
|
|
||||||
<pre><code>make check # Set SKIP_INTEGRATION=1 to skip integration tests
|
<pre><code>make style # Only linter checks
|
||||||
|
make unit # Only unit tests
|
||||||
|
make check # Full test suite & linter checks
|
||||||
</code></pre>
|
</code></pre>
|
||||||
|
|
||||||
<h2 id="benchmarks">Benchmarks</h2>
|
<h2 id="benchmarks">Benchmarks</h2>
|
||||||
|
@ -766,65 +769,70 @@
|
||||||
</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a>
|
</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a>
|
||||||
</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><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a><span class="k">def</span> <span class="nf">parse_one</span><span class="p">(</span>
|
</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a><span class="k">def</span> <span class="nf">parse_one</span><span class="p">(</span>
|
||||||
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">read</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">into</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">IntoType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
|
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
|
||||||
</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a><span class="p">)</span> <span class="o">-></span> <span class="n">Expression</span><span class="p">:</span>
|
</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="n">read</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-99"><a href="#L-99"><span class="linenos"> 99</span></a><span class="w"> </span><span class="sd">"""</span>
|
</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</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-100"><a href="#L-100"><span class="linenos">100</span></a><span class="sd"> Parses the given SQL string and returns a syntax tree for the first parsed SQL statement.</span>
|
</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="n">into</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">IntoType</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><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
|
||||||
</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a><span class="sd"> Args:</span>
|
</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a><span class="p">)</span> <span class="o">-></span> <span class="n">Expression</span><span class="p">:</span>
|
||||||
</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a><span class="sd"> sql: the SQL code string to parse.</span>
|
</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||||
</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a><span class="sd"> read: the SQL dialect to apply during parsing (eg. "spark", "hive", "presto", "mysql").</span>
|
</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a><span class="sd"> Parses the given SQL string and returns a syntax tree for the first parsed SQL statement.</span>
|
||||||
</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a><span class="sd"> into: the SQLGlot Expression to parse into.</span>
|
</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a>
|
||||||
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a><span class="sd"> **opts: other `sqlglot.parser.Parser` options.</span>
|
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a><span class="sd"> Args:</span>
|
||||||
</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 class="sd"> sql: the SQL code string to parse.</span>
|
||||||
</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a><span class="sd"> Returns:</span>
|
</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a><span class="sd"> read: the SQL dialect to apply during parsing (eg. "spark", "hive", "presto", "mysql").</span>
|
||||||
</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a><span class="sd"> The syntax tree for the first parsed statement.</span>
|
</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a><span class="sd"> dialect: the SQL dialect (alias for read)</span>
|
||||||
</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a><span class="sd"> """</span>
|
</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a><span class="sd"> into: the SQLGlot Expression to parse into.</span>
|
||||||
</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><span class="sd"> **opts: other `sqlglot.parser.Parser` options.</span>
|
||||||
</span><span id="L-112"><a href="#L-112"><span class="linenos">112</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">read</span><span class="p">)()</span>
|
</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a>
|
||||||
</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a>
|
</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a><span class="sd"> Returns:</span>
|
||||||
</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="k">if</span> <span class="n">into</span><span class="p">:</span>
|
</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a><span class="sd"> The syntax tree for the first parsed statement.</span>
|
||||||
</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">dialect</span><span class="o">.</span><span class="n">parse_into</span><span class="p">(</span><span class="n">into</span><span class="p">,</span> <span class="n">sql</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
|
</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a><span class="sd"> """</span>
|
||||||
</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="k">else</span><span class="p">:</span>
|
</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a>
|
||||||
</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">dialect</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
|
</span><span id="L-117"><a href="#L-117"><span class="linenos">117</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">read</span> <span class="ow">or</span> <span class="n">dialect</span><span class="p">)()</span>
|
||||||
</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a>
|
</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a>
|
||||||
</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">result</span><span class="p">:</span>
|
</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="k">if</span> <span class="n">into</span><span class="p">:</span>
|
||||||
</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
|
</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">dialect</span><span class="o">.</span><span class="n">parse_into</span><span class="p">(</span><span class="n">into</span><span class="p">,</span> <span class="n">sql</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
|
||||||
</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"No expression was parsed from '</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">'"</span><span class="p">)</span>
|
</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="k">else</span><span class="p">:</span>
|
||||||
</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="k">return</span> <span class="n">expression</span>
|
</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">dialect</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
|
||||||
</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="k">else</span><span class="p">:</span>
|
</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">raise</span> <span class="n">ParseError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"No expression was parsed from '</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">'"</span><span class="p">)</span>
|
</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">result</span><span class="p">:</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 class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
|
||||||
</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a>
|
</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"No expression was parsed from '</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">'"</span><span class="p">)</span>
|
||||||
</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a><span class="k">def</span> <span class="nf">transpile</span><span class="p">(</span>
|
</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||||
</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
|
</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="k">else</span><span class="p">:</span>
|
||||||
</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="n">read</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-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"No expression was parsed from '</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">'"</span><span class="p">)</span>
|
||||||
</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="n">write</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-130"><a href="#L-130"><span class="linenos">130</span></a>
|
||||||
</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="n">identity</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-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="n">error_level</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ErrorLevel</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a><span class="k">def</span> <span class="nf">transpile</span><span class="p">(</span>
|
||||||
</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
|
</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
|
||||||
</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a><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-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="n">read</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-135"><a href="#L-135"><span class="linenos">135</span></a><span class="w"> </span><span class="sd">"""</span>
|
</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="n">write</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-136"><a href="#L-136"><span class="linenos">136</span></a><span class="sd"> Parses the given SQL string in accordance with the source dialect and returns a list of SQL strings transformed</span>
|
</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="n">identity</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-137"><a href="#L-137"><span class="linenos">137</span></a><span class="sd"> to conform to the target dialect. Each string in the returned list represents a single transformed SQL statement.</span>
|
</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="n">error_level</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ErrorLevel</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||||
</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a>
|
</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
|
||||||
</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a><span class="sd"> Args:</span>
|
</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a><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-140"><a href="#L-140"><span class="linenos">140</span></a><span class="sd"> sql: the SQL code string to transpile.</span>
|
</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||||
</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a><span class="sd"> read: the source dialect used to parse the input string (eg. "spark", "hive", "presto", "mysql").</span>
|
</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a><span class="sd"> Parses the given SQL string in accordance with the source dialect and returns a list of SQL strings transformed</span>
|
||||||
</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a><span class="sd"> write: the target dialect into which the input should be transformed (eg. "spark", "hive", "presto", "mysql").</span>
|
</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a><span class="sd"> to conform to the target dialect. Each string in the returned list represents a single transformed SQL statement.</span>
|
||||||
</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a><span class="sd"> identity: if set to `True` and if the target dialect is not specified the source dialect will be used as both:</span>
|
</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a>
|
||||||
</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a><span class="sd"> the source and the target dialect.</span>
|
</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a><span class="sd"> Args:</span>
|
||||||
</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a><span class="sd"> error_level: the desired error level of the parser.</span>
|
</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a><span class="sd"> sql: the SQL code string to transpile.</span>
|
||||||
</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a><span class="sd"> **opts: other `sqlglot.generator.Generator` options.</span>
|
</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a><span class="sd"> read: the source dialect used to parse the input string (eg. "spark", "hive", "presto", "mysql").</span>
|
||||||
</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a>
|
</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a><span class="sd"> write: the target dialect into which the input should be transformed (eg. "spark", "hive", "presto", "mysql").</span>
|
||||||
</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a><span class="sd"> Returns:</span>
|
</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a><span class="sd"> identity: if set to `True` and if the target dialect is not specified the source dialect will be used as both:</span>
|
||||||
</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a><span class="sd"> The list of transpiled SQL statements.</span>
|
</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a><span class="sd"> the source and the target dialect.</span>
|
||||||
</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a><span class="sd"> """</span>
|
</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a><span class="sd"> error_level: the desired error level of the parser.</span>
|
||||||
</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="n">write</span> <span class="o">=</span> <span class="p">(</span><span class="n">read</span> <span class="k">if</span> <span class="n">write</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">write</span><span class="p">)</span> <span class="k">if</span> <span class="n">identity</span> <span class="k">else</span> <span class="n">write</span>
|
</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a><span class="sd"> **opts: other `sqlglot.generator.Generator` options.</span>
|
||||||
</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="k">return</span> <span class="p">[</span>
|
</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a>
|
||||||
</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">write</span><span class="p">)()</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
|
</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a><span class="sd"> Returns:</span>
|
||||||
</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">parse</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="n">read</span><span class="p">,</span> <span class="n">error_level</span><span class="o">=</span><span class="n">error_level</span><span class="p">)</span>
|
</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a><span class="sd"> The list of transpiled SQL statements.</span>
|
||||||
</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="p">]</span>
|
</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a><span class="sd"> """</span>
|
||||||
|
</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="n">write</span> <span class="o">=</span> <span class="p">(</span><span class="n">read</span> <span class="k">if</span> <span class="n">write</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">write</span><span class="p">)</span> <span class="k">if</span> <span class="n">identity</span> <span class="k">else</span> <span class="n">write</span>
|
||||||
|
</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="k">return</span> <span class="p">[</span>
|
||||||
|
</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">write</span><span class="p">)()</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
|
||||||
|
</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">parse</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="n">read</span><span class="p">,</span> <span class="n">error_level</span><span class="o">=</span><span class="n">error_level</span><span class="p">)</span>
|
||||||
|
</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="p">]</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -921,41 +929,46 @@
|
||||||
<div class="attr function">
|
<div class="attr function">
|
||||||
|
|
||||||
<span class="def">def</span>
|
<span class="def">def</span>
|
||||||
<span class="name">parse_one</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">read</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"><a href="sqlglot/dialects/dialect.html#Dialect">sqlglot.dialects.dialect.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="sqlglot/dialects/dialect.html#Dialect">sqlglot.dialects.dialect.Dialect</a></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">into</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">Type</span><span class="p">[</span><span class="n"><a href="sqlglot/expressions.html#Expression">sqlglot.expressions.Expression</a></span><span class="p">],</span> <span class="n">Collection</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">Type</span><span class="p">[</span><span class="n"><a href="sqlglot/expressions.html#Expression">sqlglot.expressions.Expression</a></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="o">**</span><span class="n">opts</span></span><span class="return-annotation">) -> <span class="n"><a href="sqlglot/expressions.html#Expression">sqlglot.expressions.Expression</a></span>:</span></span>
|
<span class="name">parse_one</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">read</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"><a href="sqlglot/dialects/dialect.html#Dialect">sqlglot.dialects.dialect.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="sqlglot/dialects/dialect.html#Dialect">sqlglot.dialects.dialect.Dialect</a></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">dialect</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"><a href="sqlglot/dialects/dialect.html#Dialect">sqlglot.dialects.dialect.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="sqlglot/dialects/dialect.html#Dialect">sqlglot.dialects.dialect.Dialect</a></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">into</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">Type</span><span class="p">[</span><span class="n"><a href="sqlglot/expressions.html#Expression">sqlglot.expressions.Expression</a></span><span class="p">],</span> <span class="n">Collection</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">Type</span><span class="p">[</span><span class="n"><a href="sqlglot/expressions.html#Expression">sqlglot.expressions.Expression</a></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="o">**</span><span class="n">opts</span></span><span class="return-annotation">) -> <span class="n"><a href="sqlglot/expressions.html#Expression">sqlglot.expressions.Expression</a></span>:</span></span>
|
||||||
|
|
||||||
<label class="view-source-button" for="parse_one-view-source"><span>View Source</span></label>
|
<label class="view-source-button" for="parse_one-view-source"><span>View Source</span></label>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#parse_one"></a>
|
<a class="headerlink" href="#parse_one"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="parse_one-97"><a href="#parse_one-97"><span class="linenos"> 97</span></a><span class="k">def</span> <span class="nf">parse_one</span><span class="p">(</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="parse_one-97"><a href="#parse_one-97"><span class="linenos"> 97</span></a><span class="k">def</span> <span class="nf">parse_one</span><span class="p">(</span>
|
||||||
</span><span id="parse_one-98"><a href="#parse_one-98"><span class="linenos"> 98</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">read</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">into</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">IntoType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
|
</span><span id="parse_one-98"><a href="#parse_one-98"><span class="linenos"> 98</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
|
||||||
</span><span id="parse_one-99"><a href="#parse_one-99"><span class="linenos"> 99</span></a><span class="p">)</span> <span class="o">-></span> <span class="n">Expression</span><span class="p">:</span>
|
</span><span id="parse_one-99"><a href="#parse_one-99"><span class="linenos"> 99</span></a> <span class="n">read</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="parse_one-100"><a href="#parse_one-100"><span class="linenos">100</span></a><span class="w"> </span><span class="sd">"""</span>
|
</span><span id="parse_one-100"><a href="#parse_one-100"><span class="linenos">100</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="parse_one-101"><a href="#parse_one-101"><span class="linenos">101</span></a><span class="sd"> Parses the given SQL string and returns a syntax tree for the first parsed SQL statement.</span>
|
</span><span id="parse_one-101"><a href="#parse_one-101"><span class="linenos">101</span></a> <span class="n">into</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">IntoType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||||
</span><span id="parse_one-102"><a href="#parse_one-102"><span class="linenos">102</span></a>
|
</span><span id="parse_one-102"><a href="#parse_one-102"><span class="linenos">102</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
|
||||||
</span><span id="parse_one-103"><a href="#parse_one-103"><span class="linenos">103</span></a><span class="sd"> Args:</span>
|
</span><span id="parse_one-103"><a href="#parse_one-103"><span class="linenos">103</span></a><span class="p">)</span> <span class="o">-></span> <span class="n">Expression</span><span class="p">:</span>
|
||||||
</span><span id="parse_one-104"><a href="#parse_one-104"><span class="linenos">104</span></a><span class="sd"> sql: the SQL code string to parse.</span>
|
</span><span id="parse_one-104"><a href="#parse_one-104"><span class="linenos">104</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||||
</span><span id="parse_one-105"><a href="#parse_one-105"><span class="linenos">105</span></a><span class="sd"> read: the SQL dialect to apply during parsing (eg. "spark", "hive", "presto", "mysql").</span>
|
</span><span id="parse_one-105"><a href="#parse_one-105"><span class="linenos">105</span></a><span class="sd"> Parses the given SQL string and returns a syntax tree for the first parsed SQL statement.</span>
|
||||||
</span><span id="parse_one-106"><a href="#parse_one-106"><span class="linenos">106</span></a><span class="sd"> into: the SQLGlot Expression to parse into.</span>
|
</span><span id="parse_one-106"><a href="#parse_one-106"><span class="linenos">106</span></a>
|
||||||
</span><span id="parse_one-107"><a href="#parse_one-107"><span class="linenos">107</span></a><span class="sd"> **opts: other `sqlglot.parser.Parser` options.</span>
|
</span><span id="parse_one-107"><a href="#parse_one-107"><span class="linenos">107</span></a><span class="sd"> Args:</span>
|
||||||
</span><span id="parse_one-108"><a href="#parse_one-108"><span class="linenos">108</span></a>
|
</span><span id="parse_one-108"><a href="#parse_one-108"><span class="linenos">108</span></a><span class="sd"> sql: the SQL code string to parse.</span>
|
||||||
</span><span id="parse_one-109"><a href="#parse_one-109"><span class="linenos">109</span></a><span class="sd"> Returns:</span>
|
</span><span id="parse_one-109"><a href="#parse_one-109"><span class="linenos">109</span></a><span class="sd"> read: the SQL dialect to apply during parsing (eg. "spark", "hive", "presto", "mysql").</span>
|
||||||
</span><span id="parse_one-110"><a href="#parse_one-110"><span class="linenos">110</span></a><span class="sd"> The syntax tree for the first parsed statement.</span>
|
</span><span id="parse_one-110"><a href="#parse_one-110"><span class="linenos">110</span></a><span class="sd"> dialect: the SQL dialect (alias for read)</span>
|
||||||
</span><span id="parse_one-111"><a href="#parse_one-111"><span class="linenos">111</span></a><span class="sd"> """</span>
|
</span><span id="parse_one-111"><a href="#parse_one-111"><span class="linenos">111</span></a><span class="sd"> into: the SQLGlot Expression to parse into.</span>
|
||||||
</span><span id="parse_one-112"><a href="#parse_one-112"><span class="linenos">112</span></a>
|
</span><span id="parse_one-112"><a href="#parse_one-112"><span class="linenos">112</span></a><span class="sd"> **opts: other `sqlglot.parser.Parser` options.</span>
|
||||||
</span><span id="parse_one-113"><a href="#parse_one-113"><span class="linenos">113</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">read</span><span class="p">)()</span>
|
</span><span id="parse_one-113"><a href="#parse_one-113"><span class="linenos">113</span></a>
|
||||||
</span><span id="parse_one-114"><a href="#parse_one-114"><span class="linenos">114</span></a>
|
</span><span id="parse_one-114"><a href="#parse_one-114"><span class="linenos">114</span></a><span class="sd"> Returns:</span>
|
||||||
</span><span id="parse_one-115"><a href="#parse_one-115"><span class="linenos">115</span></a> <span class="k">if</span> <span class="n">into</span><span class="p">:</span>
|
</span><span id="parse_one-115"><a href="#parse_one-115"><span class="linenos">115</span></a><span class="sd"> The syntax tree for the first parsed statement.</span>
|
||||||
</span><span id="parse_one-116"><a href="#parse_one-116"><span class="linenos">116</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">dialect</span><span class="o">.</span><span class="n">parse_into</span><span class="p">(</span><span class="n">into</span><span class="p">,</span> <span class="n">sql</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
|
</span><span id="parse_one-116"><a href="#parse_one-116"><span class="linenos">116</span></a><span class="sd"> """</span>
|
||||||
</span><span id="parse_one-117"><a href="#parse_one-117"><span class="linenos">117</span></a> <span class="k">else</span><span class="p">:</span>
|
</span><span id="parse_one-117"><a href="#parse_one-117"><span class="linenos">117</span></a>
|
||||||
</span><span id="parse_one-118"><a href="#parse_one-118"><span class="linenos">118</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">dialect</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
|
</span><span id="parse_one-118"><a href="#parse_one-118"><span class="linenos">118</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">read</span> <span class="ow">or</span> <span class="n">dialect</span><span class="p">)()</span>
|
||||||
</span><span id="parse_one-119"><a href="#parse_one-119"><span class="linenos">119</span></a>
|
</span><span id="parse_one-119"><a href="#parse_one-119"><span class="linenos">119</span></a>
|
||||||
</span><span id="parse_one-120"><a href="#parse_one-120"><span class="linenos">120</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">result</span><span class="p">:</span>
|
</span><span id="parse_one-120"><a href="#parse_one-120"><span class="linenos">120</span></a> <span class="k">if</span> <span class="n">into</span><span class="p">:</span>
|
||||||
</span><span id="parse_one-121"><a href="#parse_one-121"><span class="linenos">121</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
|
</span><span id="parse_one-121"><a href="#parse_one-121"><span class="linenos">121</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">dialect</span><span class="o">.</span><span class="n">parse_into</span><span class="p">(</span><span class="n">into</span><span class="p">,</span> <span class="n">sql</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
|
||||||
</span><span id="parse_one-122"><a href="#parse_one-122"><span class="linenos">122</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"No expression was parsed from '</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">'"</span><span class="p">)</span>
|
</span><span id="parse_one-122"><a href="#parse_one-122"><span class="linenos">122</span></a> <span class="k">else</span><span class="p">:</span>
|
||||||
</span><span id="parse_one-123"><a href="#parse_one-123"><span class="linenos">123</span></a> <span class="k">return</span> <span class="n">expression</span>
|
</span><span id="parse_one-123"><a href="#parse_one-123"><span class="linenos">123</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">dialect</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
|
||||||
</span><span id="parse_one-124"><a href="#parse_one-124"><span class="linenos">124</span></a> <span class="k">else</span><span class="p">:</span>
|
</span><span id="parse_one-124"><a href="#parse_one-124"><span class="linenos">124</span></a>
|
||||||
</span><span id="parse_one-125"><a href="#parse_one-125"><span class="linenos">125</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"No expression was parsed from '</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">'"</span><span class="p">)</span>
|
</span><span id="parse_one-125"><a href="#parse_one-125"><span class="linenos">125</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">result</span><span class="p">:</span>
|
||||||
|
</span><span id="parse_one-126"><a href="#parse_one-126"><span class="linenos">126</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
|
||||||
|
</span><span id="parse_one-127"><a href="#parse_one-127"><span class="linenos">127</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"No expression was parsed from '</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">'"</span><span class="p">)</span>
|
||||||
|
</span><span id="parse_one-128"><a href="#parse_one-128"><span class="linenos">128</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||||
|
</span><span id="parse_one-129"><a href="#parse_one-129"><span class="linenos">129</span></a> <span class="k">else</span><span class="p">:</span>
|
||||||
|
</span><span id="parse_one-130"><a href="#parse_one-130"><span class="linenos">130</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"No expression was parsed from '</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">'"</span><span class="p">)</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -966,6 +979,7 @@
|
||||||
<ul>
|
<ul>
|
||||||
<li><strong>sql:</strong> the SQL code string to parse.</li>
|
<li><strong>sql:</strong> the SQL code string to parse.</li>
|
||||||
<li><strong>read:</strong> the SQL dialect to apply during parsing (eg. "spark", "hive", "presto", "mysql").</li>
|
<li><strong>read:</strong> the SQL dialect to apply during parsing (eg. "spark", "hive", "presto", "mysql").</li>
|
||||||
|
<li><strong>dialect:</strong> the SQL dialect (alias for read)</li>
|
||||||
<li><strong>into:</strong> the SQLGlot Expression to parse into.</li>
|
<li><strong>into:</strong> the SQLGlot Expression to parse into.</li>
|
||||||
<li><strong>**opts:</strong> other <code><a href="sqlglot/parser.html#Parser">sqlglot.parser.Parser</a></code> options.</li>
|
<li><strong>**opts:</strong> other <code><a href="sqlglot/parser.html#Parser">sqlglot.parser.Parser</a></code> options.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -990,35 +1004,35 @@
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#transpile"></a>
|
<a class="headerlink" href="#transpile"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="transpile-128"><a href="#transpile-128"><span class="linenos">128</span></a><span class="k">def</span> <span class="nf">transpile</span><span class="p">(</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="transpile-133"><a href="#transpile-133"><span class="linenos">133</span></a><span class="k">def</span> <span class="nf">transpile</span><span class="p">(</span>
|
||||||
</span><span id="transpile-129"><a href="#transpile-129"><span class="linenos">129</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
|
</span><span id="transpile-134"><a href="#transpile-134"><span class="linenos">134</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
|
||||||
</span><span id="transpile-130"><a href="#transpile-130"><span class="linenos">130</span></a> <span class="n">read</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="transpile-135"><a href="#transpile-135"><span class="linenos">135</span></a> <span class="n">read</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="transpile-131"><a href="#transpile-131"><span class="linenos">131</span></a> <span class="n">write</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="transpile-136"><a href="#transpile-136"><span class="linenos">136</span></a> <span class="n">write</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="transpile-132"><a href="#transpile-132"><span class="linenos">132</span></a> <span class="n">identity</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="transpile-137"><a href="#transpile-137"><span class="linenos">137</span></a> <span class="n">identity</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="transpile-133"><a href="#transpile-133"><span class="linenos">133</span></a> <span class="n">error_level</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ErrorLevel</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
</span><span id="transpile-138"><a href="#transpile-138"><span class="linenos">138</span></a> <span class="n">error_level</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ErrorLevel</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||||
</span><span id="transpile-134"><a href="#transpile-134"><span class="linenos">134</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
|
</span><span id="transpile-139"><a href="#transpile-139"><span class="linenos">139</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
|
||||||
</span><span id="transpile-135"><a href="#transpile-135"><span class="linenos">135</span></a><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="transpile-140"><a href="#transpile-140"><span class="linenos">140</span></a><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="transpile-136"><a href="#transpile-136"><span class="linenos">136</span></a><span class="w"> </span><span class="sd">"""</span>
|
</span><span id="transpile-141"><a href="#transpile-141"><span class="linenos">141</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||||
</span><span id="transpile-137"><a href="#transpile-137"><span class="linenos">137</span></a><span class="sd"> Parses the given SQL string in accordance with the source dialect and returns a list of SQL strings transformed</span>
|
</span><span id="transpile-142"><a href="#transpile-142"><span class="linenos">142</span></a><span class="sd"> Parses the given SQL string in accordance with the source dialect and returns a list of SQL strings transformed</span>
|
||||||
</span><span id="transpile-138"><a href="#transpile-138"><span class="linenos">138</span></a><span class="sd"> to conform to the target dialect. Each string in the returned list represents a single transformed SQL statement.</span>
|
</span><span id="transpile-143"><a href="#transpile-143"><span class="linenos">143</span></a><span class="sd"> to conform to the target dialect. Each string in the returned list represents a single transformed SQL statement.</span>
|
||||||
</span><span id="transpile-139"><a href="#transpile-139"><span class="linenos">139</span></a>
|
</span><span id="transpile-144"><a href="#transpile-144"><span class="linenos">144</span></a>
|
||||||
</span><span id="transpile-140"><a href="#transpile-140"><span class="linenos">140</span></a><span class="sd"> Args:</span>
|
</span><span id="transpile-145"><a href="#transpile-145"><span class="linenos">145</span></a><span class="sd"> Args:</span>
|
||||||
</span><span id="transpile-141"><a href="#transpile-141"><span class="linenos">141</span></a><span class="sd"> sql: the SQL code string to transpile.</span>
|
</span><span id="transpile-146"><a href="#transpile-146"><span class="linenos">146</span></a><span class="sd"> sql: the SQL code string to transpile.</span>
|
||||||
</span><span id="transpile-142"><a href="#transpile-142"><span class="linenos">142</span></a><span class="sd"> read: the source dialect used to parse the input string (eg. "spark", "hive", "presto", "mysql").</span>
|
</span><span id="transpile-147"><a href="#transpile-147"><span class="linenos">147</span></a><span class="sd"> read: the source dialect used to parse the input string (eg. "spark", "hive", "presto", "mysql").</span>
|
||||||
</span><span id="transpile-143"><a href="#transpile-143"><span class="linenos">143</span></a><span class="sd"> write: the target dialect into which the input should be transformed (eg. "spark", "hive", "presto", "mysql").</span>
|
</span><span id="transpile-148"><a href="#transpile-148"><span class="linenos">148</span></a><span class="sd"> write: the target dialect into which the input should be transformed (eg. "spark", "hive", "presto", "mysql").</span>
|
||||||
</span><span id="transpile-144"><a href="#transpile-144"><span class="linenos">144</span></a><span class="sd"> identity: if set to `True` and if the target dialect is not specified the source dialect will be used as both:</span>
|
</span><span id="transpile-149"><a href="#transpile-149"><span class="linenos">149</span></a><span class="sd"> identity: if set to `True` and if the target dialect is not specified the source dialect will be used as both:</span>
|
||||||
</span><span id="transpile-145"><a href="#transpile-145"><span class="linenos">145</span></a><span class="sd"> the source and the target dialect.</span>
|
</span><span id="transpile-150"><a href="#transpile-150"><span class="linenos">150</span></a><span class="sd"> the source and the target dialect.</span>
|
||||||
</span><span id="transpile-146"><a href="#transpile-146"><span class="linenos">146</span></a><span class="sd"> error_level: the desired error level of the parser.</span>
|
</span><span id="transpile-151"><a href="#transpile-151"><span class="linenos">151</span></a><span class="sd"> error_level: the desired error level of the parser.</span>
|
||||||
</span><span id="transpile-147"><a href="#transpile-147"><span class="linenos">147</span></a><span class="sd"> **opts: other `sqlglot.generator.Generator` options.</span>
|
</span><span id="transpile-152"><a href="#transpile-152"><span class="linenos">152</span></a><span class="sd"> **opts: other `sqlglot.generator.Generator` options.</span>
|
||||||
</span><span id="transpile-148"><a href="#transpile-148"><span class="linenos">148</span></a>
|
</span><span id="transpile-153"><a href="#transpile-153"><span class="linenos">153</span></a>
|
||||||
</span><span id="transpile-149"><a href="#transpile-149"><span class="linenos">149</span></a><span class="sd"> Returns:</span>
|
</span><span id="transpile-154"><a href="#transpile-154"><span class="linenos">154</span></a><span class="sd"> Returns:</span>
|
||||||
</span><span id="transpile-150"><a href="#transpile-150"><span class="linenos">150</span></a><span class="sd"> The list of transpiled SQL statements.</span>
|
</span><span id="transpile-155"><a href="#transpile-155"><span class="linenos">155</span></a><span class="sd"> The list of transpiled SQL statements.</span>
|
||||||
</span><span id="transpile-151"><a href="#transpile-151"><span class="linenos">151</span></a><span class="sd"> """</span>
|
</span><span id="transpile-156"><a href="#transpile-156"><span class="linenos">156</span></a><span class="sd"> """</span>
|
||||||
</span><span id="transpile-152"><a href="#transpile-152"><span class="linenos">152</span></a> <span class="n">write</span> <span class="o">=</span> <span class="p">(</span><span class="n">read</span> <span class="k">if</span> <span class="n">write</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">write</span><span class="p">)</span> <span class="k">if</span> <span class="n">identity</span> <span class="k">else</span> <span class="n">write</span>
|
</span><span id="transpile-157"><a href="#transpile-157"><span class="linenos">157</span></a> <span class="n">write</span> <span class="o">=</span> <span class="p">(</span><span class="n">read</span> <span class="k">if</span> <span class="n">write</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">write</span><span class="p">)</span> <span class="k">if</span> <span class="n">identity</span> <span class="k">else</span> <span class="n">write</span>
|
||||||
</span><span id="transpile-153"><a href="#transpile-153"><span class="linenos">153</span></a> <span class="k">return</span> <span class="p">[</span>
|
</span><span id="transpile-158"><a href="#transpile-158"><span class="linenos">158</span></a> <span class="k">return</span> <span class="p">[</span>
|
||||||
</span><span id="transpile-154"><a href="#transpile-154"><span class="linenos">154</span></a> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">write</span><span class="p">)()</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
|
</span><span id="transpile-159"><a href="#transpile-159"><span class="linenos">159</span></a> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">write</span><span class="p">)()</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
|
||||||
</span><span id="transpile-155"><a href="#transpile-155"><span class="linenos">155</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">parse</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="n">read</span><span class="p">,</span> <span class="n">error_level</span><span class="o">=</span><span class="n">error_level</span><span class="p">)</span>
|
</span><span id="transpile-160"><a href="#transpile-160"><span class="linenos">160</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">parse</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="n">read</span><span class="p">,</span> <span class="n">error_level</span><span class="o">=</span><span class="n">error_level</span><span class="p">)</span>
|
||||||
</span><span id="transpile-156"><a href="#transpile-156"><span class="linenos">156</span></a> <span class="p">]</span>
|
</span><span id="transpile-161"><a href="#transpile-161"><span class="linenos">161</span></a> <span class="p">]</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -51,8 +51,8 @@
|
||||||
|
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos">1</span></a><span class="c1"># file generated by setuptools_scm</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos">1</span></a><span class="c1"># file generated by setuptools_scm</span>
|
||||||
</span><span id="L-2"><a href="#L-2"><span class="linenos">2</span></a><span class="c1"># don't change, don't track in version control</span>
|
</span><span id="L-2"><a href="#L-2"><span class="linenos">2</span></a><span class="c1"># don't change, don't track in version control</span>
|
||||||
</span><span id="L-3"><a href="#L-3"><span class="linenos">3</span></a><span class="n">__version__</span> <span class="o">=</span> <span class="n">version</span> <span class="o">=</span> <span class="s1">'16.7.6'</span>
|
</span><span id="L-3"><a href="#L-3"><span class="linenos">3</span></a><span class="n">__version__</span> <span class="o">=</span> <span class="n">version</span> <span class="o">=</span> <span class="s1">'17.1.0'</span>
|
||||||
</span><span id="L-4"><a href="#L-4"><span class="linenos">4</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">16</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">6</span><span class="p">)</span>
|
</span><span id="L-4"><a href="#L-4"><span class="linenos">4</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">17</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>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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">'139782020016848'</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">'139782020016848'</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">'139782021739664'</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">sqlglot.dataframe.sql.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">'140082675204736'</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">'140082675204736'</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">'140082674859984'</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">sqlglot.dataframe.sql.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>
|
||||||
|
|
||||||
|
@ -1681,7 +1681,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">'139782024836480'</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">'139782024956416'</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">'140082679872432'</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">'140082680049728'</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>
|
||||||
|
|
||||||
|
@ -2611,7 +2611,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">'139782020552720'</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">sqlglot.dataframe.sql.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">'140082675519776'</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">sqlglot.dataframe.sql.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>
|
||||||
|
|
||||||
|
@ -2680,7 +2680,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">'139782019475552'</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">'139782019475552'</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">sqlglot.dataframe.sql.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">'140082673819296'</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">'140082673819296'</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">sqlglot.dataframe.sql.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>
|
||||||
|
|
||||||
|
@ -2885,7 +2885,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">'139782019007296'</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">'139782019051584'</span><span class="o">></span></span><span class="return-annotation">) -> <span class="n"><a href="#DataFrame">sqlglot.dataframe.sql.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">'140082674028640'</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">'140082674107200'</span><span class="o">></span></span><span class="return-annotation">) -> <span class="n"><a href="#DataFrame">sqlglot.dataframe.sql.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>
|
||||||
|
|
||||||
|
@ -3590,7 +3590,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">'139782022957088'</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">'140082675992320'</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>
|
||||||
|
|
||||||
|
@ -3633,7 +3633,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">'139782019125488'</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></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">'140082674172592'</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></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>
|
||||||
|
|
||||||
|
@ -3654,7 +3654,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">'139782019597792'</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">sqlglot.dataframe.sql.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">'140082674653344'</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">sqlglot.dataframe.sql.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>
|
||||||
|
|
||||||
|
@ -3675,7 +3675,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">'139782019320464'</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">'139782019278800'</span><span class="o">></span><span class="p">]</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">sqlglot.dataframe.sql.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">'140082674342144'</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">'140082674481808'</span><span class="o">></span><span class="p">]</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">sqlglot.dataframe.sql.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>
|
||||||
|
|
||||||
|
@ -3702,7 +3702,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">'139782019311616'</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">sqlglot.dataframe.sql.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">'140082674285632'</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">sqlglot.dataframe.sql.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>
|
||||||
|
|
||||||
|
@ -3739,7 +3739,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">'139782019516064'</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">sqlglot.dataframe.sql.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">'140082674587952'</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">sqlglot.dataframe.sql.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>
|
||||||
|
|
||||||
|
@ -3760,7 +3760,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">'139782019526144'</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">sqlglot.dataframe.sql.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">'140082674599728'</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">sqlglot.dataframe.sql.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>
|
||||||
|
|
||||||
|
@ -4314,7 +4314,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">'139782019793200'</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">'139782019793200'</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">'140082674779280'</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">'140082674779280'</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>
|
||||||
|
|
||||||
|
@ -4335,7 +4335,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">'139782019896208'</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">'139782017869920'</span><span class="o">></span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">sqlglot.dataframe.sql.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">'140082672805456'</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">'140082672859936'</span><span class="o">></span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">sqlglot.dataframe.sql.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>
|
||||||
|
|
||||||
|
@ -4370,7 +4370,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">'139782017911248'</span><span class="o">></span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">sqlglot.dataframe.sql.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">'140082672917648'</span><span class="o">></span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">sqlglot.dataframe.sql.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>
|
||||||
|
|
||||||
|
@ -4615,7 +4615,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">'139782018771280'</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">'139782018771280'</span><span class="o">></span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n"><a href="#WindowSpec">sqlglot.dataframe.sql.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">'140082673666752'</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">'140082673666752'</span><span class="o">></span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n"><a href="#WindowSpec">sqlglot.dataframe.sql.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>
|
||||||
|
|
||||||
|
@ -4636,7 +4636,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">'139782018420784'</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">'139782018420784'</span><span class="o">></span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n"><a href="#WindowSpec">sqlglot.dataframe.sql.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">'140082673062752'</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">'140082673062752'</span><span class="o">></span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n"><a href="#WindowSpec">sqlglot.dataframe.sql.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>
|
||||||
|
|
||||||
|
@ -4872,7 +4872,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">'139782018017808'</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">'139782018017808'</span><span class="o">></span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n"><a href="#WindowSpec">sqlglot.dataframe.sql.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">'140082673242832'</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">'140082673242832'</span><span class="o">></span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n"><a href="#WindowSpec">sqlglot.dataframe.sql.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>
|
||||||
|
|
||||||
|
@ -4899,7 +4899,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">'139782018250688'</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">'139782018250688'</span><span class="o">></span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n"><a href="#WindowSpec">sqlglot.dataframe.sql.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">'140082673125984'</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">'140082673125984'</span><span class="o">></span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n"><a href="#WindowSpec">sqlglot.dataframe.sql.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
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 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
|
@ -87,12 +87,6 @@
|
||||||
<li>
|
<li>
|
||||||
<a class="variable" href="#Trino.Generator.BYTE_END">BYTE_END</a>
|
<a class="variable" href="#Trino.Generator.BYTE_END">BYTE_END</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
|
||||||
<a class="variable" href="#Trino.Generator.RAW_START">RAW_START</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a class="variable" href="#Trino.Generator.RAW_END">RAW_END</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
@ -156,12 +150,6 @@
|
||||||
<li>
|
<li>
|
||||||
<a class="variable" href="#Trino.BYTE_END">BYTE_END</a>
|
<a class="variable" href="#Trino.BYTE_END">BYTE_END</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
|
||||||
<a class="variable" href="#Trino.RAW_START">RAW_START</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a class="variable" href="#Trino.RAW_END">RAW_END</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
@ -439,30 +427,6 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="Trino.RAW_START" class="classattr">
|
|
||||||
<div class="attr variable">
|
|
||||||
<span class="name">RAW_START</span> =
|
|
||||||
<span class="default_value">None</span>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<a class="headerlink" href="#Trino.RAW_START"></a>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="Trino.RAW_END" class="classattr">
|
|
||||||
<div class="attr variable">
|
|
||||||
<span class="name">RAW_END</span> =
|
|
||||||
<span class="default_value">None</span>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<a class="headerlink" href="#Trino.RAW_END"></a>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="inherited">
|
<div class="inherited">
|
||||||
<h5>Inherited Members</h5>
|
<h5>Inherited Members</h5>
|
||||||
|
@ -625,26 +589,26 @@ Default: True</li>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#Trino.Generator.can_identify"></a>
|
<a class="headerlink" href="#Trino.Generator.can_identify"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="Trino.Generator.can_identify-247"><a href="#Trino.Generator.can_identify-247"><span class="linenos">247</span></a> <span class="nd">@classmethod</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="Trino.Generator.can_identify-246"><a href="#Trino.Generator.can_identify-246"><span class="linenos">246</span></a> <span class="nd">@classmethod</span>
|
||||||
</span><span id="Trino.Generator.can_identify-248"><a href="#Trino.Generator.can_identify-248"><span class="linenos">248</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">"safe"</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
|
</span><span id="Trino.Generator.can_identify-247"><a href="#Trino.Generator.can_identify-247"><span class="linenos">247</span></a> <span class="k">def</span> <span class="nf">can_identify</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">identify</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">=</span> <span class="s2">"safe"</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
|
||||||
</span><span id="Trino.Generator.can_identify-249"><a href="#Trino.Generator.can_identify-249"><span class="linenos">249</span></a><span class="w"> </span><span class="sd">"""Checks if text can be identified given an identify option.</span>
|
</span><span id="Trino.Generator.can_identify-248"><a href="#Trino.Generator.can_identify-248"><span class="linenos">248</span></a><span class="w"> </span><span class="sd">"""Checks if text can be identified given an identify option.</span>
|
||||||
</span><span id="Trino.Generator.can_identify-250"><a href="#Trino.Generator.can_identify-250"><span class="linenos">250</span></a>
|
</span><span id="Trino.Generator.can_identify-249"><a href="#Trino.Generator.can_identify-249"><span class="linenos">249</span></a>
|
||||||
</span><span id="Trino.Generator.can_identify-251"><a href="#Trino.Generator.can_identify-251"><span class="linenos">251</span></a><span class="sd"> Args:</span>
|
</span><span id="Trino.Generator.can_identify-250"><a href="#Trino.Generator.can_identify-250"><span class="linenos">250</span></a><span class="sd"> Args:</span>
|
||||||
</span><span id="Trino.Generator.can_identify-252"><a href="#Trino.Generator.can_identify-252"><span class="linenos">252</span></a><span class="sd"> text: The text to check.</span>
|
</span><span id="Trino.Generator.can_identify-251"><a href="#Trino.Generator.can_identify-251"><span class="linenos">251</span></a><span class="sd"> text: The text to check.</span>
|
||||||
</span><span id="Trino.Generator.can_identify-253"><a href="#Trino.Generator.can_identify-253"><span class="linenos">253</span></a><span class="sd"> identify:</span>
|
</span><span id="Trino.Generator.can_identify-252"><a href="#Trino.Generator.can_identify-252"><span class="linenos">252</span></a><span class="sd"> identify:</span>
|
||||||
</span><span id="Trino.Generator.can_identify-254"><a href="#Trino.Generator.can_identify-254"><span class="linenos">254</span></a><span class="sd"> "always" or `True`: Always returns true.</span>
|
</span><span id="Trino.Generator.can_identify-253"><a href="#Trino.Generator.can_identify-253"><span class="linenos">253</span></a><span class="sd"> "always" or `True`: Always returns true.</span>
|
||||||
</span><span id="Trino.Generator.can_identify-255"><a href="#Trino.Generator.can_identify-255"><span class="linenos">255</span></a><span class="sd"> "safe": True if the identifier is case-insensitive.</span>
|
</span><span id="Trino.Generator.can_identify-254"><a href="#Trino.Generator.can_identify-254"><span class="linenos">254</span></a><span class="sd"> "safe": True if the identifier is case-insensitive.</span>
|
||||||
</span><span id="Trino.Generator.can_identify-256"><a href="#Trino.Generator.can_identify-256"><span class="linenos">256</span></a>
|
</span><span id="Trino.Generator.can_identify-255"><a href="#Trino.Generator.can_identify-255"><span class="linenos">255</span></a>
|
||||||
</span><span id="Trino.Generator.can_identify-257"><a href="#Trino.Generator.can_identify-257"><span class="linenos">257</span></a><span class="sd"> Returns:</span>
|
</span><span id="Trino.Generator.can_identify-256"><a href="#Trino.Generator.can_identify-256"><span class="linenos">256</span></a><span class="sd"> Returns:</span>
|
||||||
</span><span id="Trino.Generator.can_identify-258"><a href="#Trino.Generator.can_identify-258"><span class="linenos">258</span></a><span class="sd"> Whether or not the given text can be identified.</span>
|
</span><span id="Trino.Generator.can_identify-257"><a href="#Trino.Generator.can_identify-257"><span class="linenos">257</span></a><span class="sd"> Whether or not the given text can be identified.</span>
|
||||||
</span><span id="Trino.Generator.can_identify-259"><a href="#Trino.Generator.can_identify-259"><span class="linenos">259</span></a><span class="sd"> """</span>
|
</span><span id="Trino.Generator.can_identify-258"><a href="#Trino.Generator.can_identify-258"><span class="linenos">258</span></a><span class="sd"> """</span>
|
||||||
</span><span id="Trino.Generator.can_identify-260"><a href="#Trino.Generator.can_identify-260"><span class="linenos">260</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">"always"</span><span class="p">:</span>
|
</span><span id="Trino.Generator.can_identify-259"><a href="#Trino.Generator.can_identify-259"><span class="linenos">259</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">or</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">"always"</span><span class="p">:</span>
|
||||||
</span><span id="Trino.Generator.can_identify-261"><a href="#Trino.Generator.can_identify-261"><span class="linenos">261</span></a> <span class="k">return</span> <span class="kc">True</span>
|
</span><span id="Trino.Generator.can_identify-260"><a href="#Trino.Generator.can_identify-260"><span class="linenos">260</span></a> <span class="k">return</span> <span class="kc">True</span>
|
||||||
</span><span id="Trino.Generator.can_identify-262"><a href="#Trino.Generator.can_identify-262"><span class="linenos">262</span></a>
|
</span><span id="Trino.Generator.can_identify-261"><a href="#Trino.Generator.can_identify-261"><span class="linenos">261</span></a>
|
||||||
</span><span id="Trino.Generator.can_identify-263"><a href="#Trino.Generator.can_identify-263"><span class="linenos">263</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">"safe"</span><span class="p">:</span>
|
</span><span id="Trino.Generator.can_identify-262"><a href="#Trino.Generator.can_identify-262"><span class="linenos">262</span></a> <span class="k">if</span> <span class="n">identify</span> <span class="o">==</span> <span class="s2">"safe"</span><span class="p">:</span>
|
||||||
</span><span id="Trino.Generator.can_identify-264"><a href="#Trino.Generator.can_identify-264"><span class="linenos">264</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
|
</span><span id="Trino.Generator.can_identify-263"><a href="#Trino.Generator.can_identify-263"><span class="linenos">263</span></a> <span class="k">return</span> <span class="ow">not</span> <span class="bp">cls</span><span class="o">.</span><span class="n">case_sensitive</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
|
||||||
</span><span id="Trino.Generator.can_identify-265"><a href="#Trino.Generator.can_identify-265"><span class="linenos">265</span></a>
|
</span><span id="Trino.Generator.can_identify-264"><a href="#Trino.Generator.can_identify-264"><span class="linenos">264</span></a>
|
||||||
</span><span id="Trino.Generator.can_identify-266"><a href="#Trino.Generator.can_identify-266"><span class="linenos">266</span></a> <span class="k">return</span> <span class="kc">False</span>
|
</span><span id="Trino.Generator.can_identify-265"><a href="#Trino.Generator.can_identify-265"><span class="linenos">265</span></a> <span class="k">return</span> <span class="kc">False</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -810,30 +774,6 @@ Default: True</li>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="Trino.Generator.RAW_START" class="classattr">
|
|
||||||
<div class="attr variable">
|
|
||||||
<span class="name">RAW_START</span><span class="annotation">: Optional[str]</span> =
|
|
||||||
<span class="default_value">None</span>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<a class="headerlink" href="#Trino.Generator.RAW_START"></a>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="Trino.Generator.RAW_END" class="classattr">
|
|
||||||
<div class="attr variable">
|
|
||||||
<span class="name">RAW_END</span><span class="annotation">: Optional[str]</span> =
|
|
||||||
<span class="default_value">None</span>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<a class="headerlink" href="#Trino.Generator.RAW_END"></a>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="inherited">
|
<div class="inherited">
|
||||||
<h5>Inherited Members</h5>
|
<h5>Inherited Members</h5>
|
||||||
|
@ -853,6 +793,9 @@ Default: True</li>
|
||||||
<dd id="Trino.Generator.RENAME_TABLE_WITH_DB" class="variable"><a href="../generator.html#Generator.RENAME_TABLE_WITH_DB">RENAME_TABLE_WITH_DB</a></dd>
|
<dd id="Trino.Generator.RENAME_TABLE_WITH_DB" class="variable"><a href="../generator.html#Generator.RENAME_TABLE_WITH_DB">RENAME_TABLE_WITH_DB</a></dd>
|
||||||
<dd id="Trino.Generator.GROUPINGS_SEP" class="variable"><a href="../generator.html#Generator.GROUPINGS_SEP">GROUPINGS_SEP</a></dd>
|
<dd id="Trino.Generator.GROUPINGS_SEP" class="variable"><a href="../generator.html#Generator.GROUPINGS_SEP">GROUPINGS_SEP</a></dd>
|
||||||
<dd id="Trino.Generator.INDEX_ON" class="variable"><a href="../generator.html#Generator.INDEX_ON">INDEX_ON</a></dd>
|
<dd id="Trino.Generator.INDEX_ON" class="variable"><a href="../generator.html#Generator.INDEX_ON">INDEX_ON</a></dd>
|
||||||
|
<dd id="Trino.Generator.QUERY_HINT_SEP" class="variable"><a href="../generator.html#Generator.QUERY_HINT_SEP">QUERY_HINT_SEP</a></dd>
|
||||||
|
<dd id="Trino.Generator.DUPLICATE_KEY_UPDATE_WITH_SET" class="variable"><a href="../generator.html#Generator.DUPLICATE_KEY_UPDATE_WITH_SET">DUPLICATE_KEY_UPDATE_WITH_SET</a></dd>
|
||||||
|
<dd id="Trino.Generator.LIMIT_IS_TOP" class="variable"><a href="../generator.html#Generator.LIMIT_IS_TOP">LIMIT_IS_TOP</a></dd>
|
||||||
<dd id="Trino.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
|
<dd id="Trino.Generator.STAR_MAPPING" class="variable"><a href="../generator.html#Generator.STAR_MAPPING">STAR_MAPPING</a></dd>
|
||||||
<dd id="Trino.Generator.TIME_PART_SINGULARS" class="variable"><a href="../generator.html#Generator.TIME_PART_SINGULARS">TIME_PART_SINGULARS</a></dd>
|
<dd id="Trino.Generator.TIME_PART_SINGULARS" class="variable"><a href="../generator.html#Generator.TIME_PART_SINGULARS">TIME_PART_SINGULARS</a></dd>
|
||||||
<dd id="Trino.Generator.TOKEN_MAPPING" class="variable"><a href="../generator.html#Generator.TOKEN_MAPPING">TOKEN_MAPPING</a></dd>
|
<dd id="Trino.Generator.TOKEN_MAPPING" class="variable"><a href="../generator.html#Generator.TOKEN_MAPPING">TOKEN_MAPPING</a></dd>
|
||||||
|
@ -865,6 +808,7 @@ Default: True</li>
|
||||||
<dd id="Trino.Generator.ALIAS_POST_TABLESAMPLE" class="variable"><a href="../generator.html#Generator.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
|
<dd id="Trino.Generator.ALIAS_POST_TABLESAMPLE" class="variable"><a href="../generator.html#Generator.ALIAS_POST_TABLESAMPLE">ALIAS_POST_TABLESAMPLE</a></dd>
|
||||||
<dd id="Trino.Generator.IDENTIFIERS_CAN_START_WITH_DIGIT" class="variable"><a href="../generator.html#Generator.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a></dd>
|
<dd id="Trino.Generator.IDENTIFIERS_CAN_START_WITH_DIGIT" class="variable"><a href="../generator.html#Generator.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a></dd>
|
||||||
<dd id="Trino.Generator.NORMALIZE_FUNCTIONS" class="variable"><a href="../generator.html#Generator.NORMALIZE_FUNCTIONS">NORMALIZE_FUNCTIONS</a></dd>
|
<dd id="Trino.Generator.NORMALIZE_FUNCTIONS" class="variable"><a href="../generator.html#Generator.NORMALIZE_FUNCTIONS">NORMALIZE_FUNCTIONS</a></dd>
|
||||||
|
<dd id="Trino.Generator.ESCAPE_LINE_BREAK" class="variable"><a href="../generator.html#Generator.ESCAPE_LINE_BREAK">ESCAPE_LINE_BREAK</a></dd>
|
||||||
<dd id="Trino.Generator.pretty" class="variable"><a href="../generator.html#Generator.pretty">pretty</a></dd>
|
<dd id="Trino.Generator.pretty" class="variable"><a href="../generator.html#Generator.pretty">pretty</a></dd>
|
||||||
<dd id="Trino.Generator.identify" class="variable"><a href="../generator.html#Generator.identify">identify</a></dd>
|
<dd id="Trino.Generator.identify" class="variable"><a href="../generator.html#Generator.identify">identify</a></dd>
|
||||||
<dd id="Trino.Generator.normalize" class="variable"><a href="../generator.html#Generator.normalize">normalize</a></dd>
|
<dd id="Trino.Generator.normalize" class="variable"><a href="../generator.html#Generator.normalize">normalize</a></dd>
|
||||||
|
@ -1123,6 +1067,7 @@ Default: True</li>
|
||||||
<dd id="Trino.Generator.INTERVAL_ALLOWS_PLURAL_FORM" class="variable"><a href="presto.html#Presto.Generator.INTERVAL_ALLOWS_PLURAL_FORM">INTERVAL_ALLOWS_PLURAL_FORM</a></dd>
|
<dd id="Trino.Generator.INTERVAL_ALLOWS_PLURAL_FORM" class="variable"><a href="presto.html#Presto.Generator.INTERVAL_ALLOWS_PLURAL_FORM">INTERVAL_ALLOWS_PLURAL_FORM</a></dd>
|
||||||
<dd id="Trino.Generator.JOIN_HINTS" class="variable"><a href="presto.html#Presto.Generator.JOIN_HINTS">JOIN_HINTS</a></dd>
|
<dd id="Trino.Generator.JOIN_HINTS" class="variable"><a href="presto.html#Presto.Generator.JOIN_HINTS">JOIN_HINTS</a></dd>
|
||||||
<dd id="Trino.Generator.TABLE_HINTS" class="variable"><a href="presto.html#Presto.Generator.TABLE_HINTS">TABLE_HINTS</a></dd>
|
<dd id="Trino.Generator.TABLE_HINTS" class="variable"><a href="presto.html#Presto.Generator.TABLE_HINTS">TABLE_HINTS</a></dd>
|
||||||
|
<dd id="Trino.Generator.QUERY_HINTS" class="variable"><a href="presto.html#Presto.Generator.QUERY_HINTS">QUERY_HINTS</a></dd>
|
||||||
<dd id="Trino.Generator.IS_BOOL_ALLOWED" class="variable"><a href="presto.html#Presto.Generator.IS_BOOL_ALLOWED">IS_BOOL_ALLOWED</a></dd>
|
<dd id="Trino.Generator.IS_BOOL_ALLOWED" class="variable"><a href="presto.html#Presto.Generator.IS_BOOL_ALLOWED">IS_BOOL_ALLOWED</a></dd>
|
||||||
<dd id="Trino.Generator.STRUCT_DELIMITER" class="variable"><a href="presto.html#Presto.Generator.STRUCT_DELIMITER">STRUCT_DELIMITER</a></dd>
|
<dd id="Trino.Generator.STRUCT_DELIMITER" class="variable"><a href="presto.html#Presto.Generator.STRUCT_DELIMITER">STRUCT_DELIMITER</a></dd>
|
||||||
<dd id="Trino.Generator.PROPERTIES_LOCATION" class="variable"><a href="presto.html#Presto.Generator.PROPERTIES_LOCATION">PROPERTIES_LOCATION</a></dd>
|
<dd id="Trino.Generator.PROPERTIES_LOCATION" class="variable"><a href="presto.html#Presto.Generator.PROPERTIES_LOCATION">PROPERTIES_LOCATION</a></dd>
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -116,96 +116,98 @@
|
||||||
</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a><span class="k">if</span> <span class="n">t</span><span class="o">.</span><span class="n">TYPE_CHECKING</span><span class="p">:</span>
|
</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a><span class="k">if</span> <span class="n">t</span><span class="o">.</span><span class="n">TYPE_CHECKING</span><span class="p">:</span>
|
||||||
</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a> <span class="kn">from</span> <span class="nn">sqlglot.executor.table</span> <span class="kn">import</span> <span class="n">Table</span><span class="p">,</span> <span class="n">TableIter</span>
|
</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a> <span class="kn">from</span> <span class="nn">sqlglot.executor.table</span> <span class="kn">import</span> <span class="n">Table</span><span class="p">,</span> <span class="n">TableIter</span>
|
||||||
</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a>
|
</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a>
|
||||||
</span><span id="L-10"><a href="#L-10"><span class="linenos">10</span></a>
|
</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a>
|
||||||
</span><span id="L-11"><a href="#L-11"><span class="linenos">11</span></a><span class="k">class</span> <span class="nc">Context</span><span class="p">:</span>
|
</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a><span class="k">class</span> <span class="nc">Context</span><span class="p">:</span>
|
||||||
</span><span id="L-12"><a href="#L-12"><span class="linenos">12</span></a><span class="w"> </span><span class="sd">"""</span>
|
</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||||
</span><span id="L-13"><a href="#L-13"><span class="linenos">13</span></a><span class="sd"> Execution context for sql expressions.</span>
|
</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a><span class="sd"> Execution context for sql expressions.</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="sd"> Context is used to hold relevant data tables which can then be queried on with eval.</span>
|
</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a><span class="sd"> Context is used to hold relevant data tables which can then be queried on with eval.</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>
|
||||||
</span><span id="L-17"><a href="#L-17"><span class="linenos">17</span></a><span class="sd"> References to columns can either be scalar or vectors. When set_row is used, column references</span>
|
</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a><span class="sd"> References to columns can either be scalar or vectors. When set_row is used, column references</span>
|
||||||
</span><span id="L-18"><a href="#L-18"><span class="linenos">18</span></a><span class="sd"> evaluate to scalars while set_range evaluates to vectors. This allows convenient and efficient</span>
|
</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a><span class="sd"> evaluate to scalars while set_range evaluates to vectors. This allows convenient and efficient</span>
|
||||||
</span><span id="L-19"><a href="#L-19"><span class="linenos">19</span></a><span class="sd"> evaluation of aggregation functions.</span>
|
</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a><span class="sd"> evaluation of aggregation functions.</span>
|
||||||
</span><span id="L-20"><a href="#L-20"><span class="linenos">20</span></a><span class="sd"> """</span>
|
</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a><span class="sd"> """</span>
|
||||||
</span><span id="L-21"><a href="#L-21"><span class="linenos">21</span></a>
|
</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a>
|
||||||
</span><span id="L-22"><a href="#L-22"><span class="linenos">22</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tables</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Table</span><span class="p">],</span> <span class="n">env</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tables</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Table</span><span class="p">],</span> <span class="n">env</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||||
</span><span id="L-23"><a href="#L-23"><span class="linenos">23</span></a><span class="w"> </span><span class="sd">"""</span>
|
</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||||
</span><span id="L-24"><a href="#L-24"><span class="linenos">24</span></a><span class="sd"> Args</span>
|
</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a><span class="sd"> Args</span>
|
||||||
</span><span id="L-25"><a href="#L-25"><span class="linenos">25</span></a><span class="sd"> tables: representing the scope of the current execution context.</span>
|
</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a><span class="sd"> tables: representing the scope of the current execution context.</span>
|
||||||
</span><span id="L-26"><a href="#L-26"><span class="linenos">26</span></a><span class="sd"> env: dictionary of functions within the execution context.</span>
|
</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a><span class="sd"> env: dictionary of functions within the execution context.</span>
|
||||||
</span><span id="L-27"><a href="#L-27"><span class="linenos">27</span></a><span class="sd"> """</span>
|
</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a><span class="sd"> """</span>
|
||||||
</span><span id="L-28"><a href="#L-28"><span class="linenos">28</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span> <span class="o">=</span> <span class="n">tables</span>
|
</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span> <span class="o">=</span> <span class="n">tables</span>
|
||||||
</span><span id="L-29"><a href="#L-29"><span class="linenos">29</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_table</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Table</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
|
</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_table</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Table</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
|
||||||
</span><span id="L-30"><a href="#L-30"><span class="linenos">30</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">range_readers</span> <span class="o">=</span> <span class="p">{</span><span class="n">name</span><span class="p">:</span> <span class="n">table</span><span class="o">.</span><span class="n">range_reader</span> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
|
</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">range_readers</span> <span class="o">=</span> <span class="p">{</span><span class="n">name</span><span class="p">:</span> <span class="n">table</span><span class="o">.</span><span class="n">range_reader</span> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
|
||||||
</span><span id="L-31"><a href="#L-31"><span class="linenos">31</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">row_readers</span> <span class="o">=</span> <span class="p">{</span><span class="n">name</span><span class="p">:</span> <span class="n">table</span><span class="o">.</span><span class="n">reader</span> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">tables</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
|
</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">row_readers</span> <span class="o">=</span> <span class="p">{</span><span class="n">name</span><span class="p">:</span> <span class="n">table</span><span class="o">.</span><span class="n">reader</span> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">tables</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
|
||||||
</span><span id="L-32"><a href="#L-32"><span class="linenos">32</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">env</span> <span class="o">=</span> <span class="p">{</span><span class="o">**</span><span class="n">ENV</span><span class="p">,</span> <span class="o">**</span><span class="p">(</span><span class="n">env</span> <span class="ow">or</span> <span class="p">{}),</span> <span class="s2">"scope"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">row_readers</span><span class="p">}</span>
|
</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">env</span> <span class="o">=</span> <span class="p">{</span><span class="o">**</span><span class="n">ENV</span><span class="p">,</span> <span class="o">**</span><span class="p">(</span><span class="n">env</span> <span class="ow">or</span> <span class="p">{}),</span> <span class="s2">"scope"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">row_readers</span><span class="p">}</span>
|
||||||
</span><span id="L-33"><a href="#L-33"><span class="linenos">33</span></a>
|
</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a>
|
||||||
</span><span id="L-34"><a href="#L-34"><span class="linenos">34</span></a> <span class="k">def</span> <span class="nf">eval</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">code</span><span class="p">):</span>
|
</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a> <span class="k">def</span> <span class="nf">eval</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">code</span><span class="p">):</span>
|
||||||
</span><span id="L-35"><a href="#L-35"><span class="linenos">35</span></a> <span class="k">return</span> <span class="nb">eval</span><span class="p">(</span><span class="n">code</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">)</span>
|
</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a> <span class="k">return</span> <span class="nb">eval</span><span class="p">(</span><span class="n">code</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">)</span>
|
||||||
</span><span id="L-36"><a href="#L-36"><span class="linenos">36</span></a>
|
</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a>
|
||||||
</span><span id="L-37"><a href="#L-37"><span class="linenos">37</span></a> <span class="k">def</span> <span class="nf">eval_tuple</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">codes</span><span class="p">):</span>
|
</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a> <span class="k">def</span> <span class="nf">eval_tuple</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">codes</span><span class="p">):</span>
|
||||||
</span><span id="L-38"><a href="#L-38"><span class="linenos">38</span></a> <span class="k">return</span> <span class="nb">tuple</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="n">code</span><span class="p">)</span> <span class="k">for</span> <span class="n">code</span> <span class="ow">in</span> <span class="n">codes</span><span class="p">)</span>
|
</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="k">return</span> <span class="nb">tuple</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="n">code</span><span class="p">)</span> <span class="k">for</span> <span class="n">code</span> <span class="ow">in</span> <span class="n">codes</span><span class="p">)</span>
|
||||||
</span><span id="L-39"><a href="#L-39"><span class="linenos">39</span></a>
|
</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a>
|
||||||
</span><span id="L-40"><a href="#L-40"><span class="linenos">40</span></a> <span class="nd">@property</span>
|
</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="nd">@property</span>
|
||||||
</span><span id="L-41"><a href="#L-41"><span class="linenos">41</span></a> <span class="k">def</span> <span class="nf">table</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Table</span><span class="p">:</span>
|
</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="k">def</span> <span class="nf">table</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Table</span><span class="p">:</span>
|
||||||
</span><span id="L-42"><a href="#L-42"><span class="linenos">42</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_table</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_table</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||||
</span><span id="L-43"><a href="#L-43"><span class="linenos">43</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_table</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">())[</span><span class="mi">0</span><span class="p">]</span>
|
</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_table</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">())[</span><span class="mi">0</span><span class="p">]</span>
|
||||||
</span><span id="L-44"><a href="#L-44"><span class="linenos">44</span></a> <span class="k">for</span> <span class="n">other</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a>
|
||||||
</span><span id="L-45"><a href="#L-45"><span class="linenos">45</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_table</span><span class="o">.</span><span class="n">columns</span> <span class="o">!=</span> <span class="n">other</span><span class="o">.</span><span class="n">columns</span><span class="p">:</span>
|
</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="k">for</span> <span class="n">other</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
||||||
</span><span id="L-46"><a href="#L-46"><span class="linenos">46</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Columns are different."</span><span class="p">)</span>
|
</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_table</span><span class="o">.</span><span class="n">columns</span> <span class="o">!=</span> <span class="n">other</span><span class="o">.</span><span class="n">columns</span><span class="p">:</span>
|
||||||
</span><span id="L-47"><a href="#L-47"><span class="linenos">47</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_table</span><span class="o">.</span><span class="n">rows</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">other</span><span class="o">.</span><span class="n">rows</span><span class="p">):</span>
|
</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Columns are different."</span><span class="p">)</span>
|
||||||
</span><span id="L-48"><a href="#L-48"><span class="linenos">48</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Rows are different."</span><span class="p">)</span>
|
</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_table</span><span class="o">.</span><span class="n">rows</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">other</span><span class="o">.</span><span class="n">rows</span><span class="p">):</span>
|
||||||
</span><span id="L-49"><a href="#L-49"><span class="linenos">49</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_table</span>
|
</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Rows are different."</span><span class="p">)</span>
|
||||||
</span><span id="L-50"><a href="#L-50"><span class="linenos">50</span></a>
|
</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a>
|
||||||
</span><span id="L-51"><a href="#L-51"><span class="linenos">51</span></a> <span class="k">def</span> <span class="nf">add_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">columns</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_table</span>
|
||||||
</span><span id="L-52"><a href="#L-52"><span class="linenos">52</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a>
|
||||||
</span><span id="L-53"><a href="#L-53"><span class="linenos">53</span></a> <span class="n">table</span><span class="o">.</span><span class="n">add_columns</span><span class="p">(</span><span class="o">*</span><span class="n">columns</span><span class="p">)</span>
|
</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="k">def</span> <span class="nf">add_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">columns</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||||
</span><span id="L-54"><a href="#L-54"><span class="linenos">54</span></a>
|
</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
||||||
</span><span id="L-55"><a href="#L-55"><span class="linenos">55</span></a> <span class="nd">@property</span>
|
</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="n">table</span><span class="o">.</span><span class="n">add_columns</span><span class="p">(</span><span class="o">*</span><span class="n">columns</span><span class="p">)</span>
|
||||||
</span><span id="L-56"><a href="#L-56"><span class="linenos">56</span></a> <span class="k">def</span> <span class="nf">columns</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">:</span>
|
</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a>
|
||||||
</span><span id="L-57"><a href="#L-57"><span class="linenos">57</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">table</span><span class="o">.</span><span class="n">columns</span>
|
</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="nd">@property</span>
|
||||||
</span><span id="L-58"><a href="#L-58"><span class="linenos">58</span></a>
|
</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="k">def</span> <span class="nf">columns</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">:</span>
|
||||||
</span><span id="L-59"><a href="#L-59"><span class="linenos">59</span></a> <span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">table</span><span class="o">.</span><span class="n">columns</span>
|
||||||
</span><span id="L-60"><a href="#L-60"><span class="linenos">60</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">[</span><span class="s2">"scope"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">row_readers</span>
|
</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a>
|
||||||
</span><span id="L-61"><a href="#L-61"><span class="linenos">61</span></a> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">table</span><span class="o">.</span><span class="n">rows</span><span class="p">)):</span>
|
</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
</span><span id="L-62"><a href="#L-62"><span class="linenos">62</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">[</span><span class="s2">"scope"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">row_readers</span>
|
||||||
</span><span id="L-63"><a href="#L-63"><span class="linenos">63</span></a> <span class="n">reader</span> <span class="o">=</span> <span class="n">table</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
|
</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">table</span><span class="o">.</span><span class="n">rows</span><span class="p">)):</span>
|
||||||
</span><span id="L-64"><a href="#L-64"><span class="linenos">64</span></a> <span class="k">yield</span> <span class="n">reader</span><span class="p">,</span> <span class="bp">self</span>
|
</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
||||||
</span><span id="L-65"><a href="#L-65"><span class="linenos">65</span></a>
|
</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="n">reader</span> <span class="o">=</span> <span class="n">table</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
|
||||||
</span><span id="L-66"><a href="#L-66"><span class="linenos">66</span></a> <span class="k">def</span> <span class="nf">table_iter</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">TableIter</span><span class="p">:</span>
|
</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="k">yield</span> <span class="n">reader</span><span class="p">,</span> <span class="bp">self</span>
|
||||||
</span><span id="L-67"><a href="#L-67"><span class="linenos">67</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">[</span><span class="s2">"scope"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">row_readers</span>
|
</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a>
|
||||||
</span><span id="L-68"><a href="#L-68"><span class="linenos">68</span></a> <span class="k">return</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="p">[</span><span class="n">table</span><span class="p">])</span>
|
</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="k">def</span> <span class="nf">table_iter</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">TableIter</span><span class="p">:</span>
|
||||||
</span><span id="L-69"><a href="#L-69"><span class="linenos">69</span></a>
|
</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">[</span><span class="s2">"scope"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">row_readers</span>
|
||||||
</span><span id="L-70"><a href="#L-70"><span class="linenos">70</span></a> <span class="k">def</span> <span class="nf">filter</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">condition</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="k">return</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="p">[</span><span class="n">table</span><span class="p">])</span>
|
||||||
</span><span id="L-71"><a href="#L-71"><span class="linenos">71</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="p">[</span><span class="n">reader</span><span class="o">.</span><span class="n">row</span> <span class="k">for</span> <span class="n">reader</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="bp">self</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="n">condition</span><span class="p">)]</span>
|
</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><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="k">def</span> <span class="nf">filter</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">condition</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||||
</span><span id="L-73"><a href="#L-73"><span class="linenos">73</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="p">[</span><span class="n">reader</span><span class="o">.</span><span class="n">row</span> <span class="k">for</span> <span class="n">reader</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="bp">self</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="n">condition</span><span class="p">)]</span>
|
||||||
</span><span id="L-74"><a href="#L-74"><span class="linenos">74</span></a> <span class="n">table</span><span class="o">.</span><span class="n">rows</span> <span class="o">=</span> <span class="n">rows</span>
|
</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a>
|
||||||
</span><span id="L-75"><a href="#L-75"><span class="linenos">75</span></a>
|
</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
||||||
</span><span id="L-76"><a href="#L-76"><span class="linenos">76</span></a> <span class="k">def</span> <span class="nf">sort</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="n">table</span><span class="o">.</span><span class="n">rows</span> <span class="o">=</span> <span class="n">rows</span>
|
||||||
</span><span id="L-77"><a href="#L-77"><span class="linenos">77</span></a> <span class="k">def</span> <span class="nf">sort_key</span><span class="p">(</span><span class="n">row</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">:</span>
|
</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a>
|
||||||
</span><span id="L-78"><a href="#L-78"><span class="linenos">78</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_row</span><span class="p">(</span><span class="n">row</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">sort</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</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="bp">self</span><span class="o">.</span><span class="n">eval_tuple</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
|
</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="k">def</span> <span class="nf">sort_key</span><span class="p">(</span><span class="n">row</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">:</span>
|
||||||
</span><span id="L-80"><a href="#L-80"><span class="linenos">80</span></a>
|
</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_row</span><span class="p">(</span><span class="n">row</span><span class="p">)</span>
|
||||||
</span><span id="L-81"><a href="#L-81"><span class="linenos">81</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">table</span><span class="o">.</span><span class="n">rows</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="n">sort_key</span><span class="p">)</span>
|
</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">eval_tuple</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
|
||||||
</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><span id="L-83"><a href="#L-83"><span class="linenos">83</span></a> <span class="k">def</span> <span class="nf">set_row</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">row</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">table</span><span class="o">.</span><span class="n">rows</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="n">sort_key</span><span class="p">)</span>
|
||||||
</span><span id="L-84"><a href="#L-84"><span class="linenos">84</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a>
|
||||||
</span><span id="L-85"><a href="#L-85"><span class="linenos">85</span></a> <span class="n">table</span><span class="o">.</span><span class="n">reader</span><span class="o">.</span><span class="n">row</span> <span class="o">=</span> <span class="n">row</span>
|
</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="k">def</span> <span class="nf">set_row</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">row</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</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 class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">[</span><span class="s2">"scope"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">row_readers</span>
|
</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
||||||
</span><span id="L-87"><a href="#L-87"><span class="linenos">87</span></a>
|
</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="n">table</span><span class="o">.</span><span class="n">reader</span><span class="o">.</span><span class="n">row</span> <span class="o">=</span> <span class="n">row</span>
|
||||||
</span><span id="L-88"><a href="#L-88"><span class="linenos">88</span></a> <span class="k">def</span> <span class="nf">set_index</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">[</span><span class="s2">"scope"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">row_readers</span>
|
||||||
</span><span id="L-89"><a href="#L-89"><span class="linenos">89</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">():</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="n">table</span><span class="p">[</span><span class="n">index</span><span class="p">]</span>
|
</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="k">def</span> <span class="nf">set_index</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">int</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="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">[</span><span class="s2">"scope"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">row_readers</span>
|
</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
||||||
</span><span id="L-92"><a href="#L-92"><span class="linenos">92</span></a>
|
</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="n">table</span><span class="p">[</span><span class="n">index</span><span class="p">]</span>
|
||||||
</span><span id="L-93"><a href="#L-93"><span class="linenos">93</span></a> <span class="k">def</span> <span class="nf">set_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">end</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">[</span><span class="s2">"scope"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">row_readers</span>
|
||||||
</span><span id="L-94"><a href="#L-94"><span class="linenos">94</span></a> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="p">:</span>
|
</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a>
|
||||||
</span><span id="L-95"><a href="#L-95"><span class="linenos">95</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">range_readers</span><span class="p">[</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">range</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">)</span>
|
</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="k">def</span> <span class="nf">set_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">end</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||||
</span><span id="L-96"><a href="#L-96"><span class="linenos">96</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">[</span><span class="s2">"scope"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">range_readers</span>
|
</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="p">:</span>
|
||||||
</span><span id="L-97"><a href="#L-97"><span class="linenos">97</span></a>
|
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">range_readers</span><span class="p">[</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">range</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">)</span>
|
||||||
</span><span id="L-98"><a href="#L-98"><span class="linenos">98</span></a> <span class="k">def</span> <span class="fm">__contains__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
|
</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">[</span><span class="s2">"scope"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">range_readers</span>
|
||||||
</span><span id="L-99"><a href="#L-99"><span class="linenos">99</span></a> <span class="k">return</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span>
|
</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 class="k">def</span> <span class="fm">__contains__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
|
||||||
|
</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="k">return</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -254,62 +256,64 @@
|
||||||
</span><span id="Context-42"><a href="#Context-42"><span class="linenos"> 42</span></a> <span class="k">def</span> <span class="nf">table</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Table</span><span class="p">:</span>
|
</span><span id="Context-42"><a href="#Context-42"><span class="linenos"> 42</span></a> <span class="k">def</span> <span class="nf">table</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Table</span><span class="p">:</span>
|
||||||
</span><span id="Context-43"><a href="#Context-43"><span class="linenos"> 43</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_table</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
</span><span id="Context-43"><a href="#Context-43"><span class="linenos"> 43</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_table</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||||
</span><span id="Context-44"><a href="#Context-44"><span class="linenos"> 44</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_table</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">())[</span><span class="mi">0</span><span class="p">]</span>
|
</span><span id="Context-44"><a href="#Context-44"><span class="linenos"> 44</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_table</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">())[</span><span class="mi">0</span><span class="p">]</span>
|
||||||
</span><span id="Context-45"><a href="#Context-45"><span class="linenos"> 45</span></a> <span class="k">for</span> <span class="n">other</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
</span><span id="Context-45"><a href="#Context-45"><span class="linenos"> 45</span></a>
|
||||||
</span><span id="Context-46"><a href="#Context-46"><span class="linenos"> 46</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_table</span><span class="o">.</span><span class="n">columns</span> <span class="o">!=</span> <span class="n">other</span><span class="o">.</span><span class="n">columns</span><span class="p">:</span>
|
</span><span id="Context-46"><a href="#Context-46"><span class="linenos"> 46</span></a> <span class="k">for</span> <span class="n">other</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
||||||
</span><span id="Context-47"><a href="#Context-47"><span class="linenos"> 47</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Columns are different."</span><span class="p">)</span>
|
</span><span id="Context-47"><a href="#Context-47"><span class="linenos"> 47</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_table</span><span class="o">.</span><span class="n">columns</span> <span class="o">!=</span> <span class="n">other</span><span class="o">.</span><span class="n">columns</span><span class="p">:</span>
|
||||||
</span><span id="Context-48"><a href="#Context-48"><span class="linenos"> 48</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_table</span><span class="o">.</span><span class="n">rows</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">other</span><span class="o">.</span><span class="n">rows</span><span class="p">):</span>
|
</span><span id="Context-48"><a href="#Context-48"><span class="linenos"> 48</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Columns are different."</span><span class="p">)</span>
|
||||||
</span><span id="Context-49"><a href="#Context-49"><span class="linenos"> 49</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Rows are different."</span><span class="p">)</span>
|
</span><span id="Context-49"><a href="#Context-49"><span class="linenos"> 49</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_table</span><span class="o">.</span><span class="n">rows</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">other</span><span class="o">.</span><span class="n">rows</span><span class="p">):</span>
|
||||||
</span><span id="Context-50"><a href="#Context-50"><span class="linenos"> 50</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_table</span>
|
</span><span id="Context-50"><a href="#Context-50"><span class="linenos"> 50</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Rows are different."</span><span class="p">)</span>
|
||||||
</span><span id="Context-51"><a href="#Context-51"><span class="linenos"> 51</span></a>
|
</span><span id="Context-51"><a href="#Context-51"><span class="linenos"> 51</span></a>
|
||||||
</span><span id="Context-52"><a href="#Context-52"><span class="linenos"> 52</span></a> <span class="k">def</span> <span class="nf">add_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">columns</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
</span><span id="Context-52"><a href="#Context-52"><span class="linenos"> 52</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_table</span>
|
||||||
</span><span id="Context-53"><a href="#Context-53"><span class="linenos"> 53</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
</span><span id="Context-53"><a href="#Context-53"><span class="linenos"> 53</span></a>
|
||||||
</span><span id="Context-54"><a href="#Context-54"><span class="linenos"> 54</span></a> <span class="n">table</span><span class="o">.</span><span class="n">add_columns</span><span class="p">(</span><span class="o">*</span><span class="n">columns</span><span class="p">)</span>
|
</span><span id="Context-54"><a href="#Context-54"><span class="linenos"> 54</span></a> <span class="k">def</span> <span class="nf">add_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">columns</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||||
</span><span id="Context-55"><a href="#Context-55"><span class="linenos"> 55</span></a>
|
</span><span id="Context-55"><a href="#Context-55"><span class="linenos"> 55</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
||||||
</span><span id="Context-56"><a href="#Context-56"><span class="linenos"> 56</span></a> <span class="nd">@property</span>
|
</span><span id="Context-56"><a href="#Context-56"><span class="linenos"> 56</span></a> <span class="n">table</span><span class="o">.</span><span class="n">add_columns</span><span class="p">(</span><span class="o">*</span><span class="n">columns</span><span class="p">)</span>
|
||||||
</span><span id="Context-57"><a href="#Context-57"><span class="linenos"> 57</span></a> <span class="k">def</span> <span class="nf">columns</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">:</span>
|
</span><span id="Context-57"><a href="#Context-57"><span class="linenos"> 57</span></a>
|
||||||
</span><span id="Context-58"><a href="#Context-58"><span class="linenos"> 58</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">table</span><span class="o">.</span><span class="n">columns</span>
|
</span><span id="Context-58"><a href="#Context-58"><span class="linenos"> 58</span></a> <span class="nd">@property</span>
|
||||||
</span><span id="Context-59"><a href="#Context-59"><span class="linenos"> 59</span></a>
|
</span><span id="Context-59"><a href="#Context-59"><span class="linenos"> 59</span></a> <span class="k">def</span> <span class="nf">columns</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">:</span>
|
||||||
</span><span id="Context-60"><a href="#Context-60"><span class="linenos"> 60</span></a> <span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
</span><span id="Context-60"><a href="#Context-60"><span class="linenos"> 60</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">table</span><span class="o">.</span><span class="n">columns</span>
|
||||||
</span><span id="Context-61"><a href="#Context-61"><span class="linenos"> 61</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">[</span><span class="s2">"scope"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">row_readers</span>
|
</span><span id="Context-61"><a href="#Context-61"><span class="linenos"> 61</span></a>
|
||||||
</span><span id="Context-62"><a href="#Context-62"><span class="linenos"> 62</span></a> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">table</span><span class="o">.</span><span class="n">rows</span><span class="p">)):</span>
|
</span><span id="Context-62"><a href="#Context-62"><span class="linenos"> 62</span></a> <span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
</span><span id="Context-63"><a href="#Context-63"><span class="linenos"> 63</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
</span><span id="Context-63"><a href="#Context-63"><span class="linenos"> 63</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">[</span><span class="s2">"scope"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">row_readers</span>
|
||||||
</span><span id="Context-64"><a href="#Context-64"><span class="linenos"> 64</span></a> <span class="n">reader</span> <span class="o">=</span> <span class="n">table</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
|
</span><span id="Context-64"><a href="#Context-64"><span class="linenos"> 64</span></a> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">table</span><span class="o">.</span><span class="n">rows</span><span class="p">)):</span>
|
||||||
</span><span id="Context-65"><a href="#Context-65"><span class="linenos"> 65</span></a> <span class="k">yield</span> <span class="n">reader</span><span class="p">,</span> <span class="bp">self</span>
|
</span><span id="Context-65"><a href="#Context-65"><span class="linenos"> 65</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
||||||
</span><span id="Context-66"><a href="#Context-66"><span class="linenos"> 66</span></a>
|
</span><span id="Context-66"><a href="#Context-66"><span class="linenos"> 66</span></a> <span class="n">reader</span> <span class="o">=</span> <span class="n">table</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
|
||||||
</span><span id="Context-67"><a href="#Context-67"><span class="linenos"> 67</span></a> <span class="k">def</span> <span class="nf">table_iter</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">TableIter</span><span class="p">:</span>
|
</span><span id="Context-67"><a href="#Context-67"><span class="linenos"> 67</span></a> <span class="k">yield</span> <span class="n">reader</span><span class="p">,</span> <span class="bp">self</span>
|
||||||
</span><span id="Context-68"><a href="#Context-68"><span class="linenos"> 68</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">[</span><span class="s2">"scope"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">row_readers</span>
|
</span><span id="Context-68"><a href="#Context-68"><span class="linenos"> 68</span></a>
|
||||||
</span><span id="Context-69"><a href="#Context-69"><span class="linenos"> 69</span></a> <span class="k">return</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="p">[</span><span class="n">table</span><span class="p">])</span>
|
</span><span id="Context-69"><a href="#Context-69"><span class="linenos"> 69</span></a> <span class="k">def</span> <span class="nf">table_iter</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">TableIter</span><span class="p">:</span>
|
||||||
</span><span id="Context-70"><a href="#Context-70"><span class="linenos"> 70</span></a>
|
</span><span id="Context-70"><a href="#Context-70"><span class="linenos"> 70</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">[</span><span class="s2">"scope"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">row_readers</span>
|
||||||
</span><span id="Context-71"><a href="#Context-71"><span class="linenos"> 71</span></a> <span class="k">def</span> <span class="nf">filter</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">condition</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
</span><span id="Context-71"><a href="#Context-71"><span class="linenos"> 71</span></a> <span class="k">return</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="p">[</span><span class="n">table</span><span class="p">])</span>
|
||||||
</span><span id="Context-72"><a href="#Context-72"><span class="linenos"> 72</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="p">[</span><span class="n">reader</span><span class="o">.</span><span class="n">row</span> <span class="k">for</span> <span class="n">reader</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="bp">self</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="n">condition</span><span class="p">)]</span>
|
</span><span id="Context-72"><a href="#Context-72"><span class="linenos"> 72</span></a>
|
||||||
</span><span id="Context-73"><a href="#Context-73"><span class="linenos"> 73</span></a>
|
</span><span id="Context-73"><a href="#Context-73"><span class="linenos"> 73</span></a> <span class="k">def</span> <span class="nf">filter</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">condition</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||||
</span><span id="Context-74"><a href="#Context-74"><span class="linenos"> 74</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
</span><span id="Context-74"><a href="#Context-74"><span class="linenos"> 74</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="p">[</span><span class="n">reader</span><span class="o">.</span><span class="n">row</span> <span class="k">for</span> <span class="n">reader</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="bp">self</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="n">condition</span><span class="p">)]</span>
|
||||||
</span><span id="Context-75"><a href="#Context-75"><span class="linenos"> 75</span></a> <span class="n">table</span><span class="o">.</span><span class="n">rows</span> <span class="o">=</span> <span class="n">rows</span>
|
</span><span id="Context-75"><a href="#Context-75"><span class="linenos"> 75</span></a>
|
||||||
</span><span id="Context-76"><a href="#Context-76"><span class="linenos"> 76</span></a>
|
</span><span id="Context-76"><a href="#Context-76"><span class="linenos"> 76</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
||||||
</span><span id="Context-77"><a href="#Context-77"><span class="linenos"> 77</span></a> <span class="k">def</span> <span class="nf">sort</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
</span><span id="Context-77"><a href="#Context-77"><span class="linenos"> 77</span></a> <span class="n">table</span><span class="o">.</span><span class="n">rows</span> <span class="o">=</span> <span class="n">rows</span>
|
||||||
</span><span id="Context-78"><a href="#Context-78"><span class="linenos"> 78</span></a> <span class="k">def</span> <span class="nf">sort_key</span><span class="p">(</span><span class="n">row</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">:</span>
|
</span><span id="Context-78"><a href="#Context-78"><span class="linenos"> 78</span></a>
|
||||||
</span><span id="Context-79"><a href="#Context-79"><span class="linenos"> 79</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_row</span><span class="p">(</span><span class="n">row</span><span class="p">)</span>
|
</span><span id="Context-79"><a href="#Context-79"><span class="linenos"> 79</span></a> <span class="k">def</span> <span class="nf">sort</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||||
</span><span id="Context-80"><a href="#Context-80"><span class="linenos"> 80</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">eval_tuple</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
|
</span><span id="Context-80"><a href="#Context-80"><span class="linenos"> 80</span></a> <span class="k">def</span> <span class="nf">sort_key</span><span class="p">(</span><span class="n">row</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">:</span>
|
||||||
</span><span id="Context-81"><a href="#Context-81"><span class="linenos"> 81</span></a>
|
</span><span id="Context-81"><a href="#Context-81"><span class="linenos"> 81</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_row</span><span class="p">(</span><span class="n">row</span><span class="p">)</span>
|
||||||
</span><span id="Context-82"><a href="#Context-82"><span class="linenos"> 82</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">table</span><span class="o">.</span><span class="n">rows</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="n">sort_key</span><span class="p">)</span>
|
</span><span id="Context-82"><a href="#Context-82"><span class="linenos"> 82</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">eval_tuple</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
|
||||||
</span><span id="Context-83"><a href="#Context-83"><span class="linenos"> 83</span></a>
|
</span><span id="Context-83"><a href="#Context-83"><span class="linenos"> 83</span></a>
|
||||||
</span><span id="Context-84"><a href="#Context-84"><span class="linenos"> 84</span></a> <span class="k">def</span> <span class="nf">set_row</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">row</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
</span><span id="Context-84"><a href="#Context-84"><span class="linenos"> 84</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">table</span><span class="o">.</span><span class="n">rows</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="n">sort_key</span><span class="p">)</span>
|
||||||
</span><span id="Context-85"><a href="#Context-85"><span class="linenos"> 85</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
</span><span id="Context-85"><a href="#Context-85"><span class="linenos"> 85</span></a>
|
||||||
</span><span id="Context-86"><a href="#Context-86"><span class="linenos"> 86</span></a> <span class="n">table</span><span class="o">.</span><span class="n">reader</span><span class="o">.</span><span class="n">row</span> <span class="o">=</span> <span class="n">row</span>
|
</span><span id="Context-86"><a href="#Context-86"><span class="linenos"> 86</span></a> <span class="k">def</span> <span class="nf">set_row</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">row</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||||
</span><span id="Context-87"><a href="#Context-87"><span class="linenos"> 87</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">[</span><span class="s2">"scope"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">row_readers</span>
|
</span><span id="Context-87"><a href="#Context-87"><span class="linenos"> 87</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
||||||
</span><span id="Context-88"><a href="#Context-88"><span class="linenos"> 88</span></a>
|
</span><span id="Context-88"><a href="#Context-88"><span class="linenos"> 88</span></a> <span class="n">table</span><span class="o">.</span><span class="n">reader</span><span class="o">.</span><span class="n">row</span> <span class="o">=</span> <span class="n">row</span>
|
||||||
</span><span id="Context-89"><a href="#Context-89"><span class="linenos"> 89</span></a> <span class="k">def</span> <span class="nf">set_index</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
</span><span id="Context-89"><a href="#Context-89"><span class="linenos"> 89</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">[</span><span class="s2">"scope"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">row_readers</span>
|
||||||
</span><span id="Context-90"><a href="#Context-90"><span class="linenos"> 90</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
</span><span id="Context-90"><a href="#Context-90"><span class="linenos"> 90</span></a>
|
||||||
</span><span id="Context-91"><a href="#Context-91"><span class="linenos"> 91</span></a> <span class="n">table</span><span class="p">[</span><span class="n">index</span><span class="p">]</span>
|
</span><span id="Context-91"><a href="#Context-91"><span class="linenos"> 91</span></a> <span class="k">def</span> <span class="nf">set_index</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||||
</span><span id="Context-92"><a href="#Context-92"><span class="linenos"> 92</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">[</span><span class="s2">"scope"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">row_readers</span>
|
</span><span id="Context-92"><a href="#Context-92"><span class="linenos"> 92</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
||||||
</span><span id="Context-93"><a href="#Context-93"><span class="linenos"> 93</span></a>
|
</span><span id="Context-93"><a href="#Context-93"><span class="linenos"> 93</span></a> <span class="n">table</span><span class="p">[</span><span class="n">index</span><span class="p">]</span>
|
||||||
</span><span id="Context-94"><a href="#Context-94"><span class="linenos"> 94</span></a> <span class="k">def</span> <span class="nf">set_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">end</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
</span><span id="Context-94"><a href="#Context-94"><span class="linenos"> 94</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">[</span><span class="s2">"scope"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">row_readers</span>
|
||||||
</span><span id="Context-95"><a href="#Context-95"><span class="linenos"> 95</span></a> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="p">:</span>
|
</span><span id="Context-95"><a href="#Context-95"><span class="linenos"> 95</span></a>
|
||||||
</span><span id="Context-96"><a href="#Context-96"><span class="linenos"> 96</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">range_readers</span><span class="p">[</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">range</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">)</span>
|
</span><span id="Context-96"><a href="#Context-96"><span class="linenos"> 96</span></a> <span class="k">def</span> <span class="nf">set_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">end</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||||
</span><span id="Context-97"><a href="#Context-97"><span class="linenos"> 97</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">[</span><span class="s2">"scope"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">range_readers</span>
|
</span><span id="Context-97"><a href="#Context-97"><span class="linenos"> 97</span></a> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="p">:</span>
|
||||||
</span><span id="Context-98"><a href="#Context-98"><span class="linenos"> 98</span></a>
|
</span><span id="Context-98"><a href="#Context-98"><span class="linenos"> 98</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">range_readers</span><span class="p">[</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">range</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">)</span>
|
||||||
</span><span id="Context-99"><a href="#Context-99"><span class="linenos"> 99</span></a> <span class="k">def</span> <span class="fm">__contains__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
|
</span><span id="Context-99"><a href="#Context-99"><span class="linenos"> 99</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">[</span><span class="s2">"scope"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">range_readers</span>
|
||||||
</span><span id="Context-100"><a href="#Context-100"><span class="linenos">100</span></a> <span class="k">return</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span>
|
</span><span id="Context-100"><a href="#Context-100"><span class="linenos">100</span></a>
|
||||||
|
</span><span id="Context-101"><a href="#Context-101"><span class="linenos">101</span></a> <span class="k">def</span> <span class="fm">__contains__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
|
||||||
|
</span><span id="Context-102"><a href="#Context-102"><span class="linenos">102</span></a> <span class="k">return</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -458,9 +462,9 @@ evaluation of aggregation functions.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#Context.add_columns"></a>
|
<a class="headerlink" href="#Context.add_columns"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="Context.add_columns-52"><a href="#Context.add_columns-52"><span class="linenos">52</span></a> <span class="k">def</span> <span class="nf">add_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">columns</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="Context.add_columns-54"><a href="#Context.add_columns-54"><span class="linenos">54</span></a> <span class="k">def</span> <span class="nf">add_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">columns</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||||
</span><span id="Context.add_columns-53"><a href="#Context.add_columns-53"><span class="linenos">53</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
</span><span id="Context.add_columns-55"><a href="#Context.add_columns-55"><span class="linenos">55</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
||||||
</span><span id="Context.add_columns-54"><a href="#Context.add_columns-54"><span class="linenos">54</span></a> <span class="n">table</span><span class="o">.</span><span class="n">add_columns</span><span class="p">(</span><span class="o">*</span><span class="n">columns</span><span class="p">)</span>
|
</span><span id="Context.add_columns-56"><a href="#Context.add_columns-56"><span class="linenos">56</span></a> <span class="n">table</span><span class="o">.</span><span class="n">add_columns</span><span class="p">(</span><span class="o">*</span><span class="n">columns</span><span class="p">)</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -489,9 +493,9 @@ evaluation of aggregation functions.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#Context.table_iter"></a>
|
<a class="headerlink" href="#Context.table_iter"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="Context.table_iter-67"><a href="#Context.table_iter-67"><span class="linenos">67</span></a> <span class="k">def</span> <span class="nf">table_iter</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">TableIter</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="Context.table_iter-69"><a href="#Context.table_iter-69"><span class="linenos">69</span></a> <span class="k">def</span> <span class="nf">table_iter</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="n">TableIter</span><span class="p">:</span>
|
||||||
</span><span id="Context.table_iter-68"><a href="#Context.table_iter-68"><span class="linenos">68</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">[</span><span class="s2">"scope"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">row_readers</span>
|
</span><span id="Context.table_iter-70"><a href="#Context.table_iter-70"><span class="linenos">70</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">[</span><span class="s2">"scope"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">row_readers</span>
|
||||||
</span><span id="Context.table_iter-69"><a href="#Context.table_iter-69"><span class="linenos">69</span></a> <span class="k">return</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="p">[</span><span class="n">table</span><span class="p">])</span>
|
</span><span id="Context.table_iter-71"><a href="#Context.table_iter-71"><span class="linenos">71</span></a> <span class="k">return</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="p">[</span><span class="n">table</span><span class="p">])</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -509,11 +513,11 @@ evaluation of aggregation functions.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#Context.filter"></a>
|
<a class="headerlink" href="#Context.filter"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="Context.filter-71"><a href="#Context.filter-71"><span class="linenos">71</span></a> <span class="k">def</span> <span class="nf">filter</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">condition</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="Context.filter-73"><a href="#Context.filter-73"><span class="linenos">73</span></a> <span class="k">def</span> <span class="nf">filter</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">condition</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||||
</span><span id="Context.filter-72"><a href="#Context.filter-72"><span class="linenos">72</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="p">[</span><span class="n">reader</span><span class="o">.</span><span class="n">row</span> <span class="k">for</span> <span class="n">reader</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="bp">self</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="n">condition</span><span class="p">)]</span>
|
</span><span id="Context.filter-74"><a href="#Context.filter-74"><span class="linenos">74</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="p">[</span><span class="n">reader</span><span class="o">.</span><span class="n">row</span> <span class="k">for</span> <span class="n">reader</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="bp">self</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="n">condition</span><span class="p">)]</span>
|
||||||
</span><span id="Context.filter-73"><a href="#Context.filter-73"><span class="linenos">73</span></a>
|
</span><span id="Context.filter-75"><a href="#Context.filter-75"><span class="linenos">75</span></a>
|
||||||
</span><span id="Context.filter-74"><a href="#Context.filter-74"><span class="linenos">74</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
</span><span id="Context.filter-76"><a href="#Context.filter-76"><span class="linenos">76</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
||||||
</span><span id="Context.filter-75"><a href="#Context.filter-75"><span class="linenos">75</span></a> <span class="n">table</span><span class="o">.</span><span class="n">rows</span> <span class="o">=</span> <span class="n">rows</span>
|
</span><span id="Context.filter-77"><a href="#Context.filter-77"><span class="linenos">77</span></a> <span class="n">table</span><span class="o">.</span><span class="n">rows</span> <span class="o">=</span> <span class="n">rows</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -531,12 +535,12 @@ evaluation of aggregation functions.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#Context.sort"></a>
|
<a class="headerlink" href="#Context.sort"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="Context.sort-77"><a href="#Context.sort-77"><span class="linenos">77</span></a> <span class="k">def</span> <span class="nf">sort</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="Context.sort-79"><a href="#Context.sort-79"><span class="linenos">79</span></a> <span class="k">def</span> <span class="nf">sort</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||||
</span><span id="Context.sort-78"><a href="#Context.sort-78"><span class="linenos">78</span></a> <span class="k">def</span> <span class="nf">sort_key</span><span class="p">(</span><span class="n">row</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">:</span>
|
</span><span id="Context.sort-80"><a href="#Context.sort-80"><span class="linenos">80</span></a> <span class="k">def</span> <span class="nf">sort_key</span><span class="p">(</span><span class="n">row</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">:</span>
|
||||||
</span><span id="Context.sort-79"><a href="#Context.sort-79"><span class="linenos">79</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_row</span><span class="p">(</span><span class="n">row</span><span class="p">)</span>
|
</span><span id="Context.sort-81"><a href="#Context.sort-81"><span class="linenos">81</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">set_row</span><span class="p">(</span><span class="n">row</span><span class="p">)</span>
|
||||||
</span><span id="Context.sort-80"><a href="#Context.sort-80"><span class="linenos">80</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">eval_tuple</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
|
</span><span id="Context.sort-82"><a href="#Context.sort-82"><span class="linenos">82</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">eval_tuple</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
|
||||||
</span><span id="Context.sort-81"><a href="#Context.sort-81"><span class="linenos">81</span></a>
|
</span><span id="Context.sort-83"><a href="#Context.sort-83"><span class="linenos">83</span></a>
|
||||||
</span><span id="Context.sort-82"><a href="#Context.sort-82"><span class="linenos">82</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">table</span><span class="o">.</span><span class="n">rows</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="n">sort_key</span><span class="p">)</span>
|
</span><span id="Context.sort-84"><a href="#Context.sort-84"><span class="linenos">84</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">table</span><span class="o">.</span><span class="n">rows</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="n">sort_key</span><span class="p">)</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -554,10 +558,10 @@ evaluation of aggregation functions.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#Context.set_row"></a>
|
<a class="headerlink" href="#Context.set_row"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="Context.set_row-84"><a href="#Context.set_row-84"><span class="linenos">84</span></a> <span class="k">def</span> <span class="nf">set_row</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">row</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="Context.set_row-86"><a href="#Context.set_row-86"><span class="linenos">86</span></a> <span class="k">def</span> <span class="nf">set_row</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">row</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||||
</span><span id="Context.set_row-85"><a href="#Context.set_row-85"><span class="linenos">85</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
</span><span id="Context.set_row-87"><a href="#Context.set_row-87"><span class="linenos">87</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
||||||
</span><span id="Context.set_row-86"><a href="#Context.set_row-86"><span class="linenos">86</span></a> <span class="n">table</span><span class="o">.</span><span class="n">reader</span><span class="o">.</span><span class="n">row</span> <span class="o">=</span> <span class="n">row</span>
|
</span><span id="Context.set_row-88"><a href="#Context.set_row-88"><span class="linenos">88</span></a> <span class="n">table</span><span class="o">.</span><span class="n">reader</span><span class="o">.</span><span class="n">row</span> <span class="o">=</span> <span class="n">row</span>
|
||||||
</span><span id="Context.set_row-87"><a href="#Context.set_row-87"><span class="linenos">87</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">[</span><span class="s2">"scope"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">row_readers</span>
|
</span><span id="Context.set_row-89"><a href="#Context.set_row-89"><span class="linenos">89</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">[</span><span class="s2">"scope"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">row_readers</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -575,10 +579,10 @@ evaluation of aggregation functions.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#Context.set_index"></a>
|
<a class="headerlink" href="#Context.set_index"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="Context.set_index-89"><a href="#Context.set_index-89"><span class="linenos">89</span></a> <span class="k">def</span> <span class="nf">set_index</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="Context.set_index-91"><a href="#Context.set_index-91"><span class="linenos">91</span></a> <span class="k">def</span> <span class="nf">set_index</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||||
</span><span id="Context.set_index-90"><a href="#Context.set_index-90"><span class="linenos">90</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
</span><span id="Context.set_index-92"><a href="#Context.set_index-92"><span class="linenos">92</span></a> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
||||||
</span><span id="Context.set_index-91"><a href="#Context.set_index-91"><span class="linenos">91</span></a> <span class="n">table</span><span class="p">[</span><span class="n">index</span><span class="p">]</span>
|
</span><span id="Context.set_index-93"><a href="#Context.set_index-93"><span class="linenos">93</span></a> <span class="n">table</span><span class="p">[</span><span class="n">index</span><span class="p">]</span>
|
||||||
</span><span id="Context.set_index-92"><a href="#Context.set_index-92"><span class="linenos">92</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">[</span><span class="s2">"scope"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">row_readers</span>
|
</span><span id="Context.set_index-94"><a href="#Context.set_index-94"><span class="linenos">94</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">[</span><span class="s2">"scope"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">row_readers</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -596,10 +600,10 @@ evaluation of aggregation functions.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#Context.set_range"></a>
|
<a class="headerlink" href="#Context.set_range"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="Context.set_range-94"><a href="#Context.set_range-94"><span class="linenos">94</span></a> <span class="k">def</span> <span class="nf">set_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">end</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="Context.set_range-96"><a href="#Context.set_range-96"><span class="linenos">96</span></a> <span class="k">def</span> <span class="nf">set_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">end</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||||
</span><span id="Context.set_range-95"><a href="#Context.set_range-95"><span class="linenos">95</span></a> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="p">:</span>
|
</span><span id="Context.set_range-97"><a href="#Context.set_range-97"><span class="linenos">97</span></a> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="p">:</span>
|
||||||
</span><span id="Context.set_range-96"><a href="#Context.set_range-96"><span class="linenos">96</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">range_readers</span><span class="p">[</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">range</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">)</span>
|
</span><span id="Context.set_range-98"><a href="#Context.set_range-98"><span class="linenos">98</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">range_readers</span><span class="p">[</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">range</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">)</span>
|
||||||
</span><span id="Context.set_range-97"><a href="#Context.set_range-97"><span class="linenos">97</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">[</span><span class="s2">"scope"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">range_readers</span>
|
</span><span id="Context.set_range-99"><a href="#Context.set_range-99"><span class="linenos">99</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">[</span><span class="s2">"scope"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">range_readers</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -191,98 +191,109 @@
|
||||||
</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a><span class="nd">@null_if_any</span>
|
</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a><span class="nd">@null_if_any</span>
|
||||||
</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a><span class="k">def</span> <span class="nf">cast</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">to</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">cast</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">to</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="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">DATE</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="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">DATE</span><span class="p">:</span>
|
||||||
</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="k">return</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="o">.</span><span class="n">fromisoformat</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
|
</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="p">):</span>
|
||||||
</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="k">if</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">DATETIME</span><span class="p">:</span>
|
</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="k">return</span> <span class="n">this</span><span class="o">.</span><span class="n">date</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="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">fromisoformat</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
|
</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</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="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">BOOLEAN</span><span class="p">:</span>
|
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="k">return</span> <span class="n">this</span>
|
||||||
</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
|
</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
||||||
</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="k">if</span> <span class="n">to</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">TEXT_TYPES</span><span class="p">:</span>
|
</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="k">return</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="o">.</span><span class="n">fromisoformat</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
|
||||||
</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
|
</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="k">if</span> <span class="n">to</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">DATETIME</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">TIMESTAMP</span><span class="p">):</span>
|
||||||
</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="k">if</span> <span class="n">to</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">FLOAT</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">DOUBLE</span><span class="p">}:</span>
|
</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="p">):</span>
|
||||||
</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="k">return</span> <span class="nb">float</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
|
</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="k">return</span> <span class="n">this</span>
|
||||||
</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="k">if</span> <span class="n">to</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">NUMERIC_TYPES</span><span class="p">:</span>
|
</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="p">):</span>
|
||||||
</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
|
</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="k">return</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="p">(</span><span class="n">this</span><span class="o">.</span><span class="n">year</span><span class="p">,</span> <span class="n">this</span><span class="o">.</span><span class="n">month</span><span class="p">,</span> <span class="n">this</span><span class="o">.</span><span class="n">day</span><span class="p">)</span>
|
||||||
</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Casting to '</span><span class="si">{</span><span class="n">to</span><span class="si">}</span><span class="s2">' not implemented."</span><span class="p">)</span>
|
</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
||||||
</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a>
|
</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="k">return</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">fromisoformat</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
|
||||||
</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a>
|
</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="k">if</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">BOOLEAN</span><span class="p">:</span>
|
||||||
</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a><span class="k">def</span> <span class="nf">ordered</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">desc</span><span class="p">,</span> <span class="n">nulls_first</span><span class="p">):</span>
|
</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
|
||||||
</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="k">if</span> <span class="n">desc</span><span class="p">:</span>
|
</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="k">if</span> <span class="n">to</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">TEXT_TYPES</span><span class="p">:</span>
|
||||||
</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="k">return</span> <span class="n">reverse_key</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
|
</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
|
||||||
</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="k">return</span> <span class="n">this</span>
|
</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="k">if</span> <span class="n">to</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">FLOAT</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">DOUBLE</span><span class="p">}:</span>
|
||||||
</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a>
|
</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="k">return</span> <span class="nb">float</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
|
||||||
</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a>
|
</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="k">if</span> <span class="n">to</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">NUMERIC_TYPES</span><span class="p">:</span>
|
||||||
</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a><span class="nd">@null_if_any</span>
|
</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
|
||||||
</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a><span class="k">def</span> <span class="nf">interval</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">unit</span><span class="p">):</span>
|
</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Casting </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> to '</span><span class="si">{</span><span class="n">to</span><span class="si">}</span><span class="s2">' not implemented."</span><span class="p">)</span>
|
||||||
</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">unit</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
|
</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="n">plural</span> <span class="o">=</span> <span class="n">unit</span> <span class="o">+</span> <span class="s2">"s"</span>
|
</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a>
|
||||||
</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="k">if</span> <span class="n">plural</span> <span class="ow">in</span> <span class="n">Generator</span><span class="o">.</span><span class="n">TIME_PART_SINGULARS</span><span class="p">:</span>
|
</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a><span class="k">def</span> <span class="nf">ordered</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">desc</span><span class="p">,</span> <span class="n">nulls_first</span><span class="p">):</span>
|
||||||
</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">plural</span>
|
</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="k">if</span> <span class="n">desc</span><span class="p">:</span>
|
||||||
</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="k">return</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="o">**</span><span class="p">{</span><span class="n">unit</span><span class="p">:</span> <span class="nb">float</span><span class="p">(</span><span class="n">this</span><span class="p">)})</span>
|
</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="k">return</span> <span class="n">reverse_key</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
|
||||||
</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a>
|
</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="k">return</span> <span class="n">this</span>
|
||||||
</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a>
|
</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="n">ENV</span> <span class="o">=</span> <span class="p">{</span>
|
</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a>
|
||||||
</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="s2">"exp"</span><span class="p">:</span> <span class="n">exp</span><span class="p">,</span>
|
</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a><span class="nd">@null_if_any</span>
|
||||||
</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="c1"># aggs</span>
|
</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a><span class="k">def</span> <span class="nf">interval</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">unit</span><span class="p">):</span>
|
||||||
</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="s2">"ARRAYAGG"</span><span class="p">:</span> <span class="nb">list</span><span class="p">,</span>
|
</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">unit</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
|
||||||
</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="s2">"AVG"</span><span class="p">:</span> <span class="n">filter_nulls</span><span class="p">(</span><span class="n">statistics</span><span class="o">.</span><span class="n">fmean</span> <span class="k">if</span> <span class="n">PYTHON_VERSION</span> <span class="o">>=</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">8</span><span class="p">)</span> <span class="k">else</span> <span class="n">statistics</span><span class="o">.</span><span class="n">mean</span><span class="p">),</span> <span class="c1"># type: ignore</span>
|
</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="n">plural</span> <span class="o">=</span> <span class="n">unit</span> <span class="o">+</span> <span class="s2">"s"</span>
|
||||||
</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="s2">"COUNT"</span><span class="p">:</span> <span class="n">filter_nulls</span><span class="p">(</span><span class="k">lambda</span> <span class="n">acc</span><span class="p">:</span> <span class="nb">sum</span><span class="p">(</span><span class="mi">1</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">acc</span><span class="p">),</span> <span class="kc">False</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="n">plural</span> <span class="ow">in</span> <span class="n">Generator</span><span class="o">.</span><span class="n">TIME_PART_SINGULARS</span><span class="p">:</span>
|
||||||
</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="s2">"MAX"</span><span class="p">:</span> <span class="n">filter_nulls</span><span class="p">(</span><span class="nb">max</span><span class="p">),</span>
|
</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">plural</span>
|
||||||
</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="s2">"MIN"</span><span class="p">:</span> <span class="n">filter_nulls</span><span class="p">(</span><span class="nb">min</span><span class="p">),</span>
|
</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="k">return</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="o">**</span><span class="p">{</span><span class="n">unit</span><span class="p">:</span> <span class="nb">float</span><span class="p">(</span><span class="n">this</span><span class="p">)})</span>
|
||||||
</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="s2">"SUM"</span><span class="p">:</span> <span class="n">filter_nulls</span><span class="p">(</span><span class="nb">sum</span><span class="p">),</span>
|
</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a>
|
||||||
</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="c1"># scalar functions</span>
|
</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a>
|
||||||
</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="s2">"ABS"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">:</span> <span class="nb">abs</span><span class="p">(</span><span class="n">this</span><span class="p">)),</span>
|
</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a><span class="n">ENV</span> <span class="o">=</span> <span class="p">{</span>
|
||||||
</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="s2">"ADD"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">e</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">e</span> <span class="o">+</span> <span class="n">this</span><span class="p">),</span>
|
</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="s2">"exp"</span><span class="p">:</span> <span class="n">exp</span><span class="p">,</span>
|
||||||
</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="s2">"ARRAYANY"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">arr</span><span class="p">,</span> <span class="n">func</span><span class="p">:</span> <span class="nb">any</span><span class="p">(</span><span class="n">func</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">arr</span><span class="p">)),</span>
|
</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="c1"># aggs</span>
|
||||||
</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="s2">"BETWEEN"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">low</span><span class="p">,</span> <span class="n">high</span><span class="p">:</span> <span class="n">low</span> <span class="o"><=</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">this</span> <span class="o"><=</span> <span class="n">high</span><span class="p">),</span>
|
</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="s2">"ARRAYAGG"</span><span class="p">:</span> <span class="nb">list</span><span class="p">,</span>
|
||||||
</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="s2">"BITWISEAND"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">this</span> <span class="o">&</span> <span class="n">e</span><span class="p">),</span>
|
</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="s2">"AVG"</span><span class="p">:</span> <span class="n">filter_nulls</span><span class="p">(</span><span class="n">statistics</span><span class="o">.</span><span class="n">fmean</span> <span class="k">if</span> <span class="n">PYTHON_VERSION</span> <span class="o">>=</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">8</span><span class="p">)</span> <span class="k">else</span> <span class="n">statistics</span><span class="o">.</span><span class="n">mean</span><span class="p">),</span> <span class="c1"># type: ignore</span>
|
||||||
</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="s2">"BITWISELEFTSHIFT"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">this</span> <span class="o"><<</span> <span class="n">e</span><span class="p">),</span>
|
</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="s2">"COUNT"</span><span class="p">:</span> <span class="n">filter_nulls</span><span class="p">(</span><span class="k">lambda</span> <span class="n">acc</span><span class="p">:</span> <span class="nb">sum</span><span class="p">(</span><span class="mi">1</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">acc</span><span class="p">),</span> <span class="kc">False</span><span class="p">),</span>
|
||||||
</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="s2">"BITWISEOR"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">this</span> <span class="o">|</span> <span class="n">e</span><span class="p">),</span>
|
</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="s2">"MAX"</span><span class="p">:</span> <span class="n">filter_nulls</span><span class="p">(</span><span class="nb">max</span><span class="p">),</span>
|
||||||
</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="s2">"BITWISERIGHTSHIFT"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">this</span> <span class="o">>></span> <span class="n">e</span><span class="p">),</span>
|
</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="s2">"MIN"</span><span class="p">:</span> <span class="n">filter_nulls</span><span class="p">(</span><span class="nb">min</span><span class="p">),</span>
|
||||||
</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="s2">"BITWISEXOR"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">this</span> <span class="o">^</span> <span class="n">e</span><span class="p">),</span>
|
</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="s2">"SUM"</span><span class="p">:</span> <span class="n">filter_nulls</span><span class="p">(</span><span class="nb">sum</span><span class="p">),</span>
|
||||||
</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="s2">"CAST"</span><span class="p">:</span> <span class="n">cast</span><span class="p">,</span>
|
</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="c1"># scalar functions</span>
|
||||||
</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="s2">"COALESCE"</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="nb">next</span><span class="p">((</span><span class="n">a</span> <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="n">args</span> <span class="k">if</span> <span class="n">a</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">),</span> <span class="kc">None</span><span class="p">),</span>
|
</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="s2">"ABS"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">:</span> <span class="nb">abs</span><span class="p">(</span><span class="n">this</span><span class="p">)),</span>
|
||||||
</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="s2">"CONCAT"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">)),</span>
|
</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="s2">"ADD"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">e</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">e</span> <span class="o">+</span> <span class="n">this</span><span class="p">),</span>
|
||||||
</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="s2">"SAFECONCAT"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span><span class="p">)),</span>
|
</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="s2">"ARRAYANY"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">arr</span><span class="p">,</span> <span class="n">func</span><span class="p">:</span> <span class="nb">any</span><span class="p">(</span><span class="n">func</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">arr</span><span class="p">)),</span>
|
||||||
</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="s2">"CONCATWS"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">this</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">)),</span>
|
</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="s2">"BETWEEN"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">low</span><span class="p">,</span> <span class="n">high</span><span class="p">:</span> <span class="n">low</span> <span class="o"><=</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">this</span> <span class="o"><=</span> <span class="n">high</span><span class="p">),</span>
|
||||||
</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="s2">"DATESTRTODATE"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">arg</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="o">.</span><span class="n">fromisoformat</span><span class="p">(</span><span class="n">arg</span><span class="p">)),</span>
|
</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="s2">"BITWISEAND"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">this</span> <span class="o">&</span> <span class="n">e</span><span class="p">),</span>
|
||||||
</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="s2">"DIV"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">e</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">e</span> <span class="o">/</span> <span class="n">this</span><span class="p">),</span>
|
</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="s2">"BITWISELEFTSHIFT"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">this</span> <span class="o"><<</span> <span class="n">e</span><span class="p">),</span>
|
||||||
</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="s2">"DOT"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">e</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">e</span><span class="p">[</span><span class="n">this</span><span class="p">]),</span>
|
</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="s2">"BITWISEOR"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">this</span> <span class="o">|</span> <span class="n">e</span><span class="p">),</span>
|
||||||
</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="s2">"EQ"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">this</span> <span class="o">==</span> <span class="n">e</span><span class="p">),</span>
|
</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="s2">"BITWISERIGHTSHIFT"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">this</span> <span class="o">>></span> <span class="n">e</span><span class="p">),</span>
|
||||||
</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="s2">"EXTRACT"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">this</span><span class="p">)),</span>
|
</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="s2">"BITWISEXOR"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">this</span> <span class="o">^</span> <span class="n">e</span><span class="p">),</span>
|
||||||
</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="s2">"GT"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">this</span> <span class="o">></span> <span class="n">e</span><span class="p">),</span>
|
</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="s2">"CAST"</span><span class="p">:</span> <span class="n">cast</span><span class="p">,</span>
|
||||||
</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="s2">"GTE"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">this</span> <span class="o">>=</span> <span class="n">e</span><span class="p">),</span>
|
</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="s2">"COALESCE"</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="nb">next</span><span class="p">((</span><span class="n">a</span> <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="n">args</span> <span class="k">if</span> <span class="n">a</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">),</span> <span class="kc">None</span><span class="p">),</span>
|
||||||
</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="s2">"IF"</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">predicate</span><span class="p">,</span> <span class="n">true</span><span class="p">,</span> <span class="n">false</span><span class="p">:</span> <span class="n">true</span> <span class="k">if</span> <span class="n">predicate</span> <span class="k">else</span> <span class="n">false</span><span class="p">,</span>
|
</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="s2">"CONCAT"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">)),</span>
|
||||||
</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="s2">"INTDIV"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">e</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">e</span> <span class="o">//</span> <span class="n">this</span><span class="p">),</span>
|
</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="s2">"SAFECONCAT"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span><span class="p">)),</span>
|
||||||
</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="s2">"INTERVAL"</span><span class="p">:</span> <span class="n">interval</span><span class="p">,</span>
|
</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="s2">"CONCATWS"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="n">this</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">)),</span>
|
||||||
</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="s2">"LEFT"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">this</span><span class="p">[:</span><span class="n">e</span><span class="p">]),</span>
|
</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="s2">"DATEDIFF"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="p">(</span><span class="n">this</span> <span class="o">-</span> <span class="n">expression</span><span class="p">)</span><span class="o">.</span><span class="n">days</span><span class="p">),</span>
|
||||||
</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="s2">"LIKE"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span>
|
</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="s2">"DATESTRTODATE"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">arg</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="o">.</span><span class="n">fromisoformat</span><span class="p">(</span><span class="n">arg</span><span class="p">)),</span>
|
||||||
</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="nb">bool</span><span class="p">(</span><span class="n">re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"_"</span><span class="p">,</span> <span class="s2">"."</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"%"</span><span class="p">,</span> <span class="s2">".*"</span><span class="p">),</span> <span class="n">this</span><span class="p">))</span>
|
</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="s2">"DIV"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">e</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">e</span> <span class="o">/</span> <span class="n">this</span><span class="p">),</span>
|
||||||
</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="p">),</span>
|
</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="s2">"DOT"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">e</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">e</span><span class="p">[</span><span class="n">this</span><span class="p">]),</span>
|
||||||
</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="s2">"LOWER"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">arg</span><span class="p">:</span> <span class="n">arg</span><span class="o">.</span><span class="n">lower</span><span class="p">()),</span>
|
</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="s2">"EQ"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">this</span> <span class="o">==</span> <span class="n">e</span><span class="p">),</span>
|
||||||
</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="s2">"LT"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">this</span> <span class="o"><</span> <span class="n">e</span><span class="p">),</span>
|
</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="s2">"EXTRACT"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">this</span><span class="p">)),</span>
|
||||||
</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="s2">"LTE"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">this</span> <span class="o"><=</span> <span class="n">e</span><span class="p">),</span>
|
</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="s2">"GT"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">this</span> <span class="o">></span> <span class="n">e</span><span class="p">),</span>
|
||||||
</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="s2">"MAP"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="nb">dict</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">))),</span> <span class="c1"># type: ignore</span>
|
</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="s2">"GTE"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">this</span> <span class="o">>=</span> <span class="n">e</span><span class="p">),</span>
|
||||||
</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="s2">"MOD"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">e</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">e</span> <span class="o">%</span> <span class="n">this</span><span class="p">),</span>
|
</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="s2">"IF"</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">predicate</span><span class="p">,</span> <span class="n">true</span><span class="p">,</span> <span class="n">false</span><span class="p">:</span> <span class="n">true</span> <span class="k">if</span> <span class="n">predicate</span> <span class="k">else</span> <span class="n">false</span><span class="p">,</span>
|
||||||
</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="s2">"MUL"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">e</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">e</span> <span class="o">*</span> <span class="n">this</span><span class="p">),</span>
|
</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="s2">"INTDIV"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">e</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">e</span> <span class="o">//</span> <span class="n">this</span><span class="p">),</span>
|
||||||
</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="s2">"NEQ"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">this</span> <span class="o">!=</span> <span class="n">e</span><span class="p">),</span>
|
</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="s2">"INTERVAL"</span><span class="p">:</span> <span class="n">interval</span><span class="p">,</span>
|
||||||
</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="s2">"ORD"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="nb">ord</span><span class="p">),</span>
|
</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="s2">"LEFT"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">this</span><span class="p">[:</span><span class="n">e</span><span class="p">]),</span>
|
||||||
</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="s2">"ORDERED"</span><span class="p">:</span> <span class="n">ordered</span><span class="p">,</span>
|
</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="s2">"LIKE"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span>
|
||||||
</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="s2">"POW"</span><span class="p">:</span> <span class="nb">pow</span><span class="p">,</span>
|
</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="nb">bool</span><span class="p">(</span><span class="n">re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"_"</span><span class="p">,</span> <span class="s2">"."</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"%"</span><span class="p">,</span> <span class="s2">".*"</span><span class="p">),</span> <span class="n">this</span><span class="p">))</span>
|
||||||
</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="s2">"RIGHT"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">this</span><span class="p">[</span><span class="o">-</span><span class="n">e</span><span class="p">:]),</span>
|
</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="p">),</span>
|
||||||
</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="s2">"STRPOSITION"</span><span class="p">:</span> <span class="n">str_position</span><span class="p">,</span>
|
</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="s2">"LOWER"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">arg</span><span class="p">:</span> <span class="n">arg</span><span class="o">.</span><span class="n">lower</span><span class="p">()),</span>
|
||||||
</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="s2">"SUB"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">e</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">e</span> <span class="o">-</span> <span class="n">this</span><span class="p">),</span>
|
</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="s2">"LT"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">this</span> <span class="o"><</span> <span class="n">e</span><span class="p">),</span>
|
||||||
</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="s2">"SUBSTRING"</span><span class="p">:</span> <span class="n">substring</span><span class="p">,</span>
|
</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="s2">"LTE"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">this</span> <span class="o"><=</span> <span class="n">e</span><span class="p">),</span>
|
||||||
</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="s2">"TIMESTRTOTIME"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">arg</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">fromisoformat</span><span class="p">(</span><span class="n">arg</span><span class="p">)),</span>
|
</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="s2">"MAP"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="nb">dict</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">))),</span> <span class="c1"># type: ignore</span>
|
||||||
</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="s2">"UPPER"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">arg</span><span class="p">:</span> <span class="n">arg</span><span class="o">.</span><span class="n">upper</span><span class="p">()),</span>
|
</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="s2">"MOD"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">e</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">e</span> <span class="o">%</span> <span class="n">this</span><span class="p">),</span>
|
||||||
</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="s2">"YEAR"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">arg</span><span class="p">:</span> <span class="n">arg</span><span class="o">.</span><span class="n">year</span><span class="p">),</span>
|
</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="s2">"MUL"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">e</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">e</span> <span class="o">*</span> <span class="n">this</span><span class="p">),</span>
|
||||||
</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="s2">"MONTH"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">arg</span><span class="p">:</span> <span class="n">arg</span><span class="o">.</span><span class="n">month</span><span class="p">),</span>
|
</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="s2">"NEQ"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">this</span> <span class="o">!=</span> <span class="n">e</span><span class="p">),</span>
|
||||||
</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="s2">"DAY"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">arg</span><span class="p">:</span> <span class="n">arg</span><span class="o">.</span><span class="n">day</span><span class="p">),</span>
|
</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="s2">"ORD"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="nb">ord</span><span class="p">),</span>
|
||||||
</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="s2">"CURRENTDATETIME"</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">,</span>
|
</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="s2">"ORDERED"</span><span class="p">:</span> <span class="n">ordered</span><span class="p">,</span>
|
||||||
</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="s2">"CURRENTTIMESTAMP"</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">,</span>
|
</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="s2">"POW"</span><span class="p">:</span> <span class="nb">pow</span><span class="p">,</span>
|
||||||
</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="s2">"CURRENTTIME"</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">,</span>
|
</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="s2">"RIGHT"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="n">this</span><span class="p">[</span><span class="o">-</span><span class="n">e</span><span class="p">:]),</span>
|
||||||
</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="s2">"CURRENTDATE"</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="o">.</span><span class="n">today</span><span class="p">,</span>
|
</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="s2">"STRPOSITION"</span><span class="p">:</span> <span class="n">str_position</span><span class="p">,</span>
|
||||||
</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="s2">"STRFTIME"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">fmt</span><span class="p">,</span> <span class="n">arg</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">fromisoformat</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="n">fmt</span><span class="p">)),</span>
|
</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="s2">"SUB"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">e</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">e</span> <span class="o">-</span> <span class="n">this</span><span class="p">),</span>
|
||||||
</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a><span class="p">}</span>
|
</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="s2">"SUBSTRING"</span><span class="p">:</span> <span class="n">substring</span><span class="p">,</span>
|
||||||
|
</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="s2">"TIMESTRTOTIME"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">arg</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">fromisoformat</span><span class="p">(</span><span class="n">arg</span><span class="p">)),</span>
|
||||||
|
</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="s2">"UPPER"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">arg</span><span class="p">:</span> <span class="n">arg</span><span class="o">.</span><span class="n">upper</span><span class="p">()),</span>
|
||||||
|
</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="s2">"YEAR"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">arg</span><span class="p">:</span> <span class="n">arg</span><span class="o">.</span><span class="n">year</span><span class="p">),</span>
|
||||||
|
</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="s2">"MONTH"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">arg</span><span class="p">:</span> <span class="n">arg</span><span class="o">.</span><span class="n">month</span><span class="p">),</span>
|
||||||
|
</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="s2">"DAY"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">arg</span><span class="p">:</span> <span class="n">arg</span><span class="o">.</span><span class="n">day</span><span class="p">),</span>
|
||||||
|
</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="s2">"CURRENTDATETIME"</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">,</span>
|
||||||
|
</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="s2">"CURRENTTIMESTAMP"</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">,</span>
|
||||||
|
</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="s2">"CURRENTTIME"</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">,</span>
|
||||||
|
</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="s2">"CURRENTDATE"</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="o">.</span><span class="n">today</span><span class="p">,</span>
|
||||||
|
</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="s2">"STRFTIME"</span><span class="p">:</span> <span class="n">null_if_any</span><span class="p">(</span><span class="k">lambda</span> <span class="n">fmt</span><span class="p">,</span> <span class="n">arg</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">fromisoformat</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="n">fmt</span><span class="p">)),</span>
|
||||||
|
</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a><span class="p">}</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -506,18 +517,28 @@ def foo(a, b): ...
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="cast-101"><a href="#cast-101"><span class="linenos">101</span></a><span class="nd">@null_if_any</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="cast-101"><a href="#cast-101"><span class="linenos">101</span></a><span class="nd">@null_if_any</span>
|
||||||
</span><span id="cast-102"><a href="#cast-102"><span class="linenos">102</span></a><span class="k">def</span> <span class="nf">cast</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="p">):</span>
|
</span><span id="cast-102"><a href="#cast-102"><span class="linenos">102</span></a><span class="k">def</span> <span class="nf">cast</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="p">):</span>
|
||||||
</span><span id="cast-103"><a href="#cast-103"><span class="linenos">103</span></a> <span class="k">if</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">DATE</span><span class="p">:</span>
|
</span><span id="cast-103"><a href="#cast-103"><span class="linenos">103</span></a> <span class="k">if</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">DATE</span><span class="p">:</span>
|
||||||
</span><span id="cast-104"><a href="#cast-104"><span class="linenos">104</span></a> <span class="k">return</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="o">.</span><span class="n">fromisoformat</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
|
</span><span id="cast-104"><a href="#cast-104"><span class="linenos">104</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="p">):</span>
|
||||||
</span><span id="cast-105"><a href="#cast-105"><span class="linenos">105</span></a> <span class="k">if</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">DATETIME</span><span class="p">:</span>
|
</span><span id="cast-105"><a href="#cast-105"><span class="linenos">105</span></a> <span class="k">return</span> <span class="n">this</span><span class="o">.</span><span class="n">date</span><span class="p">()</span>
|
||||||
</span><span id="cast-106"><a href="#cast-106"><span class="linenos">106</span></a> <span class="k">return</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">fromisoformat</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
|
</span><span id="cast-106"><a href="#cast-106"><span class="linenos">106</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="p">):</span>
|
||||||
</span><span id="cast-107"><a href="#cast-107"><span class="linenos">107</span></a> <span class="k">if</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">BOOLEAN</span><span class="p">:</span>
|
</span><span id="cast-107"><a href="#cast-107"><span class="linenos">107</span></a> <span class="k">return</span> <span class="n">this</span>
|
||||||
</span><span id="cast-108"><a href="#cast-108"><span class="linenos">108</span></a> <span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
|
</span><span id="cast-108"><a href="#cast-108"><span class="linenos">108</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
||||||
</span><span id="cast-109"><a href="#cast-109"><span class="linenos">109</span></a> <span class="k">if</span> <span class="n">to</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">TEXT_TYPES</span><span class="p">:</span>
|
</span><span id="cast-109"><a href="#cast-109"><span class="linenos">109</span></a> <span class="k">return</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="o">.</span><span class="n">fromisoformat</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
|
||||||
</span><span id="cast-110"><a href="#cast-110"><span class="linenos">110</span></a> <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
|
</span><span id="cast-110"><a href="#cast-110"><span class="linenos">110</span></a> <span class="k">if</span> <span class="n">to</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">DATETIME</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">TIMESTAMP</span><span class="p">):</span>
|
||||||
</span><span id="cast-111"><a href="#cast-111"><span class="linenos">111</span></a> <span class="k">if</span> <span class="n">to</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">FLOAT</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">DOUBLE</span><span class="p">}:</span>
|
</span><span id="cast-111"><a href="#cast-111"><span class="linenos">111</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="p">):</span>
|
||||||
</span><span id="cast-112"><a href="#cast-112"><span class="linenos">112</span></a> <span class="k">return</span> <span class="nb">float</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
|
</span><span id="cast-112"><a href="#cast-112"><span class="linenos">112</span></a> <span class="k">return</span> <span class="n">this</span>
|
||||||
</span><span id="cast-113"><a href="#cast-113"><span class="linenos">113</span></a> <span class="k">if</span> <span class="n">to</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">NUMERIC_TYPES</span><span class="p">:</span>
|
</span><span id="cast-113"><a href="#cast-113"><span class="linenos">113</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="p">):</span>
|
||||||
</span><span id="cast-114"><a href="#cast-114"><span class="linenos">114</span></a> <span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
|
</span><span id="cast-114"><a href="#cast-114"><span class="linenos">114</span></a> <span class="k">return</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="p">(</span><span class="n">this</span><span class="o">.</span><span class="n">year</span><span class="p">,</span> <span class="n">this</span><span class="o">.</span><span class="n">month</span><span class="p">,</span> <span class="n">this</span><span class="o">.</span><span class="n">day</span><span class="p">)</span>
|
||||||
</span><span id="cast-115"><a href="#cast-115"><span class="linenos">115</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Casting to '</span><span class="si">{</span><span class="n">to</span><span class="si">}</span><span class="s2">' not implemented."</span><span class="p">)</span>
|
</span><span id="cast-115"><a href="#cast-115"><span class="linenos">115</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
||||||
|
</span><span id="cast-116"><a href="#cast-116"><span class="linenos">116</span></a> <span class="k">return</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">fromisoformat</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
|
||||||
|
</span><span id="cast-117"><a href="#cast-117"><span class="linenos">117</span></a> <span class="k">if</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">BOOLEAN</span><span class="p">:</span>
|
||||||
|
</span><span id="cast-118"><a href="#cast-118"><span class="linenos">118</span></a> <span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
|
||||||
|
</span><span id="cast-119"><a href="#cast-119"><span class="linenos">119</span></a> <span class="k">if</span> <span class="n">to</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">TEXT_TYPES</span><span class="p">:</span>
|
||||||
|
</span><span id="cast-120"><a href="#cast-120"><span class="linenos">120</span></a> <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
|
||||||
|
</span><span id="cast-121"><a href="#cast-121"><span class="linenos">121</span></a> <span class="k">if</span> <span class="n">to</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">FLOAT</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">DOUBLE</span><span class="p">}:</span>
|
||||||
|
</span><span id="cast-122"><a href="#cast-122"><span class="linenos">122</span></a> <span class="k">return</span> <span class="nb">float</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
|
||||||
|
</span><span id="cast-123"><a href="#cast-123"><span class="linenos">123</span></a> <span class="k">if</span> <span class="n">to</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">NUMERIC_TYPES</span><span class="p">:</span>
|
||||||
|
</span><span id="cast-124"><a href="#cast-124"><span class="linenos">124</span></a> <span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
|
||||||
|
</span><span id="cast-125"><a href="#cast-125"><span class="linenos">125</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Casting </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> to '</span><span class="si">{</span><span class="n">to</span><span class="si">}</span><span class="s2">' not implemented."</span><span class="p">)</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -535,10 +556,10 @@ def foo(a, b): ...
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#ordered"></a>
|
<a class="headerlink" href="#ordered"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="ordered-118"><a href="#ordered-118"><span class="linenos">118</span></a><span class="k">def</span> <span class="nf">ordered</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">desc</span><span class="p">,</span> <span class="n">nulls_first</span><span class="p">):</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="ordered-128"><a href="#ordered-128"><span class="linenos">128</span></a><span class="k">def</span> <span class="nf">ordered</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">desc</span><span class="p">,</span> <span class="n">nulls_first</span><span class="p">):</span>
|
||||||
</span><span id="ordered-119"><a href="#ordered-119"><span class="linenos">119</span></a> <span class="k">if</span> <span class="n">desc</span><span class="p">:</span>
|
</span><span id="ordered-129"><a href="#ordered-129"><span class="linenos">129</span></a> <span class="k">if</span> <span class="n">desc</span><span class="p">:</span>
|
||||||
</span><span id="ordered-120"><a href="#ordered-120"><span class="linenos">120</span></a> <span class="k">return</span> <span class="n">reverse_key</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
|
</span><span id="ordered-130"><a href="#ordered-130"><span class="linenos">130</span></a> <span class="k">return</span> <span class="n">reverse_key</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
|
||||||
</span><span id="ordered-121"><a href="#ordered-121"><span class="linenos">121</span></a> <span class="k">return</span> <span class="n">this</span>
|
</span><span id="ordered-131"><a href="#ordered-131"><span class="linenos">131</span></a> <span class="k">return</span> <span class="n">this</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -557,13 +578,13 @@ def foo(a, b): ...
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#interval"></a>
|
<a class="headerlink" href="#interval"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="interval-124"><a href="#interval-124"><span class="linenos">124</span></a><span class="nd">@null_if_any</span>
|
<div class="pdoc-code codehilite"><pre><span></span><span id="interval-134"><a href="#interval-134"><span class="linenos">134</span></a><span class="nd">@null_if_any</span>
|
||||||
</span><span id="interval-125"><a href="#interval-125"><span class="linenos">125</span></a><span class="k">def</span> <span class="nf">interval</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">unit</span><span class="p">):</span>
|
</span><span id="interval-135"><a href="#interval-135"><span class="linenos">135</span></a><span class="k">def</span> <span class="nf">interval</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">unit</span><span class="p">):</span>
|
||||||
</span><span id="interval-126"><a href="#interval-126"><span class="linenos">126</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">unit</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
|
</span><span id="interval-136"><a href="#interval-136"><span class="linenos">136</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">unit</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
|
||||||
</span><span id="interval-127"><a href="#interval-127"><span class="linenos">127</span></a> <span class="n">plural</span> <span class="o">=</span> <span class="n">unit</span> <span class="o">+</span> <span class="s2">"s"</span>
|
</span><span id="interval-137"><a href="#interval-137"><span class="linenos">137</span></a> <span class="n">plural</span> <span class="o">=</span> <span class="n">unit</span> <span class="o">+</span> <span class="s2">"s"</span>
|
||||||
</span><span id="interval-128"><a href="#interval-128"><span class="linenos">128</span></a> <span class="k">if</span> <span class="n">plural</span> <span class="ow">in</span> <span class="n">Generator</span><span class="o">.</span><span class="n">TIME_PART_SINGULARS</span><span class="p">:</span>
|
</span><span id="interval-138"><a href="#interval-138"><span class="linenos">138</span></a> <span class="k">if</span> <span class="n">plural</span> <span class="ow">in</span> <span class="n">Generator</span><span class="o">.</span><span class="n">TIME_PART_SINGULARS</span><span class="p">:</span>
|
||||||
</span><span id="interval-129"><a href="#interval-129"><span class="linenos">129</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">plural</span>
|
</span><span id="interval-139"><a href="#interval-139"><span class="linenos">139</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">plural</span>
|
||||||
</span><span id="interval-130"><a href="#interval-130"><span class="linenos">130</span></a> <span class="k">return</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="o">**</span><span class="p">{</span><span class="n">unit</span><span class="p">:</span> <span class="nb">float</span><span class="p">(</span><span class="n">this</span><span class="p">)})</span>
|
</span><span id="interval-140"><a href="#interval-140"><span class="linenos">140</span></a> <span class="k">return</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="o">**</span><span class="p">{</span><span class="n">unit</span><span class="p">:</span> <span class="nb">float</span><span class="p">(</span><span class="n">this</span><span class="p">)})</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -574,7 +595,7 @@ def foo(a, b): ...
|
||||||
<div class="attr variable">
|
<div class="attr variable">
|
||||||
<span class="name">ENV</span> =
|
<span class="name">ENV</span> =
|
||||||
<input id="ENV-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
<input id="ENV-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||||
<label class="view-value-button pdoc-button" for="ENV-view-value"></label><span class="default_value">{'exp': <module '<a href="../expressions.html">sqlglot.expressions</a>' from '/home/runner/work/sqlglot/sqlglot/sqlglot/expressions.py'>, 'ARRAYAGG': <class 'list'>, 'AVG': <function fmean>, 'COUNT': <function <lambda>>, 'MAX': <function max>, 'MIN': <function min>, 'SUM': <function sum>, 'ABS': <function <lambda>>, 'ADD': <function <lambda>>, 'ARRAYANY': <function <lambda>>, 'BETWEEN': <function <lambda>>, 'BITWISEAND': <function <lambda>>, 'BITWISELEFTSHIFT': <function <lambda>>, 'BITWISEOR': <function <lambda>>, 'BITWISERIGHTSHIFT': <function <lambda>>, 'BITWISEXOR': <function <lambda>>, 'CAST': <function cast>, 'COALESCE': <function <lambda>>, 'CONCAT': <function <lambda>>, 'SAFECONCAT': <function <lambda>>, 'CONCATWS': <function <lambda>>, 'DATESTRTODATE': <function <lambda>>, 'DIV': <function <lambda>>, 'DOT': <function <lambda>>, 'EQ': <function <lambda>>, 'EXTRACT': <function <lambda>>, 'GT': <function <lambda>>, 'GTE': <function <lambda>>, 'IF': <function <lambda>>, 'INTDIV': <function <lambda>>, 'INTERVAL': <function interval>, 'LEFT': <function <lambda>>, 'LIKE': <function <lambda>>, 'LOWER': <function <lambda>>, 'LT': <function <lambda>>, 'LTE': <function <lambda>>, 'MAP': <function <lambda>>, 'MOD': <function <lambda>>, 'MUL': <function <lambda>>, 'NEQ': <function <lambda>>, 'ORD': <function ord>, 'ORDERED': <function ordered>, 'POW': <built-in function pow>, 'RIGHT': <function <lambda>>, 'STRPOSITION': <function str_position>, 'SUB': <function <lambda>>, 'SUBSTRING': <function substring>, 'TIMESTRTOTIME': <function <lambda>>, 'UPPER': <function <lambda>>, 'YEAR': <function <lambda>>, 'MONTH': <function <lambda>>, 'DAY': <function <lambda>>, 'CURRENTDATETIME': <built-in method now of type object>, 'CURRENTTIMESTAMP': <built-in method now of type object>, 'CURRENTTIME': <built-in method now of type object>, 'CURRENTDATE': <built-in method today of type object>, 'STRFTIME': <function <lambda>>}</span>
|
<label class="view-value-button pdoc-button" for="ENV-view-value"></label><span class="default_value">{'exp': <module '<a href="../expressions.html">sqlglot.expressions</a>' from '/home/runner/work/sqlglot/sqlglot/sqlglot/expressions.py'>, 'ARRAYAGG': <class 'list'>, 'AVG': <function fmean>, 'COUNT': <function <lambda>>, 'MAX': <function max>, 'MIN': <function min>, 'SUM': <function sum>, 'ABS': <function <lambda>>, 'ADD': <function <lambda>>, 'ARRAYANY': <function <lambda>>, 'BETWEEN': <function <lambda>>, 'BITWISEAND': <function <lambda>>, 'BITWISELEFTSHIFT': <function <lambda>>, 'BITWISEOR': <function <lambda>>, 'BITWISERIGHTSHIFT': <function <lambda>>, 'BITWISEXOR': <function <lambda>>, 'CAST': <function cast>, 'COALESCE': <function <lambda>>, 'CONCAT': <function <lambda>>, 'SAFECONCAT': <function <lambda>>, 'CONCATWS': <function <lambda>>, 'DATEDIFF': <function <lambda>>, 'DATESTRTODATE': <function <lambda>>, 'DIV': <function <lambda>>, 'DOT': <function <lambda>>, 'EQ': <function <lambda>>, 'EXTRACT': <function <lambda>>, 'GT': <function <lambda>>, 'GTE': <function <lambda>>, 'IF': <function <lambda>>, 'INTDIV': <function <lambda>>, 'INTERVAL': <function interval>, 'LEFT': <function <lambda>>, 'LIKE': <function <lambda>>, 'LOWER': <function <lambda>>, 'LT': <function <lambda>>, 'LTE': <function <lambda>>, 'MAP': <function <lambda>>, 'MOD': <function <lambda>>, 'MUL': <function <lambda>>, 'NEQ': <function <lambda>>, 'ORD': <function ord>, 'ORDERED': <function ordered>, 'POW': <built-in function pow>, 'RIGHT': <function <lambda>>, 'STRPOSITION': <function str_position>, 'SUB': <function <lambda>>, 'SUBSTRING': <function substring>, 'TIMESTRTOTIME': <function <lambda>>, 'UPPER': <function <lambda>>, 'YEAR': <function <lambda>>, 'MONTH': <function <lambda>>, 'DAY': <function <lambda>>, 'CURRENTDATETIME': <built-in method now of type object>, 'CURRENTTIMESTAMP': <built-in method now of type object>, 'CURRENTTIME': <built-in method now of type object>, 'CURRENTDATE': <built-in method today of type object>, 'STRFTIME': <function <lambda>>}</span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
|
@ -565,7 +565,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">{'sort', 'group', 'cluster', 'offset', 'distinct', 'pivots', 'limit', 'qualify', 'format', 'with', 'settings', 'locks', 'into', 'distribute', 'laterals', 'windows', 'match', 'sample', 'kind', 'having'}</span>
|
<label class="view-value-button pdoc-button" for="UNMERGABLE_ARGS-view-value"></label><span class="default_value">{'cluster', 'laterals', 'into', 'match', 'qualify', 'locks', 'sort', 'sample', 'group', 'format', 'with', 'offset', 'windows', 'limit', 'kind', 'distribute', 'having', 'distinct', 'pivots', 'settings'}</span>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
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 it is too large
Load diff
File diff suppressed because it is too large
Load diff
15806
docs/sqlglot/parser.html
15806
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 it is too large
Load diff
|
@ -48,9 +48,6 @@
|
||||||
<li>
|
<li>
|
||||||
<a class="function" href="#explode_to_unnest">explode_to_unnest</a>
|
<a class="function" href="#explode_to_unnest">explode_to_unnest</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
|
||||||
<a class="function" href="#remove_target_from_merge">remove_target_from_merge</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
<li>
|
||||||
<a class="function" href="#remove_within_group_for_percentiles">remove_within_group_for_percentiles</a>
|
<a class="function" href="#remove_within_group_for_percentiles">remove_within_group_for_percentiles</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -212,199 +209,182 @@
|
||||||
</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a><span class="sd"> other expressions. This transforms removes the precision from parameterized types in expressions.</span>
|
</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a><span class="sd"> other expressions. This transforms removes the precision from parameterized types in expressions.</span>
|
||||||
</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a><span class="sd"> """</span>
|
</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a><span class="sd"> """</span>
|
||||||
</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">expression</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">DataType</span><span class="p">):</span>
|
</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">expression</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">DataType</span><span class="p">):</span>
|
||||||
</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="n">node</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"expressions"</span><span class="p">,</span> <span class="p">[</span><span class="n">e</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">expressions</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)])</span>
|
</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="n">node</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
|
||||||
</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a>
|
</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="s2">"expressions"</span><span class="p">,</span> <span class="p">[</span><span class="n">e</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">expressions</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataTypeSize</span><span class="p">)]</span>
|
||||||
</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="k">return</span> <span class="n">expression</span>
|
</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="p">)</span>
|
||||||
</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a>
|
</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a>
|
||||||
</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a>
|
</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||||
</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a><span class="k">def</span> <span class="nf">unnest_to_explode</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-132"><a href="#L-132"><span class="linenos">132</span></a>
|
||||||
</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a><span class="w"> </span><span class="sd">"""Convert cross join unnest into lateral view explode (used in presto -> hive)."""</span>
|
</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a>
|
||||||
</span><span id="L-134"><a href="#L-134"><span class="linenos">134</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-134"><a href="#L-134"><span class="linenos">134</span></a><span class="k">def</span> <span class="nf">unnest_to_explode</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-135"><a href="#L-135"><span class="linenos">135</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-135"><a href="#L-135"><span class="linenos">135</span></a><span class="w"> </span><span class="sd">"""Convert cross join unnest into lateral view explode (used in presto -> hive)."""</span>
|
||||||
</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="n">join</span><span class="o">.</span><span class="n">this</span>
|
</span><span id="L-136"><a href="#L-136"><span class="linenos">136</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-137"><a href="#L-137"><span class="linenos">137</span></a>
|
</span><span id="L-137"><a href="#L-137"><span class="linenos">137</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-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">unnest</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">):</span>
|
</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="n">join</span><span class="o">.</span><span class="n">this</span>
|
||||||
</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">unnest</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">"alias"</span><span class="p">)</span>
|
</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="n">udtf</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Posexplode</span> <span class="k">if</span> <span class="n">unnest</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">"ordinality"</span><span class="p">)</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span>
|
</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">unnest</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">):</span>
|
||||||
</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a>
|
</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">unnest</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">"alias"</span><span class="p">)</span>
|
||||||
</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"joins"</span><span class="p">]</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">join</span><span class="p">)</span>
|
</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="n">udtf</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Posexplode</span> <span class="k">if</span> <span class="n">unnest</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">"ordinality"</span><span class="p">)</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span>
|
||||||
</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a>
|
</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a>
|
||||||
</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="k">for</span> <span class="n">e</span><span class="p">,</span> <span class="n">column</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">unnest</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="n">alias</span><span class="o">.</span><span class="n">columns</span> <span class="k">if</span> <span class="n">alias</span> <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 class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"joins"</span><span class="p">]</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">join</span><span class="p">)</span>
|
||||||
</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</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="s2">"laterals"</span><span class="p">,</span>
|
</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="k">for</span> <span class="n">e</span><span class="p">,</span> <span class="n">column</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">unnest</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="n">alias</span><span class="o">.</span><span class="n">columns</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="p">[]):</span>
|
||||||
</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">(</span>
|
</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
|
||||||
</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="n">this</span><span class="o">=</span><span class="n">udtf</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">e</span><span class="p">),</span>
|
</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="s2">"laterals"</span><span class="p">,</span>
|
||||||
</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="n">view</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">(</span>
|
||||||
</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">alias</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="n">column</span><span class="p">]),</span> <span class="c1"># type: ignore</span>
|
</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="n">this</span><span class="o">=</span><span class="n">udtf</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">e</span><span class="p">),</span>
|
||||||
</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="p">),</span>
|
</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="n">view</span><span class="o">=</span><span class="kc">True</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-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">alias</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="n">column</span><span class="p">]),</span> <span class="c1"># type: ignore</span>
|
||||||
</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a>
|
</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="p">),</span>
|
||||||
</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="k">return</span> <span class="n">expression</span>
|
</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="p">)</span>
|
||||||
</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a>
|
</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><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||||
</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a><span class="k">def</span> <span class="nf">explode_to_unnest</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-157"><a href="#L-157"><span class="linenos">157</span></a>
|
||||||
</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a><span class="w"> </span><span class="sd">"""Convert explode/posexplode into unnest (used in hive -> presto)."""</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="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-159"><a href="#L-159"><span class="linenos">159</span></a><span class="k">def</span> <span class="nf">explode_to_unnest</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-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="kn">from</span> <span class="nn">sqlglot.optimizer.scope</span> <span class="kn">import</span> <span class="n">Scope</span>
|
</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a><span class="w"> </span><span class="sd">"""Convert explode/posexplode into unnest (used in hive -> presto)."""</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="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-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="n">taken_select_names</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">named_selects</span><span class="p">)</span>
|
</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="kn">from</span> <span class="nn">sqlglot.optimizer.scope</span> <span class="kn">import</span> <span class="n">Scope</span>
|
||||||
</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="n">taken_source_names</span> <span class="o">=</span> <span class="p">{</span><span class="n">name</span> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">Scope</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="o">.</span><span class="n">references</span><span class="p">}</span>
|
</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a>
|
||||||
</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a>
|
</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="n">taken_select_names</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">named_selects</span><span class="p">)</span>
|
||||||
</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">selects</span><span class="p">:</span>
|
</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="n">taken_source_names</span> <span class="o">=</span> <span class="p">{</span><span class="n">name</span> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">Scope</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="o">.</span><span class="n">references</span><span class="p">}</span>
|
||||||
</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="n">to_replace</span> <span class="o">=</span> <span class="n">select</span>
|
</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><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">selects</span><span class="p">:</span>
|
||||||
</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="n">pos_alias</span> <span class="o">=</span> <span class="s2">""</span>
|
</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="n">to_replace</span> <span class="o">=</span> <span class="n">select</span>
|
||||||
</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="n">explode_alias</span> <span class="o">=</span> <span class="s2">""</span>
|
</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a>
|
||||||
</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a>
|
</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="n">pos_alias</span> <span class="o">=</span> <span class="s2">""</span>
|
||||||
</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</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-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="n">explode_alias</span> <span class="o">=</span> <span class="s2">""</span>
|
||||||
</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="n">explode_alias</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">alias</span>
|
</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a>
|
||||||
</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span>
|
</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</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-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Aliases</span><span class="p">):</span>
|
</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="n">explode_alias</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">alias</span>
|
||||||
</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="n">pos_alias</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">aliases</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span>
|
</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span>
|
||||||
</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="n">explode_alias</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">aliases</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">name</span>
|
</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Aliases</span><span class="p">):</span>
|
||||||
</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span>
|
</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="n">pos_alias</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">aliases</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span>
|
||||||
</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a>
|
</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="n">explode_alias</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">aliases</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">name</span>
|
||||||
</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Posexplode</span><span class="p">)):</span>
|
</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span>
|
||||||
</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="n">is_posexplode</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Posexplode</span><span class="p">)</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><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Posexplode</span><span class="p">)):</span>
|
||||||
</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="n">explode_arg</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span>
|
</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="n">is_posexplode</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Posexplode</span><span class="p">)</span>
|
||||||
</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">explode_arg</span><span class="o">.</span><span class="n">copy</span><span class="p">()],</span> <span class="n">ordinality</span><span class="o">=</span><span class="n">is_posexplode</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><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="n">explode_arg</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span>
|
||||||
</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="c1"># This ensures that we won't use [POS]EXPLODE's argument as a new selection</span>
|
</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">explode_arg</span><span class="o">.</span><span class="n">copy</span><span class="p">()],</span> <span class="n">ordinality</span><span class="o">=</span><span class="n">is_posexplode</span><span class="p">)</span>
|
||||||
</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">explode_arg</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-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="n">taken_select_names</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">explode_arg</span><span class="o">.</span><span class="n">output_name</span><span class="p">)</span>
|
</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="c1"># This ensures that we won't use [POS]EXPLODE's argument as a new selection</span>
|
||||||
</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a>
|
</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">explode_arg</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-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="n">unnest_source_alias</span> <span class="o">=</span> <span class="n">find_new_name</span><span class="p">(</span><span class="n">taken_source_names</span><span class="p">,</span> <span class="s2">"_u"</span><span class="p">)</span>
|
</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="n">taken_select_names</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">explode_arg</span><span class="o">.</span><span class="n">output_name</span><span class="p">)</span>
|
||||||
</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="n">taken_source_names</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">unnest_source_alias</span><span class="p">)</span>
|
</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a>
|
||||||
</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a>
|
</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="n">unnest_source_alias</span> <span class="o">=</span> <span class="n">find_new_name</span><span class="p">(</span><span class="n">taken_source_names</span><span class="p">,</span> <span class="s2">"_u"</span><span class="p">)</span>
|
||||||
</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">explode_alias</span><span class="p">:</span>
|
</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="n">taken_source_names</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">unnest_source_alias</span><span class="p">)</span>
|
||||||
</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="n">explode_alias</span> <span class="o">=</span> <span class="n">find_new_name</span><span class="p">(</span><span class="n">taken_select_names</span><span class="p">,</span> <span class="s2">"col"</span><span class="p">)</span>
|
</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a>
|
||||||
</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="n">taken_select_names</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">explode_alias</span><span class="p">)</span>
|
</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">explode_alias</span><span class="p">:</span>
|
||||||
</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a>
|
</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="n">explode_alias</span> <span class="o">=</span> <span class="n">find_new_name</span><span class="p">(</span><span class="n">taken_select_names</span><span class="p">,</span> <span class="s2">"col"</span><span class="p">)</span>
|
||||||
</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="k">if</span> <span class="n">is_posexplode</span><span class="p">:</span>
|
</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="n">taken_select_names</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">explode_alias</span><span class="p">)</span>
|
||||||
</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="n">pos_alias</span> <span class="o">=</span> <span class="n">find_new_name</span><span class="p">(</span><span class="n">taken_select_names</span><span class="p">,</span> <span class="s2">"pos"</span><span class="p">)</span>
|
</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a>
|
||||||
</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="n">taken_select_names</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">pos_alias</span><span class="p">)</span>
|
</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="k">if</span> <span class="n">is_posexplode</span><span class="p">:</span>
|
||||||
</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a>
|
</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="n">pos_alias</span> <span class="o">=</span> <span class="n">find_new_name</span><span class="p">(</span><span class="n">taken_select_names</span><span class="p">,</span> <span class="s2">"pos"</span><span class="p">)</span>
|
||||||
</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="k">if</span> <span class="n">is_posexplode</span><span class="p">:</span>
|
</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="n">taken_select_names</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">pos_alias</span><span class="p">)</span>
|
||||||
</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">explode_alias</span><span class="p">,</span> <span class="n">pos_alias</span><span class="p">]</span>
|
</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a>
|
||||||
</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="n">to_replace</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
|
</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="k">if</span> <span class="n">is_posexplode</span><span class="p">:</span>
|
||||||
</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">pos_alias</span><span class="p">,</span> <span class="n">explode_alias</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-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">explode_alias</span><span class="p">,</span> <span class="n">pos_alias</span><span class="p">]</span>
|
||||||
</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="k">else</span><span class="p">:</span>
|
</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="n">to_replace</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
|
||||||
</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">explode_alias</span><span class="p">]</span>
|
</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">pos_alias</span><span class="p">,</span> <span class="n">explode_alias</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-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="n">to_replace</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">column</span><span class="p">(</span><span class="n">explode_alias</span><span class="p">))</span>
|
</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="k">else</span><span class="p">:</span>
|
||||||
</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a>
|
</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">explode_alias</span><span class="p">]</span>
|
||||||
</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">unnest</span><span class="p">,</span> <span class="n">unnest_source_alias</span><span class="p">,</span> <span class="n">table</span><span class="o">=</span><span class="n">column_names</span><span class="p">)</span>
|
</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="n">to_replace</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">column</span><span class="p">(</span><span class="n">explode_alias</span><span class="p">))</span>
|
||||||
</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a>
|
</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a>
|
||||||
</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="k">if</span> <span class="ow">not</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">"from"</span><span class="p">):</span>
|
</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">unnest</span><span class="p">,</span> <span class="n">unnest_source_alias</span><span class="p">,</span> <span class="n">table</span><span class="o">=</span><span class="n">column_names</span><span class="p">)</span>
|
||||||
</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">unnest</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-211"><a href="#L-211"><span class="linenos">211</span></a>
|
||||||
</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="k">else</span><span class="p">:</span>
|
</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="k">if</span> <span class="ow">not</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">"from"</span><span class="p">):</span>
|
||||||
</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">unnest</span><span class="p">,</span> <span class="n">join_type</span><span class="o">=</span><span class="s2">"CROSS"</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-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">unnest</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-214"><a href="#L-214"><span class="linenos">214</span></a>
|
</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="k">else</span><span class="p">:</span>
|
||||||
</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="k">return</span> <span class="n">expression</span>
|
</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">unnest</span><span class="p">,</span> <span class="n">join_type</span><span class="o">=</span><span class="s2">"CROSS"</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-216"><a href="#L-216"><span class="linenos">216</span></a>
|
</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a>
|
||||||
</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a>
|
</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||||
</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a><span class="k">def</span> <span class="nf">remove_target_from_merge</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-218"><a href="#L-218"><span class="linenos">218</span></a>
|
||||||
</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a><span class="w"> </span><span class="sd">"""Remove table refs from columns in when statements."""</span>
|
</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a>
|
||||||
</span><span id="L-220"><a href="#L-220"><span class="linenos">220</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">Merge</span><span class="p">):</span>
|
</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a><span class="k">def</span> <span class="nf">remove_within_group_for_percentiles</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-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="n">alias</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">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"alias"</span><span class="p">)</span>
|
</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="k">if</span> <span class="p">(</span>
|
||||||
</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="n">targets</span> <span class="o">=</span> <span class="p">{</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">}</span>
|
</span><span id="L-222"><a href="#L-222"><span class="linenos">222</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">WithinGroup</span><span class="p">)</span>
|
||||||
</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
|
</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="ow">and</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="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PercentileCont</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">PercentileDisc</span><span class="p">))</span>
|
||||||
</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="n">targets</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">alias</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
|
</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="ow">and</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">Order</span><span class="p">)</span>
|
||||||
</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a>
|
</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">for</span> <span class="n">when</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
|
</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="n">quantile</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">this</span>
|
||||||
</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="n">when</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
|
</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="n">input_value</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">Ordered</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</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="o">.</span><span class="n">this</span>
|
||||||
</span><span id="L-228"><a href="#L-228"><span class="linenos">228</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">column</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
|
</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="k">return</span> <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">ApproxQuantile</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">input_value</span><span class="p">,</span> <span class="n">quantile</span><span class="o">=</span><span class="n">quantile</span><span class="p">))</span>
|
||||||
</span><span id="L-229"><a href="#L-229"><span class="linenos">229</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">Column</span><span class="p">)</span> <span class="ow">and</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="s2">"table"</span><span class="p">)</span> <span class="ow">in</span> <span class="n">targets</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="k">else</span> <span class="n">node</span><span class="p">,</span>
|
</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||||
</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a>
|
||||||
</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a> <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">def</span> <span class="nf">add_recursive_cte_column_names</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-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="k">return</span> <span class="n">expression</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">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">recursive</span><span class="p">:</span>
|
||||||
</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a>
|
</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="n">next_name</span> <span class="o">=</span> <span class="n">name_sequence</span><span class="p">(</span><span class="s2">"_c_"</span><span class="p">)</span>
|
||||||
</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a>
|
</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a>
|
||||||
</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a><span class="k">def</span> <span class="nf">remove_within_group_for_percentiles</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-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="k">for</span> <span class="n">cte</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
|
||||||
</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="k">if</span> <span class="p">(</span>
|
</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">cte</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"alias"</span><span class="p">]</span><span class="o">.</span><span class="n">columns</span><span class="p">:</span>
|
||||||
</span><span id="L-239"><a href="#L-239"><span class="linenos">239</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">WithinGroup</span><span class="p">)</span>
|
</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="n">query</span> <span class="o">=</span> <span class="n">cte</span><span class="o">.</span><span class="n">this</span>
|
||||||
</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="ow">and</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="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PercentileCont</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">PercentileDisc</span><span class="p">))</span>
|
</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">):</span>
|
||||||
</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="ow">and</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">Order</span><span class="p">)</span>
|
</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="n">query</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">this</span>
|
||||||
</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="p">):</span>
|
</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a>
|
||||||
</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="n">quantile</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">this</span>
|
</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="n">cte</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"alias"</span><span class="p">]</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
|
||||||
</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="n">input_value</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">Ordered</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</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="o">.</span><span class="n">this</span>
|
</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="s2">"columns"</span><span class="p">,</span>
|
||||||
</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="k">return</span> <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">ApproxQuantile</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">input_value</span><span class="p">,</span> <span class="n">quantile</span><span class="o">=</span><span class="n">quantile</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="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">s</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">or</span> <span class="n">next_name</span><span class="p">())</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">query</span><span class="o">.</span><span class="n">selects</span><span class="p">],</span>
|
||||||
</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a>
|
</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a> <span class="p">)</span>
|
||||||
</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a> <span class="k">return</span> <span class="n">expression</span>
|
</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a>
|
||||||
</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a>
|
</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||||
</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a>
|
</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a>
|
||||||
</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a><span class="k">def</span> <span class="nf">add_recursive_cte_column_names</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-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="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">With</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">recursive</span><span class="p">:</span>
|
</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a><span class="k">def</span> <span class="nf">epoch_cast_to_ts</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-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="n">next_name</span> <span class="o">=</span> <span class="n">name_sequence</span><span class="p">(</span><span class="s2">"_c_"</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="p">(</span>
|
||||||
</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a>
|
</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <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">Cast</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">))</span>
|
||||||
</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="k">for</span> <span class="n">cte</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
|
</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="ow">and</span> <span class="n">expression</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">"epoch"</span>
|
||||||
</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">cte</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"alias"</span><span class="p">]</span><span class="o">.</span><span class="n">columns</span><span class="p">:</span>
|
</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</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">TEMPORAL_TYPES</span>
|
||||||
</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="n">query</span> <span class="o">=</span> <span class="n">cte</span><span class="o">.</span><span class="n">this</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="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">):</span>
|
</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">"1970-01-01 00:00:00"</span><span class="p">))</span>
|
||||||
</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a> <span class="n">query</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">this</span>
|
</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a>
|
||||||
</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a>
|
</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||||
</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="n">cte</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"alias"</span><span class="p">]</span><span class="o">.</span><span class="n">set</span><span class="p">(</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">"columns"</span><span class="p">,</span>
|
</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a>
|
||||||
</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">s</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">or</span> <span class="n">next_name</span><span class="p">())</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">query</span><span class="o">.</span><span class="n">selects</span><span class="p">],</span>
|
</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a><span class="k">def</span> <span class="nf">preprocess</span><span class="p">(</span>
|
||||||
</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a> <span class="p">)</span>
|
</span><span id="L-263"><a href="#L-263"><span class="linenos">263</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-264"><a href="#L-264"><span class="linenos">264</span></a>
|
</span><span id="L-264"><a href="#L-264"><span class="linenos">264</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-265"><a href="#L-265"><span class="linenos">265</span></a> <span class="k">return</span> <span class="n">expression</span>
|
</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||||
</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a>
|
</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a><span class="sd"> Creates a new transform by chaining a sequence of transformations and converts the resulting</span>
|
||||||
</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a>
|
</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a><span class="sd"> expression to SQL, using either the "_sql" method corresponding to the resulting expression,</span>
|
||||||
</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a><span class="k">def</span> <span class="nf">epoch_cast_to_ts</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-268"><a href="#L-268"><span class="linenos">268</span></a><span class="sd"> or the appropriate `Generator.TRANSFORMS` function (when applicable -- see below).</span>
|
||||||
</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a> <span class="k">if</span> <span class="p">(</span>
|
</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a>
|
||||||
</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a> <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">Cast</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">))</span>
|
</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a><span class="sd"> Args:</span>
|
||||||
</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a> <span class="ow">and</span> <span class="n">expression</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">"epoch"</span>
|
</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a><span class="sd"> transforms: sequence of transform functions. These will be called in order.</span>
|
||||||
</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</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">TEMPORAL_TYPES</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 class="p">):</span>
|
</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a><span class="sd"> Returns:</span>
|
||||||
</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">"1970-01-01 00:00:00"</span><span class="p">))</span>
|
</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a><span class="sd"> Function that can be used as a generator transform.</span>
|
||||||
</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a>
|
</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a><span class="sd"> """</span>
|
||||||
</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a> <span class="k">return</span> <span class="n">expression</span>
|
</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a>
|
||||||
</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a>
|
</span><span id="L-277"><a href="#L-277"><span class="linenos">277</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-278"><a href="#L-278"><span class="linenos">278</span></a>
|
</span><span id="L-278"><a href="#L-278"><span class="linenos">278</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-279"><a href="#L-279"><span class="linenos">279</span></a><span class="k">def</span> <span class="nf">preprocess</span><span class="p">(</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="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-280"><a href="#L-280"><span class="linenos">280</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-281"><a href="#L-281"><span class="linenos">281</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-281"><a href="#L-281"><span class="linenos">281</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-282"><a href="#L-282"><span class="linenos">282</span></a><span class="w"> </span><span class="sd">"""</span>
|
</span><span id="L-282"><a href="#L-282"><span class="linenos">282</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-283"><a href="#L-283"><span class="linenos">283</span></a><span class="sd"> Creates a new transform by chaining a sequence of transformations and converts the resulting</span>
|
</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a>
|
||||||
</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a><span class="sd"> expression to SQL, using either the "_sql" method corresponding to the resulting expression,</span>
|
</span><span id="L-284"><a href="#L-284"><span class="linenos">284</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-285"><a href="#L-285"><span class="linenos">285</span></a><span class="sd"> or the appropriate `Generator.TRANSFORMS` function (when applicable -- see below).</span>
|
</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a> <span class="k">if</span> <span class="n">_sql_handler</span><span class="p">:</span>
|
||||||
</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a>
|
</span><span id="L-286"><a href="#L-286"><span class="linenos">286</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-287"><a href="#L-287"><span class="linenos">287</span></a><span class="sd"> Args:</span>
|
</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a>
|
||||||
</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a><span class="sd"> transforms: sequence of transform functions. These will be called in order.</span>
|
</span><span id="L-288"><a href="#L-288"><span class="linenos">288</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-289"><a href="#L-289"><span class="linenos">289</span></a>
|
</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a> <span class="k">if</span> <span class="n">transforms_handler</span><span class="p">:</span>
|
||||||
</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a><span class="sd"> Returns:</span>
|
</span><span id="L-290"><a href="#L-290"><span class="linenos">290</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-291"><a href="#L-291"><span class="linenos">291</span></a><span class="sd"> Function that can be used as a generator transform.</span>
|
</span><span id="L-291"><a href="#L-291"><span class="linenos">291</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-292"><a href="#L-292"><span class="linenos">292</span></a><span class="sd"> """</span>
|
</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a> <span class="c1"># because then it'd re-enter _to_sql.</span>
|
||||||
</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a>
|
</span><span id="L-293"><a href="#L-293"><span class="linenos">293</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-294"><a href="#L-294"><span class="linenos">294</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-294"><a href="#L-294"><span class="linenos">294</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
|
||||||
</span><span id="L-295"><a href="#L-295"><span class="linenos">295</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-295"><a href="#L-295"><span class="linenos">295</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-296"><a href="#L-296"><span class="linenos">296</span></a>
|
</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a> <span class="p">)</span>
|
||||||
</span><span id="L-297"><a href="#L-297"><span class="linenos">297</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-297"><a href="#L-297"><span class="linenos">297</span></a>
|
||||||
</span><span id="L-298"><a href="#L-298"><span class="linenos">298</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-298"><a href="#L-298"><span class="linenos">298</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-299"><a href="#L-299"><span class="linenos">299</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-299"><a href="#L-299"><span class="linenos">299</span></a>
|
||||||
</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a>
|
</span><span id="L-300"><a href="#L-300"><span class="linenos">300</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-301"><a href="#L-301"><span class="linenos">301</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-301"><a href="#L-301"><span class="linenos">301</span></a>
|
||||||
</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a> <span class="k">if</span> <span class="n">_sql_handler</span><span class="p">:</span>
|
</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a> <span class="k">return</span> <span class="n">_to_sql</span>
|
||||||
</span><span id="L-303"><a href="#L-303"><span class="linenos">303</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-304"><a href="#L-304"><span class="linenos">304</span></a>
|
|
||||||
</span><span id="L-305"><a href="#L-305"><span class="linenos">305</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-306"><a href="#L-306"><span class="linenos">306</span></a> <span class="k">if</span> <span class="n">transforms_handler</span><span class="p">:</span>
|
|
||||||
</span><span id="L-307"><a href="#L-307"><span class="linenos">307</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-308"><a href="#L-308"><span class="linenos">308</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-309"><a href="#L-309"><span class="linenos">309</span></a> <span class="c1"># because then it'd re-enter _to_sql.</span>
|
|
||||||
</span><span id="L-310"><a href="#L-310"><span class="linenos">310</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-311"><a href="#L-311"><span class="linenos">311</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
|
|
||||||
</span><span id="L-312"><a href="#L-312"><span class="linenos">312</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-313"><a href="#L-313"><span class="linenos">313</span></a> <span class="p">)</span>
|
|
||||||
</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a>
|
|
||||||
</span><span id="L-315"><a href="#L-315"><span class="linenos">315</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-316"><a href="#L-316"><span class="linenos">316</span></a>
|
|
||||||
</span><span id="L-317"><a href="#L-317"><span class="linenos">317</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-318"><a href="#L-318"><span class="linenos">318</span></a>
|
|
||||||
</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a> <span class="k">return</span> <span class="n">_to_sql</span>
|
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -631,9 +611,11 @@ otherwise we won't be able to refer to it in the outer query's WHERE clause.</p>
|
||||||
</span><span id="remove_precision_parameterized_types-125"><a href="#remove_precision_parameterized_types-125"><span class="linenos">125</span></a><span class="sd"> other expressions. This transforms removes the precision from parameterized types in expressions.</span>
|
</span><span id="remove_precision_parameterized_types-125"><a href="#remove_precision_parameterized_types-125"><span class="linenos">125</span></a><span class="sd"> other expressions. This transforms removes the precision from parameterized types in expressions.</span>
|
||||||
</span><span id="remove_precision_parameterized_types-126"><a href="#remove_precision_parameterized_types-126"><span class="linenos">126</span></a><span class="sd"> """</span>
|
</span><span id="remove_precision_parameterized_types-126"><a href="#remove_precision_parameterized_types-126"><span class="linenos">126</span></a><span class="sd"> """</span>
|
||||||
</span><span id="remove_precision_parameterized_types-127"><a href="#remove_precision_parameterized_types-127"><span class="linenos">127</span></a> <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">expression</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">DataType</span><span class="p">):</span>
|
</span><span id="remove_precision_parameterized_types-127"><a href="#remove_precision_parameterized_types-127"><span class="linenos">127</span></a> <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">expression</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">DataType</span><span class="p">):</span>
|
||||||
</span><span id="remove_precision_parameterized_types-128"><a href="#remove_precision_parameterized_types-128"><span class="linenos">128</span></a> <span class="n">node</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"expressions"</span><span class="p">,</span> <span class="p">[</span><span class="n">e</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">expressions</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)])</span>
|
</span><span id="remove_precision_parameterized_types-128"><a href="#remove_precision_parameterized_types-128"><span class="linenos">128</span></a> <span class="n">node</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
|
||||||
</span><span id="remove_precision_parameterized_types-129"><a href="#remove_precision_parameterized_types-129"><span class="linenos">129</span></a>
|
</span><span id="remove_precision_parameterized_types-129"><a href="#remove_precision_parameterized_types-129"><span class="linenos">129</span></a> <span class="s2">"expressions"</span><span class="p">,</span> <span class="p">[</span><span class="n">e</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">expressions</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataTypeSize</span><span class="p">)]</span>
|
||||||
</span><span id="remove_precision_parameterized_types-130"><a href="#remove_precision_parameterized_types-130"><span class="linenos">130</span></a> <span class="k">return</span> <span class="n">expression</span>
|
</span><span id="remove_precision_parameterized_types-130"><a href="#remove_precision_parameterized_types-130"><span class="linenos">130</span></a> <span class="p">)</span>
|
||||||
|
</span><span id="remove_precision_parameterized_types-131"><a href="#remove_precision_parameterized_types-131"><span class="linenos">131</span></a>
|
||||||
|
</span><span id="remove_precision_parameterized_types-132"><a href="#remove_precision_parameterized_types-132"><span class="linenos">132</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -654,29 +636,29 @@ other expressions. This transforms removes the precision from parameterized type
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#unnest_to_explode"></a>
|
<a class="headerlink" href="#unnest_to_explode"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="unnest_to_explode-133"><a href="#unnest_to_explode-133"><span class="linenos">133</span></a><span class="k">def</span> <span class="nf">unnest_to_explode</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="unnest_to_explode-135"><a href="#unnest_to_explode-135"><span class="linenos">135</span></a><span class="k">def</span> <span class="nf">unnest_to_explode</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="unnest_to_explode-134"><a href="#unnest_to_explode-134"><span class="linenos">134</span></a><span class="w"> </span><span class="sd">"""Convert cross join unnest into lateral view explode (used in presto -> hive)."""</span>
|
</span><span id="unnest_to_explode-136"><a href="#unnest_to_explode-136"><span class="linenos">136</span></a><span class="w"> </span><span class="sd">"""Convert cross join unnest into lateral view explode (used in presto -> hive)."""</span>
|
||||||
</span><span id="unnest_to_explode-135"><a href="#unnest_to_explode-135"><span class="linenos">135</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="unnest_to_explode-137"><a href="#unnest_to_explode-137"><span class="linenos">137</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="unnest_to_explode-136"><a href="#unnest_to_explode-136"><span class="linenos">136</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="unnest_to_explode-138"><a href="#unnest_to_explode-138"><span class="linenos">138</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="unnest_to_explode-137"><a href="#unnest_to_explode-137"><span class="linenos">137</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="n">join</span><span class="o">.</span><span class="n">this</span>
|
</span><span id="unnest_to_explode-139"><a href="#unnest_to_explode-139"><span class="linenos">139</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="n">join</span><span class="o">.</span><span class="n">this</span>
|
||||||
</span><span id="unnest_to_explode-138"><a href="#unnest_to_explode-138"><span class="linenos">138</span></a>
|
</span><span id="unnest_to_explode-140"><a href="#unnest_to_explode-140"><span class="linenos">140</span></a>
|
||||||
</span><span id="unnest_to_explode-139"><a href="#unnest_to_explode-139"><span class="linenos">139</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">unnest</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">):</span>
|
</span><span id="unnest_to_explode-141"><a href="#unnest_to_explode-141"><span class="linenos">141</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">unnest</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">):</span>
|
||||||
</span><span id="unnest_to_explode-140"><a href="#unnest_to_explode-140"><span class="linenos">140</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">unnest</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">"alias"</span><span class="p">)</span>
|
</span><span id="unnest_to_explode-142"><a href="#unnest_to_explode-142"><span class="linenos">142</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">unnest</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">"alias"</span><span class="p">)</span>
|
||||||
</span><span id="unnest_to_explode-141"><a href="#unnest_to_explode-141"><span class="linenos">141</span></a> <span class="n">udtf</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Posexplode</span> <span class="k">if</span> <span class="n">unnest</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">"ordinality"</span><span class="p">)</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span>
|
</span><span id="unnest_to_explode-143"><a href="#unnest_to_explode-143"><span class="linenos">143</span></a> <span class="n">udtf</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Posexplode</span> <span class="k">if</span> <span class="n">unnest</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">"ordinality"</span><span class="p">)</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span>
|
||||||
</span><span id="unnest_to_explode-142"><a href="#unnest_to_explode-142"><span class="linenos">142</span></a>
|
|
||||||
</span><span id="unnest_to_explode-143"><a href="#unnest_to_explode-143"><span class="linenos">143</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"joins"</span><span class="p">]</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">join</span><span class="p">)</span>
|
|
||||||
</span><span id="unnest_to_explode-144"><a href="#unnest_to_explode-144"><span class="linenos">144</span></a>
|
</span><span id="unnest_to_explode-144"><a href="#unnest_to_explode-144"><span class="linenos">144</span></a>
|
||||||
</span><span id="unnest_to_explode-145"><a href="#unnest_to_explode-145"><span class="linenos">145</span></a> <span class="k">for</span> <span class="n">e</span><span class="p">,</span> <span class="n">column</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">unnest</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="n">alias</span><span class="o">.</span><span class="n">columns</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="p">[]):</span>
|
</span><span id="unnest_to_explode-145"><a href="#unnest_to_explode-145"><span class="linenos">145</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"joins"</span><span class="p">]</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">join</span><span class="p">)</span>
|
||||||
</span><span id="unnest_to_explode-146"><a href="#unnest_to_explode-146"><span class="linenos">146</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
|
</span><span id="unnest_to_explode-146"><a href="#unnest_to_explode-146"><span class="linenos">146</span></a>
|
||||||
</span><span id="unnest_to_explode-147"><a href="#unnest_to_explode-147"><span class="linenos">147</span></a> <span class="s2">"laterals"</span><span class="p">,</span>
|
</span><span id="unnest_to_explode-147"><a href="#unnest_to_explode-147"><span class="linenos">147</span></a> <span class="k">for</span> <span class="n">e</span><span class="p">,</span> <span class="n">column</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">unnest</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="n">alias</span><span class="o">.</span><span class="n">columns</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="p">[]):</span>
|
||||||
</span><span id="unnest_to_explode-148"><a href="#unnest_to_explode-148"><span class="linenos">148</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">(</span>
|
</span><span id="unnest_to_explode-148"><a href="#unnest_to_explode-148"><span class="linenos">148</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
|
||||||
</span><span id="unnest_to_explode-149"><a href="#unnest_to_explode-149"><span class="linenos">149</span></a> <span class="n">this</span><span class="o">=</span><span class="n">udtf</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">e</span><span class="p">),</span>
|
</span><span id="unnest_to_explode-149"><a href="#unnest_to_explode-149"><span class="linenos">149</span></a> <span class="s2">"laterals"</span><span class="p">,</span>
|
||||||
</span><span id="unnest_to_explode-150"><a href="#unnest_to_explode-150"><span class="linenos">150</span></a> <span class="n">view</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
</span><span id="unnest_to_explode-150"><a href="#unnest_to_explode-150"><span class="linenos">150</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">(</span>
|
||||||
</span><span id="unnest_to_explode-151"><a href="#unnest_to_explode-151"><span class="linenos">151</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">alias</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="n">column</span><span class="p">]),</span> <span class="c1"># type: ignore</span>
|
</span><span id="unnest_to_explode-151"><a href="#unnest_to_explode-151"><span class="linenos">151</span></a> <span class="n">this</span><span class="o">=</span><span class="n">udtf</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">e</span><span class="p">),</span>
|
||||||
</span><span id="unnest_to_explode-152"><a href="#unnest_to_explode-152"><span class="linenos">152</span></a> <span class="p">),</span>
|
</span><span id="unnest_to_explode-152"><a href="#unnest_to_explode-152"><span class="linenos">152</span></a> <span class="n">view</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||||
</span><span id="unnest_to_explode-153"><a href="#unnest_to_explode-153"><span class="linenos">153</span></a> <span class="p">)</span>
|
</span><span id="unnest_to_explode-153"><a href="#unnest_to_explode-153"><span class="linenos">153</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">alias</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="n">column</span><span class="p">]),</span> <span class="c1"># type: ignore</span>
|
||||||
</span><span id="unnest_to_explode-154"><a href="#unnest_to_explode-154"><span class="linenos">154</span></a>
|
</span><span id="unnest_to_explode-154"><a href="#unnest_to_explode-154"><span class="linenos">154</span></a> <span class="p">),</span>
|
||||||
</span><span id="unnest_to_explode-155"><a href="#unnest_to_explode-155"><span class="linenos">155</span></a> <span class="k">return</span> <span class="n">expression</span>
|
</span><span id="unnest_to_explode-155"><a href="#unnest_to_explode-155"><span class="linenos">155</span></a> <span class="p">)</span>
|
||||||
|
</span><span id="unnest_to_explode-156"><a href="#unnest_to_explode-156"><span class="linenos">156</span></a>
|
||||||
|
</span><span id="unnest_to_explode-157"><a href="#unnest_to_explode-157"><span class="linenos">157</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -696,65 +678,65 @@ other expressions. This transforms removes the precision from parameterized type
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#explode_to_unnest"></a>
|
<a class="headerlink" href="#explode_to_unnest"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="explode_to_unnest-158"><a href="#explode_to_unnest-158"><span class="linenos">158</span></a><span class="k">def</span> <span class="nf">explode_to_unnest</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="explode_to_unnest-160"><a href="#explode_to_unnest-160"><span class="linenos">160</span></a><span class="k">def</span> <span class="nf">explode_to_unnest</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="explode_to_unnest-159"><a href="#explode_to_unnest-159"><span class="linenos">159</span></a><span class="w"> </span><span class="sd">"""Convert explode/posexplode into unnest (used in hive -> presto)."""</span>
|
</span><span id="explode_to_unnest-161"><a href="#explode_to_unnest-161"><span class="linenos">161</span></a><span class="w"> </span><span class="sd">"""Convert explode/posexplode into unnest (used in hive -> presto)."""</span>
|
||||||
</span><span id="explode_to_unnest-160"><a href="#explode_to_unnest-160"><span class="linenos">160</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="explode_to_unnest-162"><a href="#explode_to_unnest-162"><span class="linenos">162</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="explode_to_unnest-161"><a href="#explode_to_unnest-161"><span class="linenos">161</span></a> <span class="kn">from</span> <span class="nn">sqlglot.optimizer.scope</span> <span class="kn">import</span> <span class="n">Scope</span>
|
</span><span id="explode_to_unnest-163"><a href="#explode_to_unnest-163"><span class="linenos">163</span></a> <span class="kn">from</span> <span class="nn">sqlglot.optimizer.scope</span> <span class="kn">import</span> <span class="n">Scope</span>
|
||||||
</span><span id="explode_to_unnest-162"><a href="#explode_to_unnest-162"><span class="linenos">162</span></a>
|
</span><span id="explode_to_unnest-164"><a href="#explode_to_unnest-164"><span class="linenos">164</span></a>
|
||||||
</span><span id="explode_to_unnest-163"><a href="#explode_to_unnest-163"><span class="linenos">163</span></a> <span class="n">taken_select_names</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">named_selects</span><span class="p">)</span>
|
</span><span id="explode_to_unnest-165"><a href="#explode_to_unnest-165"><span class="linenos">165</span></a> <span class="n">taken_select_names</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">named_selects</span><span class="p">)</span>
|
||||||
</span><span id="explode_to_unnest-164"><a href="#explode_to_unnest-164"><span class="linenos">164</span></a> <span class="n">taken_source_names</span> <span class="o">=</span> <span class="p">{</span><span class="n">name</span> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">Scope</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="o">.</span><span class="n">references</span><span class="p">}</span>
|
</span><span id="explode_to_unnest-166"><a href="#explode_to_unnest-166"><span class="linenos">166</span></a> <span class="n">taken_source_names</span> <span class="o">=</span> <span class="p">{</span><span class="n">name</span> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">Scope</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="o">.</span><span class="n">references</span><span class="p">}</span>
|
||||||
</span><span id="explode_to_unnest-165"><a href="#explode_to_unnest-165"><span class="linenos">165</span></a>
|
</span><span id="explode_to_unnest-167"><a href="#explode_to_unnest-167"><span class="linenos">167</span></a>
|
||||||
</span><span id="explode_to_unnest-166"><a href="#explode_to_unnest-166"><span class="linenos">166</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">selects</span><span class="p">:</span>
|
</span><span id="explode_to_unnest-168"><a href="#explode_to_unnest-168"><span class="linenos">168</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">selects</span><span class="p">:</span>
|
||||||
</span><span id="explode_to_unnest-167"><a href="#explode_to_unnest-167"><span class="linenos">167</span></a> <span class="n">to_replace</span> <span class="o">=</span> <span class="n">select</span>
|
</span><span id="explode_to_unnest-169"><a href="#explode_to_unnest-169"><span class="linenos">169</span></a> <span class="n">to_replace</span> <span class="o">=</span> <span class="n">select</span>
|
||||||
</span><span id="explode_to_unnest-168"><a href="#explode_to_unnest-168"><span class="linenos">168</span></a>
|
</span><span id="explode_to_unnest-170"><a href="#explode_to_unnest-170"><span class="linenos">170</span></a>
|
||||||
</span><span id="explode_to_unnest-169"><a href="#explode_to_unnest-169"><span class="linenos">169</span></a> <span class="n">pos_alias</span> <span class="o">=</span> <span class="s2">""</span>
|
</span><span id="explode_to_unnest-171"><a href="#explode_to_unnest-171"><span class="linenos">171</span></a> <span class="n">pos_alias</span> <span class="o">=</span> <span class="s2">""</span>
|
||||||
</span><span id="explode_to_unnest-170"><a href="#explode_to_unnest-170"><span class="linenos">170</span></a> <span class="n">explode_alias</span> <span class="o">=</span> <span class="s2">""</span>
|
</span><span id="explode_to_unnest-172"><a href="#explode_to_unnest-172"><span class="linenos">172</span></a> <span class="n">explode_alias</span> <span class="o">=</span> <span class="s2">""</span>
|
||||||
</span><span id="explode_to_unnest-171"><a href="#explode_to_unnest-171"><span class="linenos">171</span></a>
|
</span><span id="explode_to_unnest-173"><a href="#explode_to_unnest-173"><span class="linenos">173</span></a>
|
||||||
</span><span id="explode_to_unnest-172"><a href="#explode_to_unnest-172"><span class="linenos">172</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</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="explode_to_unnest-174"><a href="#explode_to_unnest-174"><span class="linenos">174</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</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="explode_to_unnest-173"><a href="#explode_to_unnest-173"><span class="linenos">173</span></a> <span class="n">explode_alias</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">alias</span>
|
</span><span id="explode_to_unnest-175"><a href="#explode_to_unnest-175"><span class="linenos">175</span></a> <span class="n">explode_alias</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">alias</span>
|
||||||
</span><span id="explode_to_unnest-174"><a href="#explode_to_unnest-174"><span class="linenos">174</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span>
|
</span><span id="explode_to_unnest-176"><a href="#explode_to_unnest-176"><span class="linenos">176</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span>
|
||||||
</span><span id="explode_to_unnest-175"><a href="#explode_to_unnest-175"><span class="linenos">175</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Aliases</span><span class="p">):</span>
|
</span><span id="explode_to_unnest-177"><a href="#explode_to_unnest-177"><span class="linenos">177</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Aliases</span><span class="p">):</span>
|
||||||
</span><span id="explode_to_unnest-176"><a href="#explode_to_unnest-176"><span class="linenos">176</span></a> <span class="n">pos_alias</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">aliases</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span>
|
</span><span id="explode_to_unnest-178"><a href="#explode_to_unnest-178"><span class="linenos">178</span></a> <span class="n">pos_alias</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">aliases</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span>
|
||||||
</span><span id="explode_to_unnest-177"><a href="#explode_to_unnest-177"><span class="linenos">177</span></a> <span class="n">explode_alias</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">aliases</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">name</span>
|
</span><span id="explode_to_unnest-179"><a href="#explode_to_unnest-179"><span class="linenos">179</span></a> <span class="n">explode_alias</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">aliases</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">name</span>
|
||||||
</span><span id="explode_to_unnest-178"><a href="#explode_to_unnest-178"><span class="linenos">178</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span>
|
</span><span id="explode_to_unnest-180"><a href="#explode_to_unnest-180"><span class="linenos">180</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span>
|
||||||
</span><span id="explode_to_unnest-179"><a href="#explode_to_unnest-179"><span class="linenos">179</span></a>
|
</span><span id="explode_to_unnest-181"><a href="#explode_to_unnest-181"><span class="linenos">181</span></a>
|
||||||
</span><span id="explode_to_unnest-180"><a href="#explode_to_unnest-180"><span class="linenos">180</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Posexplode</span><span class="p">)):</span>
|
</span><span id="explode_to_unnest-182"><a href="#explode_to_unnest-182"><span class="linenos">182</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Explode</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Posexplode</span><span class="p">)):</span>
|
||||||
</span><span id="explode_to_unnest-181"><a href="#explode_to_unnest-181"><span class="linenos">181</span></a> <span class="n">is_posexplode</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Posexplode</span><span class="p">)</span>
|
</span><span id="explode_to_unnest-183"><a href="#explode_to_unnest-183"><span class="linenos">183</span></a> <span class="n">is_posexplode</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Posexplode</span><span class="p">)</span>
|
||||||
</span><span id="explode_to_unnest-182"><a href="#explode_to_unnest-182"><span class="linenos">182</span></a>
|
</span><span id="explode_to_unnest-184"><a href="#explode_to_unnest-184"><span class="linenos">184</span></a>
|
||||||
</span><span id="explode_to_unnest-183"><a href="#explode_to_unnest-183"><span class="linenos">183</span></a> <span class="n">explode_arg</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span>
|
</span><span id="explode_to_unnest-185"><a href="#explode_to_unnest-185"><span class="linenos">185</span></a> <span class="n">explode_arg</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span>
|
||||||
</span><span id="explode_to_unnest-184"><a href="#explode_to_unnest-184"><span class="linenos">184</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">explode_arg</span><span class="o">.</span><span class="n">copy</span><span class="p">()],</span> <span class="n">ordinality</span><span class="o">=</span><span class="n">is_posexplode</span><span class="p">)</span>
|
</span><span id="explode_to_unnest-186"><a href="#explode_to_unnest-186"><span class="linenos">186</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">explode_arg</span><span class="o">.</span><span class="n">copy</span><span class="p">()],</span> <span class="n">ordinality</span><span class="o">=</span><span class="n">is_posexplode</span><span class="p">)</span>
|
||||||
</span><span id="explode_to_unnest-185"><a href="#explode_to_unnest-185"><span class="linenos">185</span></a>
|
</span><span id="explode_to_unnest-187"><a href="#explode_to_unnest-187"><span class="linenos">187</span></a>
|
||||||
</span><span id="explode_to_unnest-186"><a href="#explode_to_unnest-186"><span class="linenos">186</span></a> <span class="c1"># This ensures that we won't use [POS]EXPLODE's argument as a new selection</span>
|
</span><span id="explode_to_unnest-188"><a href="#explode_to_unnest-188"><span class="linenos">188</span></a> <span class="c1"># This ensures that we won't use [POS]EXPLODE's argument as a new selection</span>
|
||||||
</span><span id="explode_to_unnest-187"><a href="#explode_to_unnest-187"><span class="linenos">187</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">explode_arg</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="explode_to_unnest-189"><a href="#explode_to_unnest-189"><span class="linenos">189</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">explode_arg</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="explode_to_unnest-188"><a href="#explode_to_unnest-188"><span class="linenos">188</span></a> <span class="n">taken_select_names</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">explode_arg</span><span class="o">.</span><span class="n">output_name</span><span class="p">)</span>
|
</span><span id="explode_to_unnest-190"><a href="#explode_to_unnest-190"><span class="linenos">190</span></a> <span class="n">taken_select_names</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">explode_arg</span><span class="o">.</span><span class="n">output_name</span><span class="p">)</span>
|
||||||
</span><span id="explode_to_unnest-189"><a href="#explode_to_unnest-189"><span class="linenos">189</span></a>
|
</span><span id="explode_to_unnest-191"><a href="#explode_to_unnest-191"><span class="linenos">191</span></a>
|
||||||
</span><span id="explode_to_unnest-190"><a href="#explode_to_unnest-190"><span class="linenos">190</span></a> <span class="n">unnest_source_alias</span> <span class="o">=</span> <span class="n">find_new_name</span><span class="p">(</span><span class="n">taken_source_names</span><span class="p">,</span> <span class="s2">"_u"</span><span class="p">)</span>
|
</span><span id="explode_to_unnest-192"><a href="#explode_to_unnest-192"><span class="linenos">192</span></a> <span class="n">unnest_source_alias</span> <span class="o">=</span> <span class="n">find_new_name</span><span class="p">(</span><span class="n">taken_source_names</span><span class="p">,</span> <span class="s2">"_u"</span><span class="p">)</span>
|
||||||
</span><span id="explode_to_unnest-191"><a href="#explode_to_unnest-191"><span class="linenos">191</span></a> <span class="n">taken_source_names</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">unnest_source_alias</span><span class="p">)</span>
|
</span><span id="explode_to_unnest-193"><a href="#explode_to_unnest-193"><span class="linenos">193</span></a> <span class="n">taken_source_names</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">unnest_source_alias</span><span class="p">)</span>
|
||||||
</span><span id="explode_to_unnest-192"><a href="#explode_to_unnest-192"><span class="linenos">192</span></a>
|
</span><span id="explode_to_unnest-194"><a href="#explode_to_unnest-194"><span class="linenos">194</span></a>
|
||||||
</span><span id="explode_to_unnest-193"><a href="#explode_to_unnest-193"><span class="linenos">193</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">explode_alias</span><span class="p">:</span>
|
</span><span id="explode_to_unnest-195"><a href="#explode_to_unnest-195"><span class="linenos">195</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">explode_alias</span><span class="p">:</span>
|
||||||
</span><span id="explode_to_unnest-194"><a href="#explode_to_unnest-194"><span class="linenos">194</span></a> <span class="n">explode_alias</span> <span class="o">=</span> <span class="n">find_new_name</span><span class="p">(</span><span class="n">taken_select_names</span><span class="p">,</span> <span class="s2">"col"</span><span class="p">)</span>
|
</span><span id="explode_to_unnest-196"><a href="#explode_to_unnest-196"><span class="linenos">196</span></a> <span class="n">explode_alias</span> <span class="o">=</span> <span class="n">find_new_name</span><span class="p">(</span><span class="n">taken_select_names</span><span class="p">,</span> <span class="s2">"col"</span><span class="p">)</span>
|
||||||
</span><span id="explode_to_unnest-195"><a href="#explode_to_unnest-195"><span class="linenos">195</span></a> <span class="n">taken_select_names</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">explode_alias</span><span class="p">)</span>
|
</span><span id="explode_to_unnest-197"><a href="#explode_to_unnest-197"><span class="linenos">197</span></a> <span class="n">taken_select_names</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">explode_alias</span><span class="p">)</span>
|
||||||
</span><span id="explode_to_unnest-196"><a href="#explode_to_unnest-196"><span class="linenos">196</span></a>
|
</span><span id="explode_to_unnest-198"><a href="#explode_to_unnest-198"><span class="linenos">198</span></a>
|
||||||
</span><span id="explode_to_unnest-197"><a href="#explode_to_unnest-197"><span class="linenos">197</span></a> <span class="k">if</span> <span class="n">is_posexplode</span><span class="p">:</span>
|
</span><span id="explode_to_unnest-199"><a href="#explode_to_unnest-199"><span class="linenos">199</span></a> <span class="k">if</span> <span class="n">is_posexplode</span><span class="p">:</span>
|
||||||
</span><span id="explode_to_unnest-198"><a href="#explode_to_unnest-198"><span class="linenos">198</span></a> <span class="n">pos_alias</span> <span class="o">=</span> <span class="n">find_new_name</span><span class="p">(</span><span class="n">taken_select_names</span><span class="p">,</span> <span class="s2">"pos"</span><span class="p">)</span>
|
</span><span id="explode_to_unnest-200"><a href="#explode_to_unnest-200"><span class="linenos">200</span></a> <span class="n">pos_alias</span> <span class="o">=</span> <span class="n">find_new_name</span><span class="p">(</span><span class="n">taken_select_names</span><span class="p">,</span> <span class="s2">"pos"</span><span class="p">)</span>
|
||||||
</span><span id="explode_to_unnest-199"><a href="#explode_to_unnest-199"><span class="linenos">199</span></a> <span class="n">taken_select_names</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">pos_alias</span><span class="p">)</span>
|
</span><span id="explode_to_unnest-201"><a href="#explode_to_unnest-201"><span class="linenos">201</span></a> <span class="n">taken_select_names</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">pos_alias</span><span class="p">)</span>
|
||||||
</span><span id="explode_to_unnest-200"><a href="#explode_to_unnest-200"><span class="linenos">200</span></a>
|
</span><span id="explode_to_unnest-202"><a href="#explode_to_unnest-202"><span class="linenos">202</span></a>
|
||||||
</span><span id="explode_to_unnest-201"><a href="#explode_to_unnest-201"><span class="linenos">201</span></a> <span class="k">if</span> <span class="n">is_posexplode</span><span class="p">:</span>
|
</span><span id="explode_to_unnest-203"><a href="#explode_to_unnest-203"><span class="linenos">203</span></a> <span class="k">if</span> <span class="n">is_posexplode</span><span class="p">:</span>
|
||||||
</span><span id="explode_to_unnest-202"><a href="#explode_to_unnest-202"><span class="linenos">202</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">explode_alias</span><span class="p">,</span> <span class="n">pos_alias</span><span class="p">]</span>
|
</span><span id="explode_to_unnest-204"><a href="#explode_to_unnest-204"><span class="linenos">204</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">explode_alias</span><span class="p">,</span> <span class="n">pos_alias</span><span class="p">]</span>
|
||||||
</span><span id="explode_to_unnest-203"><a href="#explode_to_unnest-203"><span class="linenos">203</span></a> <span class="n">to_replace</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
|
</span><span id="explode_to_unnest-205"><a href="#explode_to_unnest-205"><span class="linenos">205</span></a> <span class="n">to_replace</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
|
||||||
</span><span id="explode_to_unnest-204"><a href="#explode_to_unnest-204"><span class="linenos">204</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">pos_alias</span><span class="p">,</span> <span class="n">explode_alias</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="explode_to_unnest-206"><a href="#explode_to_unnest-206"><span class="linenos">206</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">pos_alias</span><span class="p">,</span> <span class="n">explode_alias</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="explode_to_unnest-205"><a href="#explode_to_unnest-205"><span class="linenos">205</span></a> <span class="k">else</span><span class="p">:</span>
|
</span><span id="explode_to_unnest-207"><a href="#explode_to_unnest-207"><span class="linenos">207</span></a> <span class="k">else</span><span class="p">:</span>
|
||||||
</span><span id="explode_to_unnest-206"><a href="#explode_to_unnest-206"><span class="linenos">206</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">explode_alias</span><span class="p">]</span>
|
</span><span id="explode_to_unnest-208"><a href="#explode_to_unnest-208"><span class="linenos">208</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">explode_alias</span><span class="p">]</span>
|
||||||
</span><span id="explode_to_unnest-207"><a href="#explode_to_unnest-207"><span class="linenos">207</span></a> <span class="n">to_replace</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">column</span><span class="p">(</span><span class="n">explode_alias</span><span class="p">))</span>
|
</span><span id="explode_to_unnest-209"><a href="#explode_to_unnest-209"><span class="linenos">209</span></a> <span class="n">to_replace</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">column</span><span class="p">(</span><span class="n">explode_alias</span><span class="p">))</span>
|
||||||
</span><span id="explode_to_unnest-208"><a href="#explode_to_unnest-208"><span class="linenos">208</span></a>
|
|
||||||
</span><span id="explode_to_unnest-209"><a href="#explode_to_unnest-209"><span class="linenos">209</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">unnest</span><span class="p">,</span> <span class="n">unnest_source_alias</span><span class="p">,</span> <span class="n">table</span><span class="o">=</span><span class="n">column_names</span><span class="p">)</span>
|
|
||||||
</span><span id="explode_to_unnest-210"><a href="#explode_to_unnest-210"><span class="linenos">210</span></a>
|
</span><span id="explode_to_unnest-210"><a href="#explode_to_unnest-210"><span class="linenos">210</span></a>
|
||||||
</span><span id="explode_to_unnest-211"><a href="#explode_to_unnest-211"><span class="linenos">211</span></a> <span class="k">if</span> <span class="ow">not</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">"from"</span><span class="p">):</span>
|
</span><span id="explode_to_unnest-211"><a href="#explode_to_unnest-211"><span class="linenos">211</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">unnest</span><span class="p">,</span> <span class="n">unnest_source_alias</span><span class="p">,</span> <span class="n">table</span><span class="o">=</span><span class="n">column_names</span><span class="p">)</span>
|
||||||
</span><span id="explode_to_unnest-212"><a href="#explode_to_unnest-212"><span class="linenos">212</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">unnest</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="explode_to_unnest-212"><a href="#explode_to_unnest-212"><span class="linenos">212</span></a>
|
||||||
</span><span id="explode_to_unnest-213"><a href="#explode_to_unnest-213"><span class="linenos">213</span></a> <span class="k">else</span><span class="p">:</span>
|
</span><span id="explode_to_unnest-213"><a href="#explode_to_unnest-213"><span class="linenos">213</span></a> <span class="k">if</span> <span class="ow">not</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">"from"</span><span class="p">):</span>
|
||||||
</span><span id="explode_to_unnest-214"><a href="#explode_to_unnest-214"><span class="linenos">214</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">unnest</span><span class="p">,</span> <span class="n">join_type</span><span class="o">=</span><span class="s2">"CROSS"</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="explode_to_unnest-214"><a href="#explode_to_unnest-214"><span class="linenos">214</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">unnest</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="explode_to_unnest-215"><a href="#explode_to_unnest-215"><span class="linenos">215</span></a>
|
</span><span id="explode_to_unnest-215"><a href="#explode_to_unnest-215"><span class="linenos">215</span></a> <span class="k">else</span><span class="p">:</span>
|
||||||
</span><span id="explode_to_unnest-216"><a href="#explode_to_unnest-216"><span class="linenos">216</span></a> <span class="k">return</span> <span class="n">expression</span>
|
</span><span id="explode_to_unnest-216"><a href="#explode_to_unnest-216"><span class="linenos">216</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">unnest</span><span class="p">,</span> <span class="n">join_type</span><span class="o">=</span><span class="s2">"CROSS"</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="explode_to_unnest-217"><a href="#explode_to_unnest-217"><span class="linenos">217</span></a>
|
||||||
|
</span><span id="explode_to_unnest-218"><a href="#explode_to_unnest-218"><span class="linenos">218</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -762,42 +744,6 @@ other expressions. This transforms removes the precision from parameterized type
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section id="remove_target_from_merge">
|
|
||||||
<input id="remove_target_from_merge-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">remove_target_from_merge</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="remove_target_from_merge-view-source"><span>View Source</span></label>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<a class="headerlink" href="#remove_target_from_merge"></a>
|
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="remove_target_from_merge-219"><a href="#remove_target_from_merge-219"><span class="linenos">219</span></a><span class="k">def</span> <span class="nf">remove_target_from_merge</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_target_from_merge-220"><a href="#remove_target_from_merge-220"><span class="linenos">220</span></a><span class="w"> </span><span class="sd">"""Remove table refs from columns in when statements."""</span>
|
|
||||||
</span><span id="remove_target_from_merge-221"><a href="#remove_target_from_merge-221"><span class="linenos">221</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">Merge</span><span class="p">):</span>
|
|
||||||
</span><span id="remove_target_from_merge-222"><a href="#remove_target_from_merge-222"><span class="linenos">222</span></a> <span class="n">alias</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">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"alias"</span><span class="p">)</span>
|
|
||||||
</span><span id="remove_target_from_merge-223"><a href="#remove_target_from_merge-223"><span class="linenos">223</span></a> <span class="n">targets</span> <span class="o">=</span> <span class="p">{</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">}</span>
|
|
||||||
</span><span id="remove_target_from_merge-224"><a href="#remove_target_from_merge-224"><span class="linenos">224</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
|
|
||||||
</span><span id="remove_target_from_merge-225"><a href="#remove_target_from_merge-225"><span class="linenos">225</span></a> <span class="n">targets</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">alias</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
|
|
||||||
</span><span id="remove_target_from_merge-226"><a href="#remove_target_from_merge-226"><span class="linenos">226</span></a>
|
|
||||||
</span><span id="remove_target_from_merge-227"><a href="#remove_target_from_merge-227"><span class="linenos">227</span></a> <span class="k">for</span> <span class="n">when</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
|
|
||||||
</span><span id="remove_target_from_merge-228"><a href="#remove_target_from_merge-228"><span class="linenos">228</span></a> <span class="n">when</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
|
|
||||||
</span><span id="remove_target_from_merge-229"><a href="#remove_target_from_merge-229"><span class="linenos">229</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">column</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
|
|
||||||
</span><span id="remove_target_from_merge-230"><a href="#remove_target_from_merge-230"><span class="linenos">230</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">Column</span><span class="p">)</span> <span class="ow">and</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="s2">"table"</span><span class="p">)</span> <span class="ow">in</span> <span class="n">targets</span>
|
|
||||||
</span><span id="remove_target_from_merge-231"><a href="#remove_target_from_merge-231"><span class="linenos">231</span></a> <span class="k">else</span> <span class="n">node</span><span class="p">,</span>
|
|
||||||
</span><span id="remove_target_from_merge-232"><a href="#remove_target_from_merge-232"><span class="linenos">232</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
|
||||||
</span><span id="remove_target_from_merge-233"><a href="#remove_target_from_merge-233"><span class="linenos">233</span></a> <span class="p">)</span>
|
|
||||||
</span><span id="remove_target_from_merge-234"><a href="#remove_target_from_merge-234"><span class="linenos">234</span></a>
|
|
||||||
</span><span id="remove_target_from_merge-235"><a href="#remove_target_from_merge-235"><span class="linenos">235</span></a> <span class="k">return</span> <span class="n">expression</span>
|
|
||||||
</span></pre></div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="docstring"><p>Remove table refs from columns in when statements.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
<section id="remove_within_group_for_percentiles">
|
<section id="remove_within_group_for_percentiles">
|
||||||
<input id="remove_within_group_for_percentiles-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
<input id="remove_within_group_for_percentiles-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||||
|
@ -810,17 +756,17 @@ other expressions. This transforms removes the precision from parameterized type
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#remove_within_group_for_percentiles"></a>
|
<a class="headerlink" href="#remove_within_group_for_percentiles"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="remove_within_group_for_percentiles-238"><a href="#remove_within_group_for_percentiles-238"><span class="linenos">238</span></a><span class="k">def</span> <span class="nf">remove_within_group_for_percentiles</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_within_group_for_percentiles-221"><a href="#remove_within_group_for_percentiles-221"><span class="linenos">221</span></a><span class="k">def</span> <span class="nf">remove_within_group_for_percentiles</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_within_group_for_percentiles-239"><a href="#remove_within_group_for_percentiles-239"><span class="linenos">239</span></a> <span class="k">if</span> <span class="p">(</span>
|
</span><span id="remove_within_group_for_percentiles-222"><a href="#remove_within_group_for_percentiles-222"><span class="linenos">222</span></a> <span class="k">if</span> <span class="p">(</span>
|
||||||
</span><span id="remove_within_group_for_percentiles-240"><a href="#remove_within_group_for_percentiles-240"><span class="linenos">240</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">WithinGroup</span><span class="p">)</span>
|
</span><span id="remove_within_group_for_percentiles-223"><a href="#remove_within_group_for_percentiles-223"><span class="linenos">223</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">WithinGroup</span><span class="p">)</span>
|
||||||
</span><span id="remove_within_group_for_percentiles-241"><a href="#remove_within_group_for_percentiles-241"><span class="linenos">241</span></a> <span class="ow">and</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="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PercentileCont</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">PercentileDisc</span><span class="p">))</span>
|
</span><span id="remove_within_group_for_percentiles-224"><a href="#remove_within_group_for_percentiles-224"><span class="linenos">224</span></a> <span class="ow">and</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="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PercentileCont</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">PercentileDisc</span><span class="p">))</span>
|
||||||
</span><span id="remove_within_group_for_percentiles-242"><a href="#remove_within_group_for_percentiles-242"><span class="linenos">242</span></a> <span class="ow">and</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">Order</span><span class="p">)</span>
|
</span><span id="remove_within_group_for_percentiles-225"><a href="#remove_within_group_for_percentiles-225"><span class="linenos">225</span></a> <span class="ow">and</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">Order</span><span class="p">)</span>
|
||||||
</span><span id="remove_within_group_for_percentiles-243"><a href="#remove_within_group_for_percentiles-243"><span class="linenos">243</span></a> <span class="p">):</span>
|
</span><span id="remove_within_group_for_percentiles-226"><a href="#remove_within_group_for_percentiles-226"><span class="linenos">226</span></a> <span class="p">):</span>
|
||||||
</span><span id="remove_within_group_for_percentiles-244"><a href="#remove_within_group_for_percentiles-244"><span class="linenos">244</span></a> <span class="n">quantile</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">this</span>
|
</span><span id="remove_within_group_for_percentiles-227"><a href="#remove_within_group_for_percentiles-227"><span class="linenos">227</span></a> <span class="n">quantile</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">this</span>
|
||||||
</span><span id="remove_within_group_for_percentiles-245"><a href="#remove_within_group_for_percentiles-245"><span class="linenos">245</span></a> <span class="n">input_value</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">Ordered</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</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="o">.</span><span class="n">this</span>
|
</span><span id="remove_within_group_for_percentiles-228"><a href="#remove_within_group_for_percentiles-228"><span class="linenos">228</span></a> <span class="n">input_value</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">Ordered</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</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="o">.</span><span class="n">this</span>
|
||||||
</span><span id="remove_within_group_for_percentiles-246"><a href="#remove_within_group_for_percentiles-246"><span class="linenos">246</span></a> <span class="k">return</span> <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">ApproxQuantile</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">input_value</span><span class="p">,</span> <span class="n">quantile</span><span class="o">=</span><span class="n">quantile</span><span class="p">))</span>
|
</span><span id="remove_within_group_for_percentiles-229"><a href="#remove_within_group_for_percentiles-229"><span class="linenos">229</span></a> <span class="k">return</span> <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">ApproxQuantile</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">input_value</span><span class="p">,</span> <span class="n">quantile</span><span class="o">=</span><span class="n">quantile</span><span class="p">))</span>
|
||||||
</span><span id="remove_within_group_for_percentiles-247"><a href="#remove_within_group_for_percentiles-247"><span class="linenos">247</span></a>
|
</span><span id="remove_within_group_for_percentiles-230"><a href="#remove_within_group_for_percentiles-230"><span class="linenos">230</span></a>
|
||||||
</span><span id="remove_within_group_for_percentiles-248"><a href="#remove_within_group_for_percentiles-248"><span class="linenos">248</span></a> <span class="k">return</span> <span class="n">expression</span>
|
</span><span id="remove_within_group_for_percentiles-231"><a href="#remove_within_group_for_percentiles-231"><span class="linenos">231</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -838,22 +784,22 @@ other expressions. This transforms removes the precision from parameterized type
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#add_recursive_cte_column_names"></a>
|
<a class="headerlink" href="#add_recursive_cte_column_names"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="add_recursive_cte_column_names-251"><a href="#add_recursive_cte_column_names-251"><span class="linenos">251</span></a><span class="k">def</span> <span class="nf">add_recursive_cte_column_names</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="add_recursive_cte_column_names-234"><a href="#add_recursive_cte_column_names-234"><span class="linenos">234</span></a><span class="k">def</span> <span class="nf">add_recursive_cte_column_names</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="add_recursive_cte_column_names-252"><a href="#add_recursive_cte_column_names-252"><span class="linenos">252</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">With</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">recursive</span><span class="p">:</span>
|
</span><span id="add_recursive_cte_column_names-235"><a href="#add_recursive_cte_column_names-235"><span class="linenos">235</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">With</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">recursive</span><span class="p">:</span>
|
||||||
</span><span id="add_recursive_cte_column_names-253"><a href="#add_recursive_cte_column_names-253"><span class="linenos">253</span></a> <span class="n">next_name</span> <span class="o">=</span> <span class="n">name_sequence</span><span class="p">(</span><span class="s2">"_c_"</span><span class="p">)</span>
|
</span><span id="add_recursive_cte_column_names-236"><a href="#add_recursive_cte_column_names-236"><span class="linenos">236</span></a> <span class="n">next_name</span> <span class="o">=</span> <span class="n">name_sequence</span><span class="p">(</span><span class="s2">"_c_"</span><span class="p">)</span>
|
||||||
</span><span id="add_recursive_cte_column_names-254"><a href="#add_recursive_cte_column_names-254"><span class="linenos">254</span></a>
|
</span><span id="add_recursive_cte_column_names-237"><a href="#add_recursive_cte_column_names-237"><span class="linenos">237</span></a>
|
||||||
</span><span id="add_recursive_cte_column_names-255"><a href="#add_recursive_cte_column_names-255"><span class="linenos">255</span></a> <span class="k">for</span> <span class="n">cte</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
|
</span><span id="add_recursive_cte_column_names-238"><a href="#add_recursive_cte_column_names-238"><span class="linenos">238</span></a> <span class="k">for</span> <span class="n">cte</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
|
||||||
</span><span id="add_recursive_cte_column_names-256"><a href="#add_recursive_cte_column_names-256"><span class="linenos">256</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">cte</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"alias"</span><span class="p">]</span><span class="o">.</span><span class="n">columns</span><span class="p">:</span>
|
</span><span id="add_recursive_cte_column_names-239"><a href="#add_recursive_cte_column_names-239"><span class="linenos">239</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">cte</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"alias"</span><span class="p">]</span><span class="o">.</span><span class="n">columns</span><span class="p">:</span>
|
||||||
</span><span id="add_recursive_cte_column_names-257"><a href="#add_recursive_cte_column_names-257"><span class="linenos">257</span></a> <span class="n">query</span> <span class="o">=</span> <span class="n">cte</span><span class="o">.</span><span class="n">this</span>
|
</span><span id="add_recursive_cte_column_names-240"><a href="#add_recursive_cte_column_names-240"><span class="linenos">240</span></a> <span class="n">query</span> <span class="o">=</span> <span class="n">cte</span><span class="o">.</span><span class="n">this</span>
|
||||||
</span><span id="add_recursive_cte_column_names-258"><a href="#add_recursive_cte_column_names-258"><span class="linenos">258</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">):</span>
|
</span><span id="add_recursive_cte_column_names-241"><a href="#add_recursive_cte_column_names-241"><span class="linenos">241</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">):</span>
|
||||||
</span><span id="add_recursive_cte_column_names-259"><a href="#add_recursive_cte_column_names-259"><span class="linenos">259</span></a> <span class="n">query</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">this</span>
|
</span><span id="add_recursive_cte_column_names-242"><a href="#add_recursive_cte_column_names-242"><span class="linenos">242</span></a> <span class="n">query</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">this</span>
|
||||||
</span><span id="add_recursive_cte_column_names-260"><a href="#add_recursive_cte_column_names-260"><span class="linenos">260</span></a>
|
</span><span id="add_recursive_cte_column_names-243"><a href="#add_recursive_cte_column_names-243"><span class="linenos">243</span></a>
|
||||||
</span><span id="add_recursive_cte_column_names-261"><a href="#add_recursive_cte_column_names-261"><span class="linenos">261</span></a> <span class="n">cte</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"alias"</span><span class="p">]</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
|
</span><span id="add_recursive_cte_column_names-244"><a href="#add_recursive_cte_column_names-244"><span class="linenos">244</span></a> <span class="n">cte</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"alias"</span><span class="p">]</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
|
||||||
</span><span id="add_recursive_cte_column_names-262"><a href="#add_recursive_cte_column_names-262"><span class="linenos">262</span></a> <span class="s2">"columns"</span><span class="p">,</span>
|
</span><span id="add_recursive_cte_column_names-245"><a href="#add_recursive_cte_column_names-245"><span class="linenos">245</span></a> <span class="s2">"columns"</span><span class="p">,</span>
|
||||||
</span><span id="add_recursive_cte_column_names-263"><a href="#add_recursive_cte_column_names-263"><span class="linenos">263</span></a> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">s</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">or</span> <span class="n">next_name</span><span class="p">())</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">query</span><span class="o">.</span><span class="n">selects</span><span class="p">],</span>
|
</span><span id="add_recursive_cte_column_names-246"><a href="#add_recursive_cte_column_names-246"><span class="linenos">246</span></a> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">s</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">or</span> <span class="n">next_name</span><span class="p">())</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">query</span><span class="o">.</span><span class="n">selects</span><span class="p">],</span>
|
||||||
</span><span id="add_recursive_cte_column_names-264"><a href="#add_recursive_cte_column_names-264"><span class="linenos">264</span></a> <span class="p">)</span>
|
</span><span id="add_recursive_cte_column_names-247"><a href="#add_recursive_cte_column_names-247"><span class="linenos">247</span></a> <span class="p">)</span>
|
||||||
</span><span id="add_recursive_cte_column_names-265"><a href="#add_recursive_cte_column_names-265"><span class="linenos">265</span></a>
|
</span><span id="add_recursive_cte_column_names-248"><a href="#add_recursive_cte_column_names-248"><span class="linenos">248</span></a>
|
||||||
</span><span id="add_recursive_cte_column_names-266"><a href="#add_recursive_cte_column_names-266"><span class="linenos">266</span></a> <span class="k">return</span> <span class="n">expression</span>
|
</span><span id="add_recursive_cte_column_names-249"><a href="#add_recursive_cte_column_names-249"><span class="linenos">249</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -871,15 +817,15 @@ other expressions. This transforms removes the precision from parameterized type
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<a class="headerlink" href="#epoch_cast_to_ts"></a>
|
<a class="headerlink" href="#epoch_cast_to_ts"></a>
|
||||||
<div class="pdoc-code codehilite"><pre><span></span><span id="epoch_cast_to_ts-269"><a href="#epoch_cast_to_ts-269"><span class="linenos">269</span></a><span class="k">def</span> <span class="nf">epoch_cast_to_ts</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="epoch_cast_to_ts-252"><a href="#epoch_cast_to_ts-252"><span class="linenos">252</span></a><span class="k">def</span> <span class="nf">epoch_cast_to_ts</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="epoch_cast_to_ts-270"><a href="#epoch_cast_to_ts-270"><span class="linenos">270</span></a> <span class="k">if</span> <span class="p">(</span>
|
</span><span id="epoch_cast_to_ts-253"><a href="#epoch_cast_to_ts-253"><span class="linenos">253</span></a> <span class="k">if</span> <span class="p">(</span>
|
||||||
</span><span id="epoch_cast_to_ts-271"><a href="#epoch_cast_to_ts-271"><span class="linenos">271</span></a> <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">Cast</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">))</span>
|
</span><span id="epoch_cast_to_ts-254"><a href="#epoch_cast_to_ts-254"><span class="linenos">254</span></a> <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">Cast</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">))</span>
|
||||||
</span><span id="epoch_cast_to_ts-272"><a href="#epoch_cast_to_ts-272"><span class="linenos">272</span></a> <span class="ow">and</span> <span class="n">expression</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">"epoch"</span>
|
</span><span id="epoch_cast_to_ts-255"><a href="#epoch_cast_to_ts-255"><span class="linenos">255</span></a> <span class="ow">and</span> <span class="n">expression</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">"epoch"</span>
|
||||||
</span><span id="epoch_cast_to_ts-273"><a href="#epoch_cast_to_ts-273"><span class="linenos">273</span></a> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</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">TEMPORAL_TYPES</span>
|
</span><span id="epoch_cast_to_ts-256"><a href="#epoch_cast_to_ts-256"><span class="linenos">256</span></a> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</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">TEMPORAL_TYPES</span>
|
||||||
</span><span id="epoch_cast_to_ts-274"><a href="#epoch_cast_to_ts-274"><span class="linenos">274</span></a> <span class="p">):</span>
|
</span><span id="epoch_cast_to_ts-257"><a href="#epoch_cast_to_ts-257"><span class="linenos">257</span></a> <span class="p">):</span>
|
||||||
</span><span id="epoch_cast_to_ts-275"><a href="#epoch_cast_to_ts-275"><span class="linenos">275</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">"1970-01-01 00:00:00"</span><span class="p">))</span>
|
</span><span id="epoch_cast_to_ts-258"><a href="#epoch_cast_to_ts-258"><span class="linenos">258</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">"1970-01-01 00:00:00"</span><span class="p">))</span>
|
||||||
</span><span id="epoch_cast_to_ts-276"><a href="#epoch_cast_to_ts-276"><span class="linenos">276</span></a>
|
</span><span id="epoch_cast_to_ts-259"><a href="#epoch_cast_to_ts-259"><span class="linenos">259</span></a>
|
||||||
</span><span id="epoch_cast_to_ts-277"><a href="#epoch_cast_to_ts-277"><span class="linenos">277</span></a> <span class="k">return</span> <span class="n">expression</span>
|
</span><span id="epoch_cast_to_ts-260"><a href="#epoch_cast_to_ts-260"><span class="linenos">260</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -897,47 +843,47 @@ 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-280"><a href="#preprocess-280"><span class="linenos">280</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-263"><a href="#preprocess-263"><span class="linenos">263</span></a><span class="k">def</span> <span class="nf">preprocess</span><span class="p">(</span>
|
||||||
</span><span id="preprocess-281"><a href="#preprocess-281"><span class="linenos">281</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-264"><a href="#preprocess-264"><span class="linenos">264</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-282"><a href="#preprocess-282"><span class="linenos">282</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-265"><a href="#preprocess-265"><span class="linenos">265</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-283"><a href="#preprocess-283"><span class="linenos">283</span></a><span class="w"> </span><span class="sd">"""</span>
|
</span><span id="preprocess-266"><a href="#preprocess-266"><span class="linenos">266</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||||
</span><span id="preprocess-284"><a href="#preprocess-284"><span class="linenos">284</span></a><span class="sd"> Creates a new transform by chaining a sequence of transformations and converts the resulting</span>
|
</span><span id="preprocess-267"><a href="#preprocess-267"><span class="linenos">267</span></a><span class="sd"> Creates a new transform by chaining a sequence of transformations and converts the resulting</span>
|
||||||
</span><span id="preprocess-285"><a href="#preprocess-285"><span class="linenos">285</span></a><span class="sd"> expression to SQL, using either the "_sql" method corresponding to the resulting expression,</span>
|
</span><span id="preprocess-268"><a href="#preprocess-268"><span class="linenos">268</span></a><span class="sd"> expression to SQL, using either the "_sql" method corresponding to the resulting expression,</span>
|
||||||
</span><span id="preprocess-286"><a href="#preprocess-286"><span class="linenos">286</span></a><span class="sd"> or the appropriate `Generator.TRANSFORMS` function (when applicable -- see below).</span>
|
</span><span id="preprocess-269"><a href="#preprocess-269"><span class="linenos">269</span></a><span class="sd"> or the appropriate `Generator.TRANSFORMS` function (when applicable -- see below).</span>
|
||||||
</span><span id="preprocess-287"><a href="#preprocess-287"><span class="linenos">287</span></a>
|
</span><span id="preprocess-270"><a href="#preprocess-270"><span class="linenos">270</span></a>
|
||||||
</span><span id="preprocess-288"><a href="#preprocess-288"><span class="linenos">288</span></a><span class="sd"> Args:</span>
|
</span><span id="preprocess-271"><a href="#preprocess-271"><span class="linenos">271</span></a><span class="sd"> Args:</span>
|
||||||
</span><span id="preprocess-289"><a href="#preprocess-289"><span class="linenos">289</span></a><span class="sd"> transforms: sequence of transform functions. These will be called in order.</span>
|
</span><span id="preprocess-272"><a href="#preprocess-272"><span class="linenos">272</span></a><span class="sd"> transforms: sequence of transform functions. These will be called in order.</span>
|
||||||
</span><span id="preprocess-290"><a href="#preprocess-290"><span class="linenos">290</span></a>
|
</span><span id="preprocess-273"><a href="#preprocess-273"><span class="linenos">273</span></a>
|
||||||
</span><span id="preprocess-291"><a href="#preprocess-291"><span class="linenos">291</span></a><span class="sd"> Returns:</span>
|
</span><span id="preprocess-274"><a href="#preprocess-274"><span class="linenos">274</span></a><span class="sd"> Returns:</span>
|
||||||
</span><span id="preprocess-292"><a href="#preprocess-292"><span class="linenos">292</span></a><span class="sd"> Function that can be used as a generator transform.</span>
|
</span><span id="preprocess-275"><a href="#preprocess-275"><span class="linenos">275</span></a><span class="sd"> Function that can be used as a generator transform.</span>
|
||||||
</span><span id="preprocess-293"><a href="#preprocess-293"><span class="linenos">293</span></a><span class="sd"> """</span>
|
</span><span id="preprocess-276"><a href="#preprocess-276"><span class="linenos">276</span></a><span class="sd"> """</span>
|
||||||
</span><span id="preprocess-294"><a href="#preprocess-294"><span class="linenos">294</span></a>
|
</span><span id="preprocess-277"><a href="#preprocess-277"><span class="linenos">277</span></a>
|
||||||
</span><span id="preprocess-295"><a href="#preprocess-295"><span class="linenos">295</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-278"><a href="#preprocess-278"><span class="linenos">278</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-296"><a href="#preprocess-296"><span class="linenos">296</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-279"><a href="#preprocess-279"><span class="linenos">279</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-297"><a href="#preprocess-297"><span class="linenos">297</span></a>
|
</span><span id="preprocess-280"><a href="#preprocess-280"><span class="linenos">280</span></a>
|
||||||
</span><span id="preprocess-298"><a href="#preprocess-298"><span class="linenos">298</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-281"><a href="#preprocess-281"><span class="linenos">281</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-299"><a href="#preprocess-299"><span class="linenos">299</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-282"><a href="#preprocess-282"><span class="linenos">282</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-300"><a href="#preprocess-300"><span class="linenos">300</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-283"><a href="#preprocess-283"><span class="linenos">283</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-301"><a href="#preprocess-301"><span class="linenos">301</span></a>
|
</span><span id="preprocess-284"><a href="#preprocess-284"><span class="linenos">284</span></a>
|
||||||
</span><span id="preprocess-302"><a href="#preprocess-302"><span class="linenos">302</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-285"><a href="#preprocess-285"><span class="linenos">285</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-303"><a href="#preprocess-303"><span class="linenos">303</span></a> <span class="k">if</span> <span class="n">_sql_handler</span><span class="p">:</span>
|
</span><span id="preprocess-286"><a href="#preprocess-286"><span class="linenos">286</span></a> <span class="k">if</span> <span class="n">_sql_handler</span><span class="p">:</span>
|
||||||
</span><span id="preprocess-304"><a href="#preprocess-304"><span class="linenos">304</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-287"><a href="#preprocess-287"><span class="linenos">287</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-305"><a href="#preprocess-305"><span class="linenos">305</span></a>
|
</span><span id="preprocess-288"><a href="#preprocess-288"><span class="linenos">288</span></a>
|
||||||
</span><span id="preprocess-306"><a href="#preprocess-306"><span class="linenos">306</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-289"><a href="#preprocess-289"><span class="linenos">289</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-307"><a href="#preprocess-307"><span class="linenos">307</span></a> <span class="k">if</span> <span class="n">transforms_handler</span><span class="p">:</span>
|
</span><span id="preprocess-290"><a href="#preprocess-290"><span class="linenos">290</span></a> <span class="k">if</span> <span class="n">transforms_handler</span><span class="p">:</span>
|
||||||
</span><span id="preprocess-308"><a href="#preprocess-308"><span class="linenos">308</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-291"><a href="#preprocess-291"><span class="linenos">291</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-309"><a href="#preprocess-309"><span class="linenos">309</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-292"><a href="#preprocess-292"><span class="linenos">292</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-310"><a href="#preprocess-310"><span class="linenos">310</span></a> <span class="c1"># because then it'd re-enter _to_sql.</span>
|
</span><span id="preprocess-293"><a href="#preprocess-293"><span class="linenos">293</span></a> <span class="c1"># because then it'd re-enter _to_sql.</span>
|
||||||
</span><span id="preprocess-311"><a href="#preprocess-311"><span class="linenos">311</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-294"><a href="#preprocess-294"><span class="linenos">294</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-312"><a href="#preprocess-312"><span class="linenos">312</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
|
</span><span id="preprocess-295"><a href="#preprocess-295"><span class="linenos">295</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
|
||||||
</span><span id="preprocess-313"><a href="#preprocess-313"><span class="linenos">313</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-296"><a href="#preprocess-296"><span class="linenos">296</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-314"><a href="#preprocess-314"><span class="linenos">314</span></a> <span class="p">)</span>
|
</span><span id="preprocess-297"><a href="#preprocess-297"><span class="linenos">297</span></a> <span class="p">)</span>
|
||||||
</span><span id="preprocess-315"><a href="#preprocess-315"><span class="linenos">315</span></a>
|
</span><span id="preprocess-298"><a href="#preprocess-298"><span class="linenos">298</span></a>
|
||||||
</span><span id="preprocess-316"><a href="#preprocess-316"><span class="linenos">316</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-299"><a href="#preprocess-299"><span class="linenos">299</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-317"><a href="#preprocess-317"><span class="linenos">317</span></a>
|
</span><span id="preprocess-300"><a href="#preprocess-300"><span class="linenos">300</span></a>
|
||||||
</span><span id="preprocess-318"><a href="#preprocess-318"><span class="linenos">318</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-301"><a href="#preprocess-301"><span class="linenos">301</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-319"><a href="#preprocess-319"><span class="linenos">319</span></a>
|
</span><span id="preprocess-302"><a href="#preprocess-302"><span class="linenos">302</span></a>
|
||||||
</span><span id="preprocess-320"><a href="#preprocess-320"><span class="linenos">320</span></a> <span class="k">return</span> <span class="n">_to_sql</span>
|
</span><span id="preprocess-303"><a href="#preprocess-303"><span class="linenos">303</span></a> <span class="k">return</span> <span class="n">_to_sql</span>
|
||||||
</span></pre></div>
|
</span></pre></div>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -94,7 +94,11 @@ def parse_one(sql: str, **opts) -> Expression:
|
||||||
|
|
||||||
|
|
||||||
def parse_one(
|
def parse_one(
|
||||||
sql: str, read: DialectType = None, into: t.Optional[exp.IntoType] = None, **opts
|
sql: str,
|
||||||
|
read: DialectType = None,
|
||||||
|
dialect: DialectType = None,
|
||||||
|
into: t.Optional[exp.IntoType] = None,
|
||||||
|
**opts,
|
||||||
) -> Expression:
|
) -> Expression:
|
||||||
"""
|
"""
|
||||||
Parses the given SQL string and returns a syntax tree for the first parsed SQL statement.
|
Parses the given SQL string and returns a syntax tree for the first parsed SQL statement.
|
||||||
|
@ -102,6 +106,7 @@ def parse_one(
|
||||||
Args:
|
Args:
|
||||||
sql: the SQL code string to parse.
|
sql: the SQL code string to parse.
|
||||||
read: the SQL dialect to apply during parsing (eg. "spark", "hive", "presto", "mysql").
|
read: the SQL dialect to apply during parsing (eg. "spark", "hive", "presto", "mysql").
|
||||||
|
dialect: the SQL dialect (alias for read)
|
||||||
into: the SQLGlot Expression to parse into.
|
into: the SQLGlot Expression to parse into.
|
||||||
**opts: other `sqlglot.parser.Parser` options.
|
**opts: other `sqlglot.parser.Parser` options.
|
||||||
|
|
||||||
|
@ -109,7 +114,7 @@ def parse_one(
|
||||||
The syntax tree for the first parsed statement.
|
The syntax tree for the first parsed statement.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
dialect = Dialect.get_or_raise(read)()
|
dialect = Dialect.get_or_raise(read or dialect)()
|
||||||
|
|
||||||
if into:
|
if into:
|
||||||
result = dialect.parse_into(into, sql, **opts)
|
result = dialect.parse_into(into, sql, **opts)
|
||||||
|
|
|
@ -163,6 +163,17 @@ def _pushdown_cte_column_names(expression: exp.Expression) -> exp.Expression:
|
||||||
return expression
|
return expression
|
||||||
|
|
||||||
|
|
||||||
|
def _parse_timestamp(args: t.List) -> exp.StrToTime:
|
||||||
|
this = format_time_lambda(exp.StrToTime, "bigquery")([seq_get(args, 1), seq_get(args, 0)])
|
||||||
|
this.set("zone", seq_get(args, 2))
|
||||||
|
return this
|
||||||
|
|
||||||
|
|
||||||
|
def _parse_date(args: t.List) -> exp.Date | exp.DateFromParts:
|
||||||
|
expr_type = exp.DateFromParts if len(args) == 3 else exp.Date
|
||||||
|
return expr_type.from_arg_list(args)
|
||||||
|
|
||||||
|
|
||||||
class BigQuery(Dialect):
|
class BigQuery(Dialect):
|
||||||
UNNEST_COLUMN_ONLY = True
|
UNNEST_COLUMN_ONLY = True
|
||||||
|
|
||||||
|
@ -203,8 +214,10 @@ class BigQuery(Dialect):
|
||||||
while isinstance(parent, exp.Dot):
|
while isinstance(parent, exp.Dot):
|
||||||
parent = parent.parent
|
parent = parent.parent
|
||||||
|
|
||||||
if not (isinstance(parent, exp.Table) and parent.db) and not expression.meta.get(
|
if (
|
||||||
"is_table"
|
not isinstance(parent, exp.UserDefinedFunction)
|
||||||
|
and not (isinstance(parent, exp.Table) and parent.db)
|
||||||
|
and not expression.meta.get("is_table")
|
||||||
):
|
):
|
||||||
expression.set("this", expression.this.lower())
|
expression.set("this", expression.this.lower())
|
||||||
|
|
||||||
|
@ -251,6 +264,7 @@ class BigQuery(Dialect):
|
||||||
|
|
||||||
FUNCTIONS = {
|
FUNCTIONS = {
|
||||||
**parser.Parser.FUNCTIONS,
|
**parser.Parser.FUNCTIONS,
|
||||||
|
"DATE": _parse_date,
|
||||||
"DATE_ADD": parse_date_delta_with_interval(exp.DateAdd),
|
"DATE_ADD": parse_date_delta_with_interval(exp.DateAdd),
|
||||||
"DATE_SUB": parse_date_delta_with_interval(exp.DateSub),
|
"DATE_SUB": parse_date_delta_with_interval(exp.DateSub),
|
||||||
"DATE_TRUNC": lambda args: exp.DateTrunc(
|
"DATE_TRUNC": lambda args: exp.DateTrunc(
|
||||||
|
@ -264,9 +278,7 @@ class BigQuery(Dialect):
|
||||||
"PARSE_DATE": lambda args: format_time_lambda(exp.StrToDate, "bigquery")(
|
"PARSE_DATE": lambda args: format_time_lambda(exp.StrToDate, "bigquery")(
|
||||||
[seq_get(args, 1), seq_get(args, 0)]
|
[seq_get(args, 1), seq_get(args, 0)]
|
||||||
),
|
),
|
||||||
"PARSE_TIMESTAMP": lambda args: format_time_lambda(exp.StrToTime, "bigquery")(
|
"PARSE_TIMESTAMP": _parse_timestamp,
|
||||||
[seq_get(args, 1), seq_get(args, 0)]
|
|
||||||
),
|
|
||||||
"REGEXP_CONTAINS": exp.RegexpLike.from_arg_list,
|
"REGEXP_CONTAINS": exp.RegexpLike.from_arg_list,
|
||||||
"REGEXP_EXTRACT": lambda args: exp.RegexpExtract(
|
"REGEXP_EXTRACT": lambda args: exp.RegexpExtract(
|
||||||
this=seq_get(args, 0),
|
this=seq_get(args, 0),
|
||||||
|
@ -356,9 +368,11 @@ class BigQuery(Dialect):
|
||||||
EXPLICIT_UNION = True
|
EXPLICIT_UNION = True
|
||||||
INTERVAL_ALLOWS_PLURAL_FORM = False
|
INTERVAL_ALLOWS_PLURAL_FORM = False
|
||||||
JOIN_HINTS = False
|
JOIN_HINTS = False
|
||||||
|
QUERY_HINTS = False
|
||||||
TABLE_HINTS = False
|
TABLE_HINTS = False
|
||||||
LIMIT_FETCH = "LIMIT"
|
LIMIT_FETCH = "LIMIT"
|
||||||
RENAME_TABLE_WITH_DB = False
|
RENAME_TABLE_WITH_DB = False
|
||||||
|
ESCAPE_LINE_BREAK = True
|
||||||
|
|
||||||
TRANSFORMS = {
|
TRANSFORMS = {
|
||||||
**generator.Generator.TRANSFORMS,
|
**generator.Generator.TRANSFORMS,
|
||||||
|
@ -367,6 +381,7 @@ class BigQuery(Dialect):
|
||||||
exp.Cast: transforms.preprocess([transforms.remove_precision_parameterized_types]),
|
exp.Cast: transforms.preprocess([transforms.remove_precision_parameterized_types]),
|
||||||
exp.CTE: transforms.preprocess([_pushdown_cte_column_names]),
|
exp.CTE: transforms.preprocess([_pushdown_cte_column_names]),
|
||||||
exp.DateAdd: _date_add_sql("DATE", "ADD"),
|
exp.DateAdd: _date_add_sql("DATE", "ADD"),
|
||||||
|
exp.DateFromParts: rename_func("DATE"),
|
||||||
exp.DateSub: _date_add_sql("DATE", "SUB"),
|
exp.DateSub: _date_add_sql("DATE", "SUB"),
|
||||||
exp.DatetimeAdd: _date_add_sql("DATETIME", "ADD"),
|
exp.DatetimeAdd: _date_add_sql("DATETIME", "ADD"),
|
||||||
exp.DatetimeSub: _date_add_sql("DATETIME", "SUB"),
|
exp.DatetimeSub: _date_add_sql("DATETIME", "SUB"),
|
||||||
|
@ -397,7 +412,9 @@ class BigQuery(Dialect):
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
exp.StrToDate: lambda self, e: f"PARSE_DATE({self.format_time(e)}, {self.sql(e, 'this')})",
|
exp.StrToDate: lambda self, e: f"PARSE_DATE({self.format_time(e)}, {self.sql(e, 'this')})",
|
||||||
exp.StrToTime: lambda self, e: f"PARSE_TIMESTAMP({self.format_time(e)}, {self.sql(e, 'this')})",
|
exp.StrToTime: lambda self, e: self.func(
|
||||||
|
"PARSE_TIMESTAMP", self.format_time(e), e.this, e.args.get("zone")
|
||||||
|
),
|
||||||
exp.TimeAdd: _date_add_sql("TIME", "ADD"),
|
exp.TimeAdd: _date_add_sql("TIME", "ADD"),
|
||||||
exp.TimeSub: _date_add_sql("TIME", "SUB"),
|
exp.TimeSub: _date_add_sql("TIME", "SUB"),
|
||||||
exp.TimestampAdd: _date_add_sql("TIMESTAMP", "ADD"),
|
exp.TimestampAdd: _date_add_sql("TIMESTAMP", "ADD"),
|
||||||
|
@ -548,10 +565,15 @@ class BigQuery(Dialect):
|
||||||
}
|
}
|
||||||
|
|
||||||
def attimezone_sql(self, expression: exp.AtTimeZone) -> str:
|
def attimezone_sql(self, expression: exp.AtTimeZone) -> str:
|
||||||
if not isinstance(expression.parent, exp.Cast):
|
parent = expression.parent
|
||||||
|
|
||||||
|
# BigQuery allows CAST(.. AS {STRING|TIMESTAMP} [FORMAT <fmt> [AT TIME ZONE <tz>]]).
|
||||||
|
# Only the TIMESTAMP one should use the below conversion, when AT TIME ZONE is included.
|
||||||
|
if not isinstance(parent, exp.Cast) or not parent.to.is_type("text"):
|
||||||
return self.func(
|
return self.func(
|
||||||
"TIMESTAMP", self.func("DATETIME", expression.this, expression.args.get("zone"))
|
"TIMESTAMP", self.func("DATETIME", expression.this, expression.args.get("zone"))
|
||||||
)
|
)
|
||||||
|
|
||||||
return super().attimezone_sql(expression)
|
return super().attimezone_sql(expression)
|
||||||
|
|
||||||
def trycast_sql(self, expression: exp.TryCast) -> str:
|
def trycast_sql(self, expression: exp.TryCast) -> str:
|
||||||
|
|
|
@ -109,10 +109,11 @@ class ClickHouse(Dialect):
|
||||||
|
|
||||||
QUERY_MODIFIER_PARSERS = {
|
QUERY_MODIFIER_PARSERS = {
|
||||||
**parser.Parser.QUERY_MODIFIER_PARSERS,
|
**parser.Parser.QUERY_MODIFIER_PARSERS,
|
||||||
"settings": lambda self: self._parse_csv(self._parse_conjunction)
|
TokenType.SETTINGS: lambda self: (
|
||||||
if self._match(TokenType.SETTINGS)
|
"settings",
|
||||||
else None,
|
self._advance() or self._parse_csv(self._parse_conjunction),
|
||||||
"format": lambda self: self._parse_id_var() if self._match(TokenType.FORMAT) else None,
|
),
|
||||||
|
TokenType.FORMAT: lambda self: ("format", self._advance() or self._parse_id_var()),
|
||||||
}
|
}
|
||||||
|
|
||||||
def _parse_conjunction(self) -> t.Optional[exp.Expression]:
|
def _parse_conjunction(self) -> t.Optional[exp.Expression]:
|
||||||
|
@ -155,9 +156,12 @@ class ClickHouse(Dialect):
|
||||||
return this
|
return this
|
||||||
|
|
||||||
def _parse_table(
|
def _parse_table(
|
||||||
self, schema: bool = False, alias_tokens: t.Optional[t.Collection[TokenType]] = None
|
self,
|
||||||
|
schema: bool = False,
|
||||||
|
joins: bool = False,
|
||||||
|
alias_tokens: t.Optional[t.Collection[TokenType]] = None,
|
||||||
) -> t.Optional[exp.Expression]:
|
) -> t.Optional[exp.Expression]:
|
||||||
this = super()._parse_table(schema=schema, alias_tokens=alias_tokens)
|
this = super()._parse_table(schema=schema, joins=joins, alias_tokens=alias_tokens)
|
||||||
|
|
||||||
if self._match(TokenType.FINAL):
|
if self._match(TokenType.FINAL):
|
||||||
this = self.expression(exp.Final, this=this)
|
this = self.expression(exp.Final, this=this)
|
||||||
|
@ -273,6 +277,7 @@ class ClickHouse(Dialect):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
class Generator(generator.Generator):
|
class Generator(generator.Generator):
|
||||||
|
QUERY_HINTS = False
|
||||||
STRUCT_DELIMITER = ("(", ")")
|
STRUCT_DELIMITER = ("(", ")")
|
||||||
|
|
||||||
TYPE_MAPPING = {
|
TYPE_MAPPING = {
|
||||||
|
|
|
@ -98,7 +98,6 @@ class _Dialect(type):
|
||||||
klass.BIT_START, klass.BIT_END = get_start_end(TokenType.BIT_STRING)
|
klass.BIT_START, klass.BIT_END = get_start_end(TokenType.BIT_STRING)
|
||||||
klass.HEX_START, klass.HEX_END = get_start_end(TokenType.HEX_STRING)
|
klass.HEX_START, klass.HEX_END = get_start_end(TokenType.HEX_STRING)
|
||||||
klass.BYTE_START, klass.BYTE_END = get_start_end(TokenType.BYTE_STRING)
|
klass.BYTE_START, klass.BYTE_END = get_start_end(TokenType.BYTE_STRING)
|
||||||
klass.RAW_START, klass.RAW_END = get_start_end(TokenType.RAW_STRING)
|
|
||||||
|
|
||||||
dialect_properties = {
|
dialect_properties = {
|
||||||
**{
|
**{
|
||||||
|
|
|
@ -96,6 +96,7 @@ class Drill(Dialect):
|
||||||
class Generator(generator.Generator):
|
class Generator(generator.Generator):
|
||||||
JOIN_HINTS = False
|
JOIN_HINTS = False
|
||||||
TABLE_HINTS = False
|
TABLE_HINTS = False
|
||||||
|
QUERY_HINTS = False
|
||||||
|
|
||||||
TYPE_MAPPING = {
|
TYPE_MAPPING = {
|
||||||
**generator.Generator.TYPE_MAPPING,
|
**generator.Generator.TYPE_MAPPING,
|
||||||
|
|
|
@ -8,6 +8,7 @@ from sqlglot.dialects.dialect import (
|
||||||
approx_count_distinct_sql,
|
approx_count_distinct_sql,
|
||||||
arrow_json_extract_scalar_sql,
|
arrow_json_extract_scalar_sql,
|
||||||
arrow_json_extract_sql,
|
arrow_json_extract_sql,
|
||||||
|
date_trunc_to_time,
|
||||||
datestrtodate_sql,
|
datestrtodate_sql,
|
||||||
format_time_lambda,
|
format_time_lambda,
|
||||||
no_comment_column_constraint_sql,
|
no_comment_column_constraint_sql,
|
||||||
|
@ -38,6 +39,21 @@ def _date_delta_sql(self: generator.Generator, expression: exp.DateAdd | exp.Dat
|
||||||
return f"{this} {op} {self.sql(exp.Interval(this=expression.expression, unit=unit))}"
|
return f"{this} {op} {self.sql(exp.Interval(this=expression.expression, unit=unit))}"
|
||||||
|
|
||||||
|
|
||||||
|
# BigQuery -> DuckDB conversion for the DATE function
|
||||||
|
def _date_sql(self: generator.Generator, expression: exp.Date) -> str:
|
||||||
|
result = f"CAST({self.sql(expression, 'this')} AS DATE)"
|
||||||
|
zone = self.sql(expression, "zone")
|
||||||
|
|
||||||
|
if zone:
|
||||||
|
date_str = self.func("STRFTIME", result, "'%d/%m/%Y'")
|
||||||
|
date_str = f"{date_str} || ' ' || {zone}"
|
||||||
|
|
||||||
|
# This will create a TIMESTAMP with time zone information
|
||||||
|
result = self.func("STRPTIME", date_str, "'%d/%m/%Y %Z'")
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
def _array_sort_sql(self: generator.Generator, expression: exp.ArraySort) -> str:
|
def _array_sort_sql(self: generator.Generator, expression: exp.ArraySort) -> str:
|
||||||
if expression.expression:
|
if expression.expression:
|
||||||
self.unsupported("DUCKDB ARRAY_SORT does not support a comparator")
|
self.unsupported("DUCKDB ARRAY_SORT does not support a comparator")
|
||||||
|
@ -131,6 +147,8 @@ class DuckDB(Dialect):
|
||||||
"ARRAY_REVERSE_SORT": _sort_array_reverse,
|
"ARRAY_REVERSE_SORT": _sort_array_reverse,
|
||||||
"DATEDIFF": _parse_date_diff,
|
"DATEDIFF": _parse_date_diff,
|
||||||
"DATE_DIFF": _parse_date_diff,
|
"DATE_DIFF": _parse_date_diff,
|
||||||
|
"DATE_TRUNC": date_trunc_to_time,
|
||||||
|
"DATETRUNC": date_trunc_to_time,
|
||||||
"EPOCH": exp.TimeToUnix.from_arg_list,
|
"EPOCH": exp.TimeToUnix.from_arg_list,
|
||||||
"EPOCH_MS": lambda args: exp.UnixToTime(
|
"EPOCH_MS": lambda args: exp.UnixToTime(
|
||||||
this=exp.Div(this=seq_get(args, 0), expression=exp.Literal.number(1000))
|
this=exp.Div(this=seq_get(args, 0), expression=exp.Literal.number(1000))
|
||||||
|
@ -167,6 +185,7 @@ class DuckDB(Dialect):
|
||||||
class Generator(generator.Generator):
|
class Generator(generator.Generator):
|
||||||
JOIN_HINTS = False
|
JOIN_HINTS = False
|
||||||
TABLE_HINTS = False
|
TABLE_HINTS = False
|
||||||
|
QUERY_HINTS = False
|
||||||
LIMIT_FETCH = "LIMIT"
|
LIMIT_FETCH = "LIMIT"
|
||||||
STRUCT_DELIMITER = ("(", ")")
|
STRUCT_DELIMITER = ("(", ")")
|
||||||
RENAME_TABLE_WITH_DB = False
|
RENAME_TABLE_WITH_DB = False
|
||||||
|
@ -188,7 +207,9 @@ class DuckDB(Dialect):
|
||||||
exp.DayOfWeek: rename_func("DAYOFWEEK"),
|
exp.DayOfWeek: rename_func("DAYOFWEEK"),
|
||||||
exp.DayOfYear: rename_func("DAYOFYEAR"),
|
exp.DayOfYear: rename_func("DAYOFYEAR"),
|
||||||
exp.DataType: _datatype_sql,
|
exp.DataType: _datatype_sql,
|
||||||
|
exp.Date: _date_sql,
|
||||||
exp.DateAdd: _date_delta_sql,
|
exp.DateAdd: _date_delta_sql,
|
||||||
|
exp.DateFromParts: rename_func("MAKE_DATE"),
|
||||||
exp.DateSub: _date_delta_sql,
|
exp.DateSub: _date_delta_sql,
|
||||||
exp.DateDiff: lambda self, e: self.func(
|
exp.DateDiff: lambda self, e: self.func(
|
||||||
"DATE_DIFF", f"'{e.args.get('unit', 'day')}'", e.expression, e.this
|
"DATE_DIFF", f"'{e.args.get('unit', 'day')}'", e.expression, e.this
|
||||||
|
|
|
@ -273,13 +273,6 @@ class Hive(Dialect):
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
QUERY_MODIFIER_PARSERS = {
|
|
||||||
**parser.Parser.QUERY_MODIFIER_PARSERS,
|
|
||||||
"cluster": lambda self: self._parse_sort(exp.Cluster, TokenType.CLUSTER_BY),
|
|
||||||
"distribute": lambda self: self._parse_sort(exp.Distribute, TokenType.DISTRIBUTE_BY),
|
|
||||||
"sort": lambda self: self._parse_sort(exp.Sort, TokenType.SORT_BY),
|
|
||||||
}
|
|
||||||
|
|
||||||
def _parse_types(
|
def _parse_types(
|
||||||
self, check_func: bool = False, schema: bool = False
|
self, check_func: bool = False, schema: bool = False
|
||||||
) -> t.Optional[exp.Expression]:
|
) -> t.Optional[exp.Expression]:
|
||||||
|
@ -319,6 +312,7 @@ class Hive(Dialect):
|
||||||
TABLESAMPLE_SIZE_IS_PERCENT = True
|
TABLESAMPLE_SIZE_IS_PERCENT = True
|
||||||
JOIN_HINTS = False
|
JOIN_HINTS = False
|
||||||
TABLE_HINTS = False
|
TABLE_HINTS = False
|
||||||
|
QUERY_HINTS = False
|
||||||
INDEX_ON = "ON TABLE"
|
INDEX_ON = "ON TABLE"
|
||||||
|
|
||||||
TYPE_MAPPING = {
|
TYPE_MAPPING = {
|
||||||
|
@ -429,10 +423,3 @@ class Hive(Dialect):
|
||||||
expression = exp.DataType.build(expression.this)
|
expression = exp.DataType.build(expression.this)
|
||||||
|
|
||||||
return super().datatype_sql(expression)
|
return super().datatype_sql(expression)
|
||||||
|
|
||||||
def after_having_modifiers(self, expression: exp.Expression) -> t.List[str]:
|
|
||||||
return super().after_having_modifiers(expression) + [
|
|
||||||
self.sql(expression, "distribute"),
|
|
||||||
self.sql(expression, "sort"),
|
|
||||||
self.sql(expression, "cluster"),
|
|
||||||
]
|
|
||||||
|
|
|
@ -123,14 +123,15 @@ class MySQL(Dialect):
|
||||||
KEYWORDS = {
|
KEYWORDS = {
|
||||||
**tokens.Tokenizer.KEYWORDS,
|
**tokens.Tokenizer.KEYWORDS,
|
||||||
"CHARSET": TokenType.CHARACTER_SET,
|
"CHARSET": TokenType.CHARACTER_SET,
|
||||||
|
"ENUM": TokenType.ENUM,
|
||||||
"FORCE": TokenType.FORCE,
|
"FORCE": TokenType.FORCE,
|
||||||
"IGNORE": TokenType.IGNORE,
|
"IGNORE": TokenType.IGNORE,
|
||||||
"LONGBLOB": TokenType.LONGBLOB,
|
"LONGBLOB": TokenType.LONGBLOB,
|
||||||
"LONGTEXT": TokenType.LONGTEXT,
|
"LONGTEXT": TokenType.LONGTEXT,
|
||||||
"MEDIUMBLOB": TokenType.MEDIUMBLOB,
|
"MEDIUMBLOB": TokenType.MEDIUMBLOB,
|
||||||
"MEDIUMTEXT": TokenType.MEDIUMTEXT,
|
"MEDIUMTEXT": TokenType.MEDIUMTEXT,
|
||||||
|
"MEMBER OF": TokenType.MEMBER_OF,
|
||||||
"SEPARATOR": TokenType.SEPARATOR,
|
"SEPARATOR": TokenType.SEPARATOR,
|
||||||
"ENUM": TokenType.ENUM,
|
|
||||||
"START": TokenType.BEGIN,
|
"START": TokenType.BEGIN,
|
||||||
"SIGNED": TokenType.BIGINT,
|
"SIGNED": TokenType.BIGINT,
|
||||||
"SIGNED INTEGER": TokenType.BIGINT,
|
"SIGNED INTEGER": TokenType.BIGINT,
|
||||||
|
@ -185,11 +186,26 @@ class MySQL(Dialect):
|
||||||
COMMANDS = tokens.Tokenizer.COMMANDS - {TokenType.SHOW}
|
COMMANDS = tokens.Tokenizer.COMMANDS - {TokenType.SHOW}
|
||||||
|
|
||||||
class Parser(parser.Parser):
|
class Parser(parser.Parser):
|
||||||
FUNC_TOKENS = {*parser.Parser.FUNC_TOKENS, TokenType.SCHEMA, TokenType.DATABASE}
|
FUNC_TOKENS = {
|
||||||
|
*parser.Parser.FUNC_TOKENS,
|
||||||
|
TokenType.DATABASE,
|
||||||
|
TokenType.SCHEMA,
|
||||||
|
TokenType.VALUES,
|
||||||
|
}
|
||||||
|
|
||||||
TABLE_ALIAS_TOKENS = (
|
TABLE_ALIAS_TOKENS = (
|
||||||
parser.Parser.TABLE_ALIAS_TOKENS - parser.Parser.TABLE_INDEX_HINT_TOKENS
|
parser.Parser.TABLE_ALIAS_TOKENS - parser.Parser.TABLE_INDEX_HINT_TOKENS
|
||||||
)
|
)
|
||||||
|
|
||||||
|
RANGE_PARSERS = {
|
||||||
|
**parser.Parser.RANGE_PARSERS,
|
||||||
|
TokenType.MEMBER_OF: lambda self, this: self.expression(
|
||||||
|
exp.JSONArrayContains,
|
||||||
|
this=this,
|
||||||
|
expression=self._parse_wrapped(self._parse_expression),
|
||||||
|
),
|
||||||
|
}
|
||||||
|
|
||||||
FUNCTIONS = {
|
FUNCTIONS = {
|
||||||
**parser.Parser.FUNCTIONS,
|
**parser.Parser.FUNCTIONS,
|
||||||
"DATE_ADD": parse_date_delta_with_interval(exp.DateAdd),
|
"DATE_ADD": parse_date_delta_with_interval(exp.DateAdd),
|
||||||
|
@ -207,6 +223,10 @@ class MySQL(Dialect):
|
||||||
this=self._parse_lambda(),
|
this=self._parse_lambda(),
|
||||||
separator=self._match(TokenType.SEPARATOR) and self._parse_field(),
|
separator=self._match(TokenType.SEPARATOR) and self._parse_field(),
|
||||||
),
|
),
|
||||||
|
# https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_values
|
||||||
|
"VALUES": lambda self: self.expression(
|
||||||
|
exp.Anonymous, this="VALUES", expressions=[self._parse_id_var()]
|
||||||
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
STATEMENT_PARSERS = {
|
STATEMENT_PARSERS = {
|
||||||
|
@ -399,6 +419,8 @@ class MySQL(Dialect):
|
||||||
NULL_ORDERING_SUPPORTED = False
|
NULL_ORDERING_SUPPORTED = False
|
||||||
JOIN_HINTS = False
|
JOIN_HINTS = False
|
||||||
TABLE_HINTS = True
|
TABLE_HINTS = True
|
||||||
|
DUPLICATE_KEY_UPDATE_WITH_SET = False
|
||||||
|
QUERY_HINT_SEP = " "
|
||||||
|
|
||||||
TRANSFORMS = {
|
TRANSFORMS = {
|
||||||
**generator.Generator.TRANSFORMS,
|
**generator.Generator.TRANSFORMS,
|
||||||
|
@ -445,6 +467,9 @@ class MySQL(Dialect):
|
||||||
|
|
||||||
LIMIT_FETCH = "LIMIT"
|
LIMIT_FETCH = "LIMIT"
|
||||||
|
|
||||||
|
def jsonarraycontains_sql(self, expression: exp.JSONArrayContains) -> str:
|
||||||
|
return f"{self.sql(expression, 'this')} MEMBER OF({self.sql(expression, 'expression')})"
|
||||||
|
|
||||||
def cast_sql(self, expression: exp.Cast, safe_prefix: t.Optional[str] = None) -> str:
|
def cast_sql(self, expression: exp.Cast, safe_prefix: t.Optional[str] = None) -> str:
|
||||||
"""(U)BIGINT is not allowed in a CAST expression, so we use (UN)SIGNED instead."""
|
"""(U)BIGINT is not allowed in a CAST expression, so we use (UN)SIGNED instead."""
|
||||||
if expression.to.this == exp.DataType.Type.BIGINT:
|
if expression.to.this == exp.DataType.Type.BIGINT:
|
||||||
|
|
|
@ -121,7 +121,6 @@ class Oracle(Dialect):
|
||||||
"TO_DATE", e.this, exp.Literal.string("YYYY-MM-DD")
|
"TO_DATE", e.this, exp.Literal.string("YYYY-MM-DD")
|
||||||
),
|
),
|
||||||
exp.Group: transforms.preprocess([transforms.unalias_group]),
|
exp.Group: transforms.preprocess([transforms.unalias_group]),
|
||||||
exp.Hint: lambda self, e: f" /*+ {self.expressions(e).strip()} */",
|
|
||||||
exp.ILike: no_ilike_sql,
|
exp.ILike: no_ilike_sql,
|
||||||
exp.Coalesce: rename_func("NVL"),
|
exp.Coalesce: rename_func("NVL"),
|
||||||
exp.Select: transforms.preprocess([transforms.eliminate_distinct_on]),
|
exp.Select: transforms.preprocess([transforms.eliminate_distinct_on]),
|
||||||
|
|
|
@ -183,6 +183,29 @@ def _to_timestamp(args: t.List) -> exp.Expression:
|
||||||
return format_time_lambda(exp.StrToTime, "postgres")(args)
|
return format_time_lambda(exp.StrToTime, "postgres")(args)
|
||||||
|
|
||||||
|
|
||||||
|
def _remove_target_from_merge(expression: exp.Expression) -> exp.Expression:
|
||||||
|
"""Remove table refs from columns in when statements."""
|
||||||
|
if isinstance(expression, exp.Merge):
|
||||||
|
alias = expression.this.args.get("alias")
|
||||||
|
|
||||||
|
normalize = lambda identifier: Postgres.normalize_identifier(identifier).name
|
||||||
|
|
||||||
|
targets = {normalize(expression.this.this)}
|
||||||
|
|
||||||
|
if alias:
|
||||||
|
targets.add(normalize(alias.this))
|
||||||
|
|
||||||
|
for when in expression.expressions:
|
||||||
|
when.transform(
|
||||||
|
lambda node: exp.column(node.name)
|
||||||
|
if isinstance(node, exp.Column) and normalize(node.args.get("table")) in targets
|
||||||
|
else node,
|
||||||
|
copy=False,
|
||||||
|
)
|
||||||
|
|
||||||
|
return expression
|
||||||
|
|
||||||
|
|
||||||
class Postgres(Dialect):
|
class Postgres(Dialect):
|
||||||
INDEX_OFFSET = 1
|
INDEX_OFFSET = 1
|
||||||
NULL_ORDERING = "nulls_are_large"
|
NULL_ORDERING = "nulls_are_large"
|
||||||
|
@ -315,6 +338,7 @@ class Postgres(Dialect):
|
||||||
LOCKING_READS_SUPPORTED = True
|
LOCKING_READS_SUPPORTED = True
|
||||||
JOIN_HINTS = False
|
JOIN_HINTS = False
|
||||||
TABLE_HINTS = False
|
TABLE_HINTS = False
|
||||||
|
QUERY_HINTS = False
|
||||||
PARAMETER_TOKEN = "$"
|
PARAMETER_TOKEN = "$"
|
||||||
|
|
||||||
TYPE_MAPPING = {
|
TYPE_MAPPING = {
|
||||||
|
@ -352,7 +376,7 @@ class Postgres(Dialect):
|
||||||
exp.ArrayOverlaps: lambda self, e: self.binary(e, "&&"),
|
exp.ArrayOverlaps: lambda self, e: self.binary(e, "&&"),
|
||||||
exp.ArrayContains: lambda self, e: self.binary(e, "@>"),
|
exp.ArrayContains: lambda self, e: self.binary(e, "@>"),
|
||||||
exp.ArrayContained: lambda self, e: self.binary(e, "<@"),
|
exp.ArrayContained: lambda self, e: self.binary(e, "<@"),
|
||||||
exp.Merge: transforms.preprocess([transforms.remove_target_from_merge]),
|
exp.Merge: transforms.preprocess([_remove_target_from_merge]),
|
||||||
exp.Pivot: no_pivot_sql,
|
exp.Pivot: no_pivot_sql,
|
||||||
exp.RegexpLike: lambda self, e: self.binary(e, "~"),
|
exp.RegexpLike: lambda self, e: self.binary(e, "~"),
|
||||||
exp.RegexpILike: lambda self, e: self.binary(e, "~*"),
|
exp.RegexpILike: lambda self, e: self.binary(e, "~*"),
|
||||||
|
|
|
@ -232,6 +232,7 @@ class Presto(Dialect):
|
||||||
INTERVAL_ALLOWS_PLURAL_FORM = False
|
INTERVAL_ALLOWS_PLURAL_FORM = False
|
||||||
JOIN_HINTS = False
|
JOIN_HINTS = False
|
||||||
TABLE_HINTS = False
|
TABLE_HINTS = False
|
||||||
|
QUERY_HINTS = False
|
||||||
IS_BOOL_ALLOWED = False
|
IS_BOOL_ALLOWED = False
|
||||||
STRUCT_DELIMITER = ("(", ")")
|
STRUCT_DELIMITER = ("(", ")")
|
||||||
|
|
||||||
|
|
|
@ -86,6 +86,7 @@ class Redshift(Postgres):
|
||||||
class Generator(Postgres.Generator):
|
class Generator(Postgres.Generator):
|
||||||
LOCKING_READS_SUPPORTED = False
|
LOCKING_READS_SUPPORTED = False
|
||||||
RENAME_TABLE_WITH_DB = False
|
RENAME_TABLE_WITH_DB = False
|
||||||
|
QUERY_HINTS = False
|
||||||
|
|
||||||
TYPE_MAPPING = {
|
TYPE_MAPPING = {
|
||||||
**Postgres.Generator.TYPE_MAPPING,
|
**Postgres.Generator.TYPE_MAPPING,
|
||||||
|
|
|
@ -326,6 +326,7 @@ class Snowflake(Dialect):
|
||||||
SINGLE_STRING_INTERVAL = True
|
SINGLE_STRING_INTERVAL = True
|
||||||
JOIN_HINTS = False
|
JOIN_HINTS = False
|
||||||
TABLE_HINTS = False
|
TABLE_HINTS = False
|
||||||
|
QUERY_HINTS = False
|
||||||
|
|
||||||
TRANSFORMS = {
|
TRANSFORMS = {
|
||||||
**generator.Generator.TRANSFORMS,
|
**generator.Generator.TRANSFORMS,
|
||||||
|
|
|
@ -173,6 +173,8 @@ class Spark2(Hive):
|
||||||
return pivot_column_names(aggregations, dialect="spark")
|
return pivot_column_names(aggregations, dialect="spark")
|
||||||
|
|
||||||
class Generator(Hive.Generator):
|
class Generator(Hive.Generator):
|
||||||
|
QUERY_HINTS = True
|
||||||
|
|
||||||
TYPE_MAPPING = {
|
TYPE_MAPPING = {
|
||||||
**Hive.Generator.TYPE_MAPPING,
|
**Hive.Generator.TYPE_MAPPING,
|
||||||
exp.DataType.Type.TINYINT: "BYTE",
|
exp.DataType.Type.TINYINT: "BYTE",
|
||||||
|
@ -203,7 +205,6 @@ class Spark2(Hive):
|
||||||
exp.DayOfYear: rename_func("DAYOFYEAR"),
|
exp.DayOfYear: rename_func("DAYOFYEAR"),
|
||||||
exp.FileFormatProperty: lambda self, e: f"USING {e.name.upper()}",
|
exp.FileFormatProperty: lambda self, e: f"USING {e.name.upper()}",
|
||||||
exp.From: transforms.preprocess([_unalias_pivot]),
|
exp.From: transforms.preprocess([_unalias_pivot]),
|
||||||
exp.Hint: lambda self, e: f" /*+ {self.expressions(e).strip()} */",
|
|
||||||
exp.LogicalAnd: rename_func("BOOL_AND"),
|
exp.LogicalAnd: rename_func("BOOL_AND"),
|
||||||
exp.LogicalOr: rename_func("BOOL_OR"),
|
exp.LogicalOr: rename_func("BOOL_OR"),
|
||||||
exp.Map: _map_sql,
|
exp.Map: _map_sql,
|
||||||
|
|
|
@ -77,6 +77,7 @@ class SQLite(Dialect):
|
||||||
class Generator(generator.Generator):
|
class Generator(generator.Generator):
|
||||||
JOIN_HINTS = False
|
JOIN_HINTS = False
|
||||||
TABLE_HINTS = False
|
TABLE_HINTS = False
|
||||||
|
QUERY_HINTS = False
|
||||||
|
|
||||||
TYPE_MAPPING = {
|
TYPE_MAPPING = {
|
||||||
**generator.Generator.TYPE_MAPPING,
|
**generator.Generator.TYPE_MAPPING,
|
||||||
|
|
|
@ -8,6 +8,7 @@ class Tableau(Dialect):
|
||||||
class Generator(generator.Generator):
|
class Generator(generator.Generator):
|
||||||
JOIN_HINTS = False
|
JOIN_HINTS = False
|
||||||
TABLE_HINTS = False
|
TABLE_HINTS = False
|
||||||
|
QUERY_HINTS = False
|
||||||
|
|
||||||
TRANSFORMS = {
|
TRANSFORMS = {
|
||||||
**generator.Generator.TRANSFORMS,
|
**generator.Generator.TRANSFORMS,
|
||||||
|
|
|
@ -121,7 +121,7 @@ class Teradata(Dialect):
|
||||||
exp.Update,
|
exp.Update,
|
||||||
**{ # type: ignore
|
**{ # type: ignore
|
||||||
"this": self._parse_table(alias_tokens=self.UPDATE_ALIAS_TOKENS),
|
"this": self._parse_table(alias_tokens=self.UPDATE_ALIAS_TOKENS),
|
||||||
"from": self._parse_from(modifiers=True),
|
"from": self._parse_from(joins=True),
|
||||||
"expressions": self._match(TokenType.SET)
|
"expressions": self._match(TokenType.SET)
|
||||||
and self._parse_csv(self._parse_equality),
|
and self._parse_csv(self._parse_equality),
|
||||||
"where": self._parse_where(),
|
"where": self._parse_where(),
|
||||||
|
@ -140,6 +140,7 @@ class Teradata(Dialect):
|
||||||
class Generator(generator.Generator):
|
class Generator(generator.Generator):
|
||||||
JOIN_HINTS = False
|
JOIN_HINTS = False
|
||||||
TABLE_HINTS = False
|
TABLE_HINTS = False
|
||||||
|
QUERY_HINTS = False
|
||||||
|
|
||||||
TYPE_MAPPING = {
|
TYPE_MAPPING = {
|
||||||
**generator.Generator.TYPE_MAPPING,
|
**generator.Generator.TYPE_MAPPING,
|
||||||
|
|
|
@ -60,10 +60,10 @@ def _format_time_lambda(
|
||||||
assert len(args) == 2
|
assert len(args) == 2
|
||||||
|
|
||||||
return exp_class(
|
return exp_class(
|
||||||
this=args[1],
|
this=exp.cast(args[1], "datetime"),
|
||||||
format=exp.Literal.string(
|
format=exp.Literal.string(
|
||||||
format_time(
|
format_time(
|
||||||
args[0].name,
|
args[0].name.lower(),
|
||||||
{**TSQL.TIME_MAPPING, **FULL_FORMAT_TIME_MAPPING}
|
{**TSQL.TIME_MAPPING, **FULL_FORMAT_TIME_MAPPING}
|
||||||
if full_format_mapping
|
if full_format_mapping
|
||||||
else TSQL.TIME_MAPPING,
|
else TSQL.TIME_MAPPING,
|
||||||
|
@ -467,6 +467,8 @@ class TSQL(Dialect):
|
||||||
|
|
||||||
class Generator(generator.Generator):
|
class Generator(generator.Generator):
|
||||||
LOCKING_READS_SUPPORTED = True
|
LOCKING_READS_SUPPORTED = True
|
||||||
|
LIMIT_IS_TOP = True
|
||||||
|
QUERY_HINTS = False
|
||||||
|
|
||||||
TYPE_MAPPING = {
|
TYPE_MAPPING = {
|
||||||
**generator.Generator.TYPE_MAPPING,
|
**generator.Generator.TYPE_MAPPING,
|
||||||
|
@ -482,6 +484,7 @@ class TSQL(Dialect):
|
||||||
exp.DateDiff: generate_date_delta_with_unit_sql,
|
exp.DateDiff: generate_date_delta_with_unit_sql,
|
||||||
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.GroupConcat: _string_agg_sql,
|
exp.GroupConcat: _string_agg_sql,
|
||||||
exp.If: rename_func("IIF"),
|
exp.If: rename_func("IIF"),
|
||||||
exp.Max: max_or_greatest,
|
exp.Max: max_or_greatest,
|
||||||
|
|
|
@ -41,11 +41,13 @@ class Context:
|
||||||
def table(self) -> Table:
|
def table(self) -> Table:
|
||||||
if self._table is None:
|
if self._table is None:
|
||||||
self._table = list(self.tables.values())[0]
|
self._table = list(self.tables.values())[0]
|
||||||
|
|
||||||
for other in self.tables.values():
|
for other in self.tables.values():
|
||||||
if self._table.columns != other.columns:
|
if self._table.columns != other.columns:
|
||||||
raise Exception(f"Columns are different.")
|
raise Exception(f"Columns are different.")
|
||||||
if len(self._table.rows) != len(other.rows):
|
if len(self._table.rows) != len(other.rows):
|
||||||
raise Exception(f"Rows are different.")
|
raise Exception(f"Rows are different.")
|
||||||
|
|
||||||
return self._table
|
return self._table
|
||||||
|
|
||||||
def add_columns(self, *columns: str) -> None:
|
def add_columns(self, *columns: str) -> None:
|
||||||
|
|
|
@ -100,8 +100,18 @@ def substring(this, start=None, length=None):
|
||||||
@null_if_any
|
@null_if_any
|
||||||
def cast(this, to):
|
def cast(this, to):
|
||||||
if to == exp.DataType.Type.DATE:
|
if to == exp.DataType.Type.DATE:
|
||||||
|
if isinstance(this, datetime.datetime):
|
||||||
|
return this.date()
|
||||||
|
if isinstance(this, datetime.date):
|
||||||
|
return this
|
||||||
|
if isinstance(this, str):
|
||||||
return datetime.date.fromisoformat(this)
|
return datetime.date.fromisoformat(this)
|
||||||
if to == exp.DataType.Type.DATETIME:
|
if to in (exp.DataType.Type.DATETIME, exp.DataType.Type.TIMESTAMP):
|
||||||
|
if isinstance(this, datetime.datetime):
|
||||||
|
return this
|
||||||
|
if isinstance(this, datetime.date):
|
||||||
|
return datetime.datetime(this.year, this.month, this.day)
|
||||||
|
if isinstance(this, str):
|
||||||
return datetime.datetime.fromisoformat(this)
|
return datetime.datetime.fromisoformat(this)
|
||||||
if to == exp.DataType.Type.BOOLEAN:
|
if to == exp.DataType.Type.BOOLEAN:
|
||||||
return bool(this)
|
return bool(this)
|
||||||
|
@ -111,7 +121,7 @@ def cast(this, to):
|
||||||
return float(this)
|
return float(this)
|
||||||
if to in exp.DataType.NUMERIC_TYPES:
|
if to in exp.DataType.NUMERIC_TYPES:
|
||||||
return int(this)
|
return int(this)
|
||||||
raise NotImplementedError(f"Casting to '{to}' not implemented.")
|
raise NotImplementedError(f"Casting {this} to '{to}' not implemented.")
|
||||||
|
|
||||||
|
|
||||||
def ordered(this, desc, nulls_first):
|
def ordered(this, desc, nulls_first):
|
||||||
|
@ -153,6 +163,7 @@ ENV = {
|
||||||
"CONCAT": null_if_any(lambda *args: "".join(args)),
|
"CONCAT": null_if_any(lambda *args: "".join(args)),
|
||||||
"SAFECONCAT": null_if_any(lambda *args: "".join(str(arg) for arg in args)),
|
"SAFECONCAT": null_if_any(lambda *args: "".join(str(arg) for arg in args)),
|
||||||
"CONCATWS": null_if_any(lambda this, *args: this.join(args)),
|
"CONCATWS": null_if_any(lambda this, *args: this.join(args)),
|
||||||
|
"DATEDIFF": null_if_any(lambda this, expression, *_: (this - expression).days),
|
||||||
"DATESTRTODATE": null_if_any(lambda arg: datetime.date.fromisoformat(arg)),
|
"DATESTRTODATE": null_if_any(lambda arg: datetime.date.fromisoformat(arg)),
|
||||||
"DIV": null_if_any(lambda e, this: e / this),
|
"DIV": null_if_any(lambda e, this: e / this),
|
||||||
"DOT": null_if_any(lambda e, this: e[this]),
|
"DOT": null_if_any(lambda e, this: e[this]),
|
||||||
|
|
|
@ -417,7 +417,9 @@ class Python(Dialect):
|
||||||
exp.Extract: lambda self, e: f"EXTRACT('{e.name.lower()}', {self.sql(e, 'expression')})",
|
exp.Extract: lambda self, e: f"EXTRACT('{e.name.lower()}', {self.sql(e, 'expression')})",
|
||||||
exp.In: lambda self, e: f"{self.sql(e, 'this')} in {{{self.expressions(e, flat=True)}}}",
|
exp.In: lambda self, e: f"{self.sql(e, 'this')} in {{{self.expressions(e, flat=True)}}}",
|
||||||
exp.Interval: lambda self, e: f"INTERVAL({self.sql(e.this)}, '{self.sql(e.unit)}')",
|
exp.Interval: lambda self, e: f"INTERVAL({self.sql(e.this)}, '{self.sql(e.unit)}')",
|
||||||
exp.Is: lambda self, e: self.binary(e, "is"),
|
exp.Is: lambda self, e: self.binary(e, "==")
|
||||||
|
if isinstance(e.this, exp.Literal)
|
||||||
|
else self.binary(e, "is"),
|
||||||
exp.Lambda: _lambda_sql,
|
exp.Lambda: _lambda_sql,
|
||||||
exp.Not: lambda self, e: f"not {self.sql(e.this)}",
|
exp.Not: lambda self, e: f"not {self.sql(e.this)}",
|
||||||
exp.Null: lambda *_: "None",
|
exp.Null: lambda *_: "None",
|
||||||
|
|
|
@ -102,13 +102,10 @@ class Expression(metaclass=_Expression):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def hashable_args(self) -> t.Any:
|
def hashable_args(self) -> t.Any:
|
||||||
args = (self.args.get(k) for k in self.arg_types)
|
return frozenset(
|
||||||
|
(k, tuple(_norm_arg(a) for a in v) if type(v) is list else _norm_arg(v))
|
||||||
return tuple(
|
for k, v in self.args.items()
|
||||||
(tuple(_norm_arg(a) for a in arg) if arg else None)
|
if not (v is None or v is False or (type(v) is list and not v))
|
||||||
if type(arg) is list
|
|
||||||
else (_norm_arg(arg) if arg is not None and arg is not False else None)
|
|
||||||
for arg in args
|
|
||||||
)
|
)
|
||||||
|
|
||||||
def __hash__(self) -> int:
|
def __hash__(self) -> int:
|
||||||
|
@ -1304,6 +1301,7 @@ class Delete(Expression):
|
||||||
"where": False,
|
"where": False,
|
||||||
"returning": False,
|
"returning": False,
|
||||||
"limit": False,
|
"limit": False,
|
||||||
|
"tables": False, # Multiple-Table Syntax (MySQL)
|
||||||
}
|
}
|
||||||
|
|
||||||
def delete(
|
def delete(
|
||||||
|
@ -1490,9 +1488,7 @@ class Identifier(Expression):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def hashable_args(self) -> t.Any:
|
def hashable_args(self) -> t.Any:
|
||||||
if self.quoted and any(char.isupper() for char in self.this):
|
|
||||||
return (self.this, self.quoted)
|
return (self.this, self.quoted)
|
||||||
return self.this.lower()
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def output_name(self) -> str:
|
def output_name(self) -> str:
|
||||||
|
@ -1525,6 +1521,7 @@ class Insert(Expression):
|
||||||
"partition": False,
|
"partition": False,
|
||||||
"alternative": False,
|
"alternative": False,
|
||||||
"where": False,
|
"where": False,
|
||||||
|
"ignore": False,
|
||||||
}
|
}
|
||||||
|
|
||||||
def with_(
|
def with_(
|
||||||
|
@ -1620,6 +1617,7 @@ class Group(Expression):
|
||||||
"cube": False,
|
"cube": False,
|
||||||
"rollup": False,
|
"rollup": False,
|
||||||
"totals": False,
|
"totals": False,
|
||||||
|
"all": False,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -4135,9 +4133,9 @@ class DateToDi(Func):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
# https://cloud.google.com/bigquery/docs/reference/standard-sql/date_functions#date
|
||||||
class Date(Func):
|
class Date(Func):
|
||||||
arg_types = {"expressions": True}
|
arg_types = {"this": True, "zone": False}
|
||||||
is_var_len_args = True
|
|
||||||
|
|
||||||
|
|
||||||
class Day(Func):
|
class Day(Func):
|
||||||
|
@ -4245,6 +4243,11 @@ class JSONFormat(Func):
|
||||||
_sql_names = ["JSON_FORMAT"]
|
_sql_names = ["JSON_FORMAT"]
|
||||||
|
|
||||||
|
|
||||||
|
# https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html#operator_member-of
|
||||||
|
class JSONArrayContains(Binary, Predicate, Func):
|
||||||
|
_sql_names = ["JSON_ARRAY_CONTAINS"]
|
||||||
|
|
||||||
|
|
||||||
class Least(Func):
|
class Least(Func):
|
||||||
arg_types = {"expressions": False}
|
arg_types = {"expressions": False}
|
||||||
is_var_len_args = True
|
is_var_len_args = True
|
||||||
|
@ -4475,7 +4478,7 @@ class StrToDate(Func):
|
||||||
|
|
||||||
|
|
||||||
class StrToTime(Func):
|
class StrToTime(Func):
|
||||||
arg_types = {"this": True, "format": True}
|
arg_types = {"this": True, "format": True, "zone": False}
|
||||||
|
|
||||||
|
|
||||||
# Spark allows unix_timestamp()
|
# Spark allows unix_timestamp()
|
||||||
|
|
|
@ -140,9 +140,21 @@ class Generator:
|
||||||
# Whether or not table hints should be generated
|
# Whether or not table hints should be generated
|
||||||
TABLE_HINTS = True
|
TABLE_HINTS = True
|
||||||
|
|
||||||
|
# Whether or not query hints should be generated
|
||||||
|
QUERY_HINTS = True
|
||||||
|
|
||||||
|
# What kind of separator to use for query hints
|
||||||
|
QUERY_HINT_SEP = ", "
|
||||||
|
|
||||||
# Whether or not comparing against booleans (e.g. x IS TRUE) is supported
|
# Whether or not comparing against booleans (e.g. x IS TRUE) is supported
|
||||||
IS_BOOL_ALLOWED = True
|
IS_BOOL_ALLOWED = True
|
||||||
|
|
||||||
|
# Whether or not to include the "SET" keyword in the "INSERT ... ON DUPLICATE KEY UPDATE" statement
|
||||||
|
DUPLICATE_KEY_UPDATE_WITH_SET = True
|
||||||
|
|
||||||
|
# Whether or not to generate the limit as TOP <value> instead of LIMIT <value>
|
||||||
|
LIMIT_IS_TOP = False
|
||||||
|
|
||||||
# https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax
|
# https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax
|
||||||
SELECT_KINDS: t.Tuple[str, ...] = ("STRUCT", "VALUE")
|
SELECT_KINDS: t.Tuple[str, ...] = ("STRUCT", "VALUE")
|
||||||
|
|
||||||
|
@ -268,6 +280,7 @@ class Generator:
|
||||||
STRICT_STRING_CONCAT = False
|
STRICT_STRING_CONCAT = False
|
||||||
NORMALIZE_FUNCTIONS: bool | str = "upper"
|
NORMALIZE_FUNCTIONS: bool | str = "upper"
|
||||||
NULL_ORDERING = "nulls_are_small"
|
NULL_ORDERING = "nulls_are_small"
|
||||||
|
ESCAPE_LINE_BREAK = False
|
||||||
|
|
||||||
can_identify: t.Callable[[str, str | bool], bool]
|
can_identify: t.Callable[[str, str | bool], bool]
|
||||||
|
|
||||||
|
@ -286,8 +299,6 @@ class Generator:
|
||||||
HEX_END: t.Optional[str] = None
|
HEX_END: t.Optional[str] = None
|
||||||
BYTE_START: t.Optional[str] = None
|
BYTE_START: t.Optional[str] = None
|
||||||
BYTE_END: t.Optional[str] = None
|
BYTE_END: t.Optional[str] = None
|
||||||
RAW_START: t.Optional[str] = None
|
|
||||||
RAW_END: t.Optional[str] = None
|
|
||||||
|
|
||||||
__slots__ = (
|
__slots__ = (
|
||||||
"pretty",
|
"pretty",
|
||||||
|
@ -486,7 +497,10 @@ class Generator:
|
||||||
return expression
|
return expression
|
||||||
|
|
||||||
if key:
|
if key:
|
||||||
return self.sql(expression.args.get(key))
|
value = expression.args.get(key)
|
||||||
|
if value:
|
||||||
|
return self.sql(value)
|
||||||
|
return ""
|
||||||
|
|
||||||
if self._cache is not None:
|
if self._cache is not None:
|
||||||
expression_id = hash(expression)
|
expression_id = hash(expression)
|
||||||
|
@ -779,10 +793,7 @@ class Generator:
|
||||||
return this
|
return this
|
||||||
|
|
||||||
def rawstring_sql(self, expression: exp.RawString) -> str:
|
def rawstring_sql(self, expression: exp.RawString) -> str:
|
||||||
string = expression.this
|
string = self.escape_str(expression.this.replace("\\", "\\\\"))
|
||||||
if self.RAW_START:
|
|
||||||
return f"{self.RAW_START}{self.escape_str(expression.this)}{self.RAW_END}"
|
|
||||||
string = self.escape_str(string.replace("\\", "\\\\"))
|
|
||||||
return f"{self.QUOTE_START}{string}{self.QUOTE_END}"
|
return f"{self.QUOTE_START}{string}{self.QUOTE_END}"
|
||||||
|
|
||||||
def datatypesize_sql(self, expression: exp.DataTypeSize) -> str:
|
def datatypesize_sql(self, expression: exp.DataTypeSize) -> str:
|
||||||
|
@ -818,15 +829,14 @@ class Generator:
|
||||||
def delete_sql(self, expression: exp.Delete) -> str:
|
def delete_sql(self, expression: exp.Delete) -> str:
|
||||||
this = self.sql(expression, "this")
|
this = self.sql(expression, "this")
|
||||||
this = f" FROM {this}" if this else ""
|
this = f" FROM {this}" if this else ""
|
||||||
using_sql = (
|
using = self.sql(expression, "using")
|
||||||
f" USING {self.expressions(expression, key='using', sep=', USING ')}"
|
using = f" USING {using}" if using else ""
|
||||||
if expression.args.get("using")
|
where = self.sql(expression, "where")
|
||||||
else ""
|
|
||||||
)
|
|
||||||
where_sql = self.sql(expression, "where")
|
|
||||||
returning = self.sql(expression, "returning")
|
returning = self.sql(expression, "returning")
|
||||||
limit = self.sql(expression, "limit")
|
limit = self.sql(expression, "limit")
|
||||||
sql = f"DELETE{this}{using_sql}{where_sql}{returning}{limit}"
|
tables = self.expressions(expression, key="tables")
|
||||||
|
tables = f" {tables}" if tables else ""
|
||||||
|
sql = f"DELETE{tables}{this}{using}{where}{returning}{limit}"
|
||||||
return self.prepend_ctes(expression, sql)
|
return self.prepend_ctes(expression, sql)
|
||||||
|
|
||||||
def drop_sql(self, expression: exp.Drop) -> str:
|
def drop_sql(self, expression: exp.Drop) -> str:
|
||||||
|
@ -867,10 +877,12 @@ class Generator:
|
||||||
return f"{this} FILTER({where})"
|
return f"{this} FILTER({where})"
|
||||||
|
|
||||||
def hint_sql(self, expression: exp.Hint) -> str:
|
def hint_sql(self, expression: exp.Hint) -> str:
|
||||||
if self.sql(expression, "this"):
|
if not self.QUERY_HINTS:
|
||||||
self.unsupported("Hints are not supported")
|
self.unsupported("Hints are not supported")
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
return f" /*+ {self.expressions(expression, sep=self.QUERY_HINT_SEP).strip()} */"
|
||||||
|
|
||||||
def index_sql(self, expression: exp.Index) -> str:
|
def index_sql(self, expression: exp.Index) -> str:
|
||||||
unique = "UNIQUE " if expression.args.get("unique") else ""
|
unique = "UNIQUE " if expression.args.get("unique") else ""
|
||||||
primary = "PRIMARY " if expression.args.get("primary") else ""
|
primary = "PRIMARY " if expression.args.get("primary") else ""
|
||||||
|
@ -1109,6 +1121,8 @@ class Generator:
|
||||||
|
|
||||||
alternative = expression.args.get("alternative")
|
alternative = expression.args.get("alternative")
|
||||||
alternative = f" OR {alternative}" if alternative else ""
|
alternative = f" OR {alternative}" if alternative else ""
|
||||||
|
ignore = " IGNORE" if expression.args.get("ignore") else ""
|
||||||
|
|
||||||
this = f"{this} {self.sql(expression, 'this')}"
|
this = f"{this} {self.sql(expression, 'this')}"
|
||||||
|
|
||||||
exists = " IF EXISTS" if expression.args.get("exists") else ""
|
exists = " IF EXISTS" if expression.args.get("exists") else ""
|
||||||
|
@ -1120,7 +1134,7 @@ class Generator:
|
||||||
expression_sql = f"{self.sep()}{self.sql(expression, 'expression')}"
|
expression_sql = f"{self.sep()}{self.sql(expression, 'expression')}"
|
||||||
conflict = self.sql(expression, "conflict")
|
conflict = self.sql(expression, "conflict")
|
||||||
returning = self.sql(expression, "returning")
|
returning = self.sql(expression, "returning")
|
||||||
sql = f"INSERT{alternative}{this}{exists}{partition_sql}{where}{expression_sql}{conflict}{returning}"
|
sql = f"INSERT{alternative}{ignore}{this}{exists}{partition_sql}{where}{expression_sql}{conflict}{returning}"
|
||||||
return self.prepend_ctes(expression, sql)
|
return self.prepend_ctes(expression, sql)
|
||||||
|
|
||||||
def intersect_sql(self, expression: exp.Intersect) -> str:
|
def intersect_sql(self, expression: exp.Intersect) -> str:
|
||||||
|
@ -1147,8 +1161,9 @@ class Generator:
|
||||||
do = "" if expression.args.get("duplicate") else " DO "
|
do = "" if expression.args.get("duplicate") else " DO "
|
||||||
nothing = "NOTHING" if expression.args.get("nothing") else ""
|
nothing = "NOTHING" if expression.args.get("nothing") else ""
|
||||||
expressions = self.expressions(expression, flat=True)
|
expressions = self.expressions(expression, flat=True)
|
||||||
|
set_keyword = "SET " if self.DUPLICATE_KEY_UPDATE_WITH_SET else ""
|
||||||
if expressions:
|
if expressions:
|
||||||
expressions = f"UPDATE SET {expressions}"
|
expressions = f"UPDATE {set_keyword}{expressions}"
|
||||||
return f"{self.seg(conflict)} {constraint}{key}{do}{nothing}{expressions}"
|
return f"{self.seg(conflict)} {constraint}{key}{do}{nothing}{expressions}"
|
||||||
|
|
||||||
def returning_sql(self, expression: exp.Returning) -> str:
|
def returning_sql(self, expression: exp.Returning) -> str:
|
||||||
|
@ -1195,7 +1210,7 @@ class Generator:
|
||||||
hints = f" {hints}" if hints and self.TABLE_HINTS else ""
|
hints = f" {hints}" if hints and self.TABLE_HINTS else ""
|
||||||
pivots = self.expressions(expression, key="pivots", sep=" ", flat=True)
|
pivots = self.expressions(expression, key="pivots", sep=" ", flat=True)
|
||||||
pivots = f" {pivots}" if pivots else ""
|
pivots = f" {pivots}" if pivots else ""
|
||||||
joins = self.expressions(expression, key="joins", sep="")
|
joins = self.expressions(expression, key="joins", sep="", skip_first=True)
|
||||||
laterals = self.expressions(expression, key="laterals", sep="")
|
laterals = self.expressions(expression, key="laterals", sep="")
|
||||||
system_time = expression.args.get("system_time")
|
system_time = expression.args.get("system_time")
|
||||||
system_time = f" {self.sql(expression, 'system_time')}" if system_time else ""
|
system_time = f" {self.sql(expression, 'system_time')}" if system_time else ""
|
||||||
|
@ -1287,6 +1302,10 @@ class Generator:
|
||||||
|
|
||||||
def group_sql(self, expression: exp.Group) -> str:
|
def group_sql(self, expression: exp.Group) -> str:
|
||||||
group_by = self.op_expressions("GROUP BY", expression)
|
group_by = self.op_expressions("GROUP BY", expression)
|
||||||
|
|
||||||
|
if expression.args.get("all"):
|
||||||
|
return f"{group_by} ALL"
|
||||||
|
|
||||||
grouping_sets = self.expressions(expression, key="grouping_sets", indent=False)
|
grouping_sets = self.expressions(expression, key="grouping_sets", indent=False)
|
||||||
grouping_sets = (
|
grouping_sets = (
|
||||||
f"{self.seg('GROUPING SETS')} {self.wrap(grouping_sets)}" if grouping_sets else ""
|
f"{self.seg('GROUPING SETS')} {self.wrap(grouping_sets)}" if grouping_sets else ""
|
||||||
|
@ -1379,7 +1398,7 @@ class Generator:
|
||||||
alias = f" AS {alias}" if alias else ""
|
alias = f" AS {alias}" if alias else ""
|
||||||
return f"LATERAL {this}{alias}"
|
return f"LATERAL {this}{alias}"
|
||||||
|
|
||||||
def limit_sql(self, expression: exp.Limit) -> 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
|
sql
|
||||||
|
@ -1389,7 +1408,7 @@ class Generator:
|
||||||
)
|
)
|
||||||
if sql
|
if sql
|
||||||
)
|
)
|
||||||
return f"{this}{self.seg('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")
|
||||||
|
@ -1441,7 +1460,9 @@ class Generator:
|
||||||
|
|
||||||
def escape_str(self, text: str) -> str:
|
def escape_str(self, text: str) -> str:
|
||||||
text = text.replace(self.QUOTE_END, self._escaped_quote_end)
|
text = text.replace(self.QUOTE_END, self._escaped_quote_end)
|
||||||
if self.pretty:
|
if self.ESCAPE_LINE_BREAK:
|
||||||
|
text = text.replace("\n", "\\n")
|
||||||
|
elif self.pretty:
|
||||||
text = text.replace("\n", self.SENTINEL_LINE_BREAK)
|
text = text.replace("\n", self.SENTINEL_LINE_BREAK)
|
||||||
return text
|
return text
|
||||||
|
|
||||||
|
@ -1544,6 +1565,9 @@ class Generator:
|
||||||
def query_modifiers(self, expression: exp.Expression, *sqls: str) -> str:
|
def query_modifiers(self, expression: exp.Expression, *sqls: str) -> str:
|
||||||
limit: t.Optional[exp.Fetch | exp.Limit] = expression.args.get("limit")
|
limit: t.Optional[exp.Fetch | exp.Limit] = expression.args.get("limit")
|
||||||
|
|
||||||
|
# If the limit is generated as TOP, we need to ensure it's not generated twice
|
||||||
|
with_offset_limit_modifiers = not isinstance(limit, exp.Limit) or not self.LIMIT_IS_TOP
|
||||||
|
|
||||||
if self.LIMIT_FETCH == "LIMIT" and isinstance(limit, exp.Fetch):
|
if self.LIMIT_FETCH == "LIMIT" and isinstance(limit, exp.Fetch):
|
||||||
limit = exp.Limit(expression=limit.args.get("count"))
|
limit = exp.Limit(expression=limit.args.get("count"))
|
||||||
elif self.LIMIT_FETCH == "FETCH" and isinstance(limit, exp.Limit):
|
elif self.LIMIT_FETCH == "FETCH" and isinstance(limit, exp.Limit):
|
||||||
|
@ -1551,6 +1575,12 @@ class Generator:
|
||||||
|
|
||||||
fetch = isinstance(limit, exp.Fetch)
|
fetch = isinstance(limit, exp.Fetch)
|
||||||
|
|
||||||
|
offset_limit_modifiers = (
|
||||||
|
self.offset_limit_modifiers(expression, fetch, limit)
|
||||||
|
if with_offset_limit_modifiers
|
||||||
|
else []
|
||||||
|
)
|
||||||
|
|
||||||
return csv(
|
return csv(
|
||||||
*sqls,
|
*sqls,
|
||||||
*[self.sql(join) for join in expression.args.get("joins") or []],
|
*[self.sql(join) for join in expression.args.get("joins") or []],
|
||||||
|
@ -1561,7 +1591,7 @@ class Generator:
|
||||||
self.sql(expression, "having"),
|
self.sql(expression, "having"),
|
||||||
*self.after_having_modifiers(expression),
|
*self.after_having_modifiers(expression),
|
||||||
self.sql(expression, "order"),
|
self.sql(expression, "order"),
|
||||||
*self.offset_limit_modifiers(expression, fetch, limit),
|
*offset_limit_modifiers,
|
||||||
*self.after_limit_modifiers(expression),
|
*self.after_limit_modifiers(expression),
|
||||||
sep="",
|
sep="",
|
||||||
)
|
)
|
||||||
|
@ -1580,6 +1610,9 @@ class Generator:
|
||||||
self.seg("WINDOW ") + self.expressions(expression, key="windows", flat=True)
|
self.seg("WINDOW ") + self.expressions(expression, key="windows", flat=True)
|
||||||
if expression.args.get("windows")
|
if expression.args.get("windows")
|
||||||
else "",
|
else "",
|
||||||
|
self.sql(expression, "distribute"),
|
||||||
|
self.sql(expression, "sort"),
|
||||||
|
self.sql(expression, "cluster"),
|
||||||
]
|
]
|
||||||
|
|
||||||
def after_limit_modifiers(self, expression: exp.Expression) -> t.List[str]:
|
def after_limit_modifiers(self, expression: exp.Expression) -> t.List[str]:
|
||||||
|
@ -1592,6 +1625,13 @@ class Generator:
|
||||||
distinct = self.sql(expression, "distinct")
|
distinct = self.sql(expression, "distinct")
|
||||||
distinct = f" {distinct}" if distinct else ""
|
distinct = f" {distinct}" if distinct else ""
|
||||||
kind = self.sql(expression, "kind").upper()
|
kind = self.sql(expression, "kind").upper()
|
||||||
|
limit = expression.args.get("limit")
|
||||||
|
top = (
|
||||||
|
self.limit_sql(limit, top=True)
|
||||||
|
if isinstance(limit, exp.Limit) and self.LIMIT_IS_TOP
|
||||||
|
else ""
|
||||||
|
)
|
||||||
|
|
||||||
expressions = self.expressions(expression)
|
expressions = self.expressions(expression)
|
||||||
|
|
||||||
if kind:
|
if kind:
|
||||||
|
@ -1618,7 +1658,7 @@ class Generator:
|
||||||
expressions = f"{self.sep()}{expressions}" if expressions else expressions
|
expressions = f"{self.sep()}{expressions}" if expressions else expressions
|
||||||
sql = self.query_modifiers(
|
sql = self.query_modifiers(
|
||||||
expression,
|
expression,
|
||||||
f"SELECT{hint}{distinct}{kind}{expressions}",
|
f"SELECT{top}{hint}{distinct}{kind}{expressions}",
|
||||||
self.sql(expression, "into", comment=False),
|
self.sql(expression, "into", comment=False),
|
||||||
self.sql(expression, "from", comment=False),
|
self.sql(expression, "from", comment=False),
|
||||||
)
|
)
|
||||||
|
@ -2288,6 +2328,7 @@ class Generator:
|
||||||
sqls: t.Optional[t.List[str]] = None,
|
sqls: t.Optional[t.List[str]] = None,
|
||||||
flat: bool = False,
|
flat: bool = False,
|
||||||
indent: bool = True,
|
indent: bool = True,
|
||||||
|
skip_first: bool = False,
|
||||||
sep: str = ", ",
|
sep: str = ", ",
|
||||||
prefix: str = "",
|
prefix: str = "",
|
||||||
) -> str:
|
) -> str:
|
||||||
|
@ -2321,7 +2362,7 @@ class Generator:
|
||||||
result_sqls.append(f"{prefix}{sql}{comments}{sep if i + 1 < num_sqls else ''}")
|
result_sqls.append(f"{prefix}{sql}{comments}{sep if i + 1 < num_sqls else ''}")
|
||||||
|
|
||||||
result_sql = "\n".join(result_sqls) if self.pretty else "".join(result_sqls)
|
result_sql = "\n".join(result_sqls) if self.pretty else "".join(result_sqls)
|
||||||
return self.indent(result_sql, skip_first=False) if indent else result_sql
|
return self.indent(result_sql, skip_first=skip_first) if indent else result_sql
|
||||||
|
|
||||||
def op_expressions(self, op: str, expression: exp.Expression, flat: bool = False) -> str:
|
def op_expressions(self, op: str, expression: exp.Expression, flat: bool = False) -> str:
|
||||||
flat = flat or isinstance(expression.parent, exp.Properties)
|
flat = flat or isinstance(expression.parent, exp.Properties)
|
||||||
|
|
|
@ -105,6 +105,7 @@ class TypeAnnotator(metaclass=_TypeAnnotator):
|
||||||
exp.CurrentDate,
|
exp.CurrentDate,
|
||||||
exp.Date,
|
exp.Date,
|
||||||
exp.DateAdd,
|
exp.DateAdd,
|
||||||
|
exp.DateFromParts,
|
||||||
exp.DateStrToDate,
|
exp.DateStrToDate,
|
||||||
exp.DateSub,
|
exp.DateSub,
|
||||||
exp.DateTrunc,
|
exp.DateTrunc,
|
||||||
|
|
|
@ -220,25 +220,6 @@ def _expand_group_by(scope: Scope):
|
||||||
group.set("expressions", _expand_positional_references(scope, group.expressions))
|
group.set("expressions", _expand_positional_references(scope, group.expressions))
|
||||||
expression.set("group", group)
|
expression.set("group", group)
|
||||||
|
|
||||||
# group by expressions cannot be simplified, for example
|
|
||||||
# select x + 1 + 1 FROM y GROUP BY x + 1 + 1
|
|
||||||
# the projection must exactly match the group by key
|
|
||||||
groups = set(group.expressions)
|
|
||||||
group.meta["final"] = True
|
|
||||||
|
|
||||||
for e in expression.selects:
|
|
||||||
for node, *_ in e.walk():
|
|
||||||
if node in groups:
|
|
||||||
e.meta["final"] = True
|
|
||||||
break
|
|
||||||
|
|
||||||
having = expression.args.get("having")
|
|
||||||
if having:
|
|
||||||
for node, *_ in having.walk():
|
|
||||||
if node in groups:
|
|
||||||
having.meta["final"] = True
|
|
||||||
break
|
|
||||||
|
|
||||||
|
|
||||||
def _expand_order_by(scope: Scope, resolver: Resolver):
|
def _expand_order_by(scope: Scope, resolver: Resolver):
|
||||||
order = scope.expression.args.get("order")
|
order = scope.expression.args.get("order")
|
||||||
|
|
|
@ -8,6 +8,9 @@ from sqlglot import exp
|
||||||
from sqlglot.generator import cached_generator
|
from sqlglot.generator import cached_generator
|
||||||
from sqlglot.helper import first, while_changing
|
from sqlglot.helper import first, while_changing
|
||||||
|
|
||||||
|
# Final means that an expression should not be simplified
|
||||||
|
FINAL = "final"
|
||||||
|
|
||||||
|
|
||||||
def simplify(expression):
|
def simplify(expression):
|
||||||
"""
|
"""
|
||||||
|
@ -27,8 +30,29 @@ def simplify(expression):
|
||||||
|
|
||||||
generate = cached_generator()
|
generate = cached_generator()
|
||||||
|
|
||||||
|
# group by expressions cannot be simplified, for example
|
||||||
|
# select x + 1 + 1 FROM y GROUP BY x + 1 + 1
|
||||||
|
# the projection must exactly match the group by key
|
||||||
|
for group in expression.find_all(exp.Group):
|
||||||
|
select = group.parent
|
||||||
|
groups = set(group.expressions)
|
||||||
|
group.meta[FINAL] = True
|
||||||
|
|
||||||
|
for e in select.selects:
|
||||||
|
for node, *_ in e.walk():
|
||||||
|
if node in groups:
|
||||||
|
e.meta[FINAL] = True
|
||||||
|
break
|
||||||
|
|
||||||
|
having = select.args.get("having")
|
||||||
|
if having:
|
||||||
|
for node, *_ in having.walk():
|
||||||
|
if node in groups:
|
||||||
|
having.meta[FINAL] = True
|
||||||
|
break
|
||||||
|
|
||||||
def _simplify(expression, root=True):
|
def _simplify(expression, root=True):
|
||||||
if expression.meta.get("final"):
|
if expression.meta.get(FINAL):
|
||||||
return expression
|
return expression
|
||||||
node = expression
|
node = expression
|
||||||
node = rewrite_between(node)
|
node = rewrite_between(node)
|
||||||
|
|
|
@ -737,19 +737,29 @@ class Parser(metaclass=_Parser):
|
||||||
}
|
}
|
||||||
|
|
||||||
QUERY_MODIFIER_PARSERS = {
|
QUERY_MODIFIER_PARSERS = {
|
||||||
"joins": lambda self: list(iter(self._parse_join, None)),
|
TokenType.MATCH_RECOGNIZE: lambda self: ("match", self._parse_match_recognize()),
|
||||||
"laterals": lambda self: list(iter(self._parse_lateral, None)),
|
TokenType.WHERE: lambda self: ("where", self._parse_where()),
|
||||||
"match": lambda self: self._parse_match_recognize(),
|
TokenType.GROUP_BY: lambda self: ("group", self._parse_group()),
|
||||||
"where": lambda self: self._parse_where(),
|
TokenType.HAVING: lambda self: ("having", self._parse_having()),
|
||||||
"group": lambda self: self._parse_group(),
|
TokenType.QUALIFY: lambda self: ("qualify", self._parse_qualify()),
|
||||||
"having": lambda self: self._parse_having(),
|
TokenType.WINDOW: lambda self: ("windows", self._parse_window_clause()),
|
||||||
"qualify": lambda self: self._parse_qualify(),
|
TokenType.ORDER_BY: lambda self: ("order", self._parse_order()),
|
||||||
"windows": lambda self: self._parse_window_clause(),
|
TokenType.LIMIT: lambda self: ("limit", self._parse_limit()),
|
||||||
"order": lambda self: self._parse_order(),
|
TokenType.FETCH: lambda self: ("limit", self._parse_limit()),
|
||||||
"limit": lambda self: self._parse_limit(),
|
TokenType.OFFSET: lambda self: ("offset", self._parse_offset()),
|
||||||
"offset": lambda self: self._parse_offset(),
|
TokenType.FOR: lambda self: ("locks", self._parse_locks()),
|
||||||
"locks": lambda self: self._parse_locks(),
|
TokenType.LOCK: lambda self: ("locks", self._parse_locks()),
|
||||||
"sample": lambda self: self._parse_table_sample(as_modifier=True),
|
TokenType.TABLE_SAMPLE: lambda self: ("sample", self._parse_table_sample(as_modifier=True)),
|
||||||
|
TokenType.USING: lambda self: ("sample", self._parse_table_sample(as_modifier=True)),
|
||||||
|
TokenType.CLUSTER_BY: lambda self: (
|
||||||
|
"cluster",
|
||||||
|
self._parse_sort(exp.Cluster, TokenType.CLUSTER_BY),
|
||||||
|
),
|
||||||
|
TokenType.DISTRIBUTE_BY: lambda self: (
|
||||||
|
"distribute",
|
||||||
|
self._parse_sort(exp.Distribute, TokenType.DISTRIBUTE_BY),
|
||||||
|
),
|
||||||
|
TokenType.SORT_BY: lambda self: ("sort", self._parse_sort(exp.Sort, TokenType.SORT_BY)),
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_PARSERS = {
|
SET_PARSERS = {
|
||||||
|
@ -1679,6 +1689,7 @@ class Parser(metaclass=_Parser):
|
||||||
|
|
||||||
def _parse_insert(self) -> exp.Insert:
|
def _parse_insert(self) -> exp.Insert:
|
||||||
overwrite = self._match(TokenType.OVERWRITE)
|
overwrite = self._match(TokenType.OVERWRITE)
|
||||||
|
ignore = self._match(TokenType.IGNORE)
|
||||||
local = self._match_text_seq("LOCAL")
|
local = self._match_text_seq("LOCAL")
|
||||||
alternative = None
|
alternative = None
|
||||||
|
|
||||||
|
@ -1709,6 +1720,7 @@ class Parser(metaclass=_Parser):
|
||||||
returning=self._parse_returning(),
|
returning=self._parse_returning(),
|
||||||
overwrite=overwrite,
|
overwrite=overwrite,
|
||||||
alternative=alternative,
|
alternative=alternative,
|
||||||
|
ignore=ignore,
|
||||||
)
|
)
|
||||||
|
|
||||||
def _parse_on_conflict(self) -> t.Optional[exp.OnConflict]:
|
def _parse_on_conflict(self) -> t.Optional[exp.OnConflict]:
|
||||||
|
@ -1734,7 +1746,8 @@ class Parser(metaclass=_Parser):
|
||||||
nothing = True
|
nothing = True
|
||||||
else:
|
else:
|
||||||
self._match(TokenType.UPDATE)
|
self._match(TokenType.UPDATE)
|
||||||
expressions = self._match(TokenType.SET) and self._parse_csv(self._parse_equality)
|
self._match(TokenType.SET)
|
||||||
|
expressions = self._parse_csv(self._parse_equality)
|
||||||
|
|
||||||
return self.expression(
|
return self.expression(
|
||||||
exp.OnConflict,
|
exp.OnConflict,
|
||||||
|
@ -1805,12 +1818,17 @@ class Parser(metaclass=_Parser):
|
||||||
return self._parse_as_command(self._prev)
|
return self._parse_as_command(self._prev)
|
||||||
|
|
||||||
def _parse_delete(self) -> exp.Delete:
|
def _parse_delete(self) -> exp.Delete:
|
||||||
self._match(TokenType.FROM)
|
# This handles MySQL's "Multiple-Table Syntax"
|
||||||
|
# https://dev.mysql.com/doc/refman/8.0/en/delete.html
|
||||||
|
tables = None
|
||||||
|
if not self._match(TokenType.FROM, advance=False):
|
||||||
|
tables = self._parse_csv(self._parse_table) or None
|
||||||
|
|
||||||
return self.expression(
|
return self.expression(
|
||||||
exp.Delete,
|
exp.Delete,
|
||||||
this=self._parse_table(),
|
tables=tables,
|
||||||
using=self._parse_csv(lambda: self._match(TokenType.USING) and self._parse_table()),
|
this=self._match(TokenType.FROM) and self._parse_table(joins=True),
|
||||||
|
using=self._match(TokenType.USING) and self._parse_table(joins=True),
|
||||||
where=self._parse_where(),
|
where=self._parse_where(),
|
||||||
returning=self._parse_returning(),
|
returning=self._parse_returning(),
|
||||||
limit=self._parse_limit(),
|
limit=self._parse_limit(),
|
||||||
|
@ -1822,7 +1840,7 @@ class Parser(metaclass=_Parser):
|
||||||
**{ # type: ignore
|
**{ # type: ignore
|
||||||
"this": self._parse_table(alias_tokens=self.UPDATE_ALIAS_TOKENS),
|
"this": self._parse_table(alias_tokens=self.UPDATE_ALIAS_TOKENS),
|
||||||
"expressions": self._match(TokenType.SET) and self._parse_csv(self._parse_equality),
|
"expressions": self._match(TokenType.SET) and self._parse_csv(self._parse_equality),
|
||||||
"from": self._parse_from(modifiers=True),
|
"from": self._parse_from(joins=True),
|
||||||
"where": self._parse_where(),
|
"where": self._parse_where(),
|
||||||
"returning": self._parse_returning(),
|
"returning": self._parse_returning(),
|
||||||
"limit": self._parse_limit(),
|
"limit": self._parse_limit(),
|
||||||
|
@ -1875,7 +1893,7 @@ class Parser(metaclass=_Parser):
|
||||||
return self.expression(exp.Tuple, expressions=expressions)
|
return self.expression(exp.Tuple, expressions=expressions)
|
||||||
|
|
||||||
# In presto we can have VALUES 1, 2 which results in 1 column & 2 rows.
|
# In presto we can have VALUES 1, 2 which results in 1 column & 2 rows.
|
||||||
# Source: https://prestodb.io/docs/current/sql/values.html
|
# https://prestodb.io/docs/current/sql/values.html
|
||||||
return self.expression(exp.Tuple, expressions=[self._parse_conjunction()])
|
return self.expression(exp.Tuple, expressions=[self._parse_conjunction()])
|
||||||
|
|
||||||
def _parse_select(
|
def _parse_select(
|
||||||
|
@ -1917,7 +1935,7 @@ class Parser(metaclass=_Parser):
|
||||||
self.raise_error("Cannot specify both ALL and DISTINCT after SELECT")
|
self.raise_error("Cannot specify both ALL and DISTINCT after SELECT")
|
||||||
|
|
||||||
limit = self._parse_limit(top=True)
|
limit = self._parse_limit(top=True)
|
||||||
expressions = self._parse_csv(self._parse_expression)
|
expressions = self._parse_expressions()
|
||||||
|
|
||||||
this = self.expression(
|
this = self.expression(
|
||||||
exp.Select,
|
exp.Select,
|
||||||
|
@ -2034,20 +2052,31 @@ class Parser(metaclass=_Parser):
|
||||||
self, this: t.Optional[exp.Expression]
|
self, this: t.Optional[exp.Expression]
|
||||||
) -> t.Optional[exp.Expression]:
|
) -> t.Optional[exp.Expression]:
|
||||||
if isinstance(this, self.MODIFIABLES):
|
if isinstance(this, self.MODIFIABLES):
|
||||||
for key, parser in self.QUERY_MODIFIER_PARSERS.items():
|
for join in iter(self._parse_join, None):
|
||||||
expression = parser(self)
|
this.append("joins", join)
|
||||||
|
for lateral in iter(self._parse_lateral, None):
|
||||||
|
this.append("laterals", lateral)
|
||||||
|
|
||||||
|
while True:
|
||||||
|
if self._match_set(self.QUERY_MODIFIER_PARSERS, advance=False):
|
||||||
|
parser = self.QUERY_MODIFIER_PARSERS[self._curr.token_type]
|
||||||
|
key, expression = parser(self)
|
||||||
|
|
||||||
if expression:
|
if expression:
|
||||||
|
this.set(key, expression)
|
||||||
if key == "limit":
|
if key == "limit":
|
||||||
offset = expression.args.pop("offset", None)
|
offset = expression.args.pop("offset", None)
|
||||||
if offset:
|
if offset:
|
||||||
this.set("offset", exp.Offset(expression=offset))
|
this.set("offset", exp.Offset(expression=offset))
|
||||||
this.set(key, expression)
|
continue
|
||||||
|
break
|
||||||
return this
|
return this
|
||||||
|
|
||||||
def _parse_hint(self) -> t.Optional[exp.Hint]:
|
def _parse_hint(self) -> t.Optional[exp.Hint]:
|
||||||
if self._match(TokenType.HINT):
|
if self._match(TokenType.HINT):
|
||||||
hints = self._parse_csv(self._parse_function)
|
hints = []
|
||||||
|
for hint in iter(lambda: self._parse_csv(self._parse_function), []):
|
||||||
|
hints.extend(hint)
|
||||||
|
|
||||||
if not self._match_pair(TokenType.STAR, TokenType.SLASH):
|
if not self._match_pair(TokenType.STAR, TokenType.SLASH):
|
||||||
self.raise_error("Expected */ after HINT")
|
self.raise_error("Expected */ after HINT")
|
||||||
|
@ -2069,18 +2098,13 @@ class Parser(metaclass=_Parser):
|
||||||
)
|
)
|
||||||
|
|
||||||
def _parse_from(
|
def _parse_from(
|
||||||
self, modifiers: bool = False, skip_from_token: bool = False
|
self, joins: bool = False, skip_from_token: bool = False
|
||||||
) -> t.Optional[exp.From]:
|
) -> t.Optional[exp.From]:
|
||||||
if not skip_from_token and not self._match(TokenType.FROM):
|
if not skip_from_token and not self._match(TokenType.FROM):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
comments = self._prev_comments
|
|
||||||
this = self._parse_table()
|
|
||||||
|
|
||||||
return self.expression(
|
return self.expression(
|
||||||
exp.From,
|
exp.From, comments=self._prev_comments, this=self._parse_table(joins=joins)
|
||||||
comments=comments,
|
|
||||||
this=self._parse_query_modifiers(this) if modifiers else this,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
def _parse_match_recognize(self) -> t.Optional[exp.MatchRecognize]:
|
def _parse_match_recognize(self) -> t.Optional[exp.MatchRecognize]:
|
||||||
|
@ -2091,9 +2115,7 @@ class Parser(metaclass=_Parser):
|
||||||
|
|
||||||
partition = self._parse_partition_by()
|
partition = self._parse_partition_by()
|
||||||
order = self._parse_order()
|
order = self._parse_order()
|
||||||
measures = (
|
measures = self._parse_expressions() if self._match_text_seq("MEASURES") else None
|
||||||
self._parse_csv(self._parse_expression) if self._match_text_seq("MEASURES") else None
|
|
||||||
)
|
|
||||||
|
|
||||||
if self._match_text_seq("ONE", "ROW", "PER", "MATCH"):
|
if self._match_text_seq("ONE", "ROW", "PER", "MATCH"):
|
||||||
rows = exp.var("ONE ROW PER MATCH")
|
rows = exp.var("ONE ROW PER MATCH")
|
||||||
|
@ -2259,6 +2281,18 @@ class Parser(metaclass=_Parser):
|
||||||
kwargs["on"] = self._parse_conjunction()
|
kwargs["on"] = self._parse_conjunction()
|
||||||
elif self._match(TokenType.USING):
|
elif self._match(TokenType.USING):
|
||||||
kwargs["using"] = self._parse_wrapped_id_vars()
|
kwargs["using"] = self._parse_wrapped_id_vars()
|
||||||
|
elif not (kind and kind.token_type == TokenType.CROSS):
|
||||||
|
index = self._index
|
||||||
|
joins = self._parse_joins()
|
||||||
|
|
||||||
|
if joins and self._match(TokenType.ON):
|
||||||
|
kwargs["on"] = self._parse_conjunction()
|
||||||
|
elif joins and self._match(TokenType.USING):
|
||||||
|
kwargs["using"] = self._parse_wrapped_id_vars()
|
||||||
|
else:
|
||||||
|
joins = None
|
||||||
|
self._retreat(index)
|
||||||
|
kwargs["this"].set("joins", joins)
|
||||||
|
|
||||||
return self.expression(exp.Join, **kwargs)
|
return self.expression(exp.Join, **kwargs)
|
||||||
|
|
||||||
|
@ -2363,7 +2397,10 @@ class Parser(metaclass=_Parser):
|
||||||
)
|
)
|
||||||
|
|
||||||
def _parse_table(
|
def _parse_table(
|
||||||
self, schema: bool = False, alias_tokens: t.Optional[t.Collection[TokenType]] = None
|
self,
|
||||||
|
schema: bool = False,
|
||||||
|
joins: bool = False,
|
||||||
|
alias_tokens: t.Optional[t.Collection[TokenType]] = None,
|
||||||
) -> t.Optional[exp.Expression]:
|
) -> t.Optional[exp.Expression]:
|
||||||
lateral = self._parse_lateral()
|
lateral = self._parse_lateral()
|
||||||
if lateral:
|
if lateral:
|
||||||
|
@ -2407,6 +2444,10 @@ class Parser(metaclass=_Parser):
|
||||||
table_sample.set("this", this)
|
table_sample.set("this", this)
|
||||||
this = table_sample
|
this = table_sample
|
||||||
|
|
||||||
|
if joins:
|
||||||
|
for join in iter(self._parse_join, None):
|
||||||
|
this.append("joins", join)
|
||||||
|
|
||||||
return this
|
return this
|
||||||
|
|
||||||
def _parse_unnest(self, with_alias: bool = True) -> t.Optional[exp.Unnest]:
|
def _parse_unnest(self, with_alias: bool = True) -> t.Optional[exp.Unnest]:
|
||||||
|
@ -2507,8 +2548,11 @@ class Parser(metaclass=_Parser):
|
||||||
kind=kind,
|
kind=kind,
|
||||||
)
|
)
|
||||||
|
|
||||||
def _parse_pivots(self) -> t.List[t.Optional[exp.Expression]]:
|
def _parse_pivots(self) -> t.Optional[t.List[exp.Pivot]]:
|
||||||
return list(iter(self._parse_pivot, None))
|
return list(iter(self._parse_pivot, None)) or None
|
||||||
|
|
||||||
|
def _parse_joins(self) -> t.Optional[t.List[exp.Join]]:
|
||||||
|
return list(iter(self._parse_join, None)) or None
|
||||||
|
|
||||||
# https://duckdb.org/docs/sql/statements/pivot
|
# https://duckdb.org/docs/sql/statements/pivot
|
||||||
def _parse_simplified_pivot(self) -> exp.Pivot:
|
def _parse_simplified_pivot(self) -> exp.Pivot:
|
||||||
|
@ -2603,6 +2647,9 @@ class Parser(metaclass=_Parser):
|
||||||
|
|
||||||
elements = defaultdict(list)
|
elements = defaultdict(list)
|
||||||
|
|
||||||
|
if self._match(TokenType.ALL):
|
||||||
|
return self.expression(exp.Group, all=True)
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
expressions = self._parse_csv(self._parse_conjunction)
|
expressions = self._parse_csv(self._parse_conjunction)
|
||||||
if expressions:
|
if expressions:
|
||||||
|
@ -3171,7 +3218,7 @@ class Parser(metaclass=_Parser):
|
||||||
if query:
|
if query:
|
||||||
expressions = [query]
|
expressions = [query]
|
||||||
else:
|
else:
|
||||||
expressions = self._parse_csv(self._parse_expression)
|
expressions = self._parse_expressions()
|
||||||
|
|
||||||
this = self._parse_query_modifiers(seq_get(expressions, 0))
|
this = self._parse_query_modifiers(seq_get(expressions, 0))
|
||||||
|
|
||||||
|
@ -3536,11 +3583,7 @@ class Parser(metaclass=_Parser):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
expressions = None
|
expressions = None
|
||||||
this = self._parse_id_var()
|
this = self._parse_table(schema=True)
|
||||||
|
|
||||||
if self._match(TokenType.L_PAREN, advance=False):
|
|
||||||
expressions = self._parse_wrapped_id_vars()
|
|
||||||
|
|
||||||
options = self._parse_key_constraint_options()
|
options = self._parse_key_constraint_options()
|
||||||
return self.expression(exp.Reference, this=this, expressions=expressions, options=options)
|
return self.expression(exp.Reference, this=this, expressions=expressions, options=options)
|
||||||
|
|
||||||
|
@ -3706,21 +3749,27 @@ class Parser(metaclass=_Parser):
|
||||||
if self._match(TokenType.CHARACTER_SET):
|
if self._match(TokenType.CHARACTER_SET):
|
||||||
to = self.expression(exp.CharacterSet, this=self._parse_var_or_string())
|
to = self.expression(exp.CharacterSet, this=self._parse_var_or_string())
|
||||||
elif self._match(TokenType.FORMAT):
|
elif self._match(TokenType.FORMAT):
|
||||||
fmt = self._parse_at_time_zone(self._parse_string())
|
fmt_string = self._parse_string()
|
||||||
|
fmt = self._parse_at_time_zone(fmt_string)
|
||||||
|
|
||||||
if to.this in exp.DataType.TEMPORAL_TYPES:
|
if to.this in exp.DataType.TEMPORAL_TYPES:
|
||||||
return self.expression(
|
this = self.expression(
|
||||||
exp.StrToDate if to.this == exp.DataType.Type.DATE else exp.StrToTime,
|
exp.StrToDate if to.this == exp.DataType.Type.DATE else exp.StrToTime,
|
||||||
this=this,
|
this=this,
|
||||||
format=exp.Literal.string(
|
format=exp.Literal.string(
|
||||||
format_time(
|
format_time(
|
||||||
fmt.this if fmt else "",
|
fmt_string.this if fmt_string else "",
|
||||||
self.FORMAT_MAPPING or self.TIME_MAPPING,
|
self.FORMAT_MAPPING or self.TIME_MAPPING,
|
||||||
self.FORMAT_TRIE or self.TIME_TRIE,
|
self.FORMAT_TRIE or self.TIME_TRIE,
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if isinstance(fmt, exp.AtTimeZone) and isinstance(this, exp.StrToTime):
|
||||||
|
this.set("zone", fmt.args["zone"])
|
||||||
|
|
||||||
|
return this
|
||||||
|
|
||||||
return self.expression(exp.Cast if strict else exp.TryCast, this=this, to=to, format=fmt)
|
return self.expression(exp.Cast if strict else exp.TryCast, this=this, to=to, format=fmt)
|
||||||
|
|
||||||
def _parse_concat(self) -> t.Optional[exp.Expression]:
|
def _parse_concat(self) -> t.Optional[exp.Expression]:
|
||||||
|
@ -4223,7 +4272,7 @@ class Parser(metaclass=_Parser):
|
||||||
return None
|
return None
|
||||||
if self._match(TokenType.L_PAREN, advance=False):
|
if self._match(TokenType.L_PAREN, advance=False):
|
||||||
return self._parse_wrapped_csv(self._parse_expression)
|
return self._parse_wrapped_csv(self._parse_expression)
|
||||||
return self._parse_csv(self._parse_expression)
|
return self._parse_expressions()
|
||||||
|
|
||||||
def _parse_csv(
|
def _parse_csv(
|
||||||
self, parse_method: t.Callable, sep: TokenType = TokenType.COMMA
|
self, parse_method: t.Callable, sep: TokenType = TokenType.COMMA
|
||||||
|
@ -4273,6 +4322,9 @@ class Parser(metaclass=_Parser):
|
||||||
self._match_r_paren()
|
self._match_r_paren()
|
||||||
return parse_result
|
return parse_result
|
||||||
|
|
||||||
|
def _parse_expressions(self) -> t.List[t.Optional[exp.Expression]]:
|
||||||
|
return self._parse_csv(self._parse_expression)
|
||||||
|
|
||||||
def _parse_select_or_expression(self, alias: bool = False) -> t.Optional[exp.Expression]:
|
def _parse_select_or_expression(self, alias: bool = False) -> t.Optional[exp.Expression]:
|
||||||
return self._parse_select() or self._parse_set_operations(
|
return self._parse_select() or self._parse_set_operations(
|
||||||
self._parse_expression() if alias else self._parse_conjunction()
|
self._parse_expression() if alias else self._parse_conjunction()
|
||||||
|
|
|
@ -23,9 +23,11 @@ class Plan:
|
||||||
while nodes:
|
while nodes:
|
||||||
node = nodes.pop()
|
node = nodes.pop()
|
||||||
dag[node] = set()
|
dag[node] = set()
|
||||||
|
|
||||||
for dep in node.dependencies:
|
for dep in node.dependencies:
|
||||||
dag[node].add(dep)
|
dag[node].add(dep)
|
||||||
nodes.add(dep)
|
nodes.add(dep)
|
||||||
|
|
||||||
self._dag = dag
|
self._dag = dag
|
||||||
|
|
||||||
return self._dag
|
return self._dag
|
||||||
|
@ -128,15 +130,22 @@ class Step:
|
||||||
agg_funcs = tuple(expression.find_all(exp.AggFunc))
|
agg_funcs = tuple(expression.find_all(exp.AggFunc))
|
||||||
if agg_funcs:
|
if agg_funcs:
|
||||||
aggregations.add(expression)
|
aggregations.add(expression)
|
||||||
|
|
||||||
for agg in agg_funcs:
|
for agg in agg_funcs:
|
||||||
for operand in agg.unnest_operands():
|
for operand in agg.unnest_operands():
|
||||||
if isinstance(operand, exp.Column):
|
if isinstance(operand, exp.Column):
|
||||||
continue
|
continue
|
||||||
if operand not in operands:
|
if operand not in operands:
|
||||||
operands[operand] = next_operand_name()
|
operands[operand] = next_operand_name()
|
||||||
|
|
||||||
operand.replace(exp.column(operands[operand], quoted=True))
|
operand.replace(exp.column(operands[operand], quoted=True))
|
||||||
|
|
||||||
return bool(agg_funcs)
|
return bool(agg_funcs)
|
||||||
|
|
||||||
|
def set_ops_and_aggs(step):
|
||||||
|
step.operands = tuple(alias(operand, alias_) for operand, alias_ in operands.items())
|
||||||
|
step.aggregations = list(aggregations)
|
||||||
|
|
||||||
for e in expression.expressions:
|
for e in expression.expressions:
|
||||||
if e.find(exp.AggFunc):
|
if e.find(exp.AggFunc):
|
||||||
projections.append(exp.column(e.alias_or_name, step.name, quoted=True))
|
projections.append(exp.column(e.alias_or_name, step.name, quoted=True))
|
||||||
|
@ -164,10 +173,7 @@ class Step:
|
||||||
else:
|
else:
|
||||||
aggregate.condition = having.this
|
aggregate.condition = having.this
|
||||||
|
|
||||||
aggregate.operands = tuple(
|
set_ops_and_aggs(aggregate)
|
||||||
alias(operand, alias_) for operand, alias_ in operands.items()
|
|
||||||
)
|
|
||||||
aggregate.aggregations = list(aggregations)
|
|
||||||
|
|
||||||
# give aggregates names and replace projections with references to them
|
# give aggregates names and replace projections with references to them
|
||||||
aggregate.group = {
|
aggregate.group = {
|
||||||
|
@ -178,13 +184,14 @@ class Step:
|
||||||
for k, v in aggregate.group.items():
|
for k, v in aggregate.group.items():
|
||||||
intermediate[v] = k
|
intermediate[v] = k
|
||||||
if isinstance(v, exp.Column):
|
if isinstance(v, exp.Column):
|
||||||
intermediate[v.alias_or_name] = k
|
intermediate[v.name] = k
|
||||||
|
|
||||||
for projection in projections:
|
for projection in projections:
|
||||||
for node, *_ in projection.walk():
|
for node, *_ in projection.walk():
|
||||||
name = intermediate.get(node)
|
name = intermediate.get(node)
|
||||||
if name:
|
if name:
|
||||||
node.replace(exp.column(name, step.name))
|
node.replace(exp.column(name, step.name))
|
||||||
|
|
||||||
if aggregate.condition:
|
if aggregate.condition:
|
||||||
for node, *_ in aggregate.condition.walk():
|
for node, *_ in aggregate.condition.walk():
|
||||||
name = intermediate.get(node) or intermediate.get(node.name)
|
name = intermediate.get(node) or intermediate.get(node.name)
|
||||||
|
@ -197,6 +204,13 @@ class Step:
|
||||||
order = expression.args.get("order")
|
order = expression.args.get("order")
|
||||||
|
|
||||||
if order:
|
if order:
|
||||||
|
if isinstance(step, Aggregate):
|
||||||
|
for i, ordered in enumerate(order.expressions):
|
||||||
|
if extract_agg_operands(exp.alias_(ordered.this, f"_o_{i}", quoted=True)):
|
||||||
|
ordered.this.replace(exp.column(f"_o_{i}", step.name, quoted=True))
|
||||||
|
|
||||||
|
set_ops_and_aggs(aggregate)
|
||||||
|
|
||||||
sort = Sort()
|
sort = Sort()
|
||||||
sort.name = step.name
|
sort.name = step.name
|
||||||
sort.key = order.expressions
|
sort.key = order.expressions
|
||||||
|
@ -340,7 +354,10 @@ class Join(Step):
|
||||||
def _to_s(self, indent: str) -> t.List[str]:
|
def _to_s(self, indent: str) -> t.List[str]:
|
||||||
lines = []
|
lines = []
|
||||||
for name, join in self.joins.items():
|
for name, join in self.joins.items():
|
||||||
lines.append(f"{indent}{name}: {join['side']}")
|
lines.append(f"{indent}{name}: {join['side'] or 'INNER'}")
|
||||||
|
join_key = ", ".join(str(key) for key in t.cast(list, join.get("join_key") or []))
|
||||||
|
if join_key:
|
||||||
|
lines.append(f"{indent}Key: {join_key}")
|
||||||
if join.get("condition"):
|
if join.get("condition"):
|
||||||
lines.append(f"{indent}On: {join['condition'].sql()}") # type: ignore
|
lines.append(f"{indent}On: {join['condition'].sql()}") # type: ignore
|
||||||
return lines
|
return lines
|
||||||
|
|
|
@ -239,6 +239,7 @@ class TokenType(AutoName):
|
||||||
LOCK = auto()
|
LOCK = auto()
|
||||||
MAP = auto()
|
MAP = auto()
|
||||||
MATCH_RECOGNIZE = auto()
|
MATCH_RECOGNIZE = auto()
|
||||||
|
MEMBER_OF = auto()
|
||||||
MERGE = auto()
|
MERGE = auto()
|
||||||
MOD = auto()
|
MOD = auto()
|
||||||
NATURAL = auto()
|
NATURAL = auto()
|
||||||
|
@ -944,8 +945,6 @@ class Tokenizer(metaclass=_Tokenizer):
|
||||||
char = ""
|
char = ""
|
||||||
chars = " "
|
chars = " "
|
||||||
|
|
||||||
word = None if not single_token and chars[-1] not in self.WHITE_SPACE else word
|
|
||||||
|
|
||||||
if not word:
|
if not word:
|
||||||
if self._char in self.SINGLE_TOKENS:
|
if self._char in self.SINGLE_TOKENS:
|
||||||
self._add(self.SINGLE_TOKENS[self._char], text=self._char)
|
self._add(self.SINGLE_TOKENS[self._char], text=self._char)
|
||||||
|
|
|
@ -124,7 +124,9 @@ def remove_precision_parameterized_types(expression: exp.Expression) -> exp.Expr
|
||||||
other expressions. This transforms removes the precision from parameterized types in expressions.
|
other expressions. This transforms removes the precision from parameterized types in expressions.
|
||||||
"""
|
"""
|
||||||
for node in expression.find_all(exp.DataType):
|
for node in expression.find_all(exp.DataType):
|
||||||
node.set("expressions", [e for e in node.expressions if isinstance(e, exp.DataType)])
|
node.set(
|
||||||
|
"expressions", [e for e in node.expressions if not isinstance(e, exp.DataTypeSize)]
|
||||||
|
)
|
||||||
|
|
||||||
return expression
|
return expression
|
||||||
|
|
||||||
|
@ -215,25 +217,6 @@ def explode_to_unnest(expression: exp.Expression) -> exp.Expression:
|
||||||
return expression
|
return expression
|
||||||
|
|
||||||
|
|
||||||
def remove_target_from_merge(expression: exp.Expression) -> exp.Expression:
|
|
||||||
"""Remove table refs from columns in when statements."""
|
|
||||||
if isinstance(expression, exp.Merge):
|
|
||||||
alias = expression.this.args.get("alias")
|
|
||||||
targets = {expression.this.this}
|
|
||||||
if alias:
|
|
||||||
targets.add(alias.this)
|
|
||||||
|
|
||||||
for when in expression.expressions:
|
|
||||||
when.transform(
|
|
||||||
lambda node: exp.column(node.name)
|
|
||||||
if isinstance(node, exp.Column) and node.args.get("table") in targets
|
|
||||||
else node,
|
|
||||||
copy=False,
|
|
||||||
)
|
|
||||||
|
|
||||||
return expression
|
|
||||||
|
|
||||||
|
|
||||||
def remove_within_group_for_percentiles(expression: exp.Expression) -> exp.Expression:
|
def remove_within_group_for_percentiles(expression: exp.Expression) -> exp.Expression:
|
||||||
if (
|
if (
|
||||||
isinstance(expression, exp.WithinGroup)
|
isinstance(expression, exp.WithinGroup)
|
||||||
|
|
|
@ -29,12 +29,14 @@ class TestBigQuery(Validator):
|
||||||
with self.assertRaises(ParseError):
|
with self.assertRaises(ParseError):
|
||||||
transpile("SELECT * FROM UNNEST(x) AS x(y)", read="bigquery")
|
transpile("SELECT * FROM UNNEST(x) AS x(y)", read="bigquery")
|
||||||
|
|
||||||
|
self.validate_identity("SELECT PARSE_TIMESTAMP('%c', 'Thu Dec 25 07:30:00 2008', 'UTC')")
|
||||||
self.validate_identity("SELECT ANY_VALUE(fruit HAVING MAX sold) FROM fruits")
|
self.validate_identity("SELECT ANY_VALUE(fruit HAVING MAX sold) FROM fruits")
|
||||||
self.validate_identity("SELECT ANY_VALUE(fruit HAVING MIN sold) FROM fruits")
|
self.validate_identity("SELECT ANY_VALUE(fruit HAVING MIN sold) FROM fruits")
|
||||||
self.validate_identity("SELECT `project-id`.udfs.func(call.dir)")
|
self.validate_identity("SELECT `project-id`.udfs.func(call.dir)")
|
||||||
self.validate_identity("SELECT CAST(CURRENT_DATE AS STRING FORMAT 'DAY') AS current_day")
|
self.validate_identity("SELECT CAST(CURRENT_DATE AS STRING FORMAT 'DAY') AS current_day")
|
||||||
self.validate_identity("SAFE_CAST(encrypted_value AS STRING FORMAT 'BASE64')")
|
self.validate_identity("SAFE_CAST(encrypted_value AS STRING FORMAT 'BASE64')")
|
||||||
self.validate_identity("CAST(encrypted_value AS STRING FORMAT 'BASE64')")
|
self.validate_identity("CAST(encrypted_value AS STRING FORMAT 'BASE64')")
|
||||||
|
self.validate_identity("CAST(STRUCT<a INT64>(1) AS STRUCT<a INT64>)")
|
||||||
self.validate_identity("STRING_AGG(a)")
|
self.validate_identity("STRING_AGG(a)")
|
||||||
self.validate_identity("STRING_AGG(a, ' & ')")
|
self.validate_identity("STRING_AGG(a, ' & ')")
|
||||||
self.validate_identity("STRING_AGG(DISTINCT a, ' & ')")
|
self.validate_identity("STRING_AGG(DISTINCT a, ' & ')")
|
||||||
|
@ -105,6 +107,14 @@ class TestBigQuery(Validator):
|
||||||
self.validate_all("CAST(x AS NVARCHAR)", write={"bigquery": "CAST(x AS STRING)"})
|
self.validate_all("CAST(x AS NVARCHAR)", write={"bigquery": "CAST(x AS STRING)"})
|
||||||
self.validate_all("CAST(x AS TIMESTAMPTZ)", write={"bigquery": "CAST(x AS TIMESTAMP)"})
|
self.validate_all("CAST(x AS TIMESTAMPTZ)", write={"bigquery": "CAST(x AS TIMESTAMP)"})
|
||||||
self.validate_all("CAST(x AS RECORD)", write={"bigquery": "CAST(x AS STRUCT)"})
|
self.validate_all("CAST(x AS RECORD)", write={"bigquery": "CAST(x AS STRUCT)"})
|
||||||
|
self.validate_all(
|
||||||
|
"SELECT CAST('20201225' AS TIMESTAMP FORMAT 'YYYYMMDD' AT TIME ZONE 'America/New_York')",
|
||||||
|
write={"bigquery": "SELECT PARSE_TIMESTAMP('%Y%m%d', '20201225', 'America/New_York')"},
|
||||||
|
)
|
||||||
|
self.validate_all(
|
||||||
|
"SELECT CAST('20201225' AS TIMESTAMP FORMAT 'YYYYMMDD')",
|
||||||
|
write={"bigquery": "SELECT PARSE_TIMESTAMP('%Y%m%d', '20201225')"},
|
||||||
|
)
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
"SELECT CAST(TIMESTAMP '2008-12-25 00:00:00+00:00' AS STRING FORMAT 'YYYY-MM-DD HH24:MI:SS TZH:TZM') AS date_time_to_string",
|
"SELECT CAST(TIMESTAMP '2008-12-25 00:00:00+00:00' AS STRING FORMAT 'YYYY-MM-DD HH24:MI:SS TZH:TZM') AS date_time_to_string",
|
||||||
write={
|
write={
|
||||||
|
@ -191,7 +201,7 @@ class TestBigQuery(Validator):
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
"r'x\\''",
|
"r'x\\''",
|
||||||
write={
|
write={
|
||||||
"bigquery": "r'x\\''",
|
"bigquery": "'x\\''",
|
||||||
"hive": "'x\\''",
|
"hive": "'x\\''",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
@ -199,7 +209,7 @@ class TestBigQuery(Validator):
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
"r'x\\y'",
|
"r'x\\y'",
|
||||||
write={
|
write={
|
||||||
"bigquery": "r'x\\y'",
|
"bigquery": "'x\\\y'",
|
||||||
"hive": "'x\\\\y'",
|
"hive": "'x\\\\y'",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
@ -215,7 +225,7 @@ class TestBigQuery(Validator):
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
r'r"""/\*.*\*/"""',
|
r'r"""/\*.*\*/"""',
|
||||||
write={
|
write={
|
||||||
"bigquery": r"r'/\*.*\*/'",
|
"bigquery": r"'/\\*.*\\*/'",
|
||||||
"duckdb": r"'/\\*.*\\*/'",
|
"duckdb": r"'/\\*.*\\*/'",
|
||||||
"presto": r"'/\\*.*\\*/'",
|
"presto": r"'/\\*.*\\*/'",
|
||||||
"hive": r"'/\\*.*\\*/'",
|
"hive": r"'/\\*.*\\*/'",
|
||||||
|
@ -225,13 +235,27 @@ class TestBigQuery(Validator):
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
r'R"""/\*.*\*/"""',
|
r'R"""/\*.*\*/"""',
|
||||||
write={
|
write={
|
||||||
"bigquery": r"r'/\*.*\*/'",
|
"bigquery": r"'/\\*.*\\*/'",
|
||||||
"duckdb": r"'/\\*.*\\*/'",
|
"duckdb": r"'/\\*.*\\*/'",
|
||||||
"presto": r"'/\\*.*\\*/'",
|
"presto": r"'/\\*.*\\*/'",
|
||||||
"hive": r"'/\\*.*\\*/'",
|
"hive": r"'/\\*.*\\*/'",
|
||||||
"spark": r"'/\\*.*\\*/'",
|
"spark": r"'/\\*.*\\*/'",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
self.validate_all(
|
||||||
|
'r"""a\n"""',
|
||||||
|
write={
|
||||||
|
"bigquery": "'a\\n'",
|
||||||
|
"duckdb": "'a\n'",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
self.validate_all(
|
||||||
|
'"""a\n"""',
|
||||||
|
write={
|
||||||
|
"bigquery": "'a\\n'",
|
||||||
|
"duckdb": "'a\n'",
|
||||||
|
},
|
||||||
|
)
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
"CAST(a AS INT64)",
|
"CAST(a AS INT64)",
|
||||||
write={
|
write={
|
||||||
|
@ -603,7 +627,7 @@ class TestBigQuery(Validator):
|
||||||
)
|
)
|
||||||
|
|
||||||
@mock.patch("sqlglot.dialects.bigquery.logger")
|
@mock.patch("sqlglot.dialects.bigquery.logger")
|
||||||
def test_pushdown_cte_column_names(self, mock_logger):
|
def test_pushdown_cte_column_names(self, logger):
|
||||||
with self.assertRaises(UnsupportedError):
|
with self.assertRaises(UnsupportedError):
|
||||||
transpile(
|
transpile(
|
||||||
"WITH cte(foo) AS (SELECT * FROM tbl) SELECT foo FROM cte",
|
"WITH cte(foo) AS (SELECT * FROM tbl) SELECT foo FROM cte",
|
||||||
|
|
|
@ -601,7 +601,6 @@ class TestDialect(Validator):
|
||||||
"DATE_TRUNC('day', x)",
|
"DATE_TRUNC('day', x)",
|
||||||
read={
|
read={
|
||||||
"bigquery": "DATE_TRUNC(x, day)",
|
"bigquery": "DATE_TRUNC(x, day)",
|
||||||
"duckdb": "DATE_TRUNC('day', x)",
|
|
||||||
"spark": "TRUNC(x, 'day')",
|
"spark": "TRUNC(x, 'day')",
|
||||||
},
|
},
|
||||||
write={
|
write={
|
||||||
|
@ -619,6 +618,7 @@ class TestDialect(Validator):
|
||||||
"TIMESTAMP_TRUNC(x, day)",
|
"TIMESTAMP_TRUNC(x, day)",
|
||||||
read={
|
read={
|
||||||
"bigquery": "TIMESTAMP_TRUNC(x, day)",
|
"bigquery": "TIMESTAMP_TRUNC(x, day)",
|
||||||
|
"duckdb": "DATE_TRUNC('day', x)",
|
||||||
"presto": "DATE_TRUNC('day', x)",
|
"presto": "DATE_TRUNC('day', x)",
|
||||||
"postgres": "DATE_TRUNC('day', x)",
|
"postgres": "DATE_TRUNC('day', x)",
|
||||||
"snowflake": "DATE_TRUNC('day', x)",
|
"snowflake": "DATE_TRUNC('day', x)",
|
||||||
|
@ -1307,7 +1307,7 @@ class TestDialect(Validator):
|
||||||
write={
|
write={
|
||||||
"sqlite": "SELECT x FROM y LIMIT 10",
|
"sqlite": "SELECT x FROM y LIMIT 10",
|
||||||
"oracle": "SELECT x FROM y FETCH FIRST 10 ROWS ONLY",
|
"oracle": "SELECT x FROM y FETCH FIRST 10 ROWS ONLY",
|
||||||
"tsql": "SELECT x FROM y FETCH FIRST 10 ROWS ONLY",
|
"tsql": "SELECT TOP 10 x FROM y",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
|
|
|
@ -9,6 +9,23 @@ class TestDuckDB(Validator):
|
||||||
self.validate_identity("SELECT CURRENT_DATE")
|
self.validate_identity("SELECT CURRENT_DATE")
|
||||||
self.validate_identity("SELECT CURRENT_TIMESTAMP")
|
self.validate_identity("SELECT CURRENT_TIMESTAMP")
|
||||||
|
|
||||||
|
self.validate_all(
|
||||||
|
"SELECT MAKE_DATE(2016, 12, 25)", read={"bigquery": "SELECT DATE(2016, 12, 25)"}
|
||||||
|
)
|
||||||
|
self.validate_all(
|
||||||
|
"SELECT CAST(CAST('2016-12-25 23:59:59' AS DATETIME) AS DATE)",
|
||||||
|
read={"bigquery": "SELECT DATE(DATETIME '2016-12-25 23:59:59')"},
|
||||||
|
)
|
||||||
|
self.validate_all(
|
||||||
|
"SELECT STRPTIME(STRFTIME(CAST(CAST('2016-12-25' AS TIMESTAMPTZ) AS DATE), '%d/%m/%Y') || ' ' || 'America/Los_Angeles', '%d/%m/%Y %Z')",
|
||||||
|
read={
|
||||||
|
"bigquery": "SELECT DATE(TIMESTAMP '2016-12-25', 'America/Los_Angeles')",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
self.validate_all(
|
||||||
|
"SELECT CAST(CAST(STRPTIME('05/06/2020', '%m/%d/%Y') AS DATE) AS DATE)",
|
||||||
|
read={"bigquery": "SELECT DATE(PARSE_DATE('%m/%d/%Y', '05/06/2020'))"},
|
||||||
|
)
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
"SELECT CAST('2020-01-01' AS DATE) + INTERVAL (-1) DAY",
|
"SELECT CAST('2020-01-01' AS DATE) + INTERVAL (-1) DAY",
|
||||||
read={"mysql": "SELECT DATE '2020-01-01' + INTERVAL -1 DAY"},
|
read={"mysql": "SELECT DATE '2020-01-01' + INTERVAL -1 DAY"},
|
||||||
|
|
|
@ -10,7 +10,28 @@ class TestMySQL(Validator):
|
||||||
self.validate_identity("UPDATE items SET items.price = 0 WHERE items.id >= 5 LIMIT 10")
|
self.validate_identity("UPDATE items SET items.price = 0 WHERE items.id >= 5 LIMIT 10")
|
||||||
self.validate_identity("DELETE FROM t WHERE a <= 10 LIMIT 10")
|
self.validate_identity("DELETE FROM t WHERE a <= 10 LIMIT 10")
|
||||||
self.validate_identity(
|
self.validate_identity(
|
||||||
"INSERT INTO x VALUES (1, 'a', 2.0) ON DUPLICATE KEY UPDATE SET x.id = 1"
|
"DELETE t1 FROM t1 LEFT JOIN t2 ON t1.id = t2.id WHERE t2.id IS NULL"
|
||||||
|
)
|
||||||
|
self.validate_identity(
|
||||||
|
"DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id = t2.id AND t2.id = t3.id"
|
||||||
|
)
|
||||||
|
self.validate_identity(
|
||||||
|
"DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id = t2.id AND t2.id = t3.id"
|
||||||
|
)
|
||||||
|
self.validate_identity(
|
||||||
|
"INSERT IGNORE INTO subscribers (email) VALUES ('john.doe@gmail.com'), ('jane.smith@ibm.com')"
|
||||||
|
)
|
||||||
|
self.validate_identity(
|
||||||
|
"INSERT INTO t1 (a, b, c) VALUES (1, 2, 3), (4, 5, 6) ON DUPLICATE KEY UPDATE c = VALUES(a) + VALUES(b)"
|
||||||
|
)
|
||||||
|
self.validate_identity(
|
||||||
|
"INSERT INTO t1 (a, b) SELECT c, d FROM t2 UNION SELECT e, f FROM t3 ON DUPLICATE KEY UPDATE b = b + c"
|
||||||
|
)
|
||||||
|
self.validate_identity(
|
||||||
|
"INSERT INTO t1 (a, b, c) VALUES (1, 2, 3) ON DUPLICATE KEY UPDATE c = c + 1"
|
||||||
|
)
|
||||||
|
self.validate_identity(
|
||||||
|
"INSERT INTO x VALUES (1, 'a', 2.0) ON DUPLICATE KEY UPDATE x.id = 1"
|
||||||
)
|
)
|
||||||
|
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
|
@ -48,6 +69,14 @@ class TestMySQL(Validator):
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_identity(self):
|
def test_identity(self):
|
||||||
|
self.validate_identity("SELECT /*+ BKA(t1) NO_BKA(t2) */ * FROM t1 INNER JOIN t2")
|
||||||
|
self.validate_identity("SELECT /*+ MERGE(dt) */ * FROM (SELECT * FROM t1) AS dt")
|
||||||
|
self.validate_identity("SELECT /*+ INDEX(t, i) */ c1 FROM t WHERE c2 = 'value'")
|
||||||
|
self.validate_identity("SELECT @a MEMBER OF(@c), @b MEMBER OF(@c)")
|
||||||
|
self.validate_identity("SELECT JSON_ARRAY(4, 5) MEMBER OF('[[3,4],[4,5]]')")
|
||||||
|
self.validate_identity("SELECT CAST('[4,5]' AS JSON) MEMBER OF('[[3,4],[4,5]]')")
|
||||||
|
self.validate_identity("""SELECT 'ab' MEMBER OF('[23, "abc", 17, "ab", 10]')""")
|
||||||
|
self.validate_identity("""SELECT * FROM foo WHERE 'ab' MEMBER OF(content)""")
|
||||||
self.validate_identity("CAST(x AS ENUM('a', 'b'))")
|
self.validate_identity("CAST(x AS ENUM('a', 'b'))")
|
||||||
self.validate_identity("CAST(x AS SET('a', 'b'))")
|
self.validate_identity("CAST(x AS SET('a', 'b'))")
|
||||||
self.validate_identity("SELECT CURRENT_TIMESTAMP(6)")
|
self.validate_identity("SELECT CURRENT_TIMESTAMP(6)")
|
||||||
|
@ -60,9 +89,16 @@ class TestMySQL(Validator):
|
||||||
self.validate_identity("@@GLOBAL.max_connections")
|
self.validate_identity("@@GLOBAL.max_connections")
|
||||||
self.validate_identity("CREATE TABLE A LIKE B")
|
self.validate_identity("CREATE TABLE A LIKE B")
|
||||||
self.validate_identity("SELECT * FROM t1, t2 FOR SHARE OF t1, t2 SKIP LOCKED")
|
self.validate_identity("SELECT * FROM t1, t2 FOR SHARE OF t1, t2 SKIP LOCKED")
|
||||||
|
self.validate_identity(
|
||||||
|
"""SELECT * FROM foo WHERE 3 MEMBER OF(JSON_EXTRACT(info, '$.value'))"""
|
||||||
|
)
|
||||||
self.validate_identity(
|
self.validate_identity(
|
||||||
"SELECT * FROM t1, t2, t3 FOR SHARE OF t1 NOWAIT FOR UPDATE OF t2, t3 SKIP LOCKED"
|
"SELECT * FROM t1, t2, t3 FOR SHARE OF t1 NOWAIT FOR UPDATE OF t2, t3 SKIP LOCKED"
|
||||||
)
|
)
|
||||||
|
self.validate_identity(
|
||||||
|
"""SELECT * FROM foo WHERE 3 MEMBER OF(info->'$.value')""",
|
||||||
|
"""SELECT * FROM foo WHERE 3 MEMBER OF(JSON_EXTRACT(info, '$.value'))""",
|
||||||
|
)
|
||||||
|
|
||||||
# Index hints
|
# Index hints
|
||||||
self.validate_identity(
|
self.validate_identity(
|
||||||
|
@ -402,6 +438,13 @@ class TestMySQL(Validator):
|
||||||
self.validate_all("CAST(x AS SIGNED INTEGER)", write={"mysql": "CAST(x AS SIGNED)"})
|
self.validate_all("CAST(x AS SIGNED INTEGER)", write={"mysql": "CAST(x AS SIGNED)"})
|
||||||
self.validate_all("CAST(x AS UNSIGNED)", write={"mysql": "CAST(x AS UNSIGNED)"})
|
self.validate_all("CAST(x AS UNSIGNED)", write={"mysql": "CAST(x AS UNSIGNED)"})
|
||||||
self.validate_all("CAST(x AS UNSIGNED INTEGER)", write={"mysql": "CAST(x AS UNSIGNED)"})
|
self.validate_all("CAST(x AS UNSIGNED INTEGER)", write={"mysql": "CAST(x AS UNSIGNED)"})
|
||||||
|
self.validate_all(
|
||||||
|
"""SELECT 17 MEMBER OF('[23, "abc", 17, "ab", 10]')""",
|
||||||
|
write={
|
||||||
|
"": """SELECT JSON_ARRAY_CONTAINS(17, '[23, "abc", 17, "ab", 10]')""",
|
||||||
|
"mysql": """SELECT 17 MEMBER OF('[23, "abc", 17, "ab", 10]')""",
|
||||||
|
},
|
||||||
|
)
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
"SELECT DATE_ADD('2023-06-23 12:00:00', INTERVAL 2 * 2 MONTH) FROM foo",
|
"SELECT DATE_ADD('2023-06-23 12:00:00', INTERVAL 2 * 2 MONTH) FROM foo",
|
||||||
write={
|
write={
|
||||||
|
|
|
@ -110,7 +110,7 @@ class TestPostgres(Validator):
|
||||||
)
|
)
|
||||||
|
|
||||||
@mock.patch("sqlglot.helper.logger")
|
@mock.patch("sqlglot.helper.logger")
|
||||||
def test_array_offset(self, mock_logger):
|
def test_array_offset(self, logger):
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
"SELECT col[1]",
|
"SELECT col[1]",
|
||||||
write={
|
write={
|
||||||
|
|
|
@ -442,7 +442,7 @@ class TestPresto(Validator):
|
||||||
)
|
)
|
||||||
|
|
||||||
@mock.patch("sqlglot.helper.logger")
|
@mock.patch("sqlglot.helper.logger")
|
||||||
def test_presto(self, mock_logger):
|
def test_presto(self, logger):
|
||||||
self.validate_identity("SELECT * FROM x OFFSET 1 LIMIT 1")
|
self.validate_identity("SELECT * FROM x OFFSET 1 LIMIT 1")
|
||||||
self.validate_identity("SELECT * FROM x OFFSET 1 FETCH FIRST 1 ROWS ONLY")
|
self.validate_identity("SELECT * FROM x OFFSET 1 FETCH FIRST 1 ROWS ONLY")
|
||||||
self.validate_identity("SELECT BOOL_OR(a > 10) FROM asd AS T(a)")
|
self.validate_identity("SELECT BOOL_OR(a > 10) FROM asd AS T(a)")
|
||||||
|
|
|
@ -6,6 +6,7 @@ class TestSnowflake(Validator):
|
||||||
dialect = "snowflake"
|
dialect = "snowflake"
|
||||||
|
|
||||||
def test_snowflake(self):
|
def test_snowflake(self):
|
||||||
|
self.validate_identity("SELECT SUM(amount) FROM mytable GROUP BY ALL")
|
||||||
self.validate_identity("WITH x AS (SELECT 1 AS foo) SELECT foo FROM IDENTIFIER('x')")
|
self.validate_identity("WITH x AS (SELECT 1 AS foo) SELECT foo FROM IDENTIFIER('x')")
|
||||||
self.validate_identity("WITH x AS (SELECT 1 AS foo) SELECT IDENTIFIER('foo') FROM x")
|
self.validate_identity("WITH x AS (SELECT 1 AS foo) SELECT IDENTIFIER('foo') FROM x")
|
||||||
self.validate_identity("INITCAP('iqamqinterestedqinqthisqtopic', 'q')")
|
self.validate_identity("INITCAP('iqamqinterestedqinqthisqtopic', 'q')")
|
||||||
|
@ -33,6 +34,9 @@ class TestSnowflake(Validator):
|
||||||
self.validate_identity(
|
self.validate_identity(
|
||||||
'COPY INTO NEW_TABLE ("foo", "bar") FROM (SELECT $1, $2, $3, $4 FROM @%old_table)'
|
'COPY INTO NEW_TABLE ("foo", "bar") FROM (SELECT $1, $2, $3, $4 FROM @%old_table)'
|
||||||
)
|
)
|
||||||
|
self.validate_identity(
|
||||||
|
"SELECT state, city, SUM(retail_price * quantity) AS gross_revenue FROM sales GROUP BY ALL"
|
||||||
|
)
|
||||||
|
|
||||||
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)"})
|
||||||
|
@ -611,6 +615,9 @@ class TestSnowflake(Validator):
|
||||||
self.validate_identity(
|
self.validate_identity(
|
||||||
"CREATE SCHEMA mytestschema_clone_restore CLONE testschema BEFORE (TIMESTAMP => TO_TIMESTAMP(40 * 365 * 86400))"
|
"CREATE SCHEMA mytestschema_clone_restore CLONE testschema BEFORE (TIMESTAMP => TO_TIMESTAMP(40 * 365 * 86400))"
|
||||||
)
|
)
|
||||||
|
self.validate_identity(
|
||||||
|
"CREATE OR REPLACE TABLE EXAMPLE_DB.DEMO.USERS (ID DECIMAL(38, 0) NOT NULL, PRIMARY KEY (ID), FOREIGN KEY (CITY_CODE) REFERENCES EXAMPLE_DB.DEMO.CITIES (CITY_CODE))"
|
||||||
|
)
|
||||||
|
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
"CREATE OR REPLACE TRANSIENT TABLE a (id INT)",
|
"CREATE OR REPLACE TRANSIENT TABLE a (id INT)",
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
from unittest import mock
|
||||||
|
|
||||||
from tests.dialects.test_dialect import Validator
|
from tests.dialects.test_dialect import Validator
|
||||||
|
|
||||||
|
|
||||||
|
@ -148,7 +150,8 @@ TBLPROPERTIES (
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_hint(self):
|
@mock.patch("sqlglot.generator.logger")
|
||||||
|
def test_hint(self, logger):
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
"SELECT /*+ COALESCE(3) */ * FROM x",
|
"SELECT /*+ COALESCE(3) */ * FROM x",
|
||||||
write={
|
write={
|
||||||
|
|
|
@ -20,8 +20,9 @@ class TestSQLite(Validator):
|
||||||
CREATE TABLE "Track"
|
CREATE TABLE "Track"
|
||||||
(
|
(
|
||||||
CONSTRAINT "PK_Track" FOREIGN KEY ("TrackId"),
|
CONSTRAINT "PK_Track" FOREIGN KEY ("TrackId"),
|
||||||
FOREIGN KEY ("AlbumId") REFERENCES "Album" ("AlbumId")
|
FOREIGN KEY ("AlbumId") REFERENCES "Album" (
|
||||||
ON DELETE NO ACTION ON UPDATE NO ACTION,
|
"AlbumId"
|
||||||
|
) ON DELETE NO ACTION ON UPDATE NO ACTION,
|
||||||
FOREIGN KEY ("AlbumId") ON DELETE CASCADE ON UPDATE RESTRICT,
|
FOREIGN KEY ("AlbumId") ON DELETE CASCADE ON UPDATE RESTRICT,
|
||||||
FOREIGN KEY ("AlbumId") ON DELETE SET NULL ON UPDATE SET DEFAULT
|
FOREIGN KEY ("AlbumId") ON DELETE SET NULL ON UPDATE SET DEFAULT
|
||||||
)
|
)
|
||||||
|
@ -29,7 +30,9 @@ class TestSQLite(Validator):
|
||||||
write={
|
write={
|
||||||
"sqlite": """CREATE TABLE "Track" (
|
"sqlite": """CREATE TABLE "Track" (
|
||||||
CONSTRAINT "PK_Track" FOREIGN KEY ("TrackId"),
|
CONSTRAINT "PK_Track" FOREIGN KEY ("TrackId"),
|
||||||
FOREIGN KEY ("AlbumId") REFERENCES "Album"("AlbumId") ON DELETE NO ACTION ON UPDATE NO ACTION,
|
FOREIGN KEY ("AlbumId") REFERENCES "Album" (
|
||||||
|
"AlbumId"
|
||||||
|
) ON DELETE NO ACTION ON UPDATE NO ACTION,
|
||||||
FOREIGN KEY ("AlbumId") ON DELETE CASCADE ON UPDATE RESTRICT,
|
FOREIGN KEY ("AlbumId") ON DELETE CASCADE ON UPDATE RESTRICT,
|
||||||
FOREIGN KEY ("AlbumId") ON DELETE SET NULL ON UPDATE SET DEFAULT
|
FOREIGN KEY ("AlbumId") ON DELETE SET NULL ON UPDATE SET DEFAULT
|
||||||
)""",
|
)""",
|
||||||
|
|
|
@ -17,16 +17,28 @@ class TestTSQL(Validator):
|
||||||
self.validate_identity("PRINT @TestVariable")
|
self.validate_identity("PRINT @TestVariable")
|
||||||
self.validate_identity("SELECT Employee_ID, Department_ID FROM @MyTableVar")
|
self.validate_identity("SELECT Employee_ID, Department_ID FROM @MyTableVar")
|
||||||
self.validate_identity("INSERT INTO @TestTable VALUES (1, 'Value1', 12, 20)")
|
self.validate_identity("INSERT INTO @TestTable VALUES (1, 'Value1', 12, 20)")
|
||||||
self.validate_identity(
|
|
||||||
"SELECT x FROM @MyTableVar AS m JOIN Employee ON m.EmployeeID = Employee.EmployeeID"
|
|
||||||
)
|
|
||||||
self.validate_identity('SELECT "x"."y" FROM foo')
|
self.validate_identity('SELECT "x"."y" FROM foo')
|
||||||
self.validate_identity("SELECT * FROM #foo")
|
self.validate_identity("SELECT * FROM #foo")
|
||||||
self.validate_identity("SELECT * FROM ##foo")
|
self.validate_identity("SELECT * FROM ##foo")
|
||||||
|
self.validate_identity(
|
||||||
|
"SELECT x FROM @MyTableVar AS m JOIN Employee ON m.EmployeeID = Employee.EmployeeID"
|
||||||
|
)
|
||||||
self.validate_identity(
|
self.validate_identity(
|
||||||
"SELECT DISTINCT DepartmentName, PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY BaseRate) OVER (PARTITION BY DepartmentName) AS MedianCont FROM dbo.DimEmployee"
|
"SELECT DISTINCT DepartmentName, PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY BaseRate) OVER (PARTITION BY DepartmentName) AS MedianCont FROM dbo.DimEmployee"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
self.validate_all(
|
||||||
|
"SELECT DATEPART(year, TRY_CAST('2017-01-01' AS DATE))",
|
||||||
|
read={"postgres": "SELECT DATE_PART('year', '2017-01-01'::DATE)"},
|
||||||
|
)
|
||||||
|
self.validate_all(
|
||||||
|
"SELECT DATEPART(month, TRY_CAST('2017-03-01' AS DATE))",
|
||||||
|
read={"postgres": "SELECT DATE_PART('month', '2017-03-01'::DATE)"},
|
||||||
|
)
|
||||||
|
self.validate_all(
|
||||||
|
"SELECT DATEPART(day, TRY_CAST('2017-01-02' AS DATE))",
|
||||||
|
read={"postgres": "SELECT DATE_PART('day', '2017-01-02'::DATE)"},
|
||||||
|
)
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
"SELECT CAST([a].[b] AS SMALLINT) FROM foo",
|
"SELECT CAST([a].[b] AS SMALLINT) FROM foo",
|
||||||
write={
|
write={
|
||||||
|
@ -281,19 +293,20 @@ WHERE
|
||||||
|
|
||||||
def test_datename(self):
|
def test_datename(self):
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
"SELECT DATENAME(mm,'01-01-1970')",
|
"SELECT DATENAME(mm,'1970-01-01')",
|
||||||
write={"spark": "SELECT DATE_FORMAT('01-01-1970', 'MMMM')"},
|
write={"spark": "SELECT DATE_FORMAT(CAST('1970-01-01' AS TIMESTAMP), 'MMMM')"},
|
||||||
)
|
)
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
"SELECT DATENAME(dw,'01-01-1970')",
|
"SELECT DATENAME(dw,'1970-01-01')",
|
||||||
write={"spark": "SELECT DATE_FORMAT('01-01-1970', 'EEEE')"},
|
write={"spark": "SELECT DATE_FORMAT(CAST('1970-01-01' AS TIMESTAMP), 'EEEE')"},
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_datepart(self):
|
def test_datepart(self):
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
"SELECT DATEPART(month,'01-01-1970')",
|
"SELECT DATEPART(month,'1970-01-01')",
|
||||||
write={"spark": "SELECT DATE_FORMAT('01-01-1970', 'MM')"},
|
write={"spark": "SELECT DATE_FORMAT(CAST('1970-01-01' AS TIMESTAMP), 'MM')"},
|
||||||
)
|
)
|
||||||
|
self.validate_identity("DATEPART(YEAR, x)", "FORMAT(CAST(x AS DATETIME2), 'yyyy')")
|
||||||
|
|
||||||
def test_convert_date_format(self):
|
def test_convert_date_format(self):
|
||||||
self.validate_all(
|
self.validate_all(
|
||||||
|
|
30
tests/fixtures/identity.sql
vendored
30
tests/fixtures/identity.sql
vendored
|
@ -414,6 +414,8 @@ SELECT 1 FROM a NATURAL LEFT JOIN b
|
||||||
SELECT 1 FROM a NATURAL LEFT OUTER JOIN b
|
SELECT 1 FROM a NATURAL LEFT OUTER JOIN b
|
||||||
SELECT 1 FROM a OUTER JOIN b ON a.foo = b.bar
|
SELECT 1 FROM a OUTER JOIN b ON a.foo = b.bar
|
||||||
SELECT 1 FROM a FULL JOIN b ON a.foo = b.bar
|
SELECT 1 FROM a FULL JOIN b ON a.foo = b.bar
|
||||||
|
SELECT 1 FROM a JOIN b JOIN c ON b.id = c.id ON a.id = b.id
|
||||||
|
SELECT * FROM a JOIN b JOIN c USING (id) USING (id)
|
||||||
SELECT 1 UNION ALL SELECT 2
|
SELECT 1 UNION ALL SELECT 2
|
||||||
SELECT 1 EXCEPT SELECT 2
|
SELECT 1 EXCEPT SELECT 2
|
||||||
SELECT 1 EXCEPT SELECT 2
|
SELECT 1 EXCEPT SELECT 2
|
||||||
|
@ -552,17 +554,17 @@ CREATE TABLE z AS ((WITH cte AS (SELECT 1) SELECT * FROM cte))
|
||||||
CREATE TABLE z (a INT UNIQUE)
|
CREATE TABLE z (a INT UNIQUE)
|
||||||
CREATE TABLE z (a INT AUTO_INCREMENT)
|
CREATE TABLE z (a INT AUTO_INCREMENT)
|
||||||
CREATE TABLE z (a INT UNIQUE AUTO_INCREMENT)
|
CREATE TABLE z (a INT UNIQUE AUTO_INCREMENT)
|
||||||
CREATE TABLE z (a INT REFERENCES parent(b, c))
|
CREATE TABLE z (a INT REFERENCES parent (b, c))
|
||||||
CREATE TABLE z (a INT PRIMARY KEY, b INT REFERENCES foo(id))
|
CREATE TABLE z (a INT PRIMARY KEY, b INT REFERENCES foo (id))
|
||||||
CREATE TABLE z (a INT, FOREIGN KEY (a) REFERENCES parent(b, c))
|
CREATE TABLE z (a INT, FOREIGN KEY (a) REFERENCES parent (b, c))
|
||||||
CREATE TABLE foo (bar INT REFERENCES baz(baz_id) ON DELETE NO ACTION)
|
CREATE TABLE foo (bar INT REFERENCES baz (baz_id) ON DELETE NO ACTION)
|
||||||
CREATE TABLE foo (bar INT REFERENCES baz(baz_id) ON DELETE CASCADE)
|
CREATE TABLE foo (bar INT REFERENCES baz (baz_id) ON DELETE CASCADE)
|
||||||
CREATE TABLE foo (bar INT REFERENCES baz(baz_id) ON DELETE SET NULL)
|
CREATE TABLE foo (bar INT REFERENCES baz (baz_id) ON DELETE SET NULL)
|
||||||
CREATE TABLE foo (bar INT REFERENCES baz(baz_id) ON DELETE SET DEFAULT)
|
CREATE TABLE foo (bar INT REFERENCES baz (baz_id) ON DELETE SET DEFAULT)
|
||||||
CREATE TABLE foo (bar INT REFERENCES baz(baz_id) ON UPDATE NO ACTION)
|
CREATE TABLE foo (bar INT REFERENCES baz (baz_id) ON UPDATE NO ACTION)
|
||||||
CREATE TABLE foo (bar INT REFERENCES baz(baz_id) ON UPDATE CASCADE)
|
CREATE TABLE foo (bar INT REFERENCES baz (baz_id) ON UPDATE CASCADE)
|
||||||
CREATE TABLE foo (bar INT REFERENCES baz(baz_id) ON UPDATE SET NULL)
|
CREATE TABLE foo (bar INT REFERENCES baz (baz_id) ON UPDATE SET NULL)
|
||||||
CREATE TABLE foo (bar INT REFERENCES baz(baz_id) ON UPDATE SET DEFAULT)
|
CREATE TABLE foo (bar INT REFERENCES baz (baz_id) ON UPDATE SET DEFAULT)
|
||||||
CREATE TABLE asd AS SELECT asd FROM asd WITH NO DATA
|
CREATE TABLE asd AS SELECT asd FROM asd WITH NO DATA
|
||||||
CREATE TABLE asd AS SELECT asd FROM asd WITH DATA
|
CREATE TABLE asd AS SELECT asd FROM asd WITH DATA
|
||||||
CREATE TABLE products (x INT GENERATED BY DEFAULT AS IDENTITY)
|
CREATE TABLE products (x INT GENERATED BY DEFAULT AS IDENTITY)
|
||||||
|
@ -573,7 +575,7 @@ CREATE TABLE IF NOT EXISTS customer (pk BIGINT NOT NULL GENERATED ALWAYS AS IDEN
|
||||||
CREATE TABLE customer (pk BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 10 INCREMENT BY 1 MINVALUE -1 MAXVALUE 1 NO CYCLE))
|
CREATE TABLE customer (pk BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 10 INCREMENT BY 1 MINVALUE -1 MAXVALUE 1 NO CYCLE))
|
||||||
CREATE TABLE customer (pk BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 10))
|
CREATE TABLE customer (pk BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 10))
|
||||||
CREATE TABLE customer (pk BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (CYCLE))
|
CREATE TABLE customer (pk BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (CYCLE))
|
||||||
CREATE TABLE foo (baz_id INT REFERENCES baz(id) DEFERRABLE)
|
CREATE TABLE foo (baz_id INT REFERENCES baz (id) DEFERRABLE)
|
||||||
CREATE TABLE foo (baz CHAR(4) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC COMPRESS 'a')
|
CREATE TABLE foo (baz CHAR(4) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC COMPRESS 'a')
|
||||||
CREATE TABLE foo (baz DATE FORMAT 'YYYY/MM/DD' TITLE 'title' INLINE LENGTH 1 COMPRESS ('a', 'b'))
|
CREATE TABLE foo (baz DATE FORMAT 'YYYY/MM/DD' TITLE 'title' INLINE LENGTH 1 COMPRESS ('a', 'b'))
|
||||||
CREATE TABLE t (title TEXT)
|
CREATE TABLE t (title TEXT)
|
||||||
|
@ -648,7 +650,7 @@ ANALYZE a.y
|
||||||
DELETE FROM x WHERE y > 1
|
DELETE FROM x WHERE y > 1
|
||||||
DELETE FROM y
|
DELETE FROM y
|
||||||
DELETE FROM event USING sales WHERE event.eventid = sales.eventid
|
DELETE FROM event USING sales WHERE event.eventid = sales.eventid
|
||||||
DELETE FROM event USING sales, USING bla WHERE event.eventid = sales.eventid
|
DELETE FROM event USING sales, bla WHERE event.eventid = sales.eventid
|
||||||
DELETE FROM event USING sales AS s WHERE event.eventid = s.eventid
|
DELETE FROM event USING sales AS s WHERE event.eventid = s.eventid
|
||||||
DELETE FROM event AS event USING sales AS s WHERE event.eventid = s.eventid
|
DELETE FROM event AS event USING sales AS s WHERE event.eventid = s.eventid
|
||||||
PREPARE statement
|
PREPARE statement
|
||||||
|
@ -794,6 +796,7 @@ ALTER TABLE a ADD FOREIGN KEY (x, y) REFERENCES bla
|
||||||
SELECT partition FROM a
|
SELECT partition FROM a
|
||||||
SELECT end FROM a
|
SELECT end FROM a
|
||||||
SELECT id FROM b.a AS a QUALIFY ROW_NUMBER() OVER (PARTITION BY br ORDER BY sadf DESC) = 1
|
SELECT id FROM b.a AS a QUALIFY ROW_NUMBER() OVER (PARTITION BY br ORDER BY sadf DESC) = 1
|
||||||
|
SELECT * FROM x WHERE a GROUP BY a HAVING b SORT BY s ORDER BY c LIMIT d
|
||||||
SELECT LEFT.FOO FROM BLA AS LEFT
|
SELECT LEFT.FOO FROM BLA AS LEFT
|
||||||
SELECT RIGHT.FOO FROM BLA AS RIGHT
|
SELECT RIGHT.FOO FROM BLA AS RIGHT
|
||||||
SELECT LEFT FROM LEFT LEFT JOIN RIGHT RIGHT JOIN LEFT
|
SELECT LEFT FROM LEFT LEFT JOIN RIGHT RIGHT JOIN LEFT
|
||||||
|
@ -834,3 +837,4 @@ SELECT * FROM case
|
||||||
SELECT * FROM schema.case
|
SELECT * FROM schema.case
|
||||||
SELECT * FROM current_date
|
SELECT * FROM current_date
|
||||||
SELECT * FROM schema.current_date
|
SELECT * FROM schema.current_date
|
||||||
|
SELECT /*+ SOME_HINT(foo) */ 1
|
||||||
|
|
20
tests/fixtures/pretty.sql
vendored
20
tests/fixtures/pretty.sql
vendored
|
@ -363,3 +363,23 @@ SELECT
|
||||||
A.*
|
A.*
|
||||||
EXCEPT (A.COL_1, A.COL_2)
|
EXCEPT (A.COL_1, A.COL_2)
|
||||||
FROM TABLE_1 AS A;
|
FROM TABLE_1 AS A;
|
||||||
|
|
||||||
|
SELECT *
|
||||||
|
FROM a
|
||||||
|
JOIN b
|
||||||
|
JOIN c
|
||||||
|
ON b.id = c.id
|
||||||
|
ON a.id = b.id
|
||||||
|
CROSS JOIN d
|
||||||
|
JOIN e
|
||||||
|
ON d.id = e.id;
|
||||||
|
SELECT
|
||||||
|
*
|
||||||
|
FROM a
|
||||||
|
JOIN b
|
||||||
|
JOIN c
|
||||||
|
ON b.id = c.id
|
||||||
|
ON a.id = b.id
|
||||||
|
CROSS JOIN d
|
||||||
|
JOIN e
|
||||||
|
ON d.id = e.id;
|
||||||
|
|
|
@ -58,8 +58,11 @@ class TestExecutor(unittest.TestCase):
|
||||||
source.rename(columns={column: target.columns[i]}, inplace=True)
|
source.rename(columns={column: target.columns[i]}, inplace=True)
|
||||||
|
|
||||||
def test_py_dialect(self):
|
def test_py_dialect(self):
|
||||||
self.assertEqual(Python().generate(parse_one("'x '''")), r"'x \''")
|
generate = Python().generate
|
||||||
self.assertEqual(Python().generate(parse_one("MAP([1], [2])")), "MAP([1], [2])")
|
self.assertEqual(generate(parse_one("'x '''")), r"'x \''")
|
||||||
|
self.assertEqual(generate(parse_one("MAP([1], [2])")), "MAP([1], [2])")
|
||||||
|
self.assertEqual(generate(parse_one("1 is null")), "1 == None")
|
||||||
|
self.assertEqual(generate(parse_one("x is null")), "scope[None][x] is None")
|
||||||
|
|
||||||
def test_optimized_tpch(self):
|
def test_optimized_tpch(self):
|
||||||
for i, (sql, optimized) in enumerate(self.sqls[:20], start=1):
|
for i, (sql, optimized) in enumerate(self.sqls[:20], start=1):
|
||||||
|
@ -620,6 +623,7 @@ class TestExecutor(unittest.TestCase):
|
||||||
("TIMESTRTOTIME('2022-01-01')", datetime.datetime(2022, 1, 1)),
|
("TIMESTRTOTIME('2022-01-01')", datetime.datetime(2022, 1, 1)),
|
||||||
("LEFT('12345', 3)", "123"),
|
("LEFT('12345', 3)", "123"),
|
||||||
("RIGHT('12345', 3)", "345"),
|
("RIGHT('12345', 3)", "345"),
|
||||||
|
("DATEDIFF('2022-01-03'::date, '2022-01-01'::TIMESTAMP::DATE)", 2),
|
||||||
]:
|
]:
|
||||||
with self.subTest(sql):
|
with self.subTest(sql):
|
||||||
result = execute(f"SELECT {sql}")
|
result = execute(f"SELECT {sql}")
|
||||||
|
@ -699,6 +703,21 @@ class TestExecutor(unittest.TestCase):
|
||||||
[(2, 25.0)],
|
[(2, 25.0)],
|
||||||
("_col_0", "_col_1"),
|
("_col_0", "_col_1"),
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
"SELECT a FROM x GROUP BY a ORDER BY AVG(b)",
|
||||||
|
[(2,), (1,), (3,)],
|
||||||
|
("a",),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"SELECT a, SUM(b) FROM x GROUP BY a ORDER BY COUNT(*)",
|
||||||
|
[(3, 28), (1, 50), (2, 45)],
|
||||||
|
("a", "_col_1"),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"SELECT a, SUM(b) FROM x GROUP BY a ORDER BY COUNT(*) DESC",
|
||||||
|
[(1, 50), (2, 45), (3, 28)],
|
||||||
|
("a", "_col_1"),
|
||||||
|
),
|
||||||
):
|
):
|
||||||
with self.subTest(sql):
|
with self.subTest(sql):
|
||||||
result = execute(sql, tables=tables)
|
result = execute(sql, tables=tables)
|
||||||
|
|
|
@ -15,14 +15,14 @@ class TestExpressions(unittest.TestCase):
|
||||||
self.assertEqual(parse_one("x(1)").find(exp.Literal).depth, 1)
|
self.assertEqual(parse_one("x(1)").find(exp.Literal).depth, 1)
|
||||||
|
|
||||||
def test_eq(self):
|
def test_eq(self):
|
||||||
self.assertEqual(exp.to_identifier("a"), exp.to_identifier("A"))
|
self.assertNotEqual(exp.to_identifier("a"), exp.to_identifier("A"))
|
||||||
|
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
exp.Column(table=exp.to_identifier("b"), this=exp.to_identifier("b")),
|
exp.Column(table=exp.to_identifier("b"), this=exp.to_identifier("b")),
|
||||||
exp.Column(this=exp.to_identifier("b"), table=exp.to_identifier("b")),
|
exp.Column(this=exp.to_identifier("b"), table=exp.to_identifier("b")),
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(exp.to_identifier("a", quoted=True), exp.to_identifier("A"))
|
self.assertNotEqual(exp.to_identifier("a", quoted=True), exp.to_identifier("A"))
|
||||||
self.assertNotEqual(exp.to_identifier("A", quoted=True), exp.to_identifier("A"))
|
self.assertNotEqual(exp.to_identifier("A", quoted=True), exp.to_identifier("A"))
|
||||||
self.assertNotEqual(
|
self.assertNotEqual(
|
||||||
exp.to_identifier("A", quoted=True), exp.to_identifier("a", quoted=True)
|
exp.to_identifier("A", quoted=True), exp.to_identifier("a", quoted=True)
|
||||||
|
@ -31,9 +31,9 @@ class TestExpressions(unittest.TestCase):
|
||||||
self.assertNotEqual(parse_one("'1'"), parse_one("1"))
|
self.assertNotEqual(parse_one("'1'"), parse_one("1"))
|
||||||
self.assertEqual(parse_one("`a`", read="hive"), parse_one('"a"'))
|
self.assertEqual(parse_one("`a`", read="hive"), parse_one('"a"'))
|
||||||
self.assertEqual(parse_one("`a`", read="hive"), parse_one('"a" '))
|
self.assertEqual(parse_one("`a`", read="hive"), parse_one('"a" '))
|
||||||
self.assertEqual(parse_one("`a`.b", read="hive"), parse_one('"a"."b"'))
|
self.assertEqual(parse_one("`a`.`b`", read="hive"), parse_one('"a"."b"'))
|
||||||
self.assertEqual(parse_one("select a, b+1"), parse_one("SELECT a, b + 1"))
|
self.assertEqual(parse_one("select a, b+1"), parse_one("SELECT a, b + 1"))
|
||||||
self.assertEqual(parse_one("`a`.`b`.`c`", read="hive"), parse_one("a.b.c"))
|
self.assertNotEqual(parse_one("`a`.`b`.`c`", read="hive"), parse_one("a.b.c"))
|
||||||
self.assertNotEqual(parse_one("a.b.c.d", read="hive"), parse_one("a.b.c"))
|
self.assertNotEqual(parse_one("a.b.c.d", read="hive"), parse_one("a.b.c"))
|
||||||
self.assertEqual(parse_one("a.b.c.d", read="hive"), parse_one("a.b.c.d"))
|
self.assertEqual(parse_one("a.b.c.d", read="hive"), parse_one("a.b.c.d"))
|
||||||
self.assertEqual(parse_one("a + b * c - 1.0"), parse_one("a+b*c-1.0"))
|
self.assertEqual(parse_one("a + b * c - 1.0"), parse_one("a+b*c-1.0"))
|
||||||
|
@ -338,7 +338,7 @@ class TestExpressions(unittest.TestCase):
|
||||||
{
|
{
|
||||||
parse_one("select a.b"),
|
parse_one("select a.b"),
|
||||||
parse_one("1+2"),
|
parse_one("1+2"),
|
||||||
parse_one('"a".b'),
|
parse_one('"a"."b"'),
|
||||||
parse_one("a.b.c.d"),
|
parse_one("a.b.c.d"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -146,7 +146,8 @@ class TestOptimizer(unittest.TestCase):
|
||||||
df2 = self.conn.execute(optimized.sql(pretty=pretty, dialect="duckdb")).df()
|
df2 = self.conn.execute(optimized.sql(pretty=pretty, dialect="duckdb")).df()
|
||||||
assert_frame_equal(df1, df2)
|
assert_frame_equal(df1, df2)
|
||||||
|
|
||||||
def test_optimize(self):
|
@patch("sqlglot.generator.logger")
|
||||||
|
def test_optimize(self, logger):
|
||||||
self.assertEqual(optimizer.optimize("x = 1 + 1", identify=None).sql(), "x = 2")
|
self.assertEqual(optimizer.optimize("x = 1 + 1", identify=None).sql(), "x = 2")
|
||||||
|
|
||||||
schema = {
|
schema = {
|
||||||
|
@ -199,7 +200,8 @@ class TestOptimizer(unittest.TestCase):
|
||||||
|
|
||||||
self.check_file("normalize", normalize)
|
self.check_file("normalize", normalize)
|
||||||
|
|
||||||
def test_qualify_columns(self):
|
@patch("sqlglot.generator.logger")
|
||||||
|
def test_qualify_columns(self, logger):
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
optimizer.qualify_columns.qualify_columns(
|
optimizer.qualify_columns.qualify_columns(
|
||||||
parse_one("WITH x AS (SELECT a FROM db.y) SELECT z FROM db.x"),
|
parse_one("WITH x AS (SELECT a FROM db.y) SELECT z FROM db.x"),
|
||||||
|
@ -229,6 +231,17 @@ class TestOptimizer(unittest.TestCase):
|
||||||
'WITH "x" AS (SELECT "y"."a" AS "a" FROM "DB"."Y" AS "y" CROSS JOIN "a"."b"."INFORMATION_SCHEMA"."COLUMNS" AS "columns") SELECT "x"."a" AS "a" FROM "x"',
|
'WITH "x" AS (SELECT "y"."a" AS "a" FROM "DB"."Y" AS "y" CROSS JOIN "a"."b"."INFORMATION_SCHEMA"."COLUMNS" AS "columns") SELECT "x"."a" AS "a" FROM "x"',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
self.assertEqual(
|
||||||
|
optimizer.qualify.qualify(
|
||||||
|
parse_one(
|
||||||
|
"CREATE FUNCTION udfs.`myTest`(`x` FLOAT64) AS (1)",
|
||||||
|
read="bigquery",
|
||||||
|
),
|
||||||
|
dialect="bigquery",
|
||||||
|
).sql(dialect="bigquery"),
|
||||||
|
"CREATE FUNCTION `udfs`.`myTest`(`x` FLOAT64) AS (1)",
|
||||||
|
)
|
||||||
|
|
||||||
self.check_file("qualify_columns", qualify_columns, execute=True, schema=self.schema)
|
self.check_file("qualify_columns", qualify_columns, execute=True, schema=self.schema)
|
||||||
|
|
||||||
def test_qualify_columns__with_invisible(self):
|
def test_qualify_columns__with_invisible(self):
|
||||||
|
@ -307,7 +320,8 @@ class TestOptimizer(unittest.TestCase):
|
||||||
pretty=True,
|
pretty=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_merge_subqueries(self):
|
@patch("sqlglot.generator.logger")
|
||||||
|
def test_merge_subqueries(self, logger):
|
||||||
optimize = partial(
|
optimize = partial(
|
||||||
optimizer.optimize,
|
optimizer.optimize,
|
||||||
rules=[
|
rules=[
|
||||||
|
@ -575,7 +589,9 @@ FROM READ_CSV('tests/fixtures/optimizer/tpc-h/nation.csv.gz', 'delimiter', '|')
|
||||||
|
|
||||||
def test_function_annotation(self):
|
def test_function_annotation(self):
|
||||||
schema = {"x": {"cola": "VARCHAR", "colb": "CHAR"}}
|
schema = {"x": {"cola": "VARCHAR", "colb": "CHAR"}}
|
||||||
sql = "SELECT x.cola || TRIM(x.colb) AS col, DATE(x.colb) FROM x AS x"
|
sql = (
|
||||||
|
"SELECT x.cola || TRIM(x.colb) AS col, DATE(x.colb), DATEFROMPARTS(y, m, d) FROM x AS x"
|
||||||
|
)
|
||||||
|
|
||||||
expression = annotate_types(parse_one(sql), schema=schema)
|
expression = annotate_types(parse_one(sql), schema=schema)
|
||||||
concat_expr_alias = expression.expressions[0]
|
concat_expr_alias = expression.expressions[0]
|
||||||
|
@ -590,6 +606,9 @@ FROM READ_CSV('tests/fixtures/optimizer/tpc-h/nation.csv.gz', 'delimiter', '|')
|
||||||
date_expr = expression.expressions[1]
|
date_expr = expression.expressions[1]
|
||||||
self.assertEqual(date_expr.type.this, exp.DataType.Type.DATE)
|
self.assertEqual(date_expr.type.this, exp.DataType.Type.DATE)
|
||||||
|
|
||||||
|
date_expr = expression.expressions[2]
|
||||||
|
self.assertEqual(date_expr.type.this, exp.DataType.Type.DATE)
|
||||||
|
|
||||||
sql = "SELECT CASE WHEN 1=1 THEN x.cola ELSE x.colb END AS col FROM x AS x"
|
sql = "SELECT CASE WHEN 1=1 THEN x.cola ELSE x.colb END AS col FROM x AS x"
|
||||||
|
|
||||||
case_expr_alias = annotate_types(parse_one(sql), schema=schema).expressions[0]
|
case_expr_alias = annotate_types(parse_one(sql), schema=schema).expressions[0]
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import time
|
||||||
import unittest
|
import unittest
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
|
@ -67,7 +68,7 @@ class TestParser(unittest.TestCase):
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
with self.assertRaises(ParseError) as ctx:
|
with self.assertRaises(ParseError) as ctx:
|
||||||
parse_one("SELECT 1;", "sqlite", [exp.From, exp.Join])
|
parse_one("SELECT 1;", "sqlite", into=[exp.From, exp.Join])
|
||||||
|
|
||||||
self.assertEqual(str(ctx.exception), expected_message)
|
self.assertEqual(str(ctx.exception), expected_message)
|
||||||
self.assertEqual(ctx.exception.errors, expected_errors)
|
self.assertEqual(ctx.exception.errors, expected_errors)
|
||||||
|
@ -318,6 +319,7 @@ class TestParser(unittest.TestCase):
|
||||||
self.assertIsInstance(parse_one("TIMESTAMP()"), exp.Func)
|
self.assertIsInstance(parse_one("TIMESTAMP()"), exp.Func)
|
||||||
self.assertIsInstance(parse_one("map.x"), exp.Column)
|
self.assertIsInstance(parse_one("map.x"), exp.Column)
|
||||||
self.assertIsInstance(parse_one("CAST(x AS CHAR(5))").to.expressions[0], exp.DataTypeSize)
|
self.assertIsInstance(parse_one("CAST(x AS CHAR(5))").to.expressions[0], exp.DataTypeSize)
|
||||||
|
self.assertEqual(parse_one("1::int64", dialect="bigquery"), parse_one("CAST(1 AS BIGINT)"))
|
||||||
|
|
||||||
def test_set_expression(self):
|
def test_set_expression(self):
|
||||||
set_ = parse_one("SET")
|
set_ = parse_one("SET")
|
||||||
|
@ -522,6 +524,55 @@ class TestParser(unittest.TestCase):
|
||||||
columns = expr.args["from"].this.args["pivots"][0].args["columns"]
|
columns = expr.args["from"].this.args["pivots"][0].args["columns"]
|
||||||
self.assertEqual(expected_columns, [col.sql(dialect=dialect) for col in columns])
|
self.assertEqual(expected_columns, [col.sql(dialect=dialect) for col in columns])
|
||||||
|
|
||||||
|
def test_parse_nested(self):
|
||||||
|
now = time.time()
|
||||||
|
query = parse_one(
|
||||||
|
"""
|
||||||
|
select *
|
||||||
|
FROM a
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
LEFT JOIN b ON a.id = b.id
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
self.assertIsNotNone(query)
|
||||||
|
self.assertLessEqual(time.time() - now, 0.1)
|
||||||
|
|
||||||
def test_parse_properties(self):
|
def test_parse_properties(self):
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
parse_one("create materialized table x").sql(), "CREATE MATERIALIZED TABLE x"
|
parse_one("create materialized table x").sql(), "CREATE MATERIALIZED TABLE x"
|
||||||
|
|
|
@ -511,11 +511,11 @@ FROM v""",
|
||||||
)
|
)
|
||||||
|
|
||||||
@mock.patch("sqlglot.helper.logger")
|
@mock.patch("sqlglot.helper.logger")
|
||||||
def test_index_offset(self, mock_logger):
|
def test_index_offset(self, logger):
|
||||||
self.validate("x[0]", "x[1]", write="presto", identity=False)
|
self.validate("x[0]", "x[1]", write="presto", identity=False)
|
||||||
self.validate("x[1]", "x[0]", read="presto", identity=False)
|
self.validate("x[1]", "x[0]", read="presto", identity=False)
|
||||||
mock_logger.warning.assert_any_call("Applying array index offset (%s)", 1)
|
logger.warning.assert_any_call("Applying array index offset (%s)", 1)
|
||||||
mock_logger.warning.assert_any_call("Applying array index offset (%s)", -1)
|
logger.warning.assert_any_call("Applying array index offset (%s)", -1)
|
||||||
|
|
||||||
self.validate("x[x - 1]", "x[x - 1]", write="presto", identity=False)
|
self.validate("x[x - 1]", "x[x - 1]", write="presto", identity=False)
|
||||||
self.validate(
|
self.validate(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue