Merging upstream version 26.6.0.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
12333df27e
commit
3532bfd564
99 changed files with 40433 additions and 38803 deletions
102
CHANGELOG.md
102
CHANGELOG.md
|
@ -1,6 +1,104 @@
|
|||
Changelog
|
||||
=========
|
||||
|
||||
## [v26.5.0] - 2025-02-10
|
||||
### :boom: BREAKING CHANGES
|
||||
- due to [`da52181`](https://github.com/tobymao/sqlglot/commit/da52181f1cd3ec22e5ac597de50036278d2e66e5) - TO_DATE parsing with safe flag true *(PR [#4713](https://github.com/tobymao/sqlglot/pull/4713) by [@geooo109](https://github.com/geooo109))*:
|
||||
|
||||
TO_DATE parsing with safe flag true (#4713)
|
||||
|
||||
- due to [`b12aba9`](https://github.com/tobymao/sqlglot/commit/b12aba9be6043053f79ff50f7bdcdfdff19ddf52) - Improve UUID support *(PR [#4718](https://github.com/tobymao/sqlglot/pull/4718) by [@amachanic](https://github.com/amachanic))*:
|
||||
|
||||
Improve UUID support (#4718)
|
||||
|
||||
- due to [`27ec74b`](https://github.com/tobymao/sqlglot/commit/27ec74bab67afba930c4ea66130bcba5e9bb5ba1) - Properly set 'this' when parsing IDENTITY *(PR [#4719](https://github.com/tobymao/sqlglot/pull/4719) by [@amachanic](https://github.com/amachanic))*:
|
||||
|
||||
Properly set 'this' when parsing IDENTITY (#4719)
|
||||
|
||||
|
||||
### :sparkles: New Features
|
||||
- [`c31947b`](https://github.com/tobymao/sqlglot/commit/c31947b2386f579d9d12d2d4053461a75855b9be) - **postgres**: Support generation of exp.CountIf *(PR [#4709](https://github.com/tobymao/sqlglot/pull/4709) by [@VaggelisD](https://github.com/VaggelisD))*
|
||||
|
||||
### :bug: Bug Fixes
|
||||
- [`b842d93`](https://github.com/tobymao/sqlglot/commit/b842d9383827d18482e36d6ea3041180a74d0abf) - **postgres**: enable qualification of queries using the ROWS FROM syntax *(PR [#4699](https://github.com/tobymao/sqlglot/pull/4699) by [@georgesittas](https://github.com/georgesittas))*
|
||||
- :arrow_lower_right: *fixes issue [#3777](https://github.com/TobikoData/sqlmesh/issues/3777) opened by [@simon-pactum](https://github.com/simon-pactum)*
|
||||
- [`5f90307`](https://github.com/tobymao/sqlglot/commit/5f9030786f8489e70aee70acabee440ecf23699c) - **duckdb**: enable support for user-defined types *(PR [#4702](https://github.com/tobymao/sqlglot/pull/4702) by [@georgesittas](https://github.com/georgesittas))*
|
||||
- [`23283ca`](https://github.com/tobymao/sqlglot/commit/23283cacda3c4d6e4f6453cdef1a9e73e3bc8d24) - avoid concealing dialect module exception in _try_load *(PR [#4708](https://github.com/tobymao/sqlglot/pull/4708) by [@georgesittas](https://github.com/georgesittas))*
|
||||
- [`707d45e`](https://github.com/tobymao/sqlglot/commit/707d45ecc7e233f57ada8d6dfaf6c621d6ee3f51) - **tsql**: support default values on definitons and the OUTPUT/OUT/READ_ONLY syntax *(PR [#4704](https://github.com/tobymao/sqlglot/pull/4704) by [@geooo109](https://github.com/geooo109))*
|
||||
- [`da52181`](https://github.com/tobymao/sqlglot/commit/da52181f1cd3ec22e5ac597de50036278d2e66e5) - **hive**: TO_DATE parsing with safe flag true *(PR [#4713](https://github.com/tobymao/sqlglot/pull/4713) by [@geooo109](https://github.com/geooo109))*
|
||||
- :arrow_lower_right: *fixes issue [#4707](https://github.com/tobymao/sqlglot/issues/4707) opened by [@jiangli001](https://github.com/jiangli001)*
|
||||
- [`b12aba9`](https://github.com/tobymao/sqlglot/commit/b12aba9be6043053f79ff50f7bdcdfdff19ddf52) - **tsql, postgres**: Improve UUID support *(PR [#4718](https://github.com/tobymao/sqlglot/pull/4718) by [@amachanic](https://github.com/amachanic))*
|
||||
- [`27ec74b`](https://github.com/tobymao/sqlglot/commit/27ec74bab67afba930c4ea66130bcba5e9bb5ba1) - **tsql**: Properly set 'this' when parsing IDENTITY *(PR [#4719](https://github.com/tobymao/sqlglot/pull/4719) by [@amachanic](https://github.com/amachanic))*
|
||||
- [`f7e22d4`](https://github.com/tobymao/sqlglot/commit/f7e22d40cddfdee4a3d4912aef3161546528d400) - don't change query if no join marks in eliminate_join_marks, fixes [#4721](https://github.com/tobymao/sqlglot/pull/4721) *(commit by [@georgesittas](https://github.com/georgesittas))*
|
||||
- [`b918ff1`](https://github.com/tobymao/sqlglot/commit/b918ff1bc4e256bd1b84802327ffe4acf36d2d45) - **bigquery**: type-annotated array literal logic edge case *(PR [#4724](https://github.com/tobymao/sqlglot/pull/4724) by [@georgesittas](https://github.com/georgesittas))*
|
||||
|
||||
|
||||
## [v26.4.1] - 2025-02-03
|
||||
### :bug: Bug Fixes
|
||||
- [`dd1cdb0`](https://github.com/tobymao/sqlglot/commit/dd1cdb0b91ac597a9cb1f1f517a616c264f5b654) - **redshift**: generate proper syntax for column type alteration *(PR [#4698](https://github.com/tobymao/sqlglot/pull/4698) by [@georgesittas](https://github.com/georgesittas))*
|
||||
|
||||
|
||||
## [v26.4.0] - 2025-02-03
|
||||
### :boom: BREAKING CHANGES
|
||||
- due to [`48145a3`](https://github.com/tobymao/sqlglot/commit/48145a399b076bd3189af8ed8187ca45767d018d) - CurrentSchema for SQLite, MySQL, Postgres, and TSQL *(PR [#4658](https://github.com/tobymao/sqlglot/pull/4658) by [@pruzko](https://github.com/pruzko))*:
|
||||
|
||||
CurrentSchema for SQLite, MySQL, Postgres, and TSQL (#4658)
|
||||
|
||||
- due to [`1a91913`](https://github.com/tobymao/sqlglot/commit/1a91913eea97e2008a0fe4282d60d7c693a79fc3) - Parse empty bracketed ARRAY with cast *(PR [#4679](https://github.com/tobymao/sqlglot/pull/4679) by [@VaggelisD](https://github.com/VaggelisD))*:
|
||||
|
||||
Parse empty bracketed ARRAY with cast (#4679)
|
||||
|
||||
- due to [`f6482fb`](https://github.com/tobymao/sqlglot/commit/f6482fbb782b13a0f180f67b8b5eb3149eba0251) - transpile postgres DATE_BIN function to duckdb TIME_BUCKET *(PR [#4681](https://github.com/tobymao/sqlglot/pull/4681) by [@dor-bernstein](https://github.com/dor-bernstein))*:
|
||||
|
||||
transpile postgres DATE_BIN function to duckdb TIME_BUCKET (#4681)
|
||||
|
||||
- due to [`ade8b82`](https://github.com/tobymao/sqlglot/commit/ade8b826541ecfb00e218d16d995d34adab0335a) - load dialects lazily *(PR [#4687](https://github.com/tobymao/sqlglot/pull/4687) by [@georgesittas](https://github.com/georgesittas))*:
|
||||
|
||||
load dialects lazily (#4687)
|
||||
|
||||
|
||||
### :sparkles: New Features
|
||||
- [`48145a3`](https://github.com/tobymao/sqlglot/commit/48145a399b076bd3189af8ed8187ca45767d018d) - CurrentSchema for SQLite, MySQL, Postgres, and TSQL *(PR [#4658](https://github.com/tobymao/sqlglot/pull/4658) by [@pruzko](https://github.com/pruzko))*
|
||||
- :arrow_lower_right: *addresses issue [#4655](https://github.com/tobymao/sqlglot/issues/4655) opened by [@pruzko](https://github.com/pruzko)*
|
||||
- [`f6482fb`](https://github.com/tobymao/sqlglot/commit/f6482fbb782b13a0f180f67b8b5eb3149eba0251) - transpile postgres DATE_BIN function to duckdb TIME_BUCKET *(PR [#4681](https://github.com/tobymao/sqlglot/pull/4681) by [@dor-bernstein](https://github.com/dor-bernstein))*
|
||||
- [`b2a6041`](https://github.com/tobymao/sqlglot/commit/b2a6041ace9a97fab947364b22d5ddf0e842e278) - **oracle**: add support for CAST(... DEFAULT <value> ON CONVERSION FAILURE) *(PR [#4683](https://github.com/tobymao/sqlglot/pull/4683) by [@georgesittas](https://github.com/georgesittas))*
|
||||
- :arrow_lower_right: *addresses issue [#4682](https://github.com/tobymao/sqlglot/issues/4682) opened by [@jaredschwartz-ofs](https://github.com/jaredschwartz-ofs)*
|
||||
- [`1ad656e`](https://github.com/tobymao/sqlglot/commit/1ad656e4572bf7b3d38805e92f7202f4dcc4f9f8) - enable parsing of (u)int128,256 types for all dialects *(PR [#4685](https://github.com/tobymao/sqlglot/pull/4685) by [@georgesittas](https://github.com/georgesittas))*
|
||||
- [`6f5fb04`](https://github.com/tobymao/sqlglot/commit/6f5fb0423e970920fa5abda3f7e4356e2fb441e1) - implement Dune dialect *(PR [#4686](https://github.com/tobymao/sqlglot/pull/4686) by [@georgesittas](https://github.com/georgesittas))*
|
||||
- [`9ea15c7`](https://github.com/tobymao/sqlglot/commit/9ea15c732d76e0d6a393e553a42e6b9ed30ef286) - **bigquery**: add EXPORT DATA statement support *(PR [#4688](https://github.com/tobymao/sqlglot/pull/4688) by [@ArnoldHueteG](https://github.com/ArnoldHueteG))*
|
||||
|
||||
### :bug: Bug Fixes
|
||||
- [`cd53f7e`](https://github.com/tobymao/sqlglot/commit/cd53f7ec03e99129b430c435d23907ef7d0e0c34) - **clickhouse**: Generate bracket notation for exp.VarMap *(PR [#4664](https://github.com/tobymao/sqlglot/pull/4664) by [@VaggelisD](https://github.com/VaggelisD))*
|
||||
- :arrow_lower_right: *fixes issue [#4662](https://github.com/tobymao/sqlglot/issues/4662) opened by [@martijnthe](https://github.com/martijnthe)*
|
||||
- [`0920f77`](https://github.com/tobymao/sqlglot/commit/0920f778b2d94d94f3c8cccf280a87a6a14b12f7) - use utf-8 encoding in open calls, fixes [#4676](https://github.com/tobymao/sqlglot/pull/4676) *(commit by [@georgesittas](https://github.com/georgesittas))*
|
||||
- [`e71c4c0`](https://github.com/tobymao/sqlglot/commit/e71c4c0b60811f26828d7719fe941dfbc3693be1) - **trino**: Add more JSON_QUERY options *(PR [#4673](https://github.com/tobymao/sqlglot/pull/4673) by [@VaggelisD](https://github.com/VaggelisD))*
|
||||
- :arrow_lower_right: *fixes issue [#4672](https://github.com/tobymao/sqlglot/issues/4672) opened by [@JustGui](https://github.com/JustGui)*
|
||||
- [`1a91913`](https://github.com/tobymao/sqlglot/commit/1a91913eea97e2008a0fe4282d60d7c693a79fc3) - **postgres**: Parse empty bracketed ARRAY with cast *(PR [#4679](https://github.com/tobymao/sqlglot/pull/4679) by [@VaggelisD](https://github.com/VaggelisD))*
|
||||
- :arrow_lower_right: *fixes issue [#4674](https://github.com/tobymao/sqlglot/issues/4674) opened by [@dor-bernstein](https://github.com/dor-bernstein)*
|
||||
- [`c45f174`](https://github.com/tobymao/sqlglot/commit/c45f17455477790f53ef7e347a7e85cfdb82c4ab) - **bigquery**: Inline type-annotated ARRAY literals *(PR [#4671](https://github.com/tobymao/sqlglot/pull/4671) by [@VaggelisD](https://github.com/VaggelisD))*
|
||||
- :arrow_lower_right: *fixes issue [#4670](https://github.com/tobymao/sqlglot/issues/4670) opened by [@sean-rose](https://github.com/sean-rose)*
|
||||
- [`df75edd`](https://github.com/tobymao/sqlglot/commit/df75eddf698af9fe36e7121a63cc2b9fdd468363) - **duckdb**: support postgres JSON/JSONB_OBJECT_AGG to duckdb JSON_GROUP_OBJECT *(PR [#4677](https://github.com/tobymao/sqlglot/pull/4677) by [@geooo109](https://github.com/geooo109))*
|
||||
- :arrow_lower_right: *fixes issue [#4667](https://github.com/tobymao/sqlglot/issues/4667) opened by [@dor-bernstein](https://github.com/dor-bernstein)*
|
||||
- [`69680c1`](https://github.com/tobymao/sqlglot/commit/69680c146f67175ab6e4c4d9898b0991033a4188) - **tsql**: Transpile exp.Fetch limits *(PR [#4680](https://github.com/tobymao/sqlglot/pull/4680) by [@VaggelisD](https://github.com/VaggelisD))*
|
||||
- :arrow_lower_right: *fixes issue [#4665](https://github.com/tobymao/sqlglot/issues/4665) opened by [@WillAyd](https://github.com/WillAyd)*
|
||||
- [`b3b0962`](https://github.com/tobymao/sqlglot/commit/b3b09624cdefb1baa46ddbb888b24648f330a963) - **hive**: Simplify DATE_FORMAT roundtrip *(PR [#4689](https://github.com/tobymao/sqlglot/pull/4689) by [@VaggelisD](https://github.com/VaggelisD))*
|
||||
- [`ade8b82`](https://github.com/tobymao/sqlglot/commit/ade8b826541ecfb00e218d16d995d34adab0335a) - load dialects lazily *(PR [#4687](https://github.com/tobymao/sqlglot/pull/4687) by [@georgesittas](https://github.com/georgesittas))*
|
||||
- [`47c0236`](https://github.com/tobymao/sqlglot/commit/47c023650dad8b0091248c608a211018b841042a) - **bigquery**: Refactor EXPORT DATA statement *(PR [#4693](https://github.com/tobymao/sqlglot/pull/4693) by [@VaggelisD](https://github.com/VaggelisD))*
|
||||
- [`1904b76`](https://github.com/tobymao/sqlglot/commit/1904b7605a7308608ac64e5cfb3c8424d3e55c17) - **tsql**: remove BEGIN from identifiers *(PR [#4695](https://github.com/tobymao/sqlglot/pull/4695) by [@geooo109](https://github.com/geooo109))*
|
||||
- [`a688b6c`](https://github.com/tobymao/sqlglot/commit/a688b6cff01b9cd828c0467b0aa09fba728d751a) - **snowflake**: support correct AUTO INCREMENT transpilation *(PR [#4696](https://github.com/tobymao/sqlglot/pull/4696) by [@geooo109](https://github.com/geooo109))*
|
||||
- :arrow_lower_right: *fixes issue [#4694](https://github.com/tobymao/sqlglot/issues/4694) opened by [@sfc-gh-tdwojak](https://github.com/sfc-gh-tdwojak)*
|
||||
|
||||
|
||||
## [v26.3.9] - 2025-01-27
|
||||
### :bug: Bug Fixes
|
||||
- [`b091f2f`](https://github.com/tobymao/sqlglot/commit/b091f2f4e4779fb9a4187d1665ca40e1648d9ccb) - **trino**: Correctly render exp.LocationProperty in CREATE TABLE / CREATE SCHEMA *(PR [#4659](https://github.com/tobymao/sqlglot/pull/4659) by [@erindru](https://github.com/erindru))*
|
||||
- [`c4de945`](https://github.com/tobymao/sqlglot/commit/c4de94538cd69540f772b9b13e968ee16ffbbe67) - **Trino**: Prevent first_value and last_value from being converted *(PR [#4661](https://github.com/tobymao/sqlglot/pull/4661) by [@MikeWallis42](https://github.com/MikeWallis42))*
|
||||
- :arrow_lower_right: *fixes issue [#4660](https://github.com/tobymao/sqlglot/issues/4660) opened by [@MikeWallis42](https://github.com/MikeWallis42)*
|
||||
|
||||
### :wrench: Chores
|
||||
- [`bae0489`](https://github.com/tobymao/sqlglot/commit/bae0489044a1368556f03f637c171a1873b6f05c) - reduce sdist size *(commit by [@tobymao](https://github.com/tobymao))*
|
||||
|
||||
|
||||
## [v26.3.8] - 2025-01-24
|
||||
### :wrench: Chores
|
||||
- [`5f54f16`](https://github.com/tobymao/sqlglot/commit/5f54f168ee75c5a344747a035e63e1df70fe652c) - bump sqlglotrs to 0.3.14 *(commit by [@georgesittas](https://github.com/georgesittas))*
|
||||
|
@ -5771,3 +5869,7 @@ Changelog
|
|||
[v26.3.6]: https://github.com/tobymao/sqlglot/compare/v26.3.5...v26.3.6
|
||||
[v26.3.7]: https://github.com/tobymao/sqlglot/compare/v26.3.6...v26.3.7
|
||||
[v26.3.8]: https://github.com/tobymao/sqlglot/compare/v26.3.7...v26.3.8
|
||||
[v26.3.9]: https://github.com/tobymao/sqlglot/compare/v26.3.8...v26.3.9
|
||||
[v26.4.0]: https://github.com/tobymao/sqlglot/compare/v26.3.9...v26.4.0
|
||||
[v26.4.1]: https://github.com/tobymao/sqlglot/compare/v26.4.0...v26.4.1
|
||||
[v26.5.0]: https://github.com/tobymao/sqlglot/compare/v26.4.1...v26.5.0
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -539,7 +539,7 @@
|
|||
|
||||
<div class="pdoc-code codehilite">
|
||||
<pre><span></span><code><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot</span><span class="w"> </span><span class="kn">import</span> <span class="n">exp</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn"><a href="sqlglot/dialects/dialect.html">sqlglot.dialects.dialect</a></span><span class="w"> </span><span class="kn">import</span> <span class="n">Dialect</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects.dialect</span><span class="w"> </span><span class="kn">import</span> <span class="n">Dialect</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn"><a href="sqlglot/generator.html">sqlglot.generator</a></span><span class="w"> </span><span class="kn">import</span> <span class="n">Generator</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn"><a href="sqlglot/tokens.html">sqlglot.tokens</a></span><span class="w"> </span><span class="kn">import</span> <span class="n">Tokenizer</span><span class="p">,</span> <span class="n">TokenType</span>
|
||||
|
||||
|
@ -952,7 +952,7 @@ make check # Full test suite & linter checks
|
|||
<div class="attr function">
|
||||
|
||||
<span class="def">def</span>
|
||||
<span class="name">tokenize</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="return-annotation">) -> <span class="n">List</span><span class="p">[</span><span class="n"><a href="sqlglot/tokens.html#Token">sqlglot.tokens.Token</a></span><span class="p">]</span>:</span></span>
|
||||
<span class="name">tokenize</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.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="sqlglot/dialects.html#Dialect">sqlglot.dialects.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.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="sqlglot/dialects.html#Dialect">sqlglot.dialects.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="return-annotation">) -> <span class="n">List</span><span class="p">[</span><span class="n"><a href="sqlglot/tokens.html#Token">sqlglot.tokens.Token</a></span><span class="p">]</span>:</span></span>
|
||||
|
||||
<label class="view-source-button" for="tokenize-view-source"><span>View Source</span></label>
|
||||
|
||||
|
@ -998,7 +998,7 @@ make check # Full test suite & linter checks
|
|||
<div class="attr function">
|
||||
|
||||
<span class="def">def</span>
|
||||
<span class="name">parse</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="o">**</span><span class="n">opts</span></span><span class="return-annotation">) -> <span class="n">List</span><span class="p">[</span><span class="n">Optional</span><span class="p">[</span><span class="n"><a href="sqlglot/expressions.html#Expression">sqlglot.expressions.Expression</a></span><span class="p">]]</span>:</span></span>
|
||||
<span class="name">parse</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.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="sqlglot/dialects.html#Dialect">sqlglot.dialects.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.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="sqlglot/dialects.html#Dialect">sqlglot.dialects.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="o">**</span><span class="n">opts</span></span><span class="return-annotation">) -> <span class="n">List</span><span class="p">[</span><span class="n">Optional</span><span class="p">[</span><span class="n"><a href="sqlglot/expressions.html#Expression">sqlglot.expressions.Expression</a></span><span class="p">]]</span>:</span></span>
|
||||
|
||||
<label class="view-source-button" for="parse-view-source"><span>View Source</span></label>
|
||||
|
||||
|
@ -1048,7 +1048,7 @@ make check # Full test suite & linter checks
|
|||
<div class="attr function">
|
||||
|
||||
<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">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>
|
||||
<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.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="sqlglot/dialects.html#Dialect">sqlglot.dialects.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.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="sqlglot/dialects.html#Dialect">sqlglot.dialects.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>
|
||||
|
||||
|
@ -1117,7 +1117,7 @@ make check # Full test suite & linter checks
|
|||
<div class="attr function">
|
||||
|
||||
<span class="def">def</span>
|
||||
<span class="name">transpile</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">write</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">identity</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>,</span><span class="param"> <span class="n">error_level</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n"><a href="sqlglot/errors.html#ErrorLevel">sqlglot.errors.ErrorLevel</a></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">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>:</span></span>
|
||||
<span class="name">transpile</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.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="sqlglot/dialects.html#Dialect">sqlglot.dialects.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">write</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.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="sqlglot/dialects.html#Dialect">sqlglot.dialects.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">identity</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>,</span><span class="param"> <span class="n">error_level</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n"><a href="sqlglot/errors.html#ErrorLevel">sqlglot.errors.ErrorLevel</a></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">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>:</span></span>
|
||||
|
||||
<label class="view-source-button" for="transpile-view-source"><span>View Source</span></label>
|
||||
|
||||
|
|
|
@ -76,8 +76,8 @@
|
|||
</span><span id="L-12"><a href="#L-12"><span class="linenos">12</span></a><span class="n">__version_tuple__</span><span class="p">:</span> <span class="n">VERSION_TUPLE</span>
|
||||
</span><span id="L-13"><a href="#L-13"><span class="linenos">13</span></a><span class="n">version_tuple</span><span class="p">:</span> <span class="n">VERSION_TUPLE</span>
|
||||
</span><span id="L-14"><a href="#L-14"><span class="linenos">14</span></a>
|
||||
</span><span id="L-15"><a href="#L-15"><span class="linenos">15</span></a><span class="n">__version__</span> <span class="o">=</span> <span class="n">version</span> <span class="o">=</span> <span class="s1">'26.3.8'</span>
|
||||
</span><span id="L-16"><a href="#L-16"><span class="linenos">16</span></a><span class="n">__version_tuple__</span> <span class="o">=</span> <span class="n">version_tuple</span> <span class="o">=</span> <span class="p">(</span><span class="mi">26</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">8</span><span class="p">)</span>
|
||||
</span><span id="L-15"><a href="#L-15"><span class="linenos">15</span></a><span class="n">__version__</span> <span class="o">=</span> <span class="n">version</span> <span class="o">=</span> <span class="s1">'26.5.0'</span>
|
||||
</span><span id="L-16"><a href="#L-16"><span class="linenos">16</span></a><span class="n">__version_tuple__</span> <span class="o">=</span> <span class="n">version_tuple</span> <span class="o">=</span> <span class="p">(</span><span class="mi">26</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -97,7 +97,7 @@
|
|||
<section id="version">
|
||||
<div class="attr variable">
|
||||
<span class="name">version</span><span class="annotation">: str</span> =
|
||||
<span class="default_value">'26.3.8'</span>
|
||||
<span class="default_value">'26.5.0'</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -109,7 +109,7 @@
|
|||
<section id="version_tuple">
|
||||
<div class="attr variable">
|
||||
<span class="name">version_tuple</span><span class="annotation">: object</span> =
|
||||
<span class="default_value">(26, 3, 8)</span>
|
||||
<span class="default_value">(26, 5, 0)</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
|
@ -32,35 +32,96 @@
|
|||
</ul>
|
||||
|
||||
|
||||
<h2>Submodules</h2>
|
||||
<ul>
|
||||
<li><a href="dialects/athena.html">athena</a></li>
|
||||
<li><a href="dialects/bigquery.html">bigquery</a></li>
|
||||
<li><a href="dialects/clickhouse.html">clickhouse</a></li>
|
||||
<li><a href="dialects/databricks.html">databricks</a></li>
|
||||
<li><a href="dialects/dialect.html">dialect</a></li>
|
||||
<li><a href="dialects/doris.html">doris</a></li>
|
||||
<li><a href="dialects/drill.html">drill</a></li>
|
||||
<li><a href="dialects/druid.html">druid</a></li>
|
||||
<li><a href="dialects/duckdb.html">duckdb</a></li>
|
||||
<li><a href="dialects/hive.html">hive</a></li>
|
||||
<li><a href="dialects/materialize.html">materialize</a></li>
|
||||
<li><a href="dialects/mysql.html">mysql</a></li>
|
||||
<li><a href="dialects/oracle.html">oracle</a></li>
|
||||
<li><a href="dialects/postgres.html">postgres</a></li>
|
||||
<li><a href="dialects/presto.html">presto</a></li>
|
||||
<li><a href="dialects/prql.html">prql</a></li>
|
||||
<li><a href="dialects/redshift.html">redshift</a></li>
|
||||
<li><a href="dialects/risingwave.html">risingwave</a></li>
|
||||
<li><a href="dialects/snowflake.html">snowflake</a></li>
|
||||
<li><a href="dialects/spark.html">spark</a></li>
|
||||
<li><a href="dialects/spark2.html">spark2</a></li>
|
||||
<li><a href="dialects/sqlite.html">sqlite</a></li>
|
||||
<li><a href="dialects/starrocks.html">starrocks</a></li>
|
||||
<li><a href="dialects/tableau.html">tableau</a></li>
|
||||
<li><a href="dialects/teradata.html">teradata</a></li>
|
||||
<li><a href="dialects/trino.html">trino</a></li>
|
||||
<li><a href="dialects/tsql.html">tsql</a></li>
|
||||
|
||||
<h2>API Documentation</h2>
|
||||
<ul class="memberlist">
|
||||
<li>
|
||||
<a class="variable" href="#Athena">Athena</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="variable" href="#BigQuery">BigQuery</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="variable" href="#ClickHouse">ClickHouse</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="variable" href="#Databricks">Databricks</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="variable" href="#Doris">Doris</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="variable" href="#Drill">Drill</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="variable" href="#Druid">Druid</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="variable" href="#DuckDB">DuckDB</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="variable" href="#Dune">Dune</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="variable" href="#Hive">Hive</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="variable" href="#Materialize">Materialize</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="variable" href="#MySQL">MySQL</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="variable" href="#Oracle">Oracle</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="variable" href="#Postgres">Postgres</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="variable" href="#Presto">Presto</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="variable" href="#PRQL">PRQL</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="variable" href="#Redshift">Redshift</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="variable" href="#RisingWave">RisingWave</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="variable" href="#Snowflake">Snowflake</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="variable" href="#Spark">Spark</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="variable" href="#Spark2">Spark2</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="variable" href="#SQLite">SQLite</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="variable" href="#StarRocks">StarRocks</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="variable" href="#Tableau">Tableau</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="variable" href="#Teradata">Teradata</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="variable" href="#Trino">Trino</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="variable" href="#TSQL">TSQL</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="variable" href="#Dialect">Dialect</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="variable" href="#Dialects">Dialects</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
@ -83,9 +144,9 @@
|
|||
to write portable SQL code. SQLGlot bridges all the different variations, called "dialects", with an extensible
|
||||
SQL transpilation framework.</p>
|
||||
|
||||
<p>The base <code><a href="dialects/dialect.html#Dialect">sqlglot.dialects.dialect.Dialect</a></code> class implements a generic dialect that aims to be as universal as possible.</p>
|
||||
<p>The base <code><a href="#Dialect">sqlglot.dialects.dialect.Dialect</a></code> class implements a generic dialect that aims to be as universal as possible.</p>
|
||||
|
||||
<p>Each SQL variation has its own <code>Dialect</code> subclass, extending the corresponding <code>Tokenizer</code>, <code>Parser</code> and <code>Generator</code>
|
||||
<p>Each SQL variation has its own <code><a href="#Dialect">Dialect</a></code> subclass, extending the corresponding <code>Tokenizer</code>, <code>Parser</code> and <code>Generator</code>
|
||||
classes as needed.</p>
|
||||
|
||||
<h3 id="implementing-a-custom-dialect">Implementing a custom Dialect</h3>
|
||||
|
@ -94,7 +155,7 @@ classes as needed.</p>
|
|||
|
||||
<div class="pdoc-code codehilite">
|
||||
<pre><span></span><code><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot</span><span class="w"> </span><span class="kn">import</span> <span class="n">exp</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn"><a href="dialects/dialect.html">sqlglot.dialects.dialect</a></span><span class="w"> </span><span class="kn">import</span> <span class="n">Dialect</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects.dialect</span><span class="w"> </span><span class="kn">import</span> <span class="n">Dialect</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn"><a href="generator.html">sqlglot.generator</a></span><span class="w"> </span><span class="kn">import</span> <span class="n">Generator</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn"><a href="tokens.html">sqlglot.tokens</a></span><span class="w"> </span><span class="kn">import</span> <span class="n">Tokenizer</span><span class="p">,</span> <span class="n">TokenType</span>
|
||||
|
||||
|
@ -132,7 +193,7 @@ classes as needed.</p>
|
|||
</code></pre>
|
||||
</div>
|
||||
|
||||
<p>The above example demonstrates how certain parts of the base <code>Dialect</code> class can be overridden to match a different
|
||||
<p>The above example demonstrates how certain parts of the base <code><a href="#Dialect">Dialect</a></code> class can be overridden to match a different
|
||||
specification. Even though it is a fairly realistic starting point, we strongly encourage the reader to study existing
|
||||
dialect implementations in order to understand how their various components can be modified, depending on the use-case.</p>
|
||||
|
||||
|
@ -152,90 +213,462 @@ dialect implementations in order to understand how their various components can
|
|||
</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a><span class="sd">SQL transpilation framework.</span>
|
||||
</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a>
|
||||
</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a><span class="sd">The base `sqlglot.dialects.dialect.Dialect` class implements a generic dialect that aims to be as universal as possible.</span>
|
||||
</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="sd">Each SQL variation has its own `Dialect` subclass, extending the corresponding `Tokenizer`, `Parser` and `Generator`</span>
|
||||
</span><span id="L-12"><a href="#L-12"><span class="linenos">12</span></a><span class="sd">classes as needed.</span>
|
||||
</span><span id="L-13"><a href="#L-13"><span class="linenos">13</span></a>
|
||||
</span><span id="L-14"><a href="#L-14"><span class="linenos">14</span></a><span class="sd">### Implementing a custom Dialect</span>
|
||||
</span><span id="L-15"><a href="#L-15"><span class="linenos">15</span></a>
|
||||
</span><span id="L-16"><a href="#L-16"><span class="linenos">16</span></a><span class="sd">Creating a new SQL dialect may seem complicated at first, but it is actually quite simple in SQLGlot:</span>
|
||||
</span><span id="L-17"><a href="#L-17"><span class="linenos">17</span></a>
|
||||
</span><span id="L-18"><a href="#L-18"><span class="linenos">18</span></a><span class="sd">```python</span>
|
||||
</span><span id="L-19"><a href="#L-19"><span class="linenos">19</span></a><span class="sd">from sqlglot import exp</span>
|
||||
</span><span id="L-20"><a href="#L-20"><span class="linenos">20</span></a><span class="sd">from sqlglot.dialects.dialect import Dialect</span>
|
||||
</span><span id="L-21"><a href="#L-21"><span class="linenos">21</span></a><span class="sd">from sqlglot.generator import Generator</span>
|
||||
</span><span id="L-22"><a href="#L-22"><span class="linenos">22</span></a><span class="sd">from sqlglot.tokens import Tokenizer, TokenType</span>
|
||||
</span><span id="L-23"><a href="#L-23"><span class="linenos">23</span></a>
|
||||
</span><span id="L-24"><a href="#L-24"><span class="linenos">24</span></a>
|
||||
</span><span id="L-25"><a href="#L-25"><span class="linenos">25</span></a><span class="sd">class Custom(Dialect):</span>
|
||||
</span><span id="L-26"><a href="#L-26"><span class="linenos">26</span></a><span class="sd"> class Tokenizer(Tokenizer):</span>
|
||||
</span><span id="L-27"><a href="#L-27"><span class="linenos">27</span></a><span class="sd"> QUOTES = ["'", '"'] # Strings can be delimited by either single or double quotes</span>
|
||||
</span><span id="L-28"><a href="#L-28"><span class="linenos">28</span></a><span class="sd"> IDENTIFIERS = ["`"] # Identifiers can be delimited by backticks</span>
|
||||
</span><span id="L-29"><a href="#L-29"><span class="linenos">29</span></a>
|
||||
</span><span id="L-30"><a href="#L-30"><span class="linenos">30</span></a><span class="sd"> # Associates certain meaningful words with tokens that capture their intent</span>
|
||||
</span><span id="L-31"><a href="#L-31"><span class="linenos">31</span></a><span class="sd"> KEYWORDS = {</span>
|
||||
</span><span id="L-32"><a href="#L-32"><span class="linenos">32</span></a><span class="sd"> **Tokenizer.KEYWORDS,</span>
|
||||
</span><span id="L-33"><a href="#L-33"><span class="linenos">33</span></a><span class="sd"> "INT64": TokenType.BIGINT,</span>
|
||||
</span><span id="L-34"><a href="#L-34"><span class="linenos">34</span></a><span class="sd"> "FLOAT64": TokenType.DOUBLE,</span>
|
||||
</span><span id="L-35"><a href="#L-35"><span class="linenos">35</span></a><span class="sd"> }</span>
|
||||
</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="sd"> class Generator(Generator):</span>
|
||||
</span><span id="L-38"><a href="#L-38"><span class="linenos">38</span></a><span class="sd"> # Specifies how AST nodes, i.e. subclasses of exp.Expression, should be converted into SQL</span>
|
||||
</span><span id="L-39"><a href="#L-39"><span class="linenos">39</span></a><span class="sd"> TRANSFORMS = {</span>
|
||||
</span><span id="L-40"><a href="#L-40"><span class="linenos">40</span></a><span class="sd"> exp.Array: lambda self, e: f"[{self.expressions(e)}]",</span>
|
||||
</span><span id="L-41"><a href="#L-41"><span class="linenos">41</span></a><span class="sd"> }</span>
|
||||
</span><span id="L-42"><a href="#L-42"><span class="linenos">42</span></a>
|
||||
</span><span id="L-43"><a href="#L-43"><span class="linenos">43</span></a><span class="sd"> # Specifies how AST nodes representing data types should be converted into SQL</span>
|
||||
</span><span id="L-44"><a href="#L-44"><span class="linenos">44</span></a><span class="sd"> TYPE_MAPPING = {</span>
|
||||
</span><span id="L-45"><a href="#L-45"><span class="linenos">45</span></a><span class="sd"> exp.DataType.Type.TINYINT: "INT64",</span>
|
||||
</span><span id="L-46"><a href="#L-46"><span class="linenos">46</span></a><span class="sd"> exp.DataType.Type.SMALLINT: "INT64",</span>
|
||||
</span><span id="L-47"><a href="#L-47"><span class="linenos">47</span></a><span class="sd"> exp.DataType.Type.INT: "INT64",</span>
|
||||
</span><span id="L-48"><a href="#L-48"><span class="linenos">48</span></a><span class="sd"> exp.DataType.Type.BIGINT: "INT64",</span>
|
||||
</span><span id="L-49"><a href="#L-49"><span class="linenos">49</span></a><span class="sd"> exp.DataType.Type.DECIMAL: "NUMERIC",</span>
|
||||
</span><span id="L-50"><a href="#L-50"><span class="linenos">50</span></a><span class="sd"> exp.DataType.Type.FLOAT: "FLOAT64",</span>
|
||||
</span><span id="L-51"><a href="#L-51"><span class="linenos">51</span></a><span class="sd"> exp.DataType.Type.DOUBLE: "FLOAT64",</span>
|
||||
</span><span id="L-52"><a href="#L-52"><span class="linenos">52</span></a><span class="sd"> exp.DataType.Type.BOOLEAN: "BOOL",</span>
|
||||
</span><span id="L-53"><a href="#L-53"><span class="linenos">53</span></a><span class="sd"> exp.DataType.Type.TEXT: "STRING",</span>
|
||||
</span><span id="L-54"><a href="#L-54"><span class="linenos">54</span></a><span class="sd"> }</span>
|
||||
</span><span id="L-55"><a href="#L-55"><span class="linenos">55</span></a><span class="sd">```</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="sd">The above example demonstrates how certain parts of the base `Dialect` class can be overridden to match a different</span>
|
||||
</span><span id="L-58"><a href="#L-58"><span class="linenos">58</span></a><span class="sd">specification. Even though it is a fairly realistic starting point, we strongly encourage the reader to study existing</span>
|
||||
</span><span id="L-59"><a href="#L-59"><span class="linenos">59</span></a><span class="sd">dialect implementations in order to understand how their various components can be modified, depending on the use-case.</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="sd">----</span>
|
||||
</span><span id="L-62"><a href="#L-62"><span class="linenos">62</span></a><span class="sd">"""</span>
|
||||
</span><span id="L-63"><a href="#L-63"><span class="linenos">63</span></a>
|
||||
</span><span id="L-64"><a href="#L-64"><span class="linenos">64</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects.athena</span><span class="w"> </span><span class="kn">import</span> <span class="n">Athena</span>
|
||||
</span><span id="L-65"><a href="#L-65"><span class="linenos">65</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects.bigquery</span><span class="w"> </span><span class="kn">import</span> <span class="n">BigQuery</span>
|
||||
</span><span id="L-66"><a href="#L-66"><span class="linenos">66</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects.clickhouse</span><span class="w"> </span><span class="kn">import</span> <span class="n">ClickHouse</span>
|
||||
</span><span id="L-67"><a href="#L-67"><span class="linenos">67</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects.databricks</span><span class="w"> </span><span class="kn">import</span> <span class="n">Databricks</span>
|
||||
</span><span id="L-68"><a href="#L-68"><span class="linenos">68</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects.dialect</span><span class="w"> </span><span class="kn">import</span> <span class="n">Dialect</span><span class="p">,</span> <span class="n">Dialects</span>
|
||||
</span><span id="L-69"><a href="#L-69"><span class="linenos">69</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects.doris</span><span class="w"> </span><span class="kn">import</span> <span class="n">Doris</span>
|
||||
</span><span id="L-70"><a href="#L-70"><span class="linenos">70</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects.drill</span><span class="w"> </span><span class="kn">import</span> <span class="n">Drill</span>
|
||||
</span><span id="L-71"><a href="#L-71"><span class="linenos">71</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects.druid</span><span class="w"> </span><span class="kn">import</span> <span class="n">Druid</span>
|
||||
</span><span id="L-72"><a href="#L-72"><span class="linenos">72</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects.duckdb</span><span class="w"> </span><span class="kn">import</span> <span class="n">DuckDB</span>
|
||||
</span><span id="L-73"><a href="#L-73"><span class="linenos">73</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects.hive</span><span class="w"> </span><span class="kn">import</span> <span class="n">Hive</span>
|
||||
</span><span id="L-74"><a href="#L-74"><span class="linenos">74</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects.materialize</span><span class="w"> </span><span class="kn">import</span> <span class="n">Materialize</span>
|
||||
</span><span id="L-75"><a href="#L-75"><span class="linenos">75</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects.mysql</span><span class="w"> </span><span class="kn">import</span> <span class="n">MySQL</span>
|
||||
</span><span id="L-76"><a href="#L-76"><span class="linenos">76</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects.oracle</span><span class="w"> </span><span class="kn">import</span> <span class="n">Oracle</span>
|
||||
</span><span id="L-77"><a href="#L-77"><span class="linenos">77</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects.postgres</span><span class="w"> </span><span class="kn">import</span> <span class="n">Postgres</span>
|
||||
</span><span id="L-78"><a href="#L-78"><span class="linenos">78</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects.presto</span><span class="w"> </span><span class="kn">import</span> <span class="n">Presto</span>
|
||||
</span><span id="L-79"><a href="#L-79"><span class="linenos">79</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects.prql</span><span class="w"> </span><span class="kn">import</span> <span class="n">PRQL</span>
|
||||
</span><span id="L-80"><a href="#L-80"><span class="linenos">80</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects.redshift</span><span class="w"> </span><span class="kn">import</span> <span class="n">Redshift</span>
|
||||
</span><span id="L-81"><a href="#L-81"><span class="linenos">81</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects.risingwave</span><span class="w"> </span><span class="kn">import</span> <span class="n">RisingWave</span>
|
||||
</span><span id="L-82"><a href="#L-82"><span class="linenos">82</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects.snowflake</span><span class="w"> </span><span class="kn">import</span> <span class="n">Snowflake</span>
|
||||
</span><span id="L-83"><a href="#L-83"><span class="linenos">83</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects.spark</span><span class="w"> </span><span class="kn">import</span> <span class="n">Spark</span>
|
||||
</span><span id="L-84"><a href="#L-84"><span class="linenos">84</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects.spark2</span><span class="w"> </span><span class="kn">import</span> <span class="n">Spark2</span>
|
||||
</span><span id="L-85"><a href="#L-85"><span class="linenos">85</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects.sqlite</span><span class="w"> </span><span class="kn">import</span> <span class="n">SQLite</span>
|
||||
</span><span id="L-86"><a href="#L-86"><span class="linenos">86</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects.starrocks</span><span class="w"> </span><span class="kn">import</span> <span class="n">StarRocks</span>
|
||||
</span><span id="L-87"><a href="#L-87"><span class="linenos">87</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects.tableau</span><span class="w"> </span><span class="kn">import</span> <span class="n">Tableau</span>
|
||||
</span><span id="L-88"><a href="#L-88"><span class="linenos">88</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects.teradata</span><span class="w"> </span><span class="kn">import</span> <span class="n">Teradata</span>
|
||||
</span><span id="L-89"><a href="#L-89"><span class="linenos">89</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects.trino</span><span class="w"> </span><span class="kn">import</span> <span class="n">Trino</span>
|
||||
</span><span id="L-90"><a href="#L-90"><span class="linenos">90</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects.tsql</span><span class="w"> </span><span class="kn">import</span> <span class="n">TSQL</span>
|
||||
</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="sd">Each SQL variation has its own `Dialect` subclass, extending the corresponding `Tokenizer`, `Parser` and `Generator`</span>
|
||||
</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a><span class="sd">classes as needed.</span>
|
||||
</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a>
|
||||
</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a><span class="sd">### Implementing a custom Dialect</span>
|
||||
</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a>
|
||||
</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a><span class="sd">Creating a new SQL dialect may seem complicated at first, but it is actually quite simple in SQLGlot:</span>
|
||||
</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a>
|
||||
</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a><span class="sd">```python</span>
|
||||
</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a><span class="sd">from sqlglot import exp</span>
|
||||
</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a><span class="sd">from sqlglot.dialects.dialect import Dialect</span>
|
||||
</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a><span class="sd">from sqlglot.generator import Generator</span>
|
||||
</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a><span class="sd">from sqlglot.tokens import Tokenizer, TokenType</span>
|
||||
</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a>
|
||||
</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a>
|
||||
</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a><span class="sd">class Custom(Dialect):</span>
|
||||
</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a><span class="sd"> class Tokenizer(Tokenizer):</span>
|
||||
</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a><span class="sd"> QUOTES = ["'", '"'] # Strings can be delimited by either single or double quotes</span>
|
||||
</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a><span class="sd"> IDENTIFIERS = ["`"] # Identifiers can be delimited by backticks</span>
|
||||
</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a>
|
||||
</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a><span class="sd"> # Associates certain meaningful words with tokens that capture their intent</span>
|
||||
</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a><span class="sd"> KEYWORDS = {</span>
|
||||
</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a><span class="sd"> **Tokenizer.KEYWORDS,</span>
|
||||
</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a><span class="sd"> "INT64": TokenType.BIGINT,</span>
|
||||
</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a><span class="sd"> "FLOAT64": TokenType.DOUBLE,</span>
|
||||
</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a><span class="sd"> }</span>
|
||||
</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="sd"> class Generator(Generator):</span>
|
||||
</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a><span class="sd"> # Specifies how AST nodes, i.e. subclasses of exp.Expression, should be converted into SQL</span>
|
||||
</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a><span class="sd"> TRANSFORMS = {</span>
|
||||
</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a><span class="sd"> exp.Array: lambda self, e: f"[{self.expressions(e)}]",</span>
|
||||
</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a><span class="sd"> }</span>
|
||||
</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a>
|
||||
</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a><span class="sd"> # Specifies how AST nodes representing data types should be converted into SQL</span>
|
||||
</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a><span class="sd"> TYPE_MAPPING = {</span>
|
||||
</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a><span class="sd"> exp.DataType.Type.TINYINT: "INT64",</span>
|
||||
</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a><span class="sd"> exp.DataType.Type.SMALLINT: "INT64",</span>
|
||||
</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a><span class="sd"> exp.DataType.Type.INT: "INT64",</span>
|
||||
</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a><span class="sd"> exp.DataType.Type.BIGINT: "INT64",</span>
|
||||
</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a><span class="sd"> exp.DataType.Type.DECIMAL: "NUMERIC",</span>
|
||||
</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a><span class="sd"> exp.DataType.Type.FLOAT: "FLOAT64",</span>
|
||||
</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a><span class="sd"> exp.DataType.Type.DOUBLE: "FLOAT64",</span>
|
||||
</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a><span class="sd"> exp.DataType.Type.BOOLEAN: "BOOL",</span>
|
||||
</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a><span class="sd"> exp.DataType.Type.TEXT: "STRING",</span>
|
||||
</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a><span class="sd"> }</span>
|
||||
</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a><span class="sd">```</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="sd">The above example demonstrates how certain parts of the base `Dialect` class can be overridden to match a different</span>
|
||||
</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a><span class="sd">specification. Even though it is a fairly realistic starting point, we strongly encourage the reader to study existing</span>
|
||||
</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a><span class="sd">dialect implementations in order to understand how their various components can be modified, depending on the use-case.</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="sd">----</span>
|
||||
</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a><span class="sd">"""</span>
|
||||
</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a>
|
||||
</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">importlib</span>
|
||||
</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a>
|
||||
</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a><span class="n">DIALECTS</span> <span class="o">=</span> <span class="p">[</span>
|
||||
</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="s2">"Athena"</span><span class="p">,</span>
|
||||
</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="s2">"BigQuery"</span><span class="p">,</span>
|
||||
</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="s2">"ClickHouse"</span><span class="p">,</span>
|
||||
</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="s2">"Databricks"</span><span class="p">,</span>
|
||||
</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="s2">"Doris"</span><span class="p">,</span>
|
||||
</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="s2">"Drill"</span><span class="p">,</span>
|
||||
</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="s2">"Druid"</span><span class="p">,</span>
|
||||
</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="s2">"DuckDB"</span><span class="p">,</span>
|
||||
</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="s2">"Dune"</span><span class="p">,</span>
|
||||
</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="s2">"Hive"</span><span class="p">,</span>
|
||||
</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="s2">"Materialize"</span><span class="p">,</span>
|
||||
</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="s2">"MySQL"</span><span class="p">,</span>
|
||||
</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="s2">"Oracle"</span><span class="p">,</span>
|
||||
</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="s2">"Postgres"</span><span class="p">,</span>
|
||||
</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="s2">"Presto"</span><span class="p">,</span>
|
||||
</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="s2">"PRQL"</span><span class="p">,</span>
|
||||
</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="s2">"Redshift"</span><span class="p">,</span>
|
||||
</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="s2">"RisingWave"</span><span class="p">,</span>
|
||||
</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="s2">"Snowflake"</span><span class="p">,</span>
|
||||
</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="s2">"Spark"</span><span class="p">,</span>
|
||||
</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="s2">"Spark2"</span><span class="p">,</span>
|
||||
</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="s2">"SQLite"</span><span class="p">,</span>
|
||||
</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="s2">"StarRocks"</span><span class="p">,</span>
|
||||
</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="s2">"Tableau"</span><span class="p">,</span>
|
||||
</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="s2">"Teradata"</span><span class="p">,</span>
|
||||
</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="s2">"Trino"</span><span class="p">,</span>
|
||||
</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="s2">"TSQL"</span><span class="p">,</span>
|
||||
</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a><span class="p">]</span>
|
||||
</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="n">MODULE_BY_DIALECT</span> <span class="o">=</span> <span class="p">{</span><span class="n">name</span><span class="p">:</span> <span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">DIALECTS</span><span class="p">}</span>
|
||||
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a><span class="n">DIALECT_MODULE_NAMES</span> <span class="o">=</span> <span class="n">MODULE_BY_DIALECT</span><span class="o">.</span><span class="n">values</span><span class="p">()</span>
|
||||
</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a>
|
||||
</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a><span class="n">MODULE_BY_ATTRIBUTE</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="o">**</span><span class="n">MODULE_BY_DIALECT</span><span class="p">,</span>
|
||||
</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="s2">"Dialect"</span><span class="p">:</span> <span class="s2">"dialect"</span><span class="p">,</span>
|
||||
</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="s2">"Dialects"</span><span class="p">:</span> <span class="s2">"dialect"</span><span class="p">,</span>
|
||||
</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a><span class="p">}</span>
|
||||
</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a>
|
||||
</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a><span class="n">__all__</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">MODULE_BY_ATTRIBUTE</span><span class="p">)</span>
|
||||
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a>
|
||||
</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a>
|
||||
</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a><span class="k">def</span><span class="w"> </span><span class="fm">__getattr__</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
|
||||
</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="n">module_name</span> <span class="o">=</span> <span class="n">MODULE_BY_ATTRIBUTE</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</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">module_name</span><span class="p">:</span>
|
||||
</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="n">module</span> <span class="o">=</span> <span class="n">importlib</span><span class="o">.</span><span class="n">import_module</span><span class="p">(</span><span class="sa">f</span><span class="s2">"sqlglot.dialects.</span><span class="si">{</span><span class="n">module_name</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="k">return</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
|
||||
</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a>
|
||||
</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"module </span><span class="si">{</span><span class="vm">__name__</span><span class="si">}</span><span class="s2"> has no attribute </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
</section>
|
||||
<section id="Athena">
|
||||
<div class="attr variable">
|
||||
<span class="name">Athena</span> =
|
||||
<span class="default_value"><MagicMock id='139990150988080'></span>
|
||||
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#Athena"></a>
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
<section id="BigQuery">
|
||||
<div class="attr variable">
|
||||
<span class="name">BigQuery</span> =
|
||||
<span class="default_value"><MagicMock id='139990155292544'></span>
|
||||
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#BigQuery"></a>
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
<section id="ClickHouse">
|
||||
<div class="attr variable">
|
||||
<span class="name">ClickHouse</span> =
|
||||
<span class="default_value"><MagicMock id='139990146633968'></span>
|
||||
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#ClickHouse"></a>
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
<section id="Databricks">
|
||||
<div class="attr variable">
|
||||
<span class="name">Databricks</span> =
|
||||
<span class="default_value"><MagicMock id='139990146641264'></span>
|
||||
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#Databricks"></a>
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
<section id="Doris">
|
||||
<div class="attr variable">
|
||||
<span class="name">Doris</span> =
|
||||
<span class="default_value"><MagicMock id='139990155444768'></span>
|
||||
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#Doris"></a>
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
<section id="Drill">
|
||||
<div class="attr variable">
|
||||
<span class="name">Drill</span> =
|
||||
<span class="default_value"><MagicMock id='139990142497552'></span>
|
||||
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#Drill"></a>
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
<section id="Druid">
|
||||
<div class="attr variable">
|
||||
<span class="name">Druid</span> =
|
||||
<span class="default_value"><MagicMock id='139990140097664'></span>
|
||||
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#Druid"></a>
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
<section id="DuckDB">
|
||||
<div class="attr variable">
|
||||
<span class="name">DuckDB</span> =
|
||||
<span class="default_value"><MagicMock id='139990145643760'></span>
|
||||
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#DuckDB"></a>
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
<section id="Dune">
|
||||
<div class="attr variable">
|
||||
<span class="name">Dune</span> =
|
||||
<span class="default_value"><MagicMock id='139990155886064'></span>
|
||||
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#Dune"></a>
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
<section id="Hive">
|
||||
<div class="attr variable">
|
||||
<span class="name">Hive</span> =
|
||||
<span class="default_value"><MagicMock id='139990155879632'></span>
|
||||
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#Hive"></a>
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
<section id="Materialize">
|
||||
<div class="attr variable">
|
||||
<span class="name">Materialize</span> =
|
||||
<span class="default_value"><MagicMock id='139990155535520'></span>
|
||||
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#Materialize"></a>
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
<section id="MySQL">
|
||||
<div class="attr variable">
|
||||
<span class="name">MySQL</span> =
|
||||
<span class="default_value"><MagicMock id='139990145679760'></span>
|
||||
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#MySQL"></a>
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
<section id="Oracle">
|
||||
<div class="attr variable">
|
||||
<span class="name">Oracle</span> =
|
||||
<span class="default_value"><MagicMock id='139990144694544'></span>
|
||||
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#Oracle"></a>
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
<section id="Postgres">
|
||||
<div class="attr variable">
|
||||
<span class="name">Postgres</span> =
|
||||
<span class="default_value"><MagicMock id='139990144681200'></span>
|
||||
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#Postgres"></a>
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
<section id="Presto">
|
||||
<div class="attr variable">
|
||||
<span class="name">Presto</span> =
|
||||
<span class="default_value"><MagicMock id='139990155130576'></span>
|
||||
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#Presto"></a>
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
<section id="PRQL">
|
||||
<div class="attr variable">
|
||||
<span class="name">PRQL</span> =
|
||||
<span class="default_value"><MagicMock id='139990156080368'></span>
|
||||
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#PRQL"></a>
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
<section id="Redshift">
|
||||
<div class="attr variable">
|
||||
<span class="name">Redshift</span> =
|
||||
<span class="default_value"><MagicMock id='139990156070864'></span>
|
||||
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#Redshift"></a>
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
<section id="RisingWave">
|
||||
<div class="attr variable">
|
||||
<span class="name">RisingWave</span> =
|
||||
<span class="default_value"><MagicMock id='139990147260640'></span>
|
||||
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#RisingWave"></a>
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
<section id="Snowflake">
|
||||
<div class="attr variable">
|
||||
<span class="name">Snowflake</span> =
|
||||
<span class="default_value"><MagicMock id='139990147258336'></span>
|
||||
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#Snowflake"></a>
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
<section id="Spark">
|
||||
<div class="attr variable">
|
||||
<span class="name">Spark</span> =
|
||||
<span class="default_value"><MagicMock id='139990155948672'></span>
|
||||
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#Spark"></a>
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
<section id="Spark2">
|
||||
<div class="attr variable">
|
||||
<span class="name">Spark2</span> =
|
||||
<span class="default_value"><MagicMock id='139990154264192'></span>
|
||||
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#Spark2"></a>
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
<section id="SQLite">
|
||||
<div class="attr variable">
|
||||
<span class="name">SQLite</span> =
|
||||
<span class="default_value"><MagicMock id='139990145087616'></span>
|
||||
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#SQLite"></a>
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
<section id="StarRocks">
|
||||
<div class="attr variable">
|
||||
<span class="name">StarRocks</span> =
|
||||
<span class="default_value"><MagicMock id='139990142730592'></span>
|
||||
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#StarRocks"></a>
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
<section id="Tableau">
|
||||
<div class="attr variable">
|
||||
<span class="name">Tableau</span> =
|
||||
<span class="default_value"><MagicMock id='139990155788928'></span>
|
||||
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#Tableau"></a>
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
<section id="Teradata">
|
||||
<div class="attr variable">
|
||||
<span class="name">Teradata</span> =
|
||||
<span class="default_value"><MagicMock id='139990146321568'></span>
|
||||
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#Teradata"></a>
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
<section id="Trino">
|
||||
<div class="attr variable">
|
||||
<span class="name">Trino</span> =
|
||||
<span class="default_value"><MagicMock id='139990140471472'></span>
|
||||
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#Trino"></a>
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
<section id="TSQL">
|
||||
<div class="attr variable">
|
||||
<span class="name">TSQL</span> =
|
||||
<span class="default_value"><MagicMock id='139990140479392'></span>
|
||||
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#TSQL"></a>
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
<section id="Dialect">
|
||||
<div class="attr variable">
|
||||
<span class="name">Dialect</span> =
|
||||
<span class="default_value"><MagicMock id='139990140487376'></span>
|
||||
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#Dialect"></a>
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
<section id="Dialects">
|
||||
<div class="attr variable">
|
||||
<span class="name">Dialects</span> =
|
||||
<span class="default_value"><MagicMock id='139990140495296'></span>
|
||||
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#Dialects"></a>
|
||||
|
||||
|
||||
|
||||
</section>
|
||||
</main>
|
||||
<script>
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1720,7 +1720,7 @@ Chawathe et al. described in <a href="http://ilpubs.stanford.edu:8090/115/1/1995
|
|||
<input id="ChangeDistiller.__init__-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||
<div class="attr function">
|
||||
|
||||
<span class="name">ChangeDistiller</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">f</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">0.6</span>,</span><span class="param"> <span class="n">t</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">0.6</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="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="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>
|
||||
<span class="name">ChangeDistiller</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">f</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">0.6</span>,</span><span class="param"> <span class="n">t</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">0.6</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="dialects.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="dialects.html#Dialect">sqlglot.dialects.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>
|
||||
|
||||
<label class="view-source-button" for="ChangeDistiller.__init__-view-source"><span>View Source</span></label>
|
||||
|
||||
|
|
|
@ -446,7 +446,7 @@
|
|||
<div class="attr function">
|
||||
|
||||
<span class="def">def</span>
|
||||
<span class="name">execute</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 class="o">|</span> <span class="n"><a href="expressions.html#Expression">sqlglot.expressions.Expression</a></span>,</span><span class="param"> <span class="n">schema</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="n"><a href="schema.html#Schema">sqlglot.schema.Schema</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">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="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="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="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="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">tables</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">) -> <span class="n"><a href="executor/table.html#Table">sqlglot.executor.table.Table</a></span>:</span></span>
|
||||
<span class="name">execute</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 class="o">|</span> <span class="n"><a href="expressions.html#Expression">sqlglot.expressions.Expression</a></span>,</span><span class="param"> <span class="n">schema</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="n"><a href="schema.html#Schema">sqlglot.schema.Schema</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">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="dialects.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="dialects.html#Dialect">sqlglot.dialects.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="dialects.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="dialects.html#Dialect">sqlglot.dialects.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">tables</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">) -> <span class="n"><a href="executor/table.html#Table">sqlglot.executor.table.Table</a></span>:</span></span>
|
||||
|
||||
<label class="view-source-button" for="execute-view-source"><span>View Source</span></label>
|
||||
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -778,7 +778,7 @@
|
|||
<div class="attr function">
|
||||
|
||||
<span class="def">def</span>
|
||||
<span class="name">ensure_tables</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">d</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">]</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="../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="../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="return-annotation">) -> <span class="n"><a href="#Tables">Tables</a></span>:</span></span>
|
||||
<span class="name">ensure_tables</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">d</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">]</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="../dialects.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="../dialects.html#Dialect">sqlglot.dialects.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="return-annotation">) -> <span class="n"><a href="#Tables">Tables</a></span>:</span></span>
|
||||
|
||||
<label class="view-source-button" for="ensure_tables-view-source"><span>View Source</span></label>
|
||||
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load diff
|
@ -1920,7 +1920,7 @@ belong to some totally-ordered set.</p>
|
|||
<section id="DATE_UNITS">
|
||||
<div class="attr variable">
|
||||
<span class="name">DATE_UNITS</span> =
|
||||
<span class="default_value">{'quarter', 'month', 'year_month', 'year', 'week', 'day'}</span>
|
||||
<span class="default_value">{'month', 'day', 'week', 'quarter', 'year', 'year_month'}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
|
@ -443,7 +443,7 @@
|
|||
<div class="attr function">
|
||||
|
||||
<span class="def">def</span>
|
||||
<span class="name">parse</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">path</span><span class="p">:</span> <span class="nb">str</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="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="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="return-annotation">) -> <span class="n"><a href="expressions.html#JSONPath">sqlglot.expressions.JSONPath</a></span>:</span></span>
|
||||
<span class="name">parse</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">path</span><span class="p">:</span> <span class="nb">str</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="dialects.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="dialects.html#Dialect">sqlglot.dialects.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="return-annotation">) -> <span class="n"><a href="expressions.html#JSONPath">sqlglot.expressions.JSONPath</a></span>:</span></span>
|
||||
|
||||
<label class="view-source-button" for="parse-view-source"><span>View Source</span></label>
|
||||
|
||||
|
@ -641,7 +641,7 @@
|
|||
<div class="attr variable">
|
||||
<span class="name">ALL_JSON_PATH_PARTS</span> =
|
||||
<input id="ALL_JSON_PATH_PARTS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||
<label class="view-value-button pdoc-button" for="ALL_JSON_PATH_PARTS-view-value"></label><span class="default_value">{<class '<a href="expressions.html#JSONPathKey">sqlglot.expressions.JSONPathKey</a>'>, <class '<a href="expressions.html#JSONPathWildcard">sqlglot.expressions.JSONPathWildcard</a>'>, <class '<a href="expressions.html#JSONPathFilter">sqlglot.expressions.JSONPathFilter</a>'>, <class '<a href="expressions.html#JSONPathUnion">sqlglot.expressions.JSONPathUnion</a>'>, <class '<a href="expressions.html#JSONPathSubscript">sqlglot.expressions.JSONPathSubscript</a>'>, <class '<a href="expressions.html#JSONPathSelector">sqlglot.expressions.JSONPathSelector</a>'>, <class '<a href="expressions.html#JSONPathSlice">sqlglot.expressions.JSONPathSlice</a>'>, <class '<a href="expressions.html#JSONPathScript">sqlglot.expressions.JSONPathScript</a>'>, <class '<a href="expressions.html#JSONPathRoot">sqlglot.expressions.JSONPathRoot</a>'>, <class '<a href="expressions.html#JSONPathRecursive">sqlglot.expressions.JSONPathRecursive</a>'>}</span>
|
||||
<label class="view-value-button pdoc-button" for="ALL_JSON_PATH_PARTS-view-value"></label><span class="default_value">{<class '<a href="expressions.html#JSONPathSelector">sqlglot.expressions.JSONPathSelector</a>'>, <class '<a href="expressions.html#JSONPathSlice">sqlglot.expressions.JSONPathSlice</a>'>, <class '<a href="expressions.html#JSONPathWildcard">sqlglot.expressions.JSONPathWildcard</a>'>, <class '<a href="expressions.html#JSONPathScript">sqlglot.expressions.JSONPathScript</a>'>, <class '<a href="expressions.html#JSONPathRoot">sqlglot.expressions.JSONPathRoot</a>'>, <class '<a href="expressions.html#JSONPathRecursive">sqlglot.expressions.JSONPathRecursive</a>'>, <class '<a href="expressions.html#JSONPathKey">sqlglot.expressions.JSONPathKey</a>'>, <class '<a href="expressions.html#JSONPathUnion">sqlglot.expressions.JSONPathUnion</a>'>, <class '<a href="expressions.html#JSONPathFilter">sqlglot.expressions.JSONPathFilter</a>'>, <class '<a href="expressions.html#JSONPathSubscript">sqlglot.expressions.JSONPathSubscript</a>'>}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
|
@ -726,7 +726,7 @@
|
|||
<div class="attr function">
|
||||
|
||||
<span class="def">def</span>
|
||||
<span class="name">to_html</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">dialect</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n"><a href="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="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="o">**</span><span class="n">opts</span></span><span class="return-annotation">) -> <span class="n"><a href="#GraphHTML">GraphHTML</a></span>:</span></span>
|
||||
<span class="name">to_html</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">dialect</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n"><a href="dialects.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="dialects.html#Dialect">sqlglot.dialects.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="o">**</span><span class="n">opts</span></span><span class="return-annotation">) -> <span class="n"><a href="#GraphHTML">GraphHTML</a></span>:</span></span>
|
||||
|
||||
<label class="view-source-button" for="Node.to_html-view-source"><span>View Source</span></label>
|
||||
|
||||
|
@ -776,7 +776,7 @@
|
|||
<div class="attr function">
|
||||
|
||||
<span class="def">def</span>
|
||||
<span class="name">lineage</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">column</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n"><a href="expressions.html#Column">sqlglot.expressions.Column</a></span>,</span><span class="param"> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n"><a href="expressions.html#Expression">sqlglot.expressions.Expression</a></span>,</span><span class="param"> <span class="n">schema</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="n"><a href="schema.html#Schema">sqlglot.schema.Schema</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">sources</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Mapping</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span> <span class="o">|</span> <span class="n"><a href="expressions.html#Query">sqlglot.expressions.Query</a></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="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="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">scope</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n"><a href="optimizer/scope.html#Scope">sqlglot.optimizer.scope.Scope</a></span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">trim_selects</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>,</span><span class="param"> <span class="o">**</span><span class="n">kwargs</span></span><span class="return-annotation">) -> <span class="n"><a href="#Node">Node</a></span>:</span></span>
|
||||
<span class="name">lineage</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">column</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n"><a href="expressions.html#Column">sqlglot.expressions.Column</a></span>,</span><span class="param"> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n"><a href="expressions.html#Expression">sqlglot.expressions.Expression</a></span>,</span><span class="param"> <span class="n">schema</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="n"><a href="schema.html#Schema">sqlglot.schema.Schema</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">sources</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Mapping</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span> <span class="o">|</span> <span class="n"><a href="expressions.html#Query">sqlglot.expressions.Query</a></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="dialects.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="dialects.html#Dialect">sqlglot.dialects.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">scope</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n"><a href="optimizer/scope.html#Scope">sqlglot.optimizer.scope.Scope</a></span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">trim_selects</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>,</span><span class="param"> <span class="o">**</span><span class="n">kwargs</span></span><span class="return-annotation">) -> <span class="n"><a href="#Node">Node</a></span>:</span></span>
|
||||
|
||||
<label class="view-source-button" for="lineage-view-source"><span>View Source</span></label>
|
||||
|
||||
|
@ -867,7 +867,7 @@
|
|||
<div class="attr function">
|
||||
|
||||
<span class="def">def</span>
|
||||
<span class="name">to_node</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">column</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">int</span>,</span><span class="param"> <span class="n">scope</span><span class="p">:</span> <span class="n"><a href="optimizer/scope.html#Scope">sqlglot.optimizer.scope.Scope</a></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="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="dialects/dialect.html#Dialect">sqlglot.dialects.dialect.Dialect</a></span><span class="p">],</span> <span class="n">NoneType</span><span class="p">]</span>,</span><span class="param"> <span class="n">scope_name</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">upstream</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n"><a href="#Node">Node</a></span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">source_name</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">reference_node_name</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">trim_selects</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span></span><span class="return-annotation">) -> <span class="n"><a href="#Node">Node</a></span>:</span></span>
|
||||
<span class="name">to_node</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">column</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="nb">int</span>,</span><span class="param"> <span class="n">scope</span><span class="p">:</span> <span class="n"><a href="optimizer/scope.html#Scope">sqlglot.optimizer.scope.Scope</a></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="dialects.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="dialects.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">],</span> <span class="n">NoneType</span><span class="p">]</span>,</span><span class="param"> <span class="n">scope_name</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">upstream</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n"><a href="#Node">Node</a></span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">source_name</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">reference_node_name</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">trim_selects</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span></span><span class="return-annotation">) -> <span class="n"><a href="#Node">Node</a></span>:</span></span>
|
||||
|
||||
<label class="view-source-button" for="to_node-view-source"><span>View Source</span></label>
|
||||
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -305,7 +305,7 @@
|
|||
<div class="attr function">
|
||||
|
||||
<span class="def">def</span>
|
||||
<span class="name">canonicalize</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="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="../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="../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="return-annotation">) -> <span class="n"><a href="../expressions.html#Expression">sqlglot.expressions.Expression</a></span>:</span></span>
|
||||
<span class="name">canonicalize</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="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="../dialects.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="../dialects.html#Dialect">sqlglot.dialects.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="return-annotation">) -> <span class="n"><a href="../expressions.html#Expression">sqlglot.expressions.Expression</a></span>:</span></span>
|
||||
|
||||
<label class="view-source-button" for="canonicalize-view-source"><span>View Source</span></label>
|
||||
|
||||
|
|
|
@ -581,7 +581,7 @@ queries if it would result in multiple table selects in a single query:</p>
|
|||
<div class="attr variable">
|
||||
<span class="name">UNMERGABLE_ARGS</span> =
|
||||
<input id="UNMERGABLE_ARGS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||
<label class="view-value-button pdoc-button" for="UNMERGABLE_ARGS-view-value"></label><span class="default_value">{'distinct', 'windows', 'prewhere', 'offset', 'options', 'pivots', 'qualify', 'sort', 'with', 'distribute', 'cluster', 'format', 'into', 'match', 'locks', 'settings', 'kind', 'laterals', 'group', 'connect', 'having', 'operation_modifiers', 'sample', 'limit'}</span>
|
||||
<label class="view-value-button pdoc-button" for="UNMERGABLE_ARGS-view-value"></label><span class="default_value">{'qualify', 'sample', 'connect', 'limit', 'match', 'prewhere', 'locks', 'pivots', 'group', 'laterals', 'windows', 'operation_modifiers', 'having', 'format', 'settings', 'options', 'cluster', 'kind', 'offset', 'distribute', 'sort', 'distinct', 'with', 'into'}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
|
@ -175,7 +175,7 @@
|
|||
<div class="attr function">
|
||||
|
||||
<span class="def">def</span>
|
||||
<span class="name">optimize</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n"><a href="../expressions.html#Expression">sqlglot.expressions.Expression</a></span>,</span><span class="param"> <span class="n">schema</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">dict</span><span class="p">,</span> <span class="n"><a href="../schema.html#Schema">sqlglot.schema.Schema</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">db</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="n"><a href="../expressions.html#Identifier">sqlglot.expressions.Identifier</a></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="param"> <span class="n">catalog</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="n"><a href="../expressions.html#Identifier">sqlglot.expressions.Identifier</a></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="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="../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="../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">rules</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="o"><</span><span class="n">function</span> <span class="n">qualify</span><span class="o">></span><span class="p">,</span> <span class="o"><</span><span class="n">function</span> <span class="n">pushdown_projections</span><span class="o">></span><span class="p">,</span> <span class="o"><</span><span class="n">function</span> <span class="n">normalize</span><span class="o">></span><span class="p">,</span> <span class="o"><</span><span class="n">function</span> <span class="n">unnest_subqueries</span><span class="o">></span><span class="p">,</span> <span class="o"><</span><span class="n">function</span> <span class="n">pushdown_predicates</span><span class="o">></span><span class="p">,</span> <span class="o"><</span><span class="n">function</span> <span class="n">optimize_joins</span><span class="o">></span><span class="p">,</span> <span class="o"><</span><span class="n">function</span> <span class="n">eliminate_subqueries</span><span class="o">></span><span class="p">,</span> <span class="o"><</span><span class="n">function</span> <span class="n">merge_subqueries</span><span class="o">></span><span class="p">,</span> <span class="o"><</span><span class="n">function</span> <span class="n">eliminate_joins</span><span class="o">></span><span class="p">,</span> <span class="o"><</span><span class="n">function</span> <span class="n">eliminate_ctes</span><span class="o">></span><span class="p">,</span> <span class="o"><</span><span class="n">function</span> <span class="n">quote_identifiers</span><span class="o">></span><span class="p">,</span> <span class="o"><</span><span class="n">function</span> <span class="n">annotate_types</span><span class="o">></span><span class="p">,</span> <span class="o"><</span><span class="n">function</span> <span class="n">canonicalize</span><span class="o">></span><span class="p">,</span> <span class="o"><</span><span class="n">function</span> <span class="n">simplify</span><span class="o">></span><span class="p">)</span>,</span><span class="param"> <span class="o">**</span><span class="n">kwargs</span></span><span class="return-annotation">) -> <span class="n"><a href="../expressions.html#Expression">sqlglot.expressions.Expression</a></span>:</span></span>
|
||||
<span class="name">optimize</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n"><a href="../expressions.html#Expression">sqlglot.expressions.Expression</a></span>,</span><span class="param"> <span class="n">schema</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">dict</span><span class="p">,</span> <span class="n"><a href="../schema.html#Schema">sqlglot.schema.Schema</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">db</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="n"><a href="../expressions.html#Identifier">sqlglot.expressions.Identifier</a></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="param"> <span class="n">catalog</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="n"><a href="../expressions.html#Identifier">sqlglot.expressions.Identifier</a></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="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="../dialects.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="../dialects.html#Dialect">sqlglot.dialects.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">rules</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="o"><</span><span class="n">function</span> <span class="n">qualify</span><span class="o">></span><span class="p">,</span> <span class="o"><</span><span class="n">function</span> <span class="n">pushdown_projections</span><span class="o">></span><span class="p">,</span> <span class="o"><</span><span class="n">function</span> <span class="n">normalize</span><span class="o">></span><span class="p">,</span> <span class="o"><</span><span class="n">function</span> <span class="n">unnest_subqueries</span><span class="o">></span><span class="p">,</span> <span class="o"><</span><span class="n">function</span> <span class="n">pushdown_predicates</span><span class="o">></span><span class="p">,</span> <span class="o"><</span><span class="n">function</span> <span class="n">optimize_joins</span><span class="o">></span><span class="p">,</span> <span class="o"><</span><span class="n">function</span> <span class="n">eliminate_subqueries</span><span class="o">></span><span class="p">,</span> <span class="o"><</span><span class="n">function</span> <span class="n">merge_subqueries</span><span class="o">></span><span class="p">,</span> <span class="o"><</span><span class="n">function</span> <span class="n">eliminate_joins</span><span class="o">></span><span class="p">,</span> <span class="o"><</span><span class="n">function</span> <span class="n">eliminate_ctes</span><span class="o">></span><span class="p">,</span> <span class="o"><</span><span class="n">function</span> <span class="n">quote_identifiers</span><span class="o">></span><span class="p">,</span> <span class="o"><</span><span class="n">function</span> <span class="n">annotate_types</span><span class="o">></span><span class="p">,</span> <span class="o"><</span><span class="n">function</span> <span class="n">canonicalize</span><span class="o">></span><span class="p">,</span> <span class="o"><</span><span class="n">function</span> <span class="n">simplify</span><span class="o">></span><span class="p">)</span>,</span><span class="param"> <span class="o">**</span><span class="n">kwargs</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="optimize-view-source"><span>View Source</span></label>
|
||||
|
||||
|
|
|
@ -169,7 +169,7 @@
|
|||
<div class="attr function">
|
||||
|
||||
<span class="def">def</span>
|
||||
<span class="name">qualify</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="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="../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="../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">db</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">catalog</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">schema</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">dict</span><span class="p">,</span> <span class="n"><a href="../schema.html#Schema">sqlglot.schema.Schema</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">expand_alias_refs</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>,</span><span class="param"> <span class="n">expand_stars</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>,</span><span class="param"> <span class="n">infer_schema</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">isolate_tables</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>,</span><span class="param"> <span class="n">qualify_columns</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>,</span><span class="param"> <span class="n">allow_partial_qualification</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>,</span><span class="param"> <span class="n">validate_qualify_columns</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>,</span><span class="param"> <span class="n">quote_identifiers</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>,</span><span class="param"> <span class="n">identify</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>,</span><span class="param"> <span class="n">infer_csv_schemas</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="../expressions.html#Expression">sqlglot.expressions.Expression</a></span>:</span></span>
|
||||
<span class="name">qualify</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="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="../dialects.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="../dialects.html#Dialect">sqlglot.dialects.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">db</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">catalog</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">schema</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">dict</span><span class="p">,</span> <span class="n"><a href="../schema.html#Schema">sqlglot.schema.Schema</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">expand_alias_refs</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>,</span><span class="param"> <span class="n">expand_stars</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>,</span><span class="param"> <span class="n">infer_schema</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">isolate_tables</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>,</span><span class="param"> <span class="n">qualify_columns</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>,</span><span class="param"> <span class="n">allow_partial_qualification</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>,</span><span class="param"> <span class="n">validate_qualify_columns</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>,</span><span class="param"> <span class="n">quote_identifiers</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>,</span><span class="param"> <span class="n">identify</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>,</span><span class="param"> <span class="n">infer_csv_schemas</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="../expressions.html#Expression">sqlglot.expressions.Expression</a></span>:</span></span>
|
||||
|
||||
<label class="view-source-button" for="qualify-view-source"><span>View Source</span></label>
|
||||
|
||||
|
|
|
@ -1320,7 +1320,7 @@ know what you're doing!</li>
|
|||
<div class="attr function">
|
||||
|
||||
<span class="def">def</span>
|
||||
<span class="name">quote_identifiers</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="o">~</span><span class="n">E</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="../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="../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">identify</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span></span><span class="return-annotation">) -> <span class="o">~</span><span class="n">E</span>:</span></span>
|
||||
<span class="name">quote_identifiers</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="o">~</span><span class="n">E</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="../dialects.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="../dialects.html#Dialect">sqlglot.dialects.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">identify</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span></span><span class="return-annotation">) -> <span class="o">~</span><span class="n">E</span>:</span></span>
|
||||
|
||||
<label class="view-source-button" for="quote_identifiers-view-source"><span>View Source</span></label>
|
||||
|
||||
|
|
|
@ -212,7 +212,7 @@
|
|||
<div class="attr function">
|
||||
|
||||
<span class="def">def</span>
|
||||
<span class="name">qualify_tables</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="o">~</span><span class="n">E</span>,</span><span class="param"> <span class="n">db</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="n"><a href="../expressions.html#Identifier">sqlglot.expressions.Identifier</a></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="param"> <span class="n">catalog</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="n"><a href="../expressions.html#Identifier">sqlglot.expressions.Identifier</a></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="param"> <span class="n">schema</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n"><a href="../schema.html#Schema">sqlglot.schema.Schema</a></span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">infer_csv_schemas</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</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="../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="../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="return-annotation">) -> <span class="o">~</span><span class="n">E</span>:</span></span>
|
||||
<span class="name">qualify_tables</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="o">~</span><span class="n">E</span>,</span><span class="param"> <span class="n">db</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="n"><a href="../expressions.html#Identifier">sqlglot.expressions.Identifier</a></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="param"> <span class="n">catalog</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="n"><a href="../expressions.html#Identifier">sqlglot.expressions.Identifier</a></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="param"> <span class="n">schema</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n"><a href="../schema.html#Schema">sqlglot.schema.Schema</a></span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">infer_csv_schemas</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</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="../dialects.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="../dialects.html#Dialect">sqlglot.dialects.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="return-annotation">) -> <span class="o">~</span><span class="n">E</span>:</span></span>
|
||||
|
||||
<label class="view-source-button" for="qualify_tables-view-source"><span>View Source</span></label>
|
||||
|
||||
|
|
|
@ -2067,7 +2067,7 @@
|
|||
<div class="attr function">
|
||||
|
||||
<span class="def">def</span>
|
||||
<span class="name">simplify</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="param"> <span class="n">constant_propagation</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</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="../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="../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">max_depth</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">):</span></span>
|
||||
<span class="name">simplify</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="param"> <span class="n">constant_propagation</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</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="../dialects.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="../dialects.html#Dialect">sqlglot.dialects.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">max_depth</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">):</span></span>
|
||||
|
||||
<label class="view-source-button" for="simplify-view-source"><span>View Source</span></label>
|
||||
|
||||
|
@ -3223,7 +3223,7 @@ prefix are statically known.</p>
|
|||
</section>
|
||||
<section id="DATETRUNC_BINARY_COMPARISONS">
|
||||
<div class="attr variable">
|
||||
<span class="name">DATETRUNC_BINARY_COMPARISONS</span><span class="annotation">: Dict[Type[<a href="../expressions.html#Expression">sqlglot.expressions.Expression</a>], Callable[[<a href="../expressions.html#Expression">sqlglot.expressions.Expression</a>, datetime.date, str, <a href="../dialects/dialect.html#Dialect">sqlglot.dialects.dialect.Dialect</a>, <a href="../expressions.html#DataType">sqlglot.expressions.DataType</a>], Optional[<a href="../expressions.html#Expression">sqlglot.expressions.Expression</a>]]]</span> =
|
||||
<span class="name">DATETRUNC_BINARY_COMPARISONS</span><span class="annotation">: Dict[Type[<a href="../expressions.html#Expression">sqlglot.expressions.Expression</a>], Callable[[<a href="../expressions.html#Expression">sqlglot.expressions.Expression</a>, datetime.date, str, <a href="../dialects.html#Dialect">sqlglot.dialects.Dialect</a>, <a href="../expressions.html#DataType">sqlglot.expressions.DataType</a>], Optional[<a href="../expressions.html#Expression">sqlglot.expressions.Expression</a>]]]</span> =
|
||||
<input id="DATETRUNC_BINARY_COMPARISONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||
<label class="view-value-button pdoc-button" for="DATETRUNC_BINARY_COMPARISONS-view-value"></label><span class="default_value">{<class '<a href="../expressions.html#LT">sqlglot.expressions.LT</a>'>: <function <lambda>>, <class '<a href="../expressions.html#GT">sqlglot.expressions.GT</a>'>: <function <lambda>>, <class '<a href="../expressions.html#LTE">sqlglot.expressions.LTE</a>'>: <function <lambda>>, <class '<a href="../expressions.html#GTE">sqlglot.expressions.GTE</a>'>: <function <lambda>>, <class '<a href="../expressions.html#EQ">sqlglot.expressions.EQ</a>'>: <function _datetrunc_eq>, <class '<a href="../expressions.html#NEQ">sqlglot.expressions.NEQ</a>'>: <function _datetrunc_neq>}</span>
|
||||
|
||||
|
@ -3238,7 +3238,7 @@ prefix are statically known.</p>
|
|||
<div class="attr variable">
|
||||
<span class="name">DATETRUNC_COMPARISONS</span> =
|
||||
<input id="DATETRUNC_COMPARISONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||
<label class="view-value-button pdoc-button" for="DATETRUNC_COMPARISONS-view-value"></label><span class="default_value">{<class '<a href="../expressions.html#GTE">sqlglot.expressions.GTE</a>'>, <class '<a href="../expressions.html#EQ">sqlglot.expressions.EQ</a>'>, <class '<a href="../expressions.html#LTE">sqlglot.expressions.LTE</a>'>, <class '<a href="../expressions.html#NEQ">sqlglot.expressions.NEQ</a>'>, <class '<a href="../expressions.html#GT">sqlglot.expressions.GT</a>'>, <class '<a href="../expressions.html#In">sqlglot.expressions.In</a>'>, <class '<a href="../expressions.html#LT">sqlglot.expressions.LT</a>'>}</span>
|
||||
<label class="view-value-button pdoc-button" for="DATETRUNC_COMPARISONS-view-value"></label><span class="default_value">{<class '<a href="../expressions.html#LT">sqlglot.expressions.LT</a>'>, <class '<a href="../expressions.html#NEQ">sqlglot.expressions.NEQ</a>'>, <class '<a href="../expressions.html#GTE">sqlglot.expressions.GTE</a>'>, <class '<a href="../expressions.html#EQ">sqlglot.expressions.EQ</a>'>, <class '<a href="../expressions.html#In">sqlglot.expressions.In</a>'>, <class '<a href="../expressions.html#LTE">sqlglot.expressions.LTE</a>'>, <class '<a href="../expressions.html#GT">sqlglot.expressions.GT</a>'>}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -3322,7 +3322,7 @@ prefix are statically known.</p>
|
|||
<section id="JOINS">
|
||||
<div class="attr variable">
|
||||
<span class="name">JOINS</span> =
|
||||
<span class="default_value">{('RIGHT', ''), ('RIGHT', 'OUTER'), ('', 'INNER'), ('', '')}</span>
|
||||
<span class="default_value">{('', 'INNER'), ('RIGHT', ''), ('RIGHT', 'OUTER'), ('', '')}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -3736,7 +3736,7 @@ prefix are statically known.</p>
|
|||
<div class="attr function">
|
||||
|
||||
<span class="def">def</span>
|
||||
<span class="name">date_floor</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">d</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span>,</span><span class="param"> <span class="n">unit</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">dialect</span><span class="p">:</span> <span class="n"><a href="../dialects/dialect.html#Dialect">sqlglot.dialects.dialect.Dialect</a></span></span><span class="return-annotation">) -> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span>:</span></span>
|
||||
<span class="name">date_floor</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">d</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span>,</span><span class="param"> <span class="n">unit</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">dialect</span><span class="p">:</span> <span class="n"><a href="../dialects.html#Dialect">sqlglot.dialects.Dialect</a></span></span><span class="return-annotation">) -> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span>:</span></span>
|
||||
|
||||
<label class="view-source-button" for="date_floor-view-source"><span>View Source</span></label>
|
||||
|
||||
|
@ -3774,7 +3774,7 @@ prefix are statically known.</p>
|
|||
<div class="attr function">
|
||||
|
||||
<span class="def">def</span>
|
||||
<span class="name">date_ceil</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">d</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span>,</span><span class="param"> <span class="n">unit</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">dialect</span><span class="p">:</span> <span class="n"><a href="../dialects/dialect.html#Dialect">sqlglot.dialects.dialect.Dialect</a></span></span><span class="return-annotation">) -> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span>:</span></span>
|
||||
<span class="name">date_ceil</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">d</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span>,</span><span class="param"> <span class="n">unit</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">dialect</span><span class="p">:</span> <span class="n"><a href="../dialects.html#Dialect">sqlglot.dialects.Dialect</a></span></span><span class="return-annotation">) -> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span>:</span></span>
|
||||
|
||||
<label class="view-source-button" for="date_ceil-view-source"><span>View Source</span></label>
|
||||
|
||||
|
|
19546
docs/sqlglot/parser.html
19546
docs/sqlglot/parser.html
File diff suppressed because one or more lines are too long
|
@ -886,7 +886,7 @@
|
|||
|
||||
<div id="Schema.dialect" class="classattr">
|
||||
<div class="attr variable">
|
||||
<span class="name">dialect</span><span class="annotation">: Union[str, <a href="dialects/dialect.html#Dialect">sqlglot.dialects.dialect.Dialect</a>, Type[<a href="dialects/dialect.html#Dialect">sqlglot.dialects.dialect.Dialect</a>], NoneType]</span>
|
||||
<span class="name">dialect</span><span class="annotation">: Union[str, <a href="dialects.html#Dialect">sqlglot.dialects.Dialect</a>, Type[<a href="dialects.html#Dialect">sqlglot.dialects.Dialect</a>], NoneType]</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -901,7 +901,7 @@
|
|||
<div class="decorator decorator-abc.abstractmethod">@abc.abstractmethod</div>
|
||||
|
||||
<span class="def">def</span>
|
||||
<span class="name">add_table</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">table</span><span class="p">:</span> <span class="n"><a href="expressions.html#Table">sqlglot.expressions.Table</a></span> <span class="o">|</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">column_mapping</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="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">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="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="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">normalize</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">match_depth</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span></span><span class="return-annotation">) -> <span class="kc">None</span>:</span></span>
|
||||
<span class="name">add_table</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">table</span><span class="p">:</span> <span class="n"><a href="expressions.html#Table">sqlglot.expressions.Table</a></span> <span class="o">|</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">column_mapping</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="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">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="dialects.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="dialects.html#Dialect">sqlglot.dialects.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">normalize</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">match_depth</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span></span><span class="return-annotation">) -> <span class="kc">None</span>:</span></span>
|
||||
|
||||
<label class="view-source-button" for="Schema.add_table-view-source"><span>View Source</span></label>
|
||||
|
||||
|
@ -952,7 +952,7 @@ The added table must have the necessary number of qualifiers in its path to matc
|
|||
<div class="decorator decorator-abc.abstractmethod">@abc.abstractmethod</div>
|
||||
|
||||
<span class="def">def</span>
|
||||
<span class="name">column_names</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">table</span><span class="p">:</span> <span class="n"><a href="expressions.html#Table">sqlglot.expressions.Table</a></span> <span class="o">|</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">only_visible</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</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="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="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">normalize</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">) -> <span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>:</span></span>
|
||||
<span class="name">column_names</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">table</span><span class="p">:</span> <span class="n"><a href="expressions.html#Table">sqlglot.expressions.Table</a></span> <span class="o">|</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">only_visible</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</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="dialects.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="dialects.html#Dialect">sqlglot.dialects.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">normalize</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">) -> <span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>:</span></span>
|
||||
|
||||
<label class="view-source-button" for="Schema.column_names-view-source"><span>View Source</span></label>
|
||||
|
||||
|
@ -1007,7 +1007,7 @@ The added table must have the necessary number of qualifiers in its path to matc
|
|||
<div class="decorator decorator-abc.abstractmethod">@abc.abstractmethod</div>
|
||||
|
||||
<span class="def">def</span>
|
||||
<span class="name">get_column_type</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">table</span><span class="p">:</span> <span class="n"><a href="expressions.html#Table">sqlglot.expressions.Table</a></span> <span class="o">|</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">column</span><span class="p">:</span> <span class="n"><a href="expressions.html#Column">sqlglot.expressions.Column</a></span> <span class="o">|</span> <span class="nb">str</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="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="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">normalize</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">) -> <span class="n"><a href="expressions.html#DataType">sqlglot.expressions.DataType</a></span>:</span></span>
|
||||
<span class="name">get_column_type</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">table</span><span class="p">:</span> <span class="n"><a href="expressions.html#Table">sqlglot.expressions.Table</a></span> <span class="o">|</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">column</span><span class="p">:</span> <span class="n"><a href="expressions.html#Column">sqlglot.expressions.Column</a></span> <span class="o">|</span> <span class="nb">str</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="dialects.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="dialects.html#Dialect">sqlglot.dialects.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">normalize</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">) -> <span class="n"><a href="expressions.html#DataType">sqlglot.expressions.DataType</a></span>:</span></span>
|
||||
|
||||
<label class="view-source-button" for="Schema.get_column_type-view-source"><span>View Source</span></label>
|
||||
|
||||
|
@ -1061,7 +1061,7 @@ The added table must have the necessary number of qualifiers in its path to matc
|
|||
<div class="attr function">
|
||||
|
||||
<span class="def">def</span>
|
||||
<span class="name">has_column</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">table</span><span class="p">:</span> <span class="n"><a href="expressions.html#Table">sqlglot.expressions.Table</a></span> <span class="o">|</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">column</span><span class="p">:</span> <span class="n"><a href="expressions.html#Column">sqlglot.expressions.Column</a></span> <span class="o">|</span> <span class="nb">str</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="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="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">normalize</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">) -> <span class="nb">bool</span>:</span></span>
|
||||
<span class="name">has_column</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">table</span><span class="p">:</span> <span class="n"><a href="expressions.html#Table">sqlglot.expressions.Table</a></span> <span class="o">|</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">column</span><span class="p">:</span> <span class="n"><a href="expressions.html#Column">sqlglot.expressions.Column</a></span> <span class="o">|</span> <span class="nb">str</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="dialects.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="dialects.html#Dialect">sqlglot.dialects.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">normalize</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">) -> <span class="nb">bool</span>:</span></span>
|
||||
|
||||
<label class="view-source-button" for="Schema.has_column-view-source"><span>View Source</span></label>
|
||||
|
||||
|
@ -1783,7 +1783,7 @@ are assumed to be visible. The nesting should mirror that of the schema:
|
|||
<input id="MappingSchema.__init__-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||
<div class="attr function">
|
||||
|
||||
<span class="name">MappingSchema</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">schema</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">visible</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</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="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="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">normalize</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span></span>)</span>
|
||||
<span class="name">MappingSchema</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">schema</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">visible</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</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="dialects.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="dialects.html#Dialect">sqlglot.dialects.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">normalize</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span></span>)</span>
|
||||
|
||||
<label class="view-source-button" for="MappingSchema.__init__-view-source"><span>View Source</span></label>
|
||||
|
||||
|
@ -1947,7 +1947,7 @@ are assumed to be visible. The nesting should mirror that of the schema:
|
|||
<div class="attr function">
|
||||
|
||||
<span class="def">def</span>
|
||||
<span class="name">add_table</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">table</span><span class="p">:</span> <span class="n"><a href="expressions.html#Table">sqlglot.expressions.Table</a></span> <span class="o">|</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">column_mapping</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="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">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="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="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">normalize</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">match_depth</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span></span><span class="return-annotation">) -> <span class="kc">None</span>:</span></span>
|
||||
<span class="name">add_table</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">table</span><span class="p">:</span> <span class="n"><a href="expressions.html#Table">sqlglot.expressions.Table</a></span> <span class="o">|</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">column_mapping</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="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">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="dialects.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="dialects.html#Dialect">sqlglot.dialects.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">normalize</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">match_depth</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span></span><span class="return-annotation">) -> <span class="kc">None</span>:</span></span>
|
||||
|
||||
<label class="view-source-button" for="MappingSchema.add_table-view-source"><span>View Source</span></label>
|
||||
|
||||
|
@ -2017,7 +2017,7 @@ The added table must have the necessary number of qualifiers in its path to matc
|
|||
<div class="attr function">
|
||||
|
||||
<span class="def">def</span>
|
||||
<span class="name">column_names</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">table</span><span class="p">:</span> <span class="n"><a href="expressions.html#Table">sqlglot.expressions.Table</a></span> <span class="o">|</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">only_visible</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</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="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="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">normalize</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">) -> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>:</span></span>
|
||||
<span class="name">column_names</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">table</span><span class="p">:</span> <span class="n"><a href="expressions.html#Table">sqlglot.expressions.Table</a></span> <span class="o">|</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">only_visible</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</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="dialects.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="dialects.html#Dialect">sqlglot.dialects.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">normalize</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">) -> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>:</span></span>
|
||||
|
||||
<label class="view-source-button" for="MappingSchema.column_names-view-source"><span>View Source</span></label>
|
||||
|
||||
|
@ -2069,7 +2069,7 @@ The added table must have the necessary number of qualifiers in its path to matc
|
|||
<div class="attr function">
|
||||
|
||||
<span class="def">def</span>
|
||||
<span class="name">get_column_type</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">table</span><span class="p">:</span> <span class="n"><a href="expressions.html#Table">sqlglot.expressions.Table</a></span> <span class="o">|</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">column</span><span class="p">:</span> <span class="n"><a href="expressions.html#Column">sqlglot.expressions.Column</a></span> <span class="o">|</span> <span class="nb">str</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="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="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">normalize</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">) -> <span class="n"><a href="expressions.html#DataType">sqlglot.expressions.DataType</a></span>:</span></span>
|
||||
<span class="name">get_column_type</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">table</span><span class="p">:</span> <span class="n"><a href="expressions.html#Table">sqlglot.expressions.Table</a></span> <span class="o">|</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">column</span><span class="p">:</span> <span class="n"><a href="expressions.html#Column">sqlglot.expressions.Column</a></span> <span class="o">|</span> <span class="nb">str</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="dialects.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="dialects.html#Dialect">sqlglot.dialects.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">normalize</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">) -> <span class="n"><a href="expressions.html#DataType">sqlglot.expressions.DataType</a></span>:</span></span>
|
||||
|
||||
<label class="view-source-button" for="MappingSchema.get_column_type-view-source"><span>View Source</span></label>
|
||||
|
||||
|
@ -2126,7 +2126,7 @@ The added table must have the necessary number of qualifiers in its path to matc
|
|||
<div class="attr function">
|
||||
|
||||
<span class="def">def</span>
|
||||
<span class="name">has_column</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">table</span><span class="p">:</span> <span class="n"><a href="expressions.html#Table">sqlglot.expressions.Table</a></span> <span class="o">|</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">column</span><span class="p">:</span> <span class="n"><a href="expressions.html#Column">sqlglot.expressions.Column</a></span> <span class="o">|</span> <span class="nb">str</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="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="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">normalize</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">) -> <span class="nb">bool</span>:</span></span>
|
||||
<span class="name">has_column</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">table</span><span class="p">:</span> <span class="n"><a href="expressions.html#Table">sqlglot.expressions.Table</a></span> <span class="o">|</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">column</span><span class="p">:</span> <span class="n"><a href="expressions.html#Column">sqlglot.expressions.Column</a></span> <span class="o">|</span> <span class="nb">str</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="dialects.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="dialects.html#Dialect">sqlglot.dialects.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">normalize</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">) -> <span class="nb">bool</span>:</span></span>
|
||||
|
||||
<label class="view-source-button" for="MappingSchema.has_column-view-source"><span>View Source</span></label>
|
||||
|
||||
|
@ -2212,7 +2212,7 @@ The added table must have the necessary number of qualifiers in its path to matc
|
|||
<div class="attr function">
|
||||
|
||||
<span class="def">def</span>
|
||||
<span class="name">normalize_name</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">identifier</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n"><a href="expressions.html#Identifier">sqlglot.expressions.Identifier</a></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="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="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">is_table</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>,</span><span class="param"> <span class="n">normalize</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span></span><span class="return-annotation">) -> <span class="n"><a href="expressions.html#Identifier">sqlglot.expressions.Identifier</a></span>:</span></span>
|
||||
<span class="name">normalize_name</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">identifier</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n"><a href="expressions.html#Identifier">sqlglot.expressions.Identifier</a></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="dialects.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="dialects.html#Dialect">sqlglot.dialects.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">is_table</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>,</span><span class="param"> <span class="n">normalize</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span></span><span class="return-annotation">) -> <span class="n"><a href="expressions.html#Identifier">sqlglot.expressions.Identifier</a></span>:</span></span>
|
||||
|
||||
<label class="view-source-button" for="normalize_name-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
|
@ -1067,39 +1067,40 @@
|
|||
</span><span id="L-934"><a href="#L-934"><span class="linenos">934</span></a> <span class="n">new_from_name</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">only_old_joins</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
||||
</span><span id="L-935"><a href="#L-935"><span class="linenos">935</span></a> <span class="n">query</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"from"</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">old_joins</span><span class="p">[</span><span class="n">new_from_name</span><span class="p">]</span><span class="o">.</span><span class="n">this</span><span class="p">))</span>
|
||||
</span><span id="L-936"><a href="#L-936"><span class="linenos">936</span></a>
|
||||
</span><span id="L-937"><a href="#L-937"><span class="linenos">937</span></a> <span class="n">query</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"joins"</span><span class="p">,</span> <span class="nb">list</span><span class="p">(</span><span class="n">new_joins</span><span class="o">.</span><span class="n">values</span><span class="p">()))</span>
|
||||
</span><span id="L-938"><a href="#L-938"><span class="linenos">938</span></a>
|
||||
</span><span id="L-939"><a href="#L-939"><span class="linenos">939</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">where</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
|
||||
</span><span id="L-940"><a href="#L-940"><span class="linenos">940</span></a> <span class="n">where</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
|
||||
</span><span id="L-941"><a href="#L-941"><span class="linenos">941</span></a>
|
||||
</span><span id="L-942"><a href="#L-942"><span class="linenos">942</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span><span id="L-943"><a href="#L-943"><span class="linenos">943</span></a>
|
||||
</span><span id="L-937"><a href="#L-937"><span class="linenos">937</span></a> <span class="k">if</span> <span class="n">new_joins</span><span class="p">:</span>
|
||||
</span><span id="L-938"><a href="#L-938"><span class="linenos">938</span></a> <span class="n">query</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"joins"</span><span class="p">,</span> <span class="nb">list</span><span class="p">(</span><span class="n">new_joins</span><span class="o">.</span><span class="n">values</span><span class="p">()))</span>
|
||||
</span><span id="L-939"><a href="#L-939"><span class="linenos">939</span></a>
|
||||
</span><span id="L-940"><a href="#L-940"><span class="linenos">940</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">where</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
|
||||
</span><span id="L-941"><a href="#L-941"><span class="linenos">941</span></a> <span class="n">where</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
|
||||
</span><span id="L-942"><a href="#L-942"><span class="linenos">942</span></a>
|
||||
</span><span id="L-943"><a href="#L-943"><span class="linenos">943</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span><span id="L-944"><a href="#L-944"><span class="linenos">944</span></a>
|
||||
</span><span id="L-945"><a href="#L-945"><span class="linenos">945</span></a><span class="k">def</span><span class="w"> </span><span class="nf">any_to_exists</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-946"><a href="#L-946"><span class="linenos">946</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="L-947"><a href="#L-947"><span class="linenos">947</span></a><span class="sd"> Transform ANY operator to Spark's EXISTS</span>
|
||||
</span><span id="L-948"><a href="#L-948"><span class="linenos">948</span></a>
|
||||
</span><span id="L-949"><a href="#L-949"><span class="linenos">949</span></a><span class="sd"> For example,</span>
|
||||
</span><span id="L-950"><a href="#L-950"><span class="linenos">950</span></a><span class="sd"> - Postgres: SELECT * FROM tbl WHERE 5 > ANY(tbl.col)</span>
|
||||
</span><span id="L-951"><a href="#L-951"><span class="linenos">951</span></a><span class="sd"> - Spark: SELECT * FROM tbl WHERE EXISTS(tbl.col, x -> x < 5)</span>
|
||||
</span><span id="L-952"><a href="#L-952"><span class="linenos">952</span></a>
|
||||
</span><span id="L-953"><a href="#L-953"><span class="linenos">953</span></a><span class="sd"> Both ANY and EXISTS accept queries but currently only array expressions are supported for this</span>
|
||||
</span><span id="L-954"><a href="#L-954"><span class="linenos">954</span></a><span class="sd"> transformation</span>
|
||||
</span><span id="L-955"><a href="#L-955"><span class="linenos">955</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-956"><a href="#L-956"><span class="linenos">956</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-957"><a href="#L-957"><span class="linenos">957</span></a> <span class="k">for</span> <span class="nb">any</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">Any</span><span class="p">):</span>
|
||||
</span><span id="L-958"><a href="#L-958"><span class="linenos">958</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">any</span><span class="o">.</span><span class="n">this</span>
|
||||
</span><span id="L-959"><a href="#L-959"><span class="linenos">959</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">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">):</span>
|
||||
</span><span id="L-960"><a href="#L-960"><span class="linenos">960</span></a> <span class="k">continue</span>
|
||||
</span><span id="L-961"><a href="#L-961"><span class="linenos">961</span></a>
|
||||
</span><span id="L-962"><a href="#L-962"><span class="linenos">962</span></a> <span class="n">binop</span> <span class="o">=</span> <span class="nb">any</span><span class="o">.</span><span class="n">parent</span>
|
||||
</span><span id="L-963"><a href="#L-963"><span class="linenos">963</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">binop</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Binary</span><span class="p">):</span>
|
||||
</span><span id="L-964"><a href="#L-964"><span class="linenos">964</span></a> <span class="n">lambda_arg</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="s2">"x"</span><span class="p">)</span>
|
||||
</span><span id="L-965"><a href="#L-965"><span class="linenos">965</span></a> <span class="nb">any</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">lambda_arg</span><span class="p">)</span>
|
||||
</span><span id="L-966"><a href="#L-966"><span class="linenos">966</span></a> <span class="n">lambda_expr</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Lambda</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">binop</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">lambda_arg</span><span class="p">])</span>
|
||||
</span><span id="L-967"><a href="#L-967"><span class="linenos">967</span></a> <span class="n">binop</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">Exists</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">unnest</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">lambda_expr</span><span class="p">))</span>
|
||||
</span><span id="L-968"><a href="#L-968"><span class="linenos">968</span></a>
|
||||
</span><span id="L-969"><a href="#L-969"><span class="linenos">969</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span><span id="L-945"><a href="#L-945"><span class="linenos">945</span></a>
|
||||
</span><span id="L-946"><a href="#L-946"><span class="linenos">946</span></a><span class="k">def</span><span class="w"> </span><span class="nf">any_to_exists</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-947"><a href="#L-947"><span class="linenos">947</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="L-948"><a href="#L-948"><span class="linenos">948</span></a><span class="sd"> Transform ANY operator to Spark's EXISTS</span>
|
||||
</span><span id="L-949"><a href="#L-949"><span class="linenos">949</span></a>
|
||||
</span><span id="L-950"><a href="#L-950"><span class="linenos">950</span></a><span class="sd"> For example,</span>
|
||||
</span><span id="L-951"><a href="#L-951"><span class="linenos">951</span></a><span class="sd"> - Postgres: SELECT * FROM tbl WHERE 5 > ANY(tbl.col)</span>
|
||||
</span><span id="L-952"><a href="#L-952"><span class="linenos">952</span></a><span class="sd"> - Spark: SELECT * FROM tbl WHERE EXISTS(tbl.col, x -> x < 5)</span>
|
||||
</span><span id="L-953"><a href="#L-953"><span class="linenos">953</span></a>
|
||||
</span><span id="L-954"><a href="#L-954"><span class="linenos">954</span></a><span class="sd"> Both ANY and EXISTS accept queries but currently only array expressions are supported for this</span>
|
||||
</span><span id="L-955"><a href="#L-955"><span class="linenos">955</span></a><span class="sd"> transformation</span>
|
||||
</span><span id="L-956"><a href="#L-956"><span class="linenos">956</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-957"><a href="#L-957"><span class="linenos">957</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-958"><a href="#L-958"><span class="linenos">958</span></a> <span class="k">for</span> <span class="nb">any</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">Any</span><span class="p">):</span>
|
||||
</span><span id="L-959"><a href="#L-959"><span class="linenos">959</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">any</span><span class="o">.</span><span class="n">this</span>
|
||||
</span><span id="L-960"><a href="#L-960"><span class="linenos">960</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">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">):</span>
|
||||
</span><span id="L-961"><a href="#L-961"><span class="linenos">961</span></a> <span class="k">continue</span>
|
||||
</span><span id="L-962"><a href="#L-962"><span class="linenos">962</span></a>
|
||||
</span><span id="L-963"><a href="#L-963"><span class="linenos">963</span></a> <span class="n">binop</span> <span class="o">=</span> <span class="nb">any</span><span class="o">.</span><span class="n">parent</span>
|
||||
</span><span id="L-964"><a href="#L-964"><span class="linenos">964</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">binop</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Binary</span><span class="p">):</span>
|
||||
</span><span id="L-965"><a href="#L-965"><span class="linenos">965</span></a> <span class="n">lambda_arg</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="s2">"x"</span><span class="p">)</span>
|
||||
</span><span id="L-966"><a href="#L-966"><span class="linenos">966</span></a> <span class="nb">any</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">lambda_arg</span><span class="p">)</span>
|
||||
</span><span id="L-967"><a href="#L-967"><span class="linenos">967</span></a> <span class="n">lambda_expr</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Lambda</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">binop</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">lambda_arg</span><span class="p">])</span>
|
||||
</span><span id="L-968"><a href="#L-968"><span class="linenos">968</span></a> <span class="n">binop</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">Exists</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">unnest</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">lambda_expr</span><span class="p">))</span>
|
||||
</span><span id="L-969"><a href="#L-969"><span class="linenos">969</span></a>
|
||||
</span><span id="L-970"><a href="#L-970"><span class="linenos">970</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -2514,12 +2515,13 @@ The corresponding columns are removed from the create statement.</p>
|
|||
</span><span id="eliminate_join_marks-935"><a href="#eliminate_join_marks-935"><span class="linenos">935</span></a> <span class="n">new_from_name</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">only_old_joins</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
||||
</span><span id="eliminate_join_marks-936"><a href="#eliminate_join_marks-936"><span class="linenos">936</span></a> <span class="n">query</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"from"</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">old_joins</span><span class="p">[</span><span class="n">new_from_name</span><span class="p">]</span><span class="o">.</span><span class="n">this</span><span class="p">))</span>
|
||||
</span><span id="eliminate_join_marks-937"><a href="#eliminate_join_marks-937"><span class="linenos">937</span></a>
|
||||
</span><span id="eliminate_join_marks-938"><a href="#eliminate_join_marks-938"><span class="linenos">938</span></a> <span class="n">query</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"joins"</span><span class="p">,</span> <span class="nb">list</span><span class="p">(</span><span class="n">new_joins</span><span class="o">.</span><span class="n">values</span><span class="p">()))</span>
|
||||
</span><span id="eliminate_join_marks-939"><a href="#eliminate_join_marks-939"><span class="linenos">939</span></a>
|
||||
</span><span id="eliminate_join_marks-940"><a href="#eliminate_join_marks-940"><span class="linenos">940</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">where</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-941"><a href="#eliminate_join_marks-941"><span class="linenos">941</span></a> <span class="n">where</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
|
||||
</span><span id="eliminate_join_marks-942"><a href="#eliminate_join_marks-942"><span class="linenos">942</span></a>
|
||||
</span><span id="eliminate_join_marks-943"><a href="#eliminate_join_marks-943"><span class="linenos">943</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span><span id="eliminate_join_marks-938"><a href="#eliminate_join_marks-938"><span class="linenos">938</span></a> <span class="k">if</span> <span class="n">new_joins</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-939"><a href="#eliminate_join_marks-939"><span class="linenos">939</span></a> <span class="n">query</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"joins"</span><span class="p">,</span> <span class="nb">list</span><span class="p">(</span><span class="n">new_joins</span><span class="o">.</span><span class="n">values</span><span class="p">()))</span>
|
||||
</span><span id="eliminate_join_marks-940"><a href="#eliminate_join_marks-940"><span class="linenos">940</span></a>
|
||||
</span><span id="eliminate_join_marks-941"><a href="#eliminate_join_marks-941"><span class="linenos">941</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">where</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-942"><a href="#eliminate_join_marks-942"><span class="linenos">942</span></a> <span class="n">where</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
|
||||
</span><span id="eliminate_join_marks-943"><a href="#eliminate_join_marks-943"><span class="linenos">943</span></a>
|
||||
</span><span id="eliminate_join_marks-944"><a href="#eliminate_join_marks-944"><span class="linenos">944</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -2556,31 +2558,31 @@ If this does not hold for a query, consider running <code><a href="optimizer/qua
|
|||
|
||||
</div>
|
||||
<a class="headerlink" href="#any_to_exists"></a>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="any_to_exists-946"><a href="#any_to_exists-946"><span class="linenos">946</span></a><span class="k">def</span><span class="w"> </span><span class="nf">any_to_exists</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="any_to_exists-947"><a href="#any_to_exists-947"><span class="linenos">947</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="any_to_exists-948"><a href="#any_to_exists-948"><span class="linenos">948</span></a><span class="sd"> Transform ANY operator to Spark's EXISTS</span>
|
||||
</span><span id="any_to_exists-949"><a href="#any_to_exists-949"><span class="linenos">949</span></a>
|
||||
</span><span id="any_to_exists-950"><a href="#any_to_exists-950"><span class="linenos">950</span></a><span class="sd"> For example,</span>
|
||||
</span><span id="any_to_exists-951"><a href="#any_to_exists-951"><span class="linenos">951</span></a><span class="sd"> - Postgres: SELECT * FROM tbl WHERE 5 > ANY(tbl.col)</span>
|
||||
</span><span id="any_to_exists-952"><a href="#any_to_exists-952"><span class="linenos">952</span></a><span class="sd"> - Spark: SELECT * FROM tbl WHERE EXISTS(tbl.col, x -> x < 5)</span>
|
||||
</span><span id="any_to_exists-953"><a href="#any_to_exists-953"><span class="linenos">953</span></a>
|
||||
</span><span id="any_to_exists-954"><a href="#any_to_exists-954"><span class="linenos">954</span></a><span class="sd"> Both ANY and EXISTS accept queries but currently only array expressions are supported for this</span>
|
||||
</span><span id="any_to_exists-955"><a href="#any_to_exists-955"><span class="linenos">955</span></a><span class="sd"> transformation</span>
|
||||
</span><span id="any_to_exists-956"><a href="#any_to_exists-956"><span class="linenos">956</span></a><span class="sd"> """</span>
|
||||
</span><span id="any_to_exists-957"><a href="#any_to_exists-957"><span class="linenos">957</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="any_to_exists-958"><a href="#any_to_exists-958"><span class="linenos">958</span></a> <span class="k">for</span> <span class="nb">any</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">Any</span><span class="p">):</span>
|
||||
</span><span id="any_to_exists-959"><a href="#any_to_exists-959"><span class="linenos">959</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">any</span><span class="o">.</span><span class="n">this</span>
|
||||
</span><span id="any_to_exists-960"><a href="#any_to_exists-960"><span class="linenos">960</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">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">):</span>
|
||||
</span><span id="any_to_exists-961"><a href="#any_to_exists-961"><span class="linenos">961</span></a> <span class="k">continue</span>
|
||||
</span><span id="any_to_exists-962"><a href="#any_to_exists-962"><span class="linenos">962</span></a>
|
||||
</span><span id="any_to_exists-963"><a href="#any_to_exists-963"><span class="linenos">963</span></a> <span class="n">binop</span> <span class="o">=</span> <span class="nb">any</span><span class="o">.</span><span class="n">parent</span>
|
||||
</span><span id="any_to_exists-964"><a href="#any_to_exists-964"><span class="linenos">964</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">binop</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Binary</span><span class="p">):</span>
|
||||
</span><span id="any_to_exists-965"><a href="#any_to_exists-965"><span class="linenos">965</span></a> <span class="n">lambda_arg</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="s2">"x"</span><span class="p">)</span>
|
||||
</span><span id="any_to_exists-966"><a href="#any_to_exists-966"><span class="linenos">966</span></a> <span class="nb">any</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">lambda_arg</span><span class="p">)</span>
|
||||
</span><span id="any_to_exists-967"><a href="#any_to_exists-967"><span class="linenos">967</span></a> <span class="n">lambda_expr</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Lambda</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">binop</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">lambda_arg</span><span class="p">])</span>
|
||||
</span><span id="any_to_exists-968"><a href="#any_to_exists-968"><span class="linenos">968</span></a> <span class="n">binop</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">Exists</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">unnest</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">lambda_expr</span><span class="p">))</span>
|
||||
</span><span id="any_to_exists-969"><a href="#any_to_exists-969"><span class="linenos">969</span></a>
|
||||
</span><span id="any_to_exists-970"><a href="#any_to_exists-970"><span class="linenos">970</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="any_to_exists-947"><a href="#any_to_exists-947"><span class="linenos">947</span></a><span class="k">def</span><span class="w"> </span><span class="nf">any_to_exists</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="any_to_exists-948"><a href="#any_to_exists-948"><span class="linenos">948</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="any_to_exists-949"><a href="#any_to_exists-949"><span class="linenos">949</span></a><span class="sd"> Transform ANY operator to Spark's EXISTS</span>
|
||||
</span><span id="any_to_exists-950"><a href="#any_to_exists-950"><span class="linenos">950</span></a>
|
||||
</span><span id="any_to_exists-951"><a href="#any_to_exists-951"><span class="linenos">951</span></a><span class="sd"> For example,</span>
|
||||
</span><span id="any_to_exists-952"><a href="#any_to_exists-952"><span class="linenos">952</span></a><span class="sd"> - Postgres: SELECT * FROM tbl WHERE 5 > ANY(tbl.col)</span>
|
||||
</span><span id="any_to_exists-953"><a href="#any_to_exists-953"><span class="linenos">953</span></a><span class="sd"> - Spark: SELECT * FROM tbl WHERE EXISTS(tbl.col, x -> x < 5)</span>
|
||||
</span><span id="any_to_exists-954"><a href="#any_to_exists-954"><span class="linenos">954</span></a>
|
||||
</span><span id="any_to_exists-955"><a href="#any_to_exists-955"><span class="linenos">955</span></a><span class="sd"> Both ANY and EXISTS accept queries but currently only array expressions are supported for this</span>
|
||||
</span><span id="any_to_exists-956"><a href="#any_to_exists-956"><span class="linenos">956</span></a><span class="sd"> transformation</span>
|
||||
</span><span id="any_to_exists-957"><a href="#any_to_exists-957"><span class="linenos">957</span></a><span class="sd"> """</span>
|
||||
</span><span id="any_to_exists-958"><a href="#any_to_exists-958"><span class="linenos">958</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="any_to_exists-959"><a href="#any_to_exists-959"><span class="linenos">959</span></a> <span class="k">for</span> <span class="nb">any</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">Any</span><span class="p">):</span>
|
||||
</span><span id="any_to_exists-960"><a href="#any_to_exists-960"><span class="linenos">960</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">any</span><span class="o">.</span><span class="n">this</span>
|
||||
</span><span id="any_to_exists-961"><a href="#any_to_exists-961"><span class="linenos">961</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">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">):</span>
|
||||
</span><span id="any_to_exists-962"><a href="#any_to_exists-962"><span class="linenos">962</span></a> <span class="k">continue</span>
|
||||
</span><span id="any_to_exists-963"><a href="#any_to_exists-963"><span class="linenos">963</span></a>
|
||||
</span><span id="any_to_exists-964"><a href="#any_to_exists-964"><span class="linenos">964</span></a> <span class="n">binop</span> <span class="o">=</span> <span class="nb">any</span><span class="o">.</span><span class="n">parent</span>
|
||||
</span><span id="any_to_exists-965"><a href="#any_to_exists-965"><span class="linenos">965</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">binop</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Binary</span><span class="p">):</span>
|
||||
</span><span id="any_to_exists-966"><a href="#any_to_exists-966"><span class="linenos">966</span></a> <span class="n">lambda_arg</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="s2">"x"</span><span class="p">)</span>
|
||||
</span><span id="any_to_exists-967"><a href="#any_to_exists-967"><span class="linenos">967</span></a> <span class="nb">any</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">lambda_arg</span><span class="p">)</span>
|
||||
</span><span id="any_to_exists-968"><a href="#any_to_exists-968"><span class="linenos">968</span></a> <span class="n">lambda_expr</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Lambda</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">binop</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">lambda_arg</span><span class="p">])</span>
|
||||
</span><span id="any_to_exists-969"><a href="#any_to_exists-969"><span class="linenos">969</span></a> <span class="n">binop</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">Exists</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">unnest</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">lambda_expr</span><span class="p">))</span>
|
||||
</span><span id="any_to_exists-970"><a href="#any_to_exists-970"><span class="linenos">970</span></a>
|
||||
</span><span id="any_to_exists-971"><a href="#any_to_exists-971"><span class="linenos">971</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
|
2
setup.py
2
setup.py
|
@ -2,7 +2,7 @@ from setuptools import find_packages, setup
|
|||
|
||||
|
||||
def sqlglotrs_version():
|
||||
with open("sqlglotrs/Cargo.toml") as fd:
|
||||
with open("sqlglotrs/Cargo.toml", encoding="utf-8") as fd:
|
||||
for line in fd.readlines():
|
||||
if line.strip().startswith("version"):
|
||||
return line.split("=")[1].strip().strip('"')
|
||||
|
|
|
@ -61,30 +61,54 @@ dialect implementations in order to understand how their various components can
|
|||
----
|
||||
"""
|
||||
|
||||
from sqlglot.dialects.athena import Athena
|
||||
from sqlglot.dialects.bigquery import BigQuery
|
||||
from sqlglot.dialects.clickhouse import ClickHouse
|
||||
from sqlglot.dialects.databricks import Databricks
|
||||
from sqlglot.dialects.dialect import Dialect, Dialects
|
||||
from sqlglot.dialects.doris import Doris
|
||||
from sqlglot.dialects.drill import Drill
|
||||
from sqlglot.dialects.druid import Druid
|
||||
from sqlglot.dialects.duckdb import DuckDB
|
||||
from sqlglot.dialects.hive import Hive
|
||||
from sqlglot.dialects.materialize import Materialize
|
||||
from sqlglot.dialects.mysql import MySQL
|
||||
from sqlglot.dialects.oracle import Oracle
|
||||
from sqlglot.dialects.postgres import Postgres
|
||||
from sqlglot.dialects.presto import Presto
|
||||
from sqlglot.dialects.prql import PRQL
|
||||
from sqlglot.dialects.redshift import Redshift
|
||||
from sqlglot.dialects.risingwave import RisingWave
|
||||
from sqlglot.dialects.snowflake import Snowflake
|
||||
from sqlglot.dialects.spark import Spark
|
||||
from sqlglot.dialects.spark2 import Spark2
|
||||
from sqlglot.dialects.sqlite import SQLite
|
||||
from sqlglot.dialects.starrocks import StarRocks
|
||||
from sqlglot.dialects.tableau import Tableau
|
||||
from sqlglot.dialects.teradata import Teradata
|
||||
from sqlglot.dialects.trino import Trino
|
||||
from sqlglot.dialects.tsql import TSQL
|
||||
import importlib
|
||||
|
||||
DIALECTS = [
|
||||
"Athena",
|
||||
"BigQuery",
|
||||
"ClickHouse",
|
||||
"Databricks",
|
||||
"Doris",
|
||||
"Drill",
|
||||
"Druid",
|
||||
"DuckDB",
|
||||
"Dune",
|
||||
"Hive",
|
||||
"Materialize",
|
||||
"MySQL",
|
||||
"Oracle",
|
||||
"Postgres",
|
||||
"Presto",
|
||||
"PRQL",
|
||||
"Redshift",
|
||||
"RisingWave",
|
||||
"Snowflake",
|
||||
"Spark",
|
||||
"Spark2",
|
||||
"SQLite",
|
||||
"StarRocks",
|
||||
"Tableau",
|
||||
"Teradata",
|
||||
"Trino",
|
||||
"TSQL",
|
||||
]
|
||||
|
||||
MODULE_BY_DIALECT = {name: name.lower() for name in DIALECTS}
|
||||
DIALECT_MODULE_NAMES = MODULE_BY_DIALECT.values()
|
||||
|
||||
MODULE_BY_ATTRIBUTE = {
|
||||
**MODULE_BY_DIALECT,
|
||||
"Dialect": "dialect",
|
||||
"Dialects": "dialect",
|
||||
}
|
||||
|
||||
__all__ = list(MODULE_BY_ATTRIBUTE)
|
||||
|
||||
|
||||
def __getattr__(name):
|
||||
module_name = MODULE_BY_ATTRIBUTE.get(name)
|
||||
if module_name:
|
||||
module = importlib.import_module(f"sqlglot.dialects.{module_name}")
|
||||
return getattr(module, name)
|
||||
|
||||
raise AttributeError(f"module {__name__} has no attribute {name}")
|
||||
|
|
|
@ -474,6 +474,7 @@ class BigQuery(Dialect):
|
|||
"DECLARE": TokenType.COMMAND,
|
||||
"ELSEIF": TokenType.COMMAND,
|
||||
"EXCEPTION": TokenType.COMMAND,
|
||||
"EXPORT": TokenType.EXPORT,
|
||||
"FLOAT64": TokenType.DOUBLE,
|
||||
"FOR SYSTEM_TIME": TokenType.TIMESTAMP_SNAPSHOT,
|
||||
"MODEL": TokenType.MODEL,
|
||||
|
@ -596,6 +597,7 @@ class BigQuery(Dialect):
|
|||
TokenType.ELSE: lambda self: self._parse_as_command(self._prev),
|
||||
TokenType.END: lambda self: self._parse_as_command(self._prev),
|
||||
TokenType.FOR: lambda self: self._parse_for_in(),
|
||||
TokenType.EXPORT: lambda self: self._parse_export_data(),
|
||||
}
|
||||
|
||||
BRACKET_OFFSETS = {
|
||||
|
@ -829,6 +831,16 @@ class BigQuery(Dialect):
|
|||
|
||||
return expr
|
||||
|
||||
def _parse_export_data(self) -> exp.Export:
|
||||
self._match_text_seq("DATA")
|
||||
|
||||
return self.expression(
|
||||
exp.Export,
|
||||
connection=self._match_text_seq("WITH", "CONNECTION") and self._parse_table_parts(),
|
||||
options=self._parse_properties(),
|
||||
this=self._match_text_seq("AS") and self._parse_select(),
|
||||
)
|
||||
|
||||
class Generator(generator.Generator):
|
||||
INTERVAL_ALLOWS_PLURAL_FORM = False
|
||||
JOIN_HINTS = False
|
||||
|
@ -1229,3 +1241,16 @@ class BigQuery(Dialect):
|
|||
expr = expr.this
|
||||
|
||||
return self.func("CONTAINS_SUBSTR", this, expr)
|
||||
|
||||
def cast_sql(self, expression: exp.Cast, safe_prefix: t.Optional[str] = None) -> str:
|
||||
this = expression.this
|
||||
|
||||
# This ensures that inline type-annotated ARRAY literals like ARRAY<INT64>[1, 2, 3]
|
||||
# are roundtripped unaffected. The inner check excludes ARRAY(SELECT ...) expressions,
|
||||
# because they aren't literals and so the above syntax is invalid BigQuery.
|
||||
if isinstance(this, exp.Array):
|
||||
elem = seq_get(this.expressions, 0)
|
||||
if not (elem and elem.find(exp.Query)):
|
||||
return f"{self.sql(expression, 'to')}{self.sql(this)}"
|
||||
|
||||
return super().cast_sql(expression, safe_prefix=safe_prefix)
|
||||
|
|
|
@ -160,6 +160,26 @@ def _timestrtotime_sql(self: ClickHouse.Generator, expression: exp.TimeStrToTime
|
|||
return self.sql(exp.cast(ts, datatype, dialect=self.dialect))
|
||||
|
||||
|
||||
def _map_sql(self: ClickHouse.Generator, expression: exp.Map | exp.VarMap) -> str:
|
||||
if not (expression.parent and expression.parent.arg_key == "settings"):
|
||||
return _lower_func(var_map_sql(self, expression))
|
||||
|
||||
keys = expression.args.get("keys")
|
||||
values = expression.args.get("values")
|
||||
|
||||
if not isinstance(keys, exp.Array) or not isinstance(values, exp.Array):
|
||||
self.unsupported("Cannot convert array columns into map.")
|
||||
return ""
|
||||
|
||||
args = []
|
||||
for key, value in zip(keys.expressions, values.expressions):
|
||||
args.append(f"{self.sql(key)}: {self.sql(value)}")
|
||||
|
||||
csv_args = ", ".join(args)
|
||||
|
||||
return f"{{{csv_args}}}"
|
||||
|
||||
|
||||
class ClickHouse(Dialect):
|
||||
NORMALIZE_FUNCTIONS: bool | str = False
|
||||
NULL_ORDERING = "nulls_are_last"
|
||||
|
@ -209,15 +229,12 @@ class ClickHouse(Dialect):
|
|||
"FLOAT32": TokenType.FLOAT,
|
||||
"FLOAT64": TokenType.DOUBLE,
|
||||
"GLOBAL": TokenType.GLOBAL,
|
||||
"INT256": TokenType.INT256,
|
||||
"LOWCARDINALITY": TokenType.LOWCARDINALITY,
|
||||
"MAP": TokenType.MAP,
|
||||
"NESTED": TokenType.NESTED,
|
||||
"SAMPLE": TokenType.TABLE_SAMPLE,
|
||||
"TUPLE": TokenType.STRUCT,
|
||||
"UINT128": TokenType.UINT128,
|
||||
"UINT16": TokenType.USMALLINT,
|
||||
"UINT256": TokenType.UINT256,
|
||||
"UINT32": TokenType.UINT,
|
||||
"UINT64": TokenType.UBIGINT,
|
||||
"UINT8": TokenType.UTINYINT,
|
||||
|
@ -989,7 +1006,7 @@ class ClickHouse(Dialect):
|
|||
exp.JSONPathKey: json_path_key_only_name,
|
||||
exp.JSONPathRoot: lambda *_: "",
|
||||
exp.Length: length_or_char_length_sql,
|
||||
exp.Map: lambda self, e: _lower_func(var_map_sql(self, e)),
|
||||
exp.Map: _map_sql,
|
||||
exp.Median: rename_func("median"),
|
||||
exp.Nullif: rename_func("nullIf"),
|
||||
exp.PartitionedByProperty: lambda self, e: f"PARTITION BY {self.sql(e, 'this')}",
|
||||
|
@ -1011,7 +1028,7 @@ class ClickHouse(Dialect):
|
|||
exp.TimeStrToTime: _timestrtotime_sql,
|
||||
exp.TimestampAdd: _datetime_delta_sql("TIMESTAMP_ADD"),
|
||||
exp.TimestampSub: _datetime_delta_sql("TIMESTAMP_SUB"),
|
||||
exp.VarMap: lambda self, e: _lower_func(var_map_sql(self, e)),
|
||||
exp.VarMap: _map_sql,
|
||||
exp.Xor: lambda self, e: self.func("xor", e.this, e.expression, *e.expressions),
|
||||
exp.MD5Digest: rename_func("MD5"),
|
||||
exp.MD5: lambda self, e: self.func("LOWER", self.func("HEX", self.func("MD5", e.this))),
|
||||
|
|
|
@ -7,6 +7,7 @@ from sqlglot.dialects.dialect import (
|
|||
date_delta_sql,
|
||||
build_date_delta,
|
||||
timestamptrunc_sql,
|
||||
build_formatted_time,
|
||||
)
|
||||
from sqlglot.dialects.spark import Spark
|
||||
from sqlglot.tokens import TokenType
|
||||
|
@ -46,6 +47,7 @@ class Databricks(Spark):
|
|||
"DATEDIFF": build_date_delta(exp.DateDiff),
|
||||
"DATE_DIFF": build_date_delta(exp.DateDiff),
|
||||
"GET_JSON_OBJECT": _build_json_extract,
|
||||
"TO_DATE": build_formatted_time(exp.TsOrDsToDate, "databricks"),
|
||||
}
|
||||
|
||||
FACTOR = {
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
from __future__ import annotations
|
||||
|
||||
import importlib
|
||||
import logging
|
||||
import typing as t
|
||||
from enum import Enum, auto
|
||||
from functools import reduce
|
||||
|
||||
from sqlglot import exp
|
||||
from sqlglot.dialects import DIALECT_MODULE_NAMES
|
||||
from sqlglot.errors import ParseError
|
||||
from sqlglot.generator import Generator, unsupported_args
|
||||
from sqlglot.helper import AutoName, flatten, is_int, seq_get, subclasses, to_bool
|
||||
|
@ -64,6 +66,7 @@ class Dialects(str, Enum):
|
|||
DRILL = "drill"
|
||||
DRUID = "druid"
|
||||
DUCKDB = "duckdb"
|
||||
DUNE = "dune"
|
||||
HIVE = "hive"
|
||||
MATERIALIZE = "materialize"
|
||||
MYSQL = "mysql"
|
||||
|
@ -101,7 +104,7 @@ class NormalizationStrategy(str, AutoName):
|
|||
|
||||
|
||||
class _Dialect(type):
|
||||
classes: t.Dict[str, t.Type[Dialect]] = {}
|
||||
_classes: t.Dict[str, t.Type[Dialect]] = {}
|
||||
|
||||
def __eq__(cls, other: t.Any) -> bool:
|
||||
if cls is other:
|
||||
|
@ -116,20 +119,46 @@ class _Dialect(type):
|
|||
def __hash__(cls) -> int:
|
||||
return hash(cls.__name__.lower())
|
||||
|
||||
@property
|
||||
def classes(cls):
|
||||
if len(DIALECT_MODULE_NAMES) != len(cls._classes):
|
||||
for key in DIALECT_MODULE_NAMES:
|
||||
cls._try_load(key)
|
||||
|
||||
return cls._classes
|
||||
|
||||
@classmethod
|
||||
def _try_load(cls, key: str | Dialects) -> None:
|
||||
if isinstance(key, Dialects):
|
||||
key = key.value
|
||||
|
||||
# This import will lead to a new dialect being loaded, and hence, registered.
|
||||
# We check that the key is an actual sqlglot module to avoid blindly importing
|
||||
# files. Custom user dialects need to be imported at the top-level package, in
|
||||
# order for them to be registered as soon as possible.
|
||||
if key in DIALECT_MODULE_NAMES:
|
||||
importlib.import_module(f"sqlglot.dialects.{key}")
|
||||
|
||||
@classmethod
|
||||
def __getitem__(cls, key: str) -> t.Type[Dialect]:
|
||||
return cls.classes[key]
|
||||
if key not in cls._classes:
|
||||
cls._try_load(key)
|
||||
|
||||
return cls._classes[key]
|
||||
|
||||
@classmethod
|
||||
def get(
|
||||
cls, key: str, default: t.Optional[t.Type[Dialect]] = None
|
||||
) -> t.Optional[t.Type[Dialect]]:
|
||||
return cls.classes.get(key, default)
|
||||
if key not in cls._classes:
|
||||
cls._try_load(key)
|
||||
|
||||
return cls._classes.get(key, default)
|
||||
|
||||
def __new__(cls, clsname, bases, attrs):
|
||||
klass = super().__new__(cls, clsname, bases, attrs)
|
||||
enum = Dialects.__members__.get(clsname.upper())
|
||||
cls.classes[enum.value if enum is not None else clsname.lower()] = klass
|
||||
cls._classes[enum.value if enum is not None else clsname.lower()] = klass
|
||||
|
||||
klass.TIME_TRIE = new_trie(klass.TIME_MAPPING)
|
||||
klass.FORMAT_TRIE = (
|
||||
|
@ -792,7 +821,9 @@ class Dialect(metaclass=_Dialect):
|
|||
if not result:
|
||||
from difflib import get_close_matches
|
||||
|
||||
similar = seq_get(get_close_matches(dialect_name, cls.classes, n=1), 0) or ""
|
||||
close_matches = get_close_matches(dialect_name, list(DIALECT_MODULE_NAMES), n=1)
|
||||
|
||||
similar = seq_get(close_matches, 0) or ""
|
||||
if similar:
|
||||
similar = f" Did you mean {similar}?"
|
||||
|
||||
|
@ -1119,8 +1150,8 @@ def struct_extract_sql(self: Generator, expression: exp.StructExtract) -> str:
|
|||
def var_map_sql(
|
||||
self: Generator, expression: exp.Map | exp.VarMap, map_func_name: str = "MAP"
|
||||
) -> str:
|
||||
keys = expression.args["keys"]
|
||||
values = expression.args["values"]
|
||||
keys = expression.args.get("keys")
|
||||
values = expression.args.get("values")
|
||||
|
||||
if not isinstance(keys, exp.Array) or not isinstance(values, exp.Array):
|
||||
self.unsupported("Cannot convert array columns into map.")
|
||||
|
|
|
@ -272,7 +272,7 @@ def _json_extract_value_array_sql(
|
|||
|
||||
class DuckDB(Dialect):
|
||||
NULL_ORDERING = "nulls_are_last"
|
||||
SUPPORTS_USER_DEFINED_TYPES = False
|
||||
SUPPORTS_USER_DEFINED_TYPES = True
|
||||
SAFE_DIVISION = True
|
||||
INDEX_OFFSET = 1
|
||||
CONCAT_COALESCE = True
|
||||
|
@ -408,6 +408,7 @@ class DuckDB(Dialect):
|
|||
"STRUCT_PACK": exp.Struct.from_arg_list,
|
||||
"STR_SPLIT": exp.Split.from_arg_list,
|
||||
"STR_SPLIT_REGEX": exp.RegexpSplit.from_arg_list,
|
||||
"TIME_BUCKET": exp.DateBin.from_arg_list,
|
||||
"TO_TIMESTAMP": exp.UnixToTime.from_arg_list,
|
||||
"UNNEST": exp.Explode.from_arg_list,
|
||||
"XOR": binary_from_function(exp.BitwiseXor),
|
||||
|
@ -662,6 +663,9 @@ class DuckDB(Dialect):
|
|||
exp.Levenshtein: unsupported_args("ins_cost", "del_cost", "sub_cost", "max_dist")(
|
||||
rename_func("LEVENSHTEIN")
|
||||
),
|
||||
exp.JSONObjectAgg: rename_func("JSON_GROUP_OBJECT"),
|
||||
exp.JSONBObjectAgg: rename_func("JSON_GROUP_OBJECT"),
|
||||
exp.DateBin: rename_func("TIME_BUCKET"),
|
||||
}
|
||||
|
||||
SUPPORTED_JSON_PATH_PARTS = {
|
||||
|
|
16
sqlglot/dialects/dune.py
Normal file
16
sqlglot/dialects/dune.py
Normal file
|
@ -0,0 +1,16 @@
|
|||
from __future__ import annotations
|
||||
|
||||
|
||||
from sqlglot import exp
|
||||
from sqlglot.dialects.trino import Trino
|
||||
|
||||
|
||||
class Dune(Trino):
|
||||
class Tokenizer(Trino.Tokenizer):
|
||||
HEX_STRINGS = ["0x", ("X'", "'")]
|
||||
|
||||
class Generator(Trino.Generator):
|
||||
TRANSFORMS = {
|
||||
**Trino.Generator.TRANSFORMS,
|
||||
exp.HexString: lambda self, e: f"0x{e.this}",
|
||||
}
|
|
@ -187,6 +187,12 @@ def _build_with_ignore_nulls(
|
|||
return _parse
|
||||
|
||||
|
||||
def _build_to_date(args: t.List) -> exp.TsOrDsToDate:
|
||||
expr = build_formatted_time(exp.TsOrDsToDate, "hive")(args)
|
||||
expr.set("safe", True)
|
||||
return expr
|
||||
|
||||
|
||||
class Hive(Dialect):
|
||||
ALIAS_POST_TABLESAMPLE = True
|
||||
IDENTIFIERS_CAN_START_WITH_DIGIT = True
|
||||
|
@ -318,7 +324,7 @@ class Hive(Dialect):
|
|||
pair_delim=seq_get(args, 1) or exp.Literal.string(","),
|
||||
key_value_delim=seq_get(args, 2) or exp.Literal.string(":"),
|
||||
),
|
||||
"TO_DATE": build_formatted_time(exp.TsOrDsToDate, "hive"),
|
||||
"TO_DATE": _build_to_date,
|
||||
"TO_JSON": exp.JSONFormat.from_arg_list,
|
||||
"TRUNC": exp.TimestampTrunc.from_arg_list,
|
||||
"UNBASE64": exp.FromBase64.from_arg_list,
|
||||
|
@ -572,7 +578,6 @@ class Hive(Dialect):
|
|||
exp.TimeStrToTime: timestrtotime_sql,
|
||||
exp.TimeStrToUnix: rename_func("UNIX_TIMESTAMP"),
|
||||
exp.TimestampTrunc: lambda self, e: self.func("TRUNC", e.this, unit_to_str(e)),
|
||||
exp.TimeToStr: lambda self, e: self.func("DATE_FORMAT", e.this, self.format_time(e)),
|
||||
exp.TimeToUnix: rename_func("UNIX_TIMESTAMP"),
|
||||
exp.ToBase64: rename_func("BASE64"),
|
||||
exp.TsOrDiToDi: lambda self,
|
||||
|
@ -718,8 +723,15 @@ class Hive(Dialect):
|
|||
|
||||
return f"{prefix}SERDEPROPERTIES ({exprs})"
|
||||
|
||||
def exists_sql(self, expression: exp.Exists):
|
||||
def exists_sql(self, expression: exp.Exists) -> str:
|
||||
if expression.expression:
|
||||
return self.function_fallback_sql(expression)
|
||||
|
||||
return super().exists_sql(expression)
|
||||
|
||||
def timetostr_sql(self, expression: exp.TimeToStr) -> str:
|
||||
this = expression.this
|
||||
if isinstance(this, exp.TimeStrToTime):
|
||||
this = this.this
|
||||
|
||||
return self.func("DATE_FORMAT", this, self.format_time(expression))
|
||||
|
|
|
@ -27,6 +27,7 @@ from sqlglot.dialects.dialect import (
|
|||
trim_sql,
|
||||
timestrtotime_sql,
|
||||
)
|
||||
from sqlglot.generator import unsupported_args
|
||||
from sqlglot.helper import seq_get
|
||||
from sqlglot.tokens import TokenType
|
||||
|
||||
|
@ -316,6 +317,8 @@ class MySQL(Dialect):
|
|||
this=exp.TsOrDsToDate(this=seq_get(args, 0)),
|
||||
format=exp.Literal.string("%B"),
|
||||
),
|
||||
"SCHEMA": exp.CurrentSchema.from_arg_list,
|
||||
"DATABASE": exp.CurrentSchema.from_arg_list,
|
||||
"STR_TO_DATE": _str_to_date,
|
||||
"TIMESTAMPDIFF": build_date_delta(exp.TimestampDiff),
|
||||
"TO_DAYS": lambda args: exp.paren(
|
||||
|
@ -1265,3 +1268,7 @@ class MySQL(Dialect):
|
|||
|
||||
def isascii_sql(self, expression: exp.IsAscii) -> str:
|
||||
return f"REGEXP_LIKE({self.sql(expression.this)}, '^[[:ascii:]]*$')"
|
||||
|
||||
@unsupported_args("this")
|
||||
def currentschema_sql(self, expression: exp.CurrentSchema) -> str:
|
||||
return self.func("SCHEMA")
|
||||
|
|
|
@ -33,11 +33,14 @@ from sqlglot.dialects.dialect import (
|
|||
trim_sql,
|
||||
ts_or_ds_add_cast,
|
||||
strposition_sql,
|
||||
count_if_to_sum,
|
||||
)
|
||||
from sqlglot.generator import unsupported_args
|
||||
from sqlglot.helper import is_int, seq_get
|
||||
from sqlglot.parser import binary_range_parser
|
||||
from sqlglot.tokens import TokenType
|
||||
|
||||
|
||||
DATE_DIFF_FACTOR = {
|
||||
"MICROSECOND": " * 1000000",
|
||||
"MILLISECOND": " * 1000",
|
||||
|
@ -391,6 +394,13 @@ class Postgres(Dialect):
|
|||
"SHA384": lambda args: exp.SHA2(this=seq_get(args, 0), length=exp.Literal.number(384)),
|
||||
"SHA512": lambda args: exp.SHA2(this=seq_get(args, 0), length=exp.Literal.number(512)),
|
||||
"LEVENSHTEIN_LESS_EQUAL": _build_levenshtein_less_equal,
|
||||
"JSON_OBJECT_AGG": lambda args: exp.JSONObjectAgg(expressions=args),
|
||||
"JSONB_OBJECT_AGG": exp.JSONBObjectAgg.from_arg_list,
|
||||
}
|
||||
|
||||
NO_PAREN_FUNCTIONS = {
|
||||
**parser.Parser.NO_PAREN_FUNCTIONS,
|
||||
TokenType.CURRENT_SCHEMA: exp.CurrentSchema,
|
||||
}
|
||||
|
||||
FUNCTION_PARSERS = {
|
||||
|
@ -610,6 +620,9 @@ class Postgres(Dialect):
|
|||
exp.Unicode: rename_func("ASCII"),
|
||||
exp.UnixToTime: _unix_to_time_sql,
|
||||
exp.Levenshtein: _levenshtein_sql,
|
||||
exp.JSONObjectAgg: rename_func("JSON_OBJECT_AGG"),
|
||||
exp.JSONBObjectAgg: rename_func("JSONB_OBJECT_AGG"),
|
||||
exp.CountIf: count_if_to_sum,
|
||||
}
|
||||
|
||||
TRANSFORMS.pop(exp.CommentColumnConstraint)
|
||||
|
@ -723,3 +736,7 @@ class Postgres(Dialect):
|
|||
|
||||
def isascii_sql(self, expression: exp.IsAscii) -> str:
|
||||
return f"({self.sql(expression.this)} ~ '^[[:ascii:]]*$')"
|
||||
|
||||
@unsupported_args("this")
|
||||
def currentschema_sql(self, expression: exp.CurrentSchema) -> str:
|
||||
return "CURRENT_SCHEMA"
|
||||
|
|
|
@ -158,6 +158,7 @@ class Redshift(Postgres):
|
|||
SUPPORTS_CONVERT_TIMEZONE = True
|
||||
EXCEPT_INTERSECT_SUPPORT_ALL_CLAUSE = False
|
||||
SUPPORTS_MEDIAN = True
|
||||
ALTER_SET_TYPE = "TYPE"
|
||||
|
||||
# Redshift doesn't have `WITH` as part of their with_properties so we remove it
|
||||
WITH_PROPERTIES_PREFIX = " "
|
||||
|
|
|
@ -1005,6 +1005,10 @@ class Snowflake(Dialect):
|
|||
exp.DataType.Type.STRUCT: "OBJECT",
|
||||
}
|
||||
|
||||
TOKEN_MAPPING = {
|
||||
TokenType.AUTO_INCREMENT: "AUTOINCREMENT",
|
||||
}
|
||||
|
||||
PROPERTIES_LOCATION = {
|
||||
**generator.Generator.PROPERTIES_LOCATION,
|
||||
exp.SetProperty: exp.Properties.Location.UNSUPPORTED,
|
||||
|
|
|
@ -144,7 +144,7 @@ class Spark(Spark2):
|
|||
**Spark2.Generator.TYPE_MAPPING,
|
||||
exp.DataType.Type.MONEY: "DECIMAL(15, 4)",
|
||||
exp.DataType.Type.SMALLMONEY: "DECIMAL(6, 4)",
|
||||
exp.DataType.Type.UNIQUEIDENTIFIER: "STRING",
|
||||
exp.DataType.Type.UUID: "STRING",
|
||||
exp.DataType.Type.TIMESTAMPLTZ: "TIMESTAMP_LTZ",
|
||||
exp.DataType.Type.TIMESTAMPNTZ: "TIMESTAMP_NTZ",
|
||||
}
|
||||
|
|
|
@ -185,8 +185,12 @@ class Spark2(Hive):
|
|||
"DAYOFYEAR": lambda args: exp.DayOfYear(this=exp.TsOrDsToDate(this=seq_get(args, 0))),
|
||||
"DOUBLE": _build_as_cast("double"),
|
||||
"FLOAT": _build_as_cast("float"),
|
||||
"FROM_UTC_TIMESTAMP": lambda args: exp.AtTimeZone(
|
||||
this=exp.cast(seq_get(args, 0) or exp.Var(this=""), exp.DataType.Type.TIMESTAMP),
|
||||
"FROM_UTC_TIMESTAMP": lambda args, dialect: exp.AtTimeZone(
|
||||
this=exp.cast(
|
||||
seq_get(args, 0) or exp.Var(this=""),
|
||||
exp.DataType.Type.TIMESTAMP,
|
||||
dialect=dialect,
|
||||
),
|
||||
zone=seq_get(args, 1),
|
||||
),
|
||||
"INT": _build_as_cast("int"),
|
||||
|
@ -202,8 +206,12 @@ class Spark2(Hive):
|
|||
else build_formatted_time(exp.StrToTime, "spark")(args)
|
||||
),
|
||||
"TO_UNIX_TIMESTAMP": exp.StrToUnix.from_arg_list,
|
||||
"TO_UTC_TIMESTAMP": lambda args: exp.FromTimeZone(
|
||||
this=exp.cast(seq_get(args, 0) or exp.Var(this=""), exp.DataType.Type.TIMESTAMP),
|
||||
"TO_UTC_TIMESTAMP": lambda args, dialect: exp.FromTimeZone(
|
||||
this=exp.cast(
|
||||
seq_get(args, 0) or exp.Var(this=""),
|
||||
exp.DataType.Type.TIMESTAMP,
|
||||
dialect=dialect,
|
||||
),
|
||||
zone=seq_get(args, 1),
|
||||
),
|
||||
"TRUNC": lambda args: exp.DateTrunc(unit=seq_get(args, 1), this=seq_get(args, 0)),
|
||||
|
|
|
@ -17,8 +17,8 @@ from sqlglot.dialects.dialect import (
|
|||
rename_func,
|
||||
strposition_sql,
|
||||
)
|
||||
from sqlglot.tokens import TokenType
|
||||
from sqlglot.generator import unsupported_args
|
||||
from sqlglot.tokens import TokenType
|
||||
|
||||
|
||||
def _date_add_sql(self: SQLite.Generator, expression: exp.DateAdd) -> str:
|
||||
|
@ -302,3 +302,7 @@ class SQLite(Dialect):
|
|||
|
||||
def isascii_sql(self, expression: exp.IsAscii) -> str:
|
||||
return f"(NOT {self.sql(expression.this)} GLOB CAST(x'2a5b5e012d7f5d2a' AS TEXT))"
|
||||
|
||||
@unsupported_args("this")
|
||||
def currentschema_sql(self, expression: exp.CurrentSchema) -> str:
|
||||
return "'main'"
|
||||
|
|
|
@ -26,6 +26,8 @@ class Trino(Presto):
|
|||
**dict.fromkeys(
|
||||
("WITH", "WITHOUT"),
|
||||
(
|
||||
("WRAPPER"),
|
||||
("ARRAY", "WRAPPER"),
|
||||
("CONDITIONAL", "WRAPPER"),
|
||||
("CONDITIONAL", "ARRAY", "WRAPPED"),
|
||||
("UNCONDITIONAL", "WRAPPER"),
|
||||
|
|
|
@ -525,7 +525,7 @@ class TSQL(Dialect):
|
|||
"TOP": TokenType.TOP,
|
||||
"TIMESTAMP": TokenType.ROWVERSION,
|
||||
"TINYINT": TokenType.UTINYINT,
|
||||
"UNIQUEIDENTIFIER": TokenType.UNIQUEIDENTIFIER,
|
||||
"UNIQUEIDENTIFIER": TokenType.UUID,
|
||||
"UPDATE STATISTICS": TokenType.COMMAND,
|
||||
"XML": TokenType.XML,
|
||||
}
|
||||
|
@ -545,6 +545,13 @@ class TSQL(Dialect):
|
|||
TokenType.OPTION: lambda self: ("options", self._parse_options()),
|
||||
}
|
||||
|
||||
# T-SQL does not allow BEGIN to be used as an identifier
|
||||
ID_VAR_TOKENS = parser.Parser.ID_VAR_TOKENS - {TokenType.BEGIN}
|
||||
ALIAS_TOKENS = parser.Parser.ALIAS_TOKENS - {TokenType.BEGIN}
|
||||
TABLE_ALIAS_TOKENS = parser.Parser.TABLE_ALIAS_TOKENS - {TokenType.BEGIN}
|
||||
COMMENT_TABLE_ALIAS_TOKENS = parser.Parser.COMMENT_TABLE_ALIAS_TOKENS - {TokenType.BEGIN}
|
||||
UPDATE_ALIAS_TOKENS = parser.Parser.UPDATE_ALIAS_TOKENS - {TokenType.BEGIN}
|
||||
|
||||
FUNCTIONS = {
|
||||
**parser.Parser.FUNCTIONS,
|
||||
"CHARINDEX": lambda args: exp.StrPosition(
|
||||
|
@ -572,9 +579,11 @@ class TSQL(Dialect):
|
|||
"JSON_VALUE": parser.build_extract_json_with_path(exp.JSONExtractScalar),
|
||||
"LEN": _build_with_arg_as_text(exp.Length),
|
||||
"LEFT": _build_with_arg_as_text(exp.Left),
|
||||
"NEWID": exp.Uuid.from_arg_list,
|
||||
"RIGHT": _build_with_arg_as_text(exp.Right),
|
||||
"PARSENAME": _build_parsename,
|
||||
"REPLICATE": exp.Repeat.from_arg_list,
|
||||
"SCHEMA_NAME": exp.CurrentSchema.from_arg_list,
|
||||
"SQUARE": lambda args: exp.Pow(this=seq_get(args, 0), expression=exp.Literal.number(2)),
|
||||
"SYSDATETIME": exp.CurrentTimestamp.from_arg_list,
|
||||
"SUSER_NAME": exp.CurrentUser.from_arg_list,
|
||||
|
@ -590,6 +599,8 @@ class TSQL(Dialect):
|
|||
("ENCRYPTION", "RECOMPILE", "SCHEMABINDING", "NATIVE_COMPILATION", "EXECUTE"), tuple()
|
||||
)
|
||||
|
||||
COLUMN_DEFINITION_MODES = {"OUT", "OUTPUT", "READ_ONLY"}
|
||||
|
||||
RETURNS_TABLE_TOKENS = parser.Parser.ID_VAR_TOKENS - {
|
||||
TokenType.TABLE,
|
||||
*parser.Parser.TYPE_TOKENS,
|
||||
|
@ -728,6 +739,18 @@ class TSQL(Dialect):
|
|||
convert.set("strict", strict)
|
||||
return convert
|
||||
|
||||
def _parse_column_def(
|
||||
self, this: t.Optional[exp.Expression], computed_column: bool = True
|
||||
) -> t.Optional[exp.Expression]:
|
||||
this = super()._parse_column_def(this=this, computed_column=computed_column)
|
||||
if not this:
|
||||
return None
|
||||
if self._match(TokenType.EQ):
|
||||
this.set("default", self._parse_disjunction())
|
||||
if self._match_texts(self.COLUMN_DEFINITION_MODES):
|
||||
this.set("output", self._prev.text)
|
||||
return this
|
||||
|
||||
def _parse_user_defined_function(
|
||||
self, kind: t.Optional[TokenType] = None
|
||||
) -> t.Optional[exp.Expression]:
|
||||
|
@ -897,6 +920,7 @@ class TSQL(Dialect):
|
|||
exp.DataType.Type.SMALLDATETIME: "SMALLDATETIME",
|
||||
exp.DataType.Type.UTINYINT: "TINYINT",
|
||||
exp.DataType.Type.VARIANT: "SQL_VARIANT",
|
||||
exp.DataType.Type.UUID: "UNIQUEIDENTIFIER",
|
||||
}
|
||||
|
||||
TYPE_MAPPING.pop(exp.DataType.Type.NCHAR)
|
||||
|
@ -927,6 +951,7 @@ class TSQL(Dialect):
|
|||
exp.Min: min_or_least,
|
||||
exp.NumberToStr: _format_sql,
|
||||
exp.Repeat: rename_func("REPLICATE"),
|
||||
exp.CurrentSchema: rename_func("SCHEMA_NAME"),
|
||||
exp.Select: transforms.preprocess(
|
||||
[
|
||||
transforms.eliminate_distinct_on,
|
||||
|
@ -951,6 +976,7 @@ class TSQL(Dialect):
|
|||
exp.TsOrDsAdd: date_delta_sql("DATEADD", cast=True),
|
||||
exp.TsOrDsDiff: date_delta_sql("DATEDIFF"),
|
||||
exp.TimestampTrunc: lambda self, e: self.func("DATETRUNC", e.unit, e.this),
|
||||
exp.Uuid: lambda *_: "NEWID()",
|
||||
exp.DateFromParts: rename_func("DATEFROMPARTS"),
|
||||
}
|
||||
|
||||
|
@ -965,14 +991,22 @@ class TSQL(Dialect):
|
|||
return f"{scope_name}::{rhs}"
|
||||
|
||||
def select_sql(self, expression: exp.Select) -> str:
|
||||
if expression.args.get("offset"):
|
||||
limit = expression.args.get("limit")
|
||||
offset = expression.args.get("offset")
|
||||
|
||||
if isinstance(limit, exp.Fetch) and not offset:
|
||||
# Dialects like Oracle can FETCH directly from a row set but
|
||||
# T-SQL requires an ORDER BY + OFFSET clause in order to FETCH
|
||||
offset = exp.Offset(expression=exp.Literal.number(0))
|
||||
expression.set("offset", offset)
|
||||
|
||||
if offset:
|
||||
if not expression.args.get("order"):
|
||||
# ORDER BY is required in order to use OFFSET in a query, so we use
|
||||
# a noop order by, since we don't really care about the order.
|
||||
# See: https://www.microsoftpressstore.com/articles/article.aspx?p=2314819
|
||||
expression.order_by(exp.select(exp.null()).subquery(), copy=False)
|
||||
|
||||
limit = expression.args.get("limit")
|
||||
if isinstance(limit, exp.Limit):
|
||||
# TOP and OFFSET can't be combined, we need use FETCH instead of TOP
|
||||
# we replace here because otherwise TOP would be generated in select_sql
|
||||
|
@ -1273,3 +1307,11 @@ class TSQL(Dialect):
|
|||
|
||||
def isascii_sql(self, expression: exp.IsAscii) -> str:
|
||||
return f"(PATINDEX(CONVERT(VARCHAR(MAX), 0x255b5e002d7f5d25) COLLATE Latin1_General_BIN, {self.sql(expression.this)}) = 0)"
|
||||
|
||||
def columndef_sql(self, expression: exp.ColumnDef, sep: str = " ") -> str:
|
||||
this = super().columndef_sql(expression, sep)
|
||||
default = self.sql(expression, "default")
|
||||
default = f" = {default}" if default else ""
|
||||
output = self.sql(expression, "output")
|
||||
output = f" {output}" if output else ""
|
||||
return f"{this}{default}{output}"
|
||||
|
|
|
@ -637,7 +637,7 @@ class Expression(metaclass=_Expression):
|
|||
|
||||
if not root:
|
||||
root = new_node
|
||||
elif new_node is not node:
|
||||
elif parent and arg_key and new_node is not node:
|
||||
parent.set(arg_key, new_node, index)
|
||||
|
||||
assert root
|
||||
|
@ -1675,6 +1675,8 @@ class ColumnDef(Expression):
|
|||
"constraints": False,
|
||||
"exists": False,
|
||||
"position": False,
|
||||
"default": False,
|
||||
"output": False,
|
||||
}
|
||||
|
||||
@property
|
||||
|
@ -2064,6 +2066,11 @@ class Drop(Expression):
|
|||
return kind and kind.upper()
|
||||
|
||||
|
||||
# https://cloud.google.com/bigquery/docs/reference/standard-sql/export-statements
|
||||
class Export(Expression):
|
||||
arg_types = {"this": True, "connection": False, "options": True}
|
||||
|
||||
|
||||
class Filter(Expression):
|
||||
arg_types = {"this": True, "expression": True}
|
||||
|
||||
|
@ -3245,7 +3252,7 @@ class Table(Expression):
|
|||
|
||||
@property
|
||||
def name(self) -> str:
|
||||
if isinstance(self.this, Func):
|
||||
if not self.this or isinstance(self.this, Func):
|
||||
return ""
|
||||
return self.this.name
|
||||
|
||||
|
@ -4469,7 +4476,6 @@ class DataType(Expression):
|
|||
UMEDIUMINT = auto()
|
||||
UDECIMAL = auto()
|
||||
UNION = auto()
|
||||
UNIQUEIDENTIFIER = auto()
|
||||
UNKNOWN = auto() # Sentinel value, useful for type annotation
|
||||
USERDEFINED = "USER-DEFINED"
|
||||
USMALLINT = auto()
|
||||
|
@ -5518,6 +5524,7 @@ class Cast(Func):
|
|||
"format": False,
|
||||
"safe": False,
|
||||
"action": False,
|
||||
"default": False,
|
||||
}
|
||||
|
||||
@property
|
||||
|
@ -5628,6 +5635,10 @@ class CurrentTimestamp(Func):
|
|||
arg_types = {"this": False, "sysdate": False}
|
||||
|
||||
|
||||
class CurrentSchema(Func):
|
||||
arg_types = {"this": False}
|
||||
|
||||
|
||||
class CurrentUser(Func):
|
||||
arg_types = {"this": False}
|
||||
|
||||
|
@ -5636,6 +5647,10 @@ class DateAdd(Func, IntervalOp):
|
|||
arg_types = {"this": True, "expression": True, "unit": False}
|
||||
|
||||
|
||||
class DateBin(Func, IntervalOp):
|
||||
arg_types = {"this": True, "expression": True, "unit": False, "zone": False}
|
||||
|
||||
|
||||
class DateSub(Func, IntervalOp):
|
||||
arg_types = {"this": True, "expression": True, "unit": False}
|
||||
|
||||
|
@ -6064,6 +6079,11 @@ class JSONObjectAgg(AggFunc):
|
|||
}
|
||||
|
||||
|
||||
# https://www.postgresql.org/docs/9.5/functions-aggregate.html
|
||||
class JSONBObjectAgg(AggFunc):
|
||||
arg_types = {"this": True, "expression": True}
|
||||
|
||||
|
||||
# https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/JSON_ARRAY.html
|
||||
class JSONArray(Func):
|
||||
arg_types = {
|
||||
|
|
|
@ -451,6 +451,9 @@ class Generator(metaclass=_Generator):
|
|||
# The function name of the exp.ArraySize expression
|
||||
ARRAY_SIZE_NAME: str = "ARRAY_LENGTH"
|
||||
|
||||
# The syntax to use when altering the type of a column
|
||||
ALTER_SET_TYPE = "SET DATA TYPE"
|
||||
|
||||
# Whether exp.ArraySize should generate the dimension arg too (valid for Postgres & DuckDB)
|
||||
# None -> Doesn't support it at all
|
||||
# False (DuckDB) -> Has backwards-compatible support, but preferably generated without
|
||||
|
@ -3182,7 +3185,9 @@ class Generator(metaclass=_Generator):
|
|||
to_sql = f" {to_sql}" if to_sql else ""
|
||||
action = self.sql(expression, "action")
|
||||
action = f" {action}" if action else ""
|
||||
return f"{safe_prefix or ''}CAST({self.sql(expression, 'this')} AS{to_sql}{format_sql}{action})"
|
||||
default = self.sql(expression, "default")
|
||||
default = f" DEFAULT {default} ON CONVERSION ERROR" if default else ""
|
||||
return f"{safe_prefix or ''}CAST({self.sql(expression, 'this')} AS{to_sql}{default}{format_sql}{action})"
|
||||
|
||||
def currentdate_sql(self, expression: exp.CurrentDate) -> str:
|
||||
zone = self.sql(expression, "this")
|
||||
|
@ -3250,7 +3255,7 @@ class Generator(metaclass=_Generator):
|
|||
collate = f" COLLATE {collate}" if collate else ""
|
||||
using = self.sql(expression, "using")
|
||||
using = f" USING {using}" if using else ""
|
||||
return f"ALTER COLUMN {this} SET DATA TYPE {dtype}{collate}{using}"
|
||||
return f"ALTER COLUMN {this} {self.ALTER_SET_TYPE} {dtype}{collate}{using}"
|
||||
|
||||
default = self.sql(expression, "default")
|
||||
if default:
|
||||
|
@ -4750,3 +4755,10 @@ class Generator(metaclass=_Generator):
|
|||
def xmlnamespace_sql(self, expression: exp.XMLNamespace) -> str:
|
||||
this = self.sql(expression, "this")
|
||||
return this if isinstance(expression.this, exp.Alias) else f"DEFAULT {this}"
|
||||
|
||||
def export_sql(self, expression: exp.Export) -> str:
|
||||
this = self.sql(expression, "this")
|
||||
connection = self.sql(expression, "connection")
|
||||
connection = f"WITH CONNECTION {connection} " if connection else ""
|
||||
options = self.sql(expression, "options")
|
||||
return f"EXPORT DATA {connection}{options} AS {this}"
|
||||
|
|
|
@ -387,7 +387,6 @@ class Parser(metaclass=_Parser):
|
|||
TokenType.BIGSERIAL,
|
||||
TokenType.XML,
|
||||
TokenType.YEAR,
|
||||
TokenType.UNIQUEIDENTIFIER,
|
||||
TokenType.USERDEFINED,
|
||||
TokenType.MONEY,
|
||||
TokenType.SMALLMONEY,
|
||||
|
@ -487,6 +486,7 @@ class Parser(metaclass=_Parser):
|
|||
TokenType.CONSTRAINT,
|
||||
TokenType.COPY,
|
||||
TokenType.CUBE,
|
||||
TokenType.CURRENT_SCHEMA,
|
||||
TokenType.DEFAULT,
|
||||
TokenType.DELETE,
|
||||
TokenType.DESC,
|
||||
|
@ -496,6 +496,7 @@ class Parser(metaclass=_Parser):
|
|||
TokenType.DIV,
|
||||
TokenType.END,
|
||||
TokenType.EXECUTE,
|
||||
TokenType.EXPORT,
|
||||
TokenType.ESCAPE,
|
||||
TokenType.FALSE,
|
||||
TokenType.FIRST,
|
||||
|
@ -556,8 +557,6 @@ class Parser(metaclass=_Parser):
|
|||
}
|
||||
ID_VAR_TOKENS.remove(TokenType.UNION)
|
||||
|
||||
INTERVAL_VARS = ID_VAR_TOKENS - {TokenType.END}
|
||||
|
||||
TABLE_ALIAS_TOKENS = ID_VAR_TOKENS - {
|
||||
TokenType.ANTI,
|
||||
TokenType.APPLY,
|
||||
|
@ -589,6 +588,7 @@ class Parser(metaclass=_Parser):
|
|||
TokenType.COMMAND,
|
||||
TokenType.CURRENT_DATE,
|
||||
TokenType.CURRENT_DATETIME,
|
||||
TokenType.CURRENT_SCHEMA,
|
||||
TokenType.CURRENT_TIMESTAMP,
|
||||
TokenType.CURRENT_TIME,
|
||||
TokenType.CURRENT_USER,
|
||||
|
@ -3175,9 +3175,11 @@ class Parser(metaclass=_Parser):
|
|||
last_comments = None
|
||||
expressions = []
|
||||
while True:
|
||||
expressions.append(self._parse_cte())
|
||||
cte = self._parse_cte()
|
||||
if isinstance(cte, exp.CTE):
|
||||
expressions.append(cte)
|
||||
if last_comments:
|
||||
expressions[-1].add_comments(last_comments)
|
||||
cte.add_comments(last_comments)
|
||||
|
||||
if not self._match(TokenType.COMMA) and not self._match(TokenType.WITH):
|
||||
break
|
||||
|
@ -5116,7 +5118,12 @@ class Parser(metaclass=_Parser):
|
|||
while self._curr:
|
||||
datatype_token = self._prev.token_type
|
||||
matched_l_bracket = self._match(TokenType.L_BRACKET)
|
||||
if not matched_l_bracket and not matched_array:
|
||||
|
||||
if (not matched_l_bracket and not matched_array) or (
|
||||
datatype_token == TokenType.ARRAY and self._match(TokenType.R_BRACKET)
|
||||
):
|
||||
# Postgres allows casting empty arrays such as ARRAY[]::INT[],
|
||||
# not to be confused with the fixed size array parsing
|
||||
break
|
||||
|
||||
matched_array = False
|
||||
|
@ -5543,7 +5550,7 @@ class Parser(metaclass=_Parser):
|
|||
return self._parse_statement()
|
||||
|
||||
def _parse_function_parameter(self) -> t.Optional[exp.Expression]:
|
||||
return self._parse_column_def(self._parse_id_var())
|
||||
return self._parse_column_def(this=self._parse_id_var(), computed_column=False)
|
||||
|
||||
def _parse_user_defined_function(
|
||||
self, kind: t.Optional[TokenType] = None
|
||||
|
@ -5630,11 +5637,16 @@ class Parser(metaclass=_Parser):
|
|||
def _parse_field_def(self) -> t.Optional[exp.Expression]:
|
||||
return self._parse_column_def(self._parse_field(any_token=True))
|
||||
|
||||
def _parse_column_def(self, this: t.Optional[exp.Expression]) -> t.Optional[exp.Expression]:
|
||||
def _parse_column_def(
|
||||
self, this: t.Optional[exp.Expression], computed_column: bool = True
|
||||
) -> t.Optional[exp.Expression]:
|
||||
# column defs are not really columns, they're identifiers
|
||||
if isinstance(this, exp.Column):
|
||||
this = this.this
|
||||
|
||||
if not computed_column:
|
||||
self._match(TokenType.ALIAS)
|
||||
|
||||
kind = self._parse_types(schema=True)
|
||||
|
||||
if self._match_text_seq("FOR", "ORDINALITY"):
|
||||
|
@ -5695,7 +5707,9 @@ class Parser(metaclass=_Parser):
|
|||
increment = self._parse_bitwise()
|
||||
|
||||
if start and increment:
|
||||
return exp.GeneratedAsIdentityColumnConstraint(start=start, increment=increment)
|
||||
return exp.GeneratedAsIdentityColumnConstraint(
|
||||
start=start, increment=increment, this=False
|
||||
)
|
||||
|
||||
return exp.AutoIncrementColumnConstraint()
|
||||
|
||||
|
@ -6115,7 +6129,12 @@ class Parser(metaclass=_Parser):
|
|||
fmt = None
|
||||
to = self._parse_types()
|
||||
|
||||
if self._match(TokenType.FORMAT):
|
||||
default = self._match(TokenType.DEFAULT)
|
||||
if default:
|
||||
default = self._parse_bitwise()
|
||||
self._match_text_seq("ON", "CONVERSION", "ERROR")
|
||||
|
||||
if self._match_set((TokenType.FORMAT, TokenType.COMMA)):
|
||||
fmt_string = self._parse_string()
|
||||
fmt = self._parse_at_time_zone(fmt_string)
|
||||
|
||||
|
@ -6153,6 +6172,7 @@ class Parser(metaclass=_Parser):
|
|||
format=fmt,
|
||||
safe=safe,
|
||||
action=self._parse_var_from_options(self.CAST_ACTIONS, raise_unmatched=False),
|
||||
default=default,
|
||||
)
|
||||
|
||||
def _parse_string_agg(self) -> exp.GroupConcat:
|
||||
|
@ -6256,7 +6276,7 @@ class Parser(metaclass=_Parser):
|
|||
namespaces = []
|
||||
|
||||
while True:
|
||||
if self._match_text_seq("DEFAULT"):
|
||||
if self._match(TokenType.DEFAULT):
|
||||
uri = self._parse_string()
|
||||
else:
|
||||
uri = self._parse_alias(self._parse_string())
|
||||
|
|
|
@ -192,7 +192,6 @@ class TokenType(AutoName):
|
|||
BIGSERIAL = auto()
|
||||
XML = auto()
|
||||
YEAR = auto()
|
||||
UNIQUEIDENTIFIER = auto()
|
||||
USERDEFINED = auto()
|
||||
MONEY = auto()
|
||||
SMALLMONEY = auto()
|
||||
|
@ -250,6 +249,7 @@ class TokenType(AutoName):
|
|||
CUBE = auto()
|
||||
CURRENT_DATE = auto()
|
||||
CURRENT_DATETIME = auto()
|
||||
CURRENT_SCHEMA = auto()
|
||||
CURRENT_TIME = auto()
|
||||
CURRENT_TIMESTAMP = auto()
|
||||
CURRENT_USER = auto()
|
||||
|
@ -413,6 +413,7 @@ class TokenType(AutoName):
|
|||
SOURCE = auto()
|
||||
ANALYZE = auto()
|
||||
NAMESPACE = auto()
|
||||
EXPORT = auto()
|
||||
|
||||
|
||||
_ALL_TOKEN_TYPES = list(TokenType)
|
||||
|
@ -713,6 +714,7 @@ class Tokenizer(metaclass=_Tokenizer):
|
|||
"CROSS": TokenType.CROSS,
|
||||
"CUBE": TokenType.CUBE,
|
||||
"CURRENT_DATE": TokenType.CURRENT_DATE,
|
||||
"CURRENT_SCHEMA": TokenType.CURRENT_SCHEMA,
|
||||
"CURRENT_TIME": TokenType.CURRENT_TIME,
|
||||
"CURRENT_TIMESTAMP": TokenType.CURRENT_TIMESTAMP,
|
||||
"CURRENT_USER": TokenType.CURRENT_USER,
|
||||
|
@ -854,7 +856,6 @@ class Tokenizer(metaclass=_Tokenizer):
|
|||
"INT16": TokenType.SMALLINT,
|
||||
"SHORT": TokenType.SMALLINT,
|
||||
"SMALLINT": TokenType.SMALLINT,
|
||||
"INT128": TokenType.INT128,
|
||||
"HUGEINT": TokenType.INT128,
|
||||
"UHUGEINT": TokenType.UINT128,
|
||||
"INT2": TokenType.SMALLINT,
|
||||
|
@ -863,10 +864,14 @@ class Tokenizer(metaclass=_Tokenizer):
|
|||
"INT4": TokenType.INT,
|
||||
"INT32": TokenType.INT,
|
||||
"INT64": TokenType.BIGINT,
|
||||
"INT128": TokenType.INT128,
|
||||
"INT256": TokenType.INT256,
|
||||
"LONG": TokenType.BIGINT,
|
||||
"BIGINT": TokenType.BIGINT,
|
||||
"INT8": TokenType.TINYINT,
|
||||
"UINT": TokenType.UINT,
|
||||
"UINT128": TokenType.UINT128,
|
||||
"UINT256": TokenType.UINT256,
|
||||
"DEC": TokenType.DECIMAL,
|
||||
"DECIMAL": TokenType.DECIMAL,
|
||||
"DECIMAL32": TokenType.DECIMAL32,
|
||||
|
|
|
@ -934,6 +934,7 @@ def eliminate_join_marks(expression: exp.Expression) -> exp.Expression:
|
|||
new_from_name = list(only_old_joins)[0]
|
||||
query.set("from", exp.From(this=old_joins[new_from_name].this))
|
||||
|
||||
if new_joins:
|
||||
query.set("joins", list(new_joins.values()))
|
||||
|
||||
if not where.this:
|
||||
|
|
|
@ -234,6 +234,10 @@ LANGUAGE js AS
|
|||
self.validate_identity(
|
||||
"CREATE OR REPLACE VIEW test (tenant_id OPTIONS (description='Test description on table creation')) AS SELECT 1 AS tenant_id, 1 AS customer_id",
|
||||
)
|
||||
self.validate_identity(
|
||||
"ARRAY(SELECT AS STRUCT e.x AS y, e.z AS bla FROM UNNEST(bob))::ARRAY<STRUCT<y STRING, bro NUMERIC>>",
|
||||
"CAST(ARRAY(SELECT AS STRUCT e.x AS y, e.z AS bla FROM UNNEST(bob)) AS ARRAY<STRUCT<y STRING, bro NUMERIC>>)",
|
||||
)
|
||||
self.validate_identity(
|
||||
"SELECT * FROM `proj.dataset.INFORMATION_SCHEMA.SOME_VIEW`",
|
||||
"SELECT * FROM `proj.dataset.INFORMATION_SCHEMA.SOME_VIEW` AS `proj.dataset.INFORMATION_SCHEMA.SOME_VIEW`",
|
||||
|
@ -1661,6 +1665,13 @@ WHERE
|
|||
)
|
||||
self.validate_identity("SELECT * FROM ML.FEATURES_AT_TIME((SELECT 1), num_rows => 1)")
|
||||
|
||||
self.validate_identity(
|
||||
"EXPORT DATA OPTIONS (URI='gs://path*.csv.gz', FORMAT='CSV') AS SELECT * FROM all_rows"
|
||||
)
|
||||
self.validate_identity(
|
||||
"EXPORT DATA WITH CONNECTION myproject.us.myconnection OPTIONS (URI='gs://path*.csv.gz', FORMAT='CSV') AS SELECT * FROM all_rows"
|
||||
)
|
||||
|
||||
def test_errors(self):
|
||||
with self.assertRaises(TokenError):
|
||||
transpile("'\\'", read="bigquery")
|
||||
|
@ -2035,10 +2046,10 @@ OPTIONS (
|
|||
)
|
||||
|
||||
self.validate_all(
|
||||
"SELECT ARRAY<INT>[1, 2, 3]",
|
||||
"SELECT ARRAY<FLOAT64>[1, 2, 3]",
|
||||
write={
|
||||
"bigquery": "SELECT CAST([1, 2, 3] AS ARRAY<INT64>)",
|
||||
"duckdb": "SELECT CAST([1, 2, 3] AS INT[])",
|
||||
"bigquery": "SELECT ARRAY<FLOAT64>[1, 2, 3]",
|
||||
"duckdb": "SELECT CAST([1, 2, 3] AS DOUBLE[])",
|
||||
},
|
||||
)
|
||||
self.validate_all(
|
||||
|
@ -2051,14 +2062,14 @@ OPTIONS (
|
|||
self.validate_all(
|
||||
"SELECT * FROM UNNEST(ARRAY<STRUCT<x INT64>>[])",
|
||||
write={
|
||||
"bigquery": "SELECT * FROM UNNEST(CAST([] AS ARRAY<STRUCT<x INT64>>))",
|
||||
"bigquery": "SELECT * FROM UNNEST(ARRAY<STRUCT<x INT64>>[])",
|
||||
"duckdb": "SELECT * FROM (SELECT UNNEST(CAST([] AS STRUCT(x BIGINT)[]), max_depth => 2))",
|
||||
},
|
||||
)
|
||||
self.validate_all(
|
||||
"SELECT * FROM UNNEST(ARRAY<STRUCT<device_id INT64, time DATETIME, signal INT64, state STRING>>[STRUCT(1, DATETIME '2023-11-01 09:34:01', 74, 'INACTIVE'),STRUCT(4, DATETIME '2023-11-01 09:38:01', 80, 'ACTIVE')])",
|
||||
write={
|
||||
"bigquery": "SELECT * FROM UNNEST(CAST([STRUCT(1, CAST('2023-11-01 09:34:01' AS DATETIME), 74, 'INACTIVE'), STRUCT(4, CAST('2023-11-01 09:38:01' AS DATETIME), 80, 'ACTIVE')] AS ARRAY<STRUCT<device_id INT64, time DATETIME, signal INT64, state STRING>>))",
|
||||
"bigquery": "SELECT * FROM UNNEST(ARRAY<STRUCT<device_id INT64, time DATETIME, signal INT64, state STRING>>[STRUCT(1, CAST('2023-11-01 09:34:01' AS DATETIME), 74, 'INACTIVE'), STRUCT(4, CAST('2023-11-01 09:38:01' AS DATETIME), 80, 'ACTIVE')])",
|
||||
"duckdb": "SELECT * FROM (SELECT UNNEST(CAST([ROW(1, CAST('2023-11-01 09:34:01' AS TIMESTAMP), 74, 'INACTIVE'), ROW(4, CAST('2023-11-01 09:38:01' AS TIMESTAMP), 80, 'ACTIVE')] AS STRUCT(device_id BIGINT, time TIMESTAMP, signal BIGINT, state TEXT)[]), max_depth => 2))",
|
||||
},
|
||||
)
|
||||
|
|
|
@ -98,6 +98,9 @@ class TestClickhouse(Validator):
|
|||
self.validate_identity("TRUNCATE TABLE t1 ON CLUSTER test_cluster")
|
||||
self.validate_identity("TRUNCATE DATABASE db")
|
||||
self.validate_identity("TRUNCATE DATABASE db ON CLUSTER test_cluster")
|
||||
self.validate_identity(
|
||||
"SELECT DATE_BIN(toDateTime('2023-01-01 14:45:00'), INTERVAL '1' MINUTE, toDateTime('2023-01-01 14:35:30'), 'UTC')",
|
||||
)
|
||||
self.validate_identity(
|
||||
"SELECT CAST(1730098800 AS DateTime64) AS DATETIME, 'test' AS interp ORDER BY DATETIME WITH FILL FROM toDateTime64(1730098800, 3) - INTERVAL '7' HOUR TO toDateTime64(1730185140, 3) - INTERVAL '7' HOUR STEP toIntervalSecond(900) INTERPOLATE (interp)"
|
||||
)
|
||||
|
@ -551,6 +554,9 @@ class TestClickhouse(Validator):
|
|||
|
||||
self.validate_identity("SELECT 1_2_3_4_5", "SELECT 12345")
|
||||
self.validate_identity("SELECT 1_b", "SELECT 1_b")
|
||||
self.validate_identity(
|
||||
"SELECT COUNT(1) FROM table SETTINGS additional_table_filters = {'a': 'b', 'c': 'd'}"
|
||||
)
|
||||
|
||||
def test_clickhouse_values(self):
|
||||
values = exp.select("*").from_(
|
||||
|
|
|
@ -32,10 +32,6 @@ class TestDatabricks(Validator):
|
|||
self.validate_identity(
|
||||
"CREATE TABLE IF NOT EXISTS db.table (a TIMESTAMP, b BOOLEAN GENERATED ALWAYS AS (NOT a IS NULL)) USING DELTA"
|
||||
)
|
||||
self.validate_identity(
|
||||
"SELECT DATE_FORMAT(CAST(FROM_UTC_TIMESTAMP(foo, 'America/Los_Angeles') AS TIMESTAMP), 'yyyy-MM-dd HH:mm:ss') AS foo FROM t",
|
||||
"SELECT DATE_FORMAT(CAST(FROM_UTC_TIMESTAMP(CAST(foo AS TIMESTAMP), 'America/Los_Angeles') AS TIMESTAMP), 'yyyy-MM-dd HH:mm:ss') AS foo FROM t",
|
||||
)
|
||||
self.validate_identity(
|
||||
"SELECT * FROM sales UNPIVOT INCLUDE NULLS (sales FOR quarter IN (q1 AS `Jan-Mar`))"
|
||||
)
|
||||
|
@ -54,6 +50,10 @@ class TestDatabricks(Validator):
|
|||
self.validate_identity(
|
||||
"COPY INTO target FROM `s3://link` FILEFORMAT = AVRO VALIDATE = ALL FILES = ('file1', 'file2') FORMAT_OPTIONS ('opt1'='true', 'opt2'='test') COPY_OPTIONS ('mergeSchema'='true')"
|
||||
)
|
||||
self.validate_identity(
|
||||
"SELECT DATE_FORMAT(CAST(FROM_UTC_TIMESTAMP(foo, 'America/Los_Angeles') AS TIMESTAMP), 'yyyy-MM-dd HH:mm:ss') AS foo FROM t",
|
||||
"SELECT DATE_FORMAT(CAST(FROM_UTC_TIMESTAMP(CAST(foo AS TIMESTAMP), 'America/Los_Angeles') AS TIMESTAMP), 'yyyy-MM-dd HH:mm:ss') AS foo FROM t",
|
||||
)
|
||||
self.validate_identity(
|
||||
"DATE_DIFF(day, created_at, current_date())",
|
||||
"DATEDIFF(DAY, created_at, CURRENT_DATE)",
|
||||
|
@ -62,6 +62,10 @@ class TestDatabricks(Validator):
|
|||
r'SELECT r"\\foo.bar\"',
|
||||
r"SELECT '\\\\foo.bar\\'",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM_UTC_TIMESTAMP(x::TIMESTAMP, tz)",
|
||||
"FROM_UTC_TIMESTAMP(CAST(x AS TIMESTAMP), tz)",
|
||||
)
|
||||
|
||||
self.validate_all(
|
||||
"CREATE TABLE foo (x INT GENERATED ALWAYS AS (YEAR(y)))",
|
||||
|
|
|
@ -83,11 +83,20 @@ class TestDialect(Validator):
|
|||
maxDiff = None
|
||||
|
||||
def test_enum(self):
|
||||
dialect_by_key = Dialect.classes
|
||||
for dialect in Dialects:
|
||||
self.assertIsNotNone(Dialect[dialect])
|
||||
self.assertIsNotNone(Dialect.get(dialect))
|
||||
self.assertIsNotNone(Dialect.get_or_raise(dialect))
|
||||
self.assertIsNotNone(Dialect[dialect.value])
|
||||
self.assertIn(dialect, dialect_by_key)
|
||||
|
||||
def test_lazy_load(self):
|
||||
import subprocess
|
||||
|
||||
code = "import sqlglot; assert len(sqlglot.Dialect._classes) == 1; print('Success')"
|
||||
result = subprocess.run(["python", "-c", code], capture_output=True, text=True)
|
||||
assert "Success" in result.stdout
|
||||
|
||||
def test_get_or_raise(self):
|
||||
self.assertIsInstance(Dialect.get_or_raise(Hive), Hive)
|
||||
|
@ -2624,6 +2633,8 @@ SELECT
|
|||
"snowflake": "SELECT COUNT_IF(col % 2 = 0) FROM foo",
|
||||
"sqlite": "SELECT SUM(IIF(col % 2 = 0, 1, 0)) FROM foo",
|
||||
"tsql": "SELECT COUNT_IF(col % 2 = 0) FROM foo",
|
||||
"postgres": "SELECT SUM(CASE WHEN col % 2 = 0 THEN 1 ELSE 0 END) FROM foo",
|
||||
"redshift": "SELECT SUM(CASE WHEN col % 2 = 0 THEN 1 ELSE 0 END) FROM foo",
|
||||
},
|
||||
)
|
||||
self.validate_all(
|
||||
|
@ -3173,6 +3184,7 @@ FROM subquery2""",
|
|||
"postgres": "GEN_RANDOM_UUID()",
|
||||
"bigquery": "GENERATE_UUID()",
|
||||
"snowflake": "UUID_STRING()",
|
||||
"tsql": "NEWID()",
|
||||
},
|
||||
write={
|
||||
"hive": "UUID()",
|
||||
|
@ -3186,6 +3198,7 @@ FROM subquery2""",
|
|||
"postgres": "GEN_RANDOM_UUID()",
|
||||
"bigquery": "GENERATE_UUID()",
|
||||
"snowflake": "UUID_STRING()",
|
||||
"tsql": "NEWID()",
|
||||
},
|
||||
)
|
||||
|
||||
|
@ -3306,3 +3319,19 @@ FROM subquery2""",
|
|||
"postgres": f"PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY x){suffix}",
|
||||
},
|
||||
)
|
||||
|
||||
def test_current_schema(self):
|
||||
self.validate_all(
|
||||
"CURRENT_SCHEMA()",
|
||||
read={
|
||||
"mysql": "SCHEMA()",
|
||||
"postgres": "CURRENT_SCHEMA()",
|
||||
"tsql": "SCHEMA_NAME()",
|
||||
},
|
||||
write={
|
||||
"sqlite": "'main'",
|
||||
"mysql": "SCHEMA()",
|
||||
"postgres": "CURRENT_SCHEMA",
|
||||
"tsql": "SCHEMA_NAME()",
|
||||
},
|
||||
)
|
||||
|
|
|
@ -256,6 +256,7 @@ class TestDuckDB(Validator):
|
|||
parse_one("a // b", read="duckdb").assert_is(exp.IntDiv).sql(dialect="duckdb"), "a // b"
|
||||
)
|
||||
|
||||
self.validate_identity("CAST(x AS FOO)")
|
||||
self.validate_identity("SELECT UNNEST([1, 2])").selects[0].assert_is(exp.UDTF)
|
||||
self.validate_identity("'red' IN flags").args["field"].assert_is(exp.Column)
|
||||
self.validate_identity("'red' IN tbl.flags")
|
||||
|
|
23
tests/dialects/test_dune.py
Normal file
23
tests/dialects/test_dune.py
Normal file
|
@ -0,0 +1,23 @@
|
|||
from tests.dialects.test_dialect import Validator
|
||||
|
||||
|
||||
class TestDune(Validator):
|
||||
dialect = "dune"
|
||||
|
||||
def test_dune(self):
|
||||
self.validate_identity("CAST(x AS INT256)")
|
||||
self.validate_identity("CAST(x AS UINT256)")
|
||||
|
||||
self.validate_all(
|
||||
"SELECT 0xdeadbeef",
|
||||
read={
|
||||
"dune": "SELECT X'deadbeef'",
|
||||
"postgres": "SELECT x'deadbeef'",
|
||||
"trino": "SELECT X'deadbeef'",
|
||||
},
|
||||
write={
|
||||
"dune": "SELECT 0xdeadbeef",
|
||||
"postgres": "SELECT x'deadbeef'",
|
||||
"trino": "SELECT X'deadbeef'",
|
||||
},
|
||||
)
|
|
@ -336,8 +336,8 @@ class TestHive(Validator):
|
|||
"bigquery": "FORMAT_DATE('%Y-%m-%d %H:%M:%S', CAST('2020-01-01' AS DATETIME))",
|
||||
"duckdb": "STRFTIME(CAST('2020-01-01' AS TIMESTAMP), '%Y-%m-%d %H:%M:%S')",
|
||||
"presto": "DATE_FORMAT(CAST('2020-01-01' AS TIMESTAMP), '%Y-%m-%d %T')",
|
||||
"hive": "DATE_FORMAT(CAST('2020-01-01' AS TIMESTAMP), 'yyyy-MM-dd HH:mm:ss')",
|
||||
"spark": "DATE_FORMAT(CAST('2020-01-01' AS TIMESTAMP), 'yyyy-MM-dd HH:mm:ss')",
|
||||
"hive": "DATE_FORMAT('2020-01-01', 'yyyy-MM-dd HH:mm:ss')",
|
||||
"spark": "DATE_FORMAT('2020-01-01', 'yyyy-MM-dd HH:mm:ss')",
|
||||
},
|
||||
)
|
||||
self.validate_all(
|
||||
|
@ -758,7 +758,7 @@ class TestHive(Validator):
|
|||
self.validate_all(
|
||||
"SELECT a, SUM(c) FROM t GROUP BY a, DATE_FORMAT(b, 'yyyy'), GROUPING SETS ((a, DATE_FORMAT(b, 'yyyy')), a)",
|
||||
write={
|
||||
"hive": "SELECT a, SUM(c) FROM t GROUP BY a, DATE_FORMAT(CAST(b AS TIMESTAMP), 'yyyy'), GROUPING SETS ((a, DATE_FORMAT(CAST(b AS TIMESTAMP), 'yyyy')), a)",
|
||||
"hive": "SELECT a, SUM(c) FROM t GROUP BY a, DATE_FORMAT(b, 'yyyy'), GROUPING SETS ((a, DATE_FORMAT(b, 'yyyy')), a)",
|
||||
},
|
||||
)
|
||||
self.validate_all(
|
||||
|
|
|
@ -253,8 +253,7 @@ class TestMySQL(Validator):
|
|||
self.validate_identity("SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE")
|
||||
self.validate_identity("SET TRANSACTION READ ONLY")
|
||||
self.validate_identity("SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ, READ WRITE")
|
||||
self.validate_identity("SELECT SCHEMA()")
|
||||
self.validate_identity("SELECT DATABASE()")
|
||||
self.validate_identity("DATABASE()", "SCHEMA()")
|
||||
self.validate_identity(
|
||||
"SET GLOBAL sort_buffer_size = 1000000, SESSION sort_buffer_size = 1000000"
|
||||
)
|
||||
|
|
|
@ -16,6 +16,7 @@ class TestOracle(Validator):
|
|||
)
|
||||
self.parse_one("ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol").assert_is(exp.Alter)
|
||||
|
||||
self.validate_identity("CAST(value AS NUMBER DEFAULT 0 ON CONVERSION ERROR)")
|
||||
self.validate_identity("SYSDATE")
|
||||
self.validate_identity("CREATE GLOBAL TEMPORARY TABLE t AS SELECT * FROM orders")
|
||||
self.validate_identity("CREATE PRIVATE TEMPORARY TABLE t AS SELECT * FROM orders")
|
||||
|
@ -79,6 +80,10 @@ class TestOracle(Validator):
|
|||
self.validate_identity(
|
||||
"SELECT MIN(column_name) KEEP (DENSE_RANK FIRST ORDER BY column_name DESC) FROM table_name"
|
||||
)
|
||||
self.validate_identity(
|
||||
"SELECT CAST('January 15, 1989, 11:00 A.M.' AS DATE DEFAULT NULL ON CONVERSION ERROR, 'Month dd, YYYY, HH:MI A.M.') FROM DUAL",
|
||||
"SELECT TO_DATE('January 15, 1989, 11:00 A.M.', 'Month dd, YYYY, HH12:MI P.M.') FROM DUAL",
|
||||
)
|
||||
self.validate_identity(
|
||||
"SELECT TRUNC(SYSDATE)",
|
||||
"SELECT TRUNC(SYSDATE, 'DD')",
|
||||
|
@ -300,6 +305,14 @@ class TestOracle(Validator):
|
|||
"SELECT /*+ ORDERED */ * /* test */ FROM tbl",
|
||||
)
|
||||
|
||||
self.validate_all(
|
||||
"SELECT * FROM t FETCH FIRST 10 ROWS ONLY",
|
||||
write={
|
||||
"oracle": "SELECT * FROM t FETCH FIRST 10 ROWS ONLY",
|
||||
"tsql": "SELECT * FROM t ORDER BY (SELECT NULL) OFFSET 0 ROWS FETCH FIRST 10 ROWS ONLY",
|
||||
},
|
||||
)
|
||||
|
||||
def test_join_marker(self):
|
||||
self.validate_identity("SELECT e1.x, e2.x FROM e e1, e e2 WHERE e1.y (+) = e2.y")
|
||||
|
||||
|
|
|
@ -73,6 +73,7 @@ class TestPostgres(Validator):
|
|||
self.validate_identity("SELECT * FROM r CROSS JOIN LATERAL UNNEST(ARRAY[1]) AS s(location)")
|
||||
self.validate_identity("CAST(1 AS DECIMAL) / CAST(2 AS DECIMAL) * -100")
|
||||
self.validate_identity("EXEC AS myfunc @id = 123", check_command_warning=True)
|
||||
self.validate_identity("SELECT CURRENT_SCHEMA")
|
||||
self.validate_identity("SELECT CURRENT_USER")
|
||||
self.validate_identity("SELECT * FROM ONLY t1")
|
||||
self.validate_identity(
|
||||
|
@ -144,10 +145,6 @@ class TestPostgres(Validator):
|
|||
"SELECT ARRAY[1, 2, 3] <@ ARRAY[1, 2]",
|
||||
"SELECT ARRAY[1, 2] @> ARRAY[1, 2, 3]",
|
||||
)
|
||||
self.validate_identity(
|
||||
"SELECT ARRAY[]::INT[] AS foo",
|
||||
"SELECT CAST(ARRAY[] AS INT[]) AS foo",
|
||||
)
|
||||
self.validate_identity(
|
||||
"SELECT DATE_PART('isodow'::varchar(6), current_date)",
|
||||
"SELECT EXTRACT(CAST('isodow' AS VARCHAR(6)) FROM CURRENT_DATE)",
|
||||
|
@ -349,6 +346,13 @@ class TestPostgres(Validator):
|
|||
"CAST(x AS BIGINT)",
|
||||
)
|
||||
|
||||
self.validate_all(
|
||||
"SELECT ARRAY[]::INT[] AS foo",
|
||||
write={
|
||||
"postgres": "SELECT CAST(ARRAY[] AS INT[]) AS foo",
|
||||
"duckdb": "SELECT CAST([] AS INT[]) AS foo",
|
||||
},
|
||||
)
|
||||
self.validate_all(
|
||||
"STRING_TO_ARRAY('xx~^~yy~^~zz', '~^~', 'yy')",
|
||||
read={
|
||||
|
@ -837,6 +841,30 @@ class TestPostgres(Validator):
|
|||
"SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY a) FILTER(WHERE CAST(b AS BOOLEAN)) AS mean_value FROM (VALUES (0, 't')) AS fake_data(a, b)"
|
||||
)
|
||||
|
||||
self.validate_all(
|
||||
"SELECT JSON_OBJECT_AGG(k, v) FROM t",
|
||||
write={
|
||||
"postgres": "SELECT JSON_OBJECT_AGG(k, v) FROM t",
|
||||
"duckdb": "SELECT JSON_GROUP_OBJECT(k, v) FROM t",
|
||||
},
|
||||
)
|
||||
|
||||
self.validate_all(
|
||||
"SELECT JSONB_OBJECT_AGG(k, v) FROM t",
|
||||
write={
|
||||
"postgres": "SELECT JSONB_OBJECT_AGG(k, v) FROM t",
|
||||
"duckdb": "SELECT JSON_GROUP_OBJECT(k, v) FROM t",
|
||||
},
|
||||
)
|
||||
|
||||
self.validate_all(
|
||||
"SELECT DATE_BIN('30 days', timestamp_col, (SELECT MIN(TIMESTAMP) from table)) FROM table",
|
||||
write={
|
||||
"postgres": "SELECT DATE_BIN('30 days', timestamp_col, (SELECT MIN(TIMESTAMP) FROM table)) FROM table",
|
||||
"duckdb": 'SELECT TIME_BUCKET(\'30 days\', timestamp_col, (SELECT MIN(TIMESTAMP) FROM "table")) FROM "table"',
|
||||
},
|
||||
)
|
||||
|
||||
def test_ddl(self):
|
||||
# Checks that user-defined types are parsed into DataType instead of Identifier
|
||||
self.parse_one("CREATE TABLE t (a udt)").this.expressions[0].args["kind"].assert_is(
|
||||
|
@ -1060,7 +1088,8 @@ class TestPostgres(Validator):
|
|||
"duckdb": "CREATE TABLE x (a UUID, b BLOB)",
|
||||
"presto": "CREATE TABLE x (a UUID, b VARBINARY)",
|
||||
"hive": "CREATE TABLE x (a UUID, b BINARY)",
|
||||
"spark": "CREATE TABLE x (a UUID, b BINARY)",
|
||||
"spark": "CREATE TABLE x (a STRING, b BINARY)",
|
||||
"tsql": "CREATE TABLE x (a UNIQUEIDENTIFIER, b VARBINARY)",
|
||||
},
|
||||
)
|
||||
|
||||
|
|
|
@ -104,7 +104,7 @@ class TestPresto(Validator):
|
|||
self.validate_all(
|
||||
"CAST(ARRAY[1, 2] AS ARRAY(BIGINT))",
|
||||
write={
|
||||
"bigquery": "CAST([1, 2] AS ARRAY<INT64>)",
|
||||
"bigquery": "ARRAY<INT64>[1, 2]",
|
||||
"duckdb": "CAST([1, 2] AS BIGINT[])",
|
||||
"presto": "CAST(ARRAY[1, 2] AS ARRAY(BIGINT))",
|
||||
"spark": "CAST(ARRAY(1, 2) AS ARRAY<BIGINT>)",
|
||||
|
@ -406,7 +406,7 @@ class TestPresto(Validator):
|
|||
},
|
||||
)
|
||||
self.validate_all(
|
||||
"SELECT AT_TIMEZONE(CAST(CAST('2012-10-31 00:00' AS TIMESTAMP WITH TIME ZONE) AS TIMESTAMP), 'America/Sao_Paulo')",
|
||||
"SELECT AT_TIMEZONE(CAST('2012-10-31 00:00' AS TIMESTAMP WITH TIME ZONE), 'America/Sao_Paulo')",
|
||||
read={
|
||||
"spark": "SELECT FROM_UTC_TIMESTAMP(TIMESTAMP '2012-10-31 00:00', 'America/Sao_Paulo')",
|
||||
},
|
||||
|
|
|
@ -320,6 +320,7 @@ class TestRedshift(Validator):
|
|||
)
|
||||
|
||||
def test_identity(self):
|
||||
self.validate_identity("ALTER TABLE table_name ALTER COLUMN bla TYPE VARCHAR")
|
||||
self.validate_identity("SELECT CAST(value AS FLOAT(8))")
|
||||
self.validate_identity("1 div", "1 AS div")
|
||||
self.validate_identity("LISTAGG(DISTINCT foo, ', ')")
|
||||
|
|
|
@ -979,6 +979,8 @@ class TestSnowflake(Validator):
|
|||
self.validate_identity("SELECT BIT_SHIFTLEFT(a, 1)", "SELECT BITSHIFTLEFT(a, 1)")
|
||||
self.validate_identity("SELECT BIT_SHIFTRIGHT(a, 1)", "SELECT BITSHIFTRIGHT(a, 1)")
|
||||
|
||||
self.validate_identity("CREATE TABLE t (id INT PRIMARY KEY AUTOINCREMENT)")
|
||||
|
||||
def test_null_treatment(self):
|
||||
self.validate_all(
|
||||
r"SELECT FIRST_VALUE(TABLE1.COLUMN1) OVER (PARTITION BY RANDOM_COLUMN1, RANDOM_COLUMN2 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS MY_ALIAS FROM TABLE1",
|
||||
|
|
|
@ -150,6 +150,8 @@ TBLPROPERTIES (
|
|||
"hive": "TO_DATE(x)",
|
||||
"presto": "CAST(CAST(x AS TIMESTAMP) AS DATE)",
|
||||
"spark": "TO_DATE(x)",
|
||||
"snowflake": "TRY_TO_DATE(x, 'yyyy-mm-DD')",
|
||||
"databricks": "TO_DATE(x)",
|
||||
},
|
||||
)
|
||||
self.validate_all(
|
||||
|
@ -159,6 +161,8 @@ TBLPROPERTIES (
|
|||
"hive": "TO_DATE(x, 'yyyy')",
|
||||
"presto": "CAST(DATE_PARSE(x, '%Y') AS DATE)",
|
||||
"spark": "TO_DATE(x, 'yyyy')",
|
||||
"snowflake": "TRY_TO_DATE(x, 'yyyy')",
|
||||
"databricks": "TO_DATE(x, 'yyyy')",
|
||||
},
|
||||
)
|
||||
|
||||
|
@ -342,7 +346,7 @@ TBLPROPERTIES (
|
|||
"SELECT DATE_FORMAT(DATE '2020-01-01', 'EEEE') AS weekday",
|
||||
write={
|
||||
"presto": "SELECT DATE_FORMAT(CAST(CAST('2020-01-01' AS DATE) AS TIMESTAMP), '%W') AS weekday",
|
||||
"spark": "SELECT DATE_FORMAT(CAST(CAST('2020-01-01' AS DATE) AS TIMESTAMP), 'EEEE') AS weekday",
|
||||
"spark": "SELECT DATE_FORMAT(CAST('2020-01-01' AS DATE), 'EEEE') AS weekday",
|
||||
},
|
||||
)
|
||||
self.validate_all(
|
||||
|
|
|
@ -7,6 +7,8 @@ class TestTrino(Validator):
|
|||
def test_trino(self):
|
||||
self.validate_identity("JSON_EXTRACT(content, json_path)")
|
||||
self.validate_identity("JSON_QUERY(content, 'lax $.HY.*')")
|
||||
self.validate_identity("JSON_QUERY(content, 'strict $.HY.*' WITH WRAPPER)")
|
||||
self.validate_identity("JSON_QUERY(content, 'strict $.HY.*' WITH ARRAY WRAPPER)")
|
||||
self.validate_identity("JSON_QUERY(content, 'strict $.HY.*' WITH UNCONDITIONAL WRAPPER)")
|
||||
self.validate_identity("JSON_QUERY(content, 'strict $.HY.*' WITHOUT CONDITIONAL WRAPPER)")
|
||||
self.validate_identity("JSON_QUERY(description, 'strict $.comment' KEEP QUOTES)")
|
||||
|
|
|
@ -443,6 +443,32 @@ class TestTSQL(Validator):
|
|||
"CREATE TABLE db.t1 (a INTEGER, b INTEGER, CONSTRAINT c PRIMARY KEY (a DESC, b))"
|
||||
)
|
||||
|
||||
self.validate_all(
|
||||
"SCHEMA_NAME(id)",
|
||||
write={
|
||||
"sqlite": "'main'",
|
||||
"mysql": "SCHEMA()",
|
||||
"postgres": "CURRENT_SCHEMA",
|
||||
"tsql": "SCHEMA_NAME(id)",
|
||||
},
|
||||
)
|
||||
|
||||
with self.assertRaises(ParseError):
|
||||
parse_one("SELECT begin", read="tsql")
|
||||
|
||||
self.validate_identity("CREATE PROCEDURE test(@v1 INTEGER = 1, @v2 CHAR(1) = 'c')")
|
||||
self.validate_identity("DECLARE @v1 AS INTEGER = 1, @v2 AS CHAR(1) = 'c'")
|
||||
|
||||
for output in ("OUT", "OUTPUT", "READ_ONLY"):
|
||||
self.validate_identity(
|
||||
f"CREATE PROCEDURE test(@v1 INTEGER = 1 {output}, @v2 CHAR(1) {output})"
|
||||
)
|
||||
|
||||
self.validate_identity(
|
||||
"CREATE PROCEDURE test(@v1 AS INTEGER = 1, @v2 AS CHAR(1) = 'c')",
|
||||
"CREATE PROCEDURE test(@v1 INTEGER = 1, @v2 CHAR(1) = 'c')",
|
||||
)
|
||||
|
||||
def test_option(self):
|
||||
possible_options = [
|
||||
"HASH GROUP",
|
||||
|
@ -900,6 +926,16 @@ class TestTSQL(Validator):
|
|||
},
|
||||
write={
|
||||
"databricks": "CREATE TABLE tbl (id BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 10 INCREMENT BY 1) PRIMARY KEY)",
|
||||
"postgres": "CREATE TABLE tbl (id INT NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 10 INCREMENT BY 1) PRIMARY KEY)",
|
||||
},
|
||||
)
|
||||
self.validate_all(
|
||||
"CREATE TABLE x (a UNIQUEIDENTIFIER, b VARBINARY)",
|
||||
write={
|
||||
"duckdb": "CREATE TABLE x (a UUID, b BLOB)",
|
||||
"presto": "CREATE TABLE x (a UUID, b VARBINARY)",
|
||||
"spark": "CREATE TABLE x (a STRING, b BINARY)",
|
||||
"postgres": "CREATE TABLE x (a UUID, b BYTEA)",
|
||||
},
|
||||
)
|
||||
self.validate_all(
|
||||
|
|
4
tests/fixtures/identity.sql
vendored
4
tests/fixtures/identity.sql
vendored
|
@ -885,3 +885,7 @@ SELECT attach
|
|||
SELECT detach
|
||||
SELECT 1 OFFSET 1
|
||||
SELECT 1 LIMIT 1
|
||||
CAST(x AS INT128)
|
||||
CAST(x AS UINT128)
|
||||
CAST(x AS UINT256)
|
||||
SELECT export
|
5
tests/fixtures/optimizer/qualify_columns.sql
vendored
5
tests/fixtures/optimizer/qualify_columns.sql
vendored
|
@ -254,6 +254,11 @@ START WITH (t1.id IS NOT NULL)
|
|||
CONNECT BY PRIOR t1.id = t2.id;
|
||||
WITH T1 AS (SELECT 1 AS C1, 1 AS C2, 'Y' AS TOP_PARENT_INDICATOR, 1 AS ID FROM DUAL DUAL), T2 AS (SELECT 1 AS C2, 2 AS ID FROM DUAL DUAL) SELECT T1.C1 AS C1 FROM T1 T1 LEFT JOIN T2 T2 ON T1.C2 = T2.C2 WHERE (T1.TOP_PARENT_INDICATOR = 'Y' OR LEVEL = 1) START WITH (NOT T1.ID IS NULL) CONNECT BY PRIOR T1.ID = T2.ID;
|
||||
|
||||
# execute: false
|
||||
# dialect: postgres
|
||||
SELECT * FROM ROWS FROM (GENERATE_SERIES(1, 3), GENERATE_SERIES(10, 12)) AS t(a, b);
|
||||
SELECT t.a AS a, t.b AS b FROM ROWS FROM (GENERATE_SERIES(1, 3), GENERATE_SERIES(10, 12)) AS t(a, b);
|
||||
|
||||
--------------------------------------
|
||||
-- Derived tables
|
||||
--------------------------------------
|
||||
|
|
|
@ -556,10 +556,10 @@ TPCDS_SCHEMA = {
|
|||
|
||||
|
||||
def rewrite_fixtures(in_path, out_path, schema, num, kind):
|
||||
with open(out_path, "w", encoding="UTF-8") as fixture:
|
||||
with open(out_path, "w", encoding="utf-8") as fixture:
|
||||
for i in range(num):
|
||||
i = i + 1
|
||||
with open(in_path.format(i=i), encoding="UTF-8") as file:
|
||||
with open(in_path.format(i=i), encoding="utf-8") as file:
|
||||
original = "\n".join(
|
||||
line.rstrip()
|
||||
for line in file.read().split(";")[0].split("\n")
|
||||
|
|
|
@ -55,7 +55,6 @@ class TestExpressions(unittest.TestCase):
|
|||
parse_one("ROW() OVER(Partition by y)"),
|
||||
parse_one("ROW() OVER (partition BY y)"),
|
||||
)
|
||||
self.assertEqual(parse_one("TO_DATE(x)", read="hive"), parse_one("ts_or_ds_to_date(x)"))
|
||||
self.assertEqual(exp.Table(pivots=[]), exp.Table())
|
||||
self.assertNotEqual(exp.Table(pivots=[None]), exp.Table())
|
||||
self.assertEqual(
|
||||
|
|
|
@ -40,7 +40,7 @@ class TestJsonpath(unittest.TestCase):
|
|||
self.assertEqual(parse(selector).sql(), f"'{expected}'")
|
||||
|
||||
def test_cts_file(self):
|
||||
with open(os.path.join(FIXTURES_DIR, "jsonpath", "cts.json")) as file:
|
||||
with open(os.path.join(FIXTURES_DIR, "jsonpath", "cts.json"), encoding="utf-8") as file:
|
||||
tests = json.load(file)["tests"]
|
||||
|
||||
# sqlglot json path generator rewrites to a normal form
|
||||
|
|
|
@ -174,6 +174,13 @@ class TestTransforms(unittest.TestCase):
|
|||
|
||||
def test_eliminate_join_marks(self):
|
||||
for dialect in ("oracle", "redshift"):
|
||||
# No join marks => query remains unaffected
|
||||
self.validate(
|
||||
eliminate_join_marks,
|
||||
"SELECT a.f1, b.f2 FROM a JOIN b ON a.id = b.id WHERE a.blabla = 'a'",
|
||||
"SELECT a.f1, b.f2 FROM a JOIN b ON a.id = b.id WHERE a.blabla = 'a'",
|
||||
dialect,
|
||||
)
|
||||
self.validate(
|
||||
eliminate_join_marks,
|
||||
"SELECT T1.d, T2.c FROM T1, T2 WHERE T1.x = T2.x (+) and T2.y (+) > 5",
|
||||
|
|
|
@ -610,7 +610,7 @@ FROM tbl1""",
|
|||
self.validate("CAST(x AS INT)::BOOLEAN", "CAST(CAST(x AS INT) AS BOOLEAN)")
|
||||
|
||||
with self.assertRaises(ParseError):
|
||||
transpile("x::z", read="duckdb")
|
||||
transpile("x::z", read="clickhouse")
|
||||
|
||||
def test_not_range(self):
|
||||
self.validate("a NOT LIKE b", "NOT a LIKE b")
|
||||
|
|
Loading…
Add table
Reference in a new issue