Merging upstream version 26.28.1.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
893214206a
commit
c79efa667c
96 changed files with 58442 additions and 56422 deletions
88
CHANGELOG.md
88
CHANGELOG.md
|
@ -1,6 +1,92 @@
|
|||
Changelog
|
||||
=========
|
||||
|
||||
## [v26.27.0] - 2025-06-12
|
||||
### :boom: BREAKING CHANGES
|
||||
- due to [`ac6555b`](https://github.com/tobymao/sqlglot/commit/ac6555b4d6c162ef7b14b63307d01fd560138ea0) - preserve DIV binary operator, fixes [#5198](https://github.com/tobymao/sqlglot/pull/5198) *(PR [#5199](https://github.com/tobymao/sqlglot/pull/5199) by [@georgesittas](https://github.com/georgesittas))*:
|
||||
|
||||
preserve DIV binary operator, fixes #5198 (#5199)
|
||||
|
||||
- due to [`dfdd84b`](https://github.com/tobymao/sqlglot/commit/dfdd84bbc50da70f40a17b39935f8171d961f7d2) - CTEs instead of subqueries for pipe syntax *(PR [#5205](https://github.com/tobymao/sqlglot/pull/5205) by [@geooo109](https://github.com/geooo109))*:
|
||||
|
||||
CTEs instead of subqueries for pipe syntax (#5205)
|
||||
|
||||
- due to [`5f95299`](https://github.com/tobymao/sqlglot/commit/5f9529940d83e89704f7d25eda63cd73fdb503ae) - support multi-part (>3) dotted functions *(PR [#5211](https://github.com/tobymao/sqlglot/pull/5211) by [@georgesittas](https://github.com/georgesittas))*:
|
||||
|
||||
support multi-part (>3) dotted functions (#5211)
|
||||
|
||||
- due to [`02afa2a`](https://github.com/tobymao/sqlglot/commit/02afa2a1941fc67086d50dffac2857262f1c3c4f) - Preserve quoting for UDT *(PR [#5216](https://github.com/tobymao/sqlglot/pull/5216) by [@VaggelisD](https://github.com/VaggelisD))*:
|
||||
|
||||
Preserve quoting for UDT (#5216)
|
||||
|
||||
|
||||
### :sparkles: New Features
|
||||
- [`c20f85e`](https://github.com/tobymao/sqlglot/commit/c20f85e3e171e502fc51f74894d3313f0ad61535) - **spark**: support ALTER ADD PARTITION *(PR [#5208](https://github.com/tobymao/sqlglot/pull/5208) by [@georgesittas](https://github.com/georgesittas))*
|
||||
- :arrow_lower_right: *addresses issue [#5204](https://github.com/tobymao/sqlglot/issues/5204) opened by [@cosinequanon](https://github.com/cosinequanon)*
|
||||
|
||||
### :bug: Bug Fixes
|
||||
- [`99bbae3`](https://github.com/tobymao/sqlglot/commit/99bbae370329c5f5cd132b711c714359cf96ba58) - **sqlite**: allow ALTER RENAME without COLUMN keyword fixes [#5195](https://github.com/tobymao/sqlglot/pull/5195) *(commit by [@georgesittas](https://github.com/georgesittas))*
|
||||
- [`ac6555b`](https://github.com/tobymao/sqlglot/commit/ac6555b4d6c162ef7b14b63307d01fd560138ea0) - **hive**: preserve DIV binary operator, fixes [#5198](https://github.com/tobymao/sqlglot/pull/5198) *(PR [#5199](https://github.com/tobymao/sqlglot/pull/5199) by [@georgesittas](https://github.com/georgesittas))*
|
||||
- [`d0eeb26`](https://github.com/tobymao/sqlglot/commit/d0eeb2639e771e8f8b6feabd41c65f16ed5a9829) - eliminate_join_marks has multiple issues fixes [#5188](https://github.com/tobymao/sqlglot/pull/5188) *(PR [#5189](https://github.com/tobymao/sqlglot/pull/5189) by [@snovik75](https://github.com/snovik75))*
|
||||
- :arrow_lower_right: *fixes issue [#5188](https://github.com/tobymao/sqlglot/issues/5188) opened by [@snovik75](https://github.com/snovik75)*
|
||||
- [`dfdd84b`](https://github.com/tobymao/sqlglot/commit/dfdd84bbc50da70f40a17b39935f8171d961f7d2) - **parser**: CTEs instead of subqueries for pipe syntax *(PR [#5205](https://github.com/tobymao/sqlglot/pull/5205) by [@geooo109](https://github.com/geooo109))*
|
||||
- [`77e9d9a`](https://github.com/tobymao/sqlglot/commit/77e9d9a0269e2013379967cf2f46fbd79c036277) - **mysql**: properly parse STORED/VIRTUAL computed columns *(PR [#5210](https://github.com/tobymao/sqlglot/pull/5210) by [@georgesittas](https://github.com/georgesittas))*
|
||||
- :arrow_lower_right: *fixes issue [#5203](https://github.com/tobymao/sqlglot/issues/5203) opened by [@mdebski](https://github.com/mdebski)*
|
||||
- [`5f95299`](https://github.com/tobymao/sqlglot/commit/5f9529940d83e89704f7d25eda63cd73fdb503ae) - **parser**: support multi-part (>3) dotted functions *(PR [#5211](https://github.com/tobymao/sqlglot/pull/5211) by [@georgesittas](https://github.com/georgesittas))*
|
||||
- :arrow_lower_right: *fixes issue [#5200](https://github.com/tobymao/sqlglot/issues/5200) opened by [@mateuszpoleski](https://github.com/mateuszpoleski)*
|
||||
- [`02afa2a`](https://github.com/tobymao/sqlglot/commit/02afa2a1941fc67086d50dffac2857262f1c3c4f) - **postgres**: Preserve quoting for UDT *(PR [#5216](https://github.com/tobymao/sqlglot/pull/5216) by [@VaggelisD](https://github.com/VaggelisD))*
|
||||
- :arrow_lower_right: *fixes issue [#5212](https://github.com/tobymao/sqlglot/issues/5212) opened by [@NickCrews](https://github.com/NickCrews)*
|
||||
- [`f37c0b1`](https://github.com/tobymao/sqlglot/commit/f37c0b1197321dd610648ce652a171ab063deeeb) - **snowflake**: ensure a standalone GET() expression can be parsed *(PR [#5219](https://github.com/tobymao/sqlglot/pull/5219) by [@georgesittas](https://github.com/georgesittas))*
|
||||
|
||||
### :wrench: Chores
|
||||
- [`ad8a4e7`](https://github.com/tobymao/sqlglot/commit/ad8a4e73e1a9e4234f0b711163fb49630acf736c) - refactor join mark elimination to use is_correlated_subquery *(commit by [@georgesittas](https://github.com/georgesittas))*
|
||||
|
||||
|
||||
## [v26.26.0] - 2025-06-09
|
||||
### :boom: BREAKING CHANGES
|
||||
- due to [`434c45b`](https://github.com/tobymao/sqlglot/commit/434c45b547c3a5ea155dc8d7da2baab326eb6d4f) - improve support for ENDSWITH closes [#5170](https://github.com/tobymao/sqlglot/pull/5170) *(commit by [@georgesittas](https://github.com/georgesittas))*:
|
||||
|
||||
improve support for ENDSWITH closes #5170
|
||||
|
||||
- due to [`bc001ce`](https://github.com/tobymao/sqlglot/commit/bc001cef4c907d8fa421d3190b4fa91865d9ff6c) - Add support for ANY_VALUE for versions 16+ *(PR [#5179](https://github.com/tobymao/sqlglot/pull/5179) by [@VaggelisD](https://github.com/VaggelisD))*:
|
||||
|
||||
Add support for ANY_VALUE for versions 16+ (#5179)
|
||||
|
||||
- due to [`6a2cb39`](https://github.com/tobymao/sqlglot/commit/6a2cb39d0ceec091dc4fc228f26d4f457729a3cf) - virtual column with AS(expr) as ComputedColumnConstraint *(PR [#5180](https://github.com/tobymao/sqlglot/pull/5180) by [@geooo109](https://github.com/geooo109))*:
|
||||
|
||||
virtual column with AS(expr) as ComputedColumnConstraint (#5180)
|
||||
|
||||
- due to [`29e2f1d`](https://github.com/tobymao/sqlglot/commit/29e2f1d89c095c9fab0944a6962c99bd745c2c91) - Array_intersection transpilation support *(PR [#5186](https://github.com/tobymao/sqlglot/pull/5186) by [@HarishRavi96](https://github.com/HarishRavi96))*:
|
||||
|
||||
Array_intersection transpilation support (#5186)
|
||||
|
||||
|
||||
### :sparkles: New Features
|
||||
- [`434c45b`](https://github.com/tobymao/sqlglot/commit/434c45b547c3a5ea155dc8d7da2baab326eb6d4f) - improve support for ENDSWITH closes [#5170](https://github.com/tobymao/sqlglot/pull/5170) *(commit by [@georgesittas](https://github.com/georgesittas))*
|
||||
- [`63f9cb4`](https://github.com/tobymao/sqlglot/commit/63f9cb4b158b88574136b32241ee60254352c9e6) - **sqlglotrs**: match the Python implementation of __repr__ for tokens *(PR [#5172](https://github.com/tobymao/sqlglot/pull/5172) by [@georgesittas](https://github.com/georgesittas))*
|
||||
- [`c007afa`](https://github.com/tobymao/sqlglot/commit/c007afa23831e9bd86f401d85260e15edf00328f) - support Star instance as first arg of exp.column helper *(PR [#5177](https://github.com/tobymao/sqlglot/pull/5177) by [@georgesittas](https://github.com/georgesittas))*
|
||||
- [`bc001ce`](https://github.com/tobymao/sqlglot/commit/bc001cef4c907d8fa421d3190b4fa91865d9ff6c) - **postgres**: Add support for ANY_VALUE for versions 16+ *(PR [#5179](https://github.com/tobymao/sqlglot/pull/5179) by [@VaggelisD](https://github.com/VaggelisD))*
|
||||
- :arrow_lower_right: *addresses issue [#4674](https://github.com/TobikoData/sqlmesh/issues/4674) opened by [@petrikoro](https://github.com/petrikoro)*
|
||||
- [`ba05ff6`](https://github.com/tobymao/sqlglot/commit/ba05ff67127e056d567fc2c1d3bcc8e3dcce7b7e) - **parser**: AGGREGATE with GROUP AND ORDER BY pipe syntax *(PR [#5171](https://github.com/tobymao/sqlglot/pull/5171) by [@geooo109](https://github.com/geooo109))*
|
||||
- [`26077a4`](https://github.com/tobymao/sqlglot/commit/26077a47d9db750f44ab1baf9a434596b5bb613b) - make to_table more lenient *(PR [#5183](https://github.com/tobymao/sqlglot/pull/5183) by [@georgesittas](https://github.com/georgesittas))*
|
||||
- [`29e2f1d`](https://github.com/tobymao/sqlglot/commit/29e2f1d89c095c9fab0944a6962c99bd745c2c91) - Array_intersection transpilation support *(PR [#5186](https://github.com/tobymao/sqlglot/pull/5186) by [@HarishRavi96](https://github.com/HarishRavi96))*
|
||||
- [`d86a114`](https://github.com/tobymao/sqlglot/commit/d86a1147aeb866ed0ab2c342914ecf8cbfadac8a) - **sqlite**: implement RESPECT/IGNORE NULLS in first_value() *(PR [#5185](https://github.com/tobymao/sqlglot/pull/5185) by [@NickCrews](https://github.com/NickCrews))*
|
||||
- [`1d50fca`](https://github.com/tobymao/sqlglot/commit/1d50fca8ffc34e4acbc1b791c4cdf5f184a748db) - improve transpilation of st_point and st_distance *(PR [#5194](https://github.com/tobymao/sqlglot/pull/5194) by [@georgesittas](https://github.com/georgesittas))*
|
||||
- [`756ec3b`](https://github.com/tobymao/sqlglot/commit/756ec3b65db1eb2572d017a3ac12ece6bb44c726) - **parser**: SET OPERATORS with pipe syntax *(PR [#5184](https://github.com/tobymao/sqlglot/pull/5184) by [@geooo109](https://github.com/geooo109))*
|
||||
|
||||
### :bug: Bug Fixes
|
||||
- [`6a2cb39`](https://github.com/tobymao/sqlglot/commit/6a2cb39d0ceec091dc4fc228f26d4f457729a3cf) - **parser**: virtual column with AS(expr) as ComputedColumnConstraint *(PR [#5180](https://github.com/tobymao/sqlglot/pull/5180) by [@geooo109](https://github.com/geooo109))*
|
||||
- :arrow_lower_right: *fixes issue [#5173](https://github.com/tobymao/sqlglot/issues/5173) opened by [@suyah](https://github.com/suyah)*
|
||||
- [`c87ae02`](https://github.com/tobymao/sqlglot/commit/c87ae02aa263be8463ca7283ebd090385a4bfd59) - **sqlite**: Add REPLACE to command tokens *(PR [#5192](https://github.com/tobymao/sqlglot/pull/5192) by [@VaggelisD](https://github.com/VaggelisD))*
|
||||
- :arrow_lower_right: *fixes issue [#5187](https://github.com/tobymao/sqlglot/issues/5187) opened by [@stefanmalanik](https://github.com/stefanmalanik)*
|
||||
- [`4b89afd`](https://github.com/tobymao/sqlglot/commit/4b89afdcc0063e70cbc64165c7f1f5102afaa87c) - **starrocks**: array_agg_transpilation_fix *(PR [#5190](https://github.com/tobymao/sqlglot/pull/5190) by [@Swathiraj23](https://github.com/Swathiraj23))*
|
||||
- [`461b054`](https://github.com/tobymao/sqlglot/commit/461b0548832ab8d916c3a6638f27a49f681109fe) - **postgres**: support use_spheroid argument in ST_DISTANCE *(commit by [@georgesittas](https://github.com/georgesittas))*
|
||||
|
||||
### :wrench: Chores
|
||||
- [`83de4e1`](https://github.com/tobymao/sqlglot/commit/83de4e11bc1547aa22b275b20c0326dfbe43b2b8) - improve benchmark result displaying *(PR [#5176](https://github.com/tobymao/sqlglot/pull/5176) by [@georgesittas](https://github.com/georgesittas))*
|
||||
- [`5d5dc2f`](https://github.com/tobymao/sqlglot/commit/5d5dc2fa471bd53730e03ac8039804221949f843) - Clean up exp.ArrayIntersect PR *(PR [#5193](https://github.com/tobymao/sqlglot/pull/5193) by [@VaggelisD](https://github.com/VaggelisD))*
|
||||
|
||||
|
||||
## [v26.25.3] - 2025-06-04
|
||||
### :sparkles: New Features
|
||||
- [`964b4a1`](https://github.com/tobymao/sqlglot/commit/964b4a1e367e00e243b80edf677cd48d453ed31e) - add line/col position for Star *(commit by [@georgesittas](https://github.com/georgesittas))*
|
||||
|
@ -4794,3 +4880,5 @@ Changelog
|
|||
[v26.25.1]: https://github.com/tobymao/sqlglot/compare/v26.25.0...v26.25.1
|
||||
[v26.25.2]: https://github.com/tobymao/sqlglot/compare/v26.25.1...v26.25.2
|
||||
[v26.25.3]: https://github.com/tobymao/sqlglot/compare/v26.25.2...v26.25.3
|
||||
[v26.26.0]: https://github.com/tobymao/sqlglot/compare/v26.25.3...v26.26.0
|
||||
[v26.27.0]: https://github.com/tobymao/sqlglot/compare/v26.26.0...v26.27.0
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
@ -632,6 +632,7 @@
|
|||
<li><a href="https://github.com/dagster-io/dagster">Dagster</a></li>
|
||||
<li><a href="https://github.com/fugue-project/fugue">Fugue</a></li>
|
||||
<li><a href="https://github.com/ibis-project/ibis">Ibis</a></li>
|
||||
<li><a href="https://github.com/dlt-hub/dlt">dlt</a></li>
|
||||
<li><a href="https://github.com/kelsin/mysql-mimic">mysql-mimic</a></li>
|
||||
<li><a href="https://github.com/pinterest/querybook">Querybook</a></li>
|
||||
<li><a href="https://github.com/marsupialtail/quokka">Quokka</a></li>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot._typing API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot._version API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
@ -84,8 +84,8 @@
|
|||
</span><span id="L-17"><a href="#L-17"><span class="linenos">17</span></a><span class="n">__version_tuple__</span><span class="p">:</span> <span class="n">VERSION_TUPLE</span>
|
||||
</span><span id="L-18"><a href="#L-18"><span class="linenos">18</span></a><span class="n">version_tuple</span><span class="p">:</span> <span class="n">VERSION_TUPLE</span>
|
||||
</span><span id="L-19"><a href="#L-19"><span class="linenos">19</span></a>
|
||||
</span><span id="L-20"><a href="#L-20"><span class="linenos">20</span></a><span class="n">__version__</span> <span class="o">=</span> <span class="n">version</span> <span class="o">=</span> <span class="s1">'26.25.3'</span>
|
||||
</span><span id="L-21"><a href="#L-21"><span class="linenos">21</span></a><span class="n">__version_tuple__</span> <span class="o">=</span> <span class="n">version_tuple</span> <span class="o">=</span> <span class="p">(</span><span class="mi">26</span><span class="p">,</span> <span class="mi">25</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
|
||||
</span><span id="L-20"><a href="#L-20"><span class="linenos">20</span></a><span class="n">__version__</span> <span class="o">=</span> <span class="n">version</span> <span class="o">=</span> <span class="s1">'26.28.0'</span>
|
||||
</span><span id="L-21"><a href="#L-21"><span class="linenos">21</span></a><span class="n">__version_tuple__</span> <span class="o">=</span> <span class="n">version_tuple</span> <span class="o">=</span> <span class="p">(</span><span class="mi">26</span><span class="p">,</span> <span class="mi">28</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -93,7 +93,7 @@
|
|||
<section id="__version__">
|
||||
<div class="attr variable">
|
||||
<span class="name">__version__</span><span class="annotation">: str</span> =
|
||||
<span class="default_value">'26.25.3'</span>
|
||||
<span class="default_value">'26.28.0'</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -105,7 +105,7 @@
|
|||
<section id="__version_tuple__">
|
||||
<div class="attr variable">
|
||||
<span class="name">__version_tuple__</span><span class="annotation">: object</span> =
|
||||
<span class="default_value">(26, 25, 3)</span>
|
||||
<span class="default_value">(26, 28, 0)</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -117,7 +117,7 @@
|
|||
<section id="version">
|
||||
<div class="attr variable">
|
||||
<span class="name">version</span><span class="annotation">: str</span> =
|
||||
<span class="default_value">'26.25.3'</span>
|
||||
<span class="default_value">'26.28.0'</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -129,7 +129,7 @@
|
|||
<section id="version_tuple">
|
||||
<div class="attr variable">
|
||||
<span class="name">version_tuple</span><span class="annotation">: object</span> =
|
||||
<span class="default_value">(26, 25, 3)</span>
|
||||
<span class="default_value">(26, 28, 0)</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.dialects API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
@ -359,7 +359,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Athena">
|
||||
<div class="attr variable">
|
||||
<span class="name">Athena</span> =
|
||||
<span class="default_value"><MagicMock id='140571796728384'></span>
|
||||
<span class="default_value"><MagicMock id='139998209036672'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -371,7 +371,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="BigQuery">
|
||||
<div class="attr variable">
|
||||
<span class="name">BigQuery</span> =
|
||||
<span class="default_value"><MagicMock id='140571796081632'></span>
|
||||
<span class="default_value"><MagicMock id='139998207084000'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -383,7 +383,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="ClickHouse">
|
||||
<div class="attr variable">
|
||||
<span class="name">ClickHouse</span> =
|
||||
<span class="default_value"><MagicMock id='140571798395520'></span>
|
||||
<span class="default_value"><MagicMock id='139998207095232'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -395,7 +395,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Databricks">
|
||||
<div class="attr variable">
|
||||
<span class="name">Databricks</span> =
|
||||
<span class="default_value"><MagicMock id='140571786944400'></span>
|
||||
<span class="default_value"><MagicMock id='139998202197424'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -407,7 +407,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Doris">
|
||||
<div class="attr variable">
|
||||
<span class="name">Doris</span> =
|
||||
<span class="default_value"><MagicMock id='140571799701632'></span>
|
||||
<span class="default_value"><MagicMock id='139998213879552'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -419,7 +419,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Drill">
|
||||
<div class="attr variable">
|
||||
<span class="name">Drill</span> =
|
||||
<span class="default_value"><MagicMock id='140571798507328'></span>
|
||||
<span class="default_value"><MagicMock id='139998213878592'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -431,7 +431,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Druid">
|
||||
<div class="attr variable">
|
||||
<span class="name">Druid</span> =
|
||||
<span class="default_value"><MagicMock id='140571784920080'></span>
|
||||
<span class="default_value"><MagicMock id='139998218182256'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -443,7 +443,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="DuckDB">
|
||||
<div class="attr variable">
|
||||
<span class="name">DuckDB</span> =
|
||||
<span class="default_value"><MagicMock id='140571784909808'></span>
|
||||
<span class="default_value"><MagicMock id='139998218189216'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -455,7 +455,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Dune">
|
||||
<div class="attr variable">
|
||||
<span class="name">Dune</span> =
|
||||
<span class="default_value"><MagicMock id='140571785635072'></span>
|
||||
<span class="default_value"><MagicMock id='139998204697984'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -467,7 +467,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Hive">
|
||||
<div class="attr variable">
|
||||
<span class="name">Hive</span> =
|
||||
<span class="default_value"><MagicMock id='140571796939552'></span>
|
||||
<span class="default_value"><MagicMock id='139998218084672'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -479,7 +479,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Materialize">
|
||||
<div class="attr variable">
|
||||
<span class="name">Materialize</span> =
|
||||
<span class="default_value"><MagicMock id='140571796933216'></span>
|
||||
<span class="default_value"><MagicMock id='139998210512240'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -491,7 +491,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="MySQL">
|
||||
<div class="attr variable">
|
||||
<span class="name">MySQL</span> =
|
||||
<span class="default_value"><MagicMock id='140571802007920'></span>
|
||||
<span class="default_value"><MagicMock id='139998210508736'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -503,7 +503,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Oracle">
|
||||
<div class="attr variable">
|
||||
<span class="name">Oracle</span> =
|
||||
<span class="default_value"><MagicMock id='140571798015520'></span>
|
||||
<span class="default_value"><MagicMock id='139998204295152'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -515,7 +515,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Postgres">
|
||||
<div class="attr variable">
|
||||
<span class="name">Postgres</span> =
|
||||
<span class="default_value"><MagicMock id='140571787331280'></span>
|
||||
<span class="default_value"><MagicMock id='139998213015728'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -527,7 +527,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Presto">
|
||||
<div class="attr variable">
|
||||
<span class="name">Presto</span> =
|
||||
<span class="default_value"><MagicMock id='140571792711184'></span>
|
||||
<span class="default_value"><MagicMock id='139998207103072'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -539,7 +539,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="PRQL">
|
||||
<div class="attr variable">
|
||||
<span class="name">PRQL</span> =
|
||||
<span class="default_value"><MagicMock id='140571790276352'></span>
|
||||
<span class="default_value"><MagicMock id='139998218107056'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -551,7 +551,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Redshift">
|
||||
<div class="attr variable">
|
||||
<span class="name">Redshift</span> =
|
||||
<span class="default_value"><MagicMock id='140571796486896'></span>
|
||||
<span class="default_value"><MagicMock id='139998213994336'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -563,7 +563,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="RisingWave">
|
||||
<div class="attr variable">
|
||||
<span class="name">RisingWave</span> =
|
||||
<span class="default_value"><MagicMock id='140571796480032'></span>
|
||||
<span class="default_value"><MagicMock id='139998213988768'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -575,7 +575,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Snowflake">
|
||||
<div class="attr variable">
|
||||
<span class="name">Snowflake</span> =
|
||||
<span class="default_value"><MagicMock id='140571798302544'></span>
|
||||
<span class="default_value"><MagicMock id='139998218915888'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -587,7 +587,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Spark">
|
||||
<div class="attr variable">
|
||||
<span class="name">Spark</span> =
|
||||
<span class="default_value"><MagicMock id='140571798306144'></span>
|
||||
<span class="default_value"><MagicMock id='139998218919824'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -599,7 +599,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Spark2">
|
||||
<div class="attr variable">
|
||||
<span class="name">Spark2</span> =
|
||||
<span class="default_value"><MagicMock id='140571795407632'></span>
|
||||
<span class="default_value"><MagicMock id='139998209784848'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -611,7 +611,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="SQLite">
|
||||
<div class="attr variable">
|
||||
<span class="name">SQLite</span> =
|
||||
<span class="default_value"><MagicMock id='140571791304560'></span>
|
||||
<span class="default_value"><MagicMock id='139998214271904'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -623,7 +623,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="StarRocks">
|
||||
<div class="attr variable">
|
||||
<span class="name">StarRocks</span> =
|
||||
<span class="default_value"><MagicMock id='140571795611968'></span>
|
||||
<span class="default_value"><MagicMock id='139998214272816'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -635,7 +635,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Tableau">
|
||||
<div class="attr variable">
|
||||
<span class="name">Tableau</span> =
|
||||
<span class="default_value"><MagicMock id='140571793529520'></span>
|
||||
<span class="default_value"><MagicMock id='139998213207136'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -647,7 +647,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Teradata">
|
||||
<div class="attr variable">
|
||||
<span class="name">Teradata</span> =
|
||||
<span class="default_value"><MagicMock id='140571785251376'></span>
|
||||
<span class="default_value"><MagicMock id='139998218430752'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -659,7 +659,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Trino">
|
||||
<div class="attr variable">
|
||||
<span class="name">Trino</span> =
|
||||
<span class="default_value"><MagicMock id='140571785259248'></span>
|
||||
<span class="default_value"><MagicMock id='139998217361760'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -671,7 +671,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="TSQL">
|
||||
<div class="attr variable">
|
||||
<span class="name">TSQL</span> =
|
||||
<span class="default_value"><MagicMock id='140571785300000'></span>
|
||||
<span class="default_value"><MagicMock id='139998218034608'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -683,7 +683,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Dialect">
|
||||
<div class="attr variable">
|
||||
<span class="name">Dialect</span> =
|
||||
<span class="default_value"><MagicMock id='140571785307920'></span>
|
||||
<span class="default_value"><MagicMock id='139998218028656'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -695,7 +695,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Dialects">
|
||||
<div class="attr variable">
|
||||
<span class="name">Dialects</span> =
|
||||
<span class="default_value"><MagicMock id='140571785332288'></span>
|
||||
<span class="default_value"><MagicMock id='139998209690880'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.dialects.druid API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
@ -798,7 +798,6 @@ Default: True</li>
|
|||
<dd id="Druid.Generator.generatedasrowcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.generatedasrowcolumnconstraint_sql">generatedasrowcolumnconstraint_sql</a></dd>
|
||||
<dd id="Druid.Generator.periodforsystemtimeconstraint_sql" class="function"><a href="../generator.html#Generator.periodforsystemtimeconstraint_sql">periodforsystemtimeconstraint_sql</a></dd>
|
||||
<dd id="Druid.Generator.notnullcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.notnullcolumnconstraint_sql">notnullcolumnconstraint_sql</a></dd>
|
||||
<dd id="Druid.Generator.transformcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.transformcolumnconstraint_sql">transformcolumnconstraint_sql</a></dd>
|
||||
<dd id="Druid.Generator.primarykeycolumnconstraint_sql" class="function"><a href="../generator.html#Generator.primarykeycolumnconstraint_sql">primarykeycolumnconstraint_sql</a></dd>
|
||||
<dd id="Druid.Generator.uniquecolumnconstraint_sql" class="function"><a href="../generator.html#Generator.uniquecolumnconstraint_sql">uniquecolumnconstraint_sql</a></dd>
|
||||
<dd id="Druid.Generator.createable_sql" class="function"><a href="../generator.html#Generator.createable_sql">createable_sql</a></dd>
|
||||
|
@ -1010,6 +1009,7 @@ Default: True</li>
|
|||
<dd id="Druid.Generator.add_column_sql" class="function"><a href="../generator.html#Generator.add_column_sql">add_column_sql</a></dd>
|
||||
<dd id="Druid.Generator.droppartition_sql" class="function"><a href="../generator.html#Generator.droppartition_sql">droppartition_sql</a></dd>
|
||||
<dd id="Druid.Generator.addconstraint_sql" class="function"><a href="../generator.html#Generator.addconstraint_sql">addconstraint_sql</a></dd>
|
||||
<dd id="Druid.Generator.addpartition_sql" class="function"><a href="../generator.html#Generator.addpartition_sql">addpartition_sql</a></dd>
|
||||
<dd id="Druid.Generator.distinct_sql" class="function"><a href="../generator.html#Generator.distinct_sql">distinct_sql</a></dd>
|
||||
<dd id="Druid.Generator.ignorenulls_sql" class="function"><a href="../generator.html#Generator.ignorenulls_sql">ignorenulls_sql</a></dd>
|
||||
<dd id="Druid.Generator.respectnulls_sql" class="function"><a href="../generator.html#Generator.respectnulls_sql">respectnulls_sql</a></dd>
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.dialects.dune API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
@ -852,7 +852,6 @@ Default: True</li>
|
|||
<dd id="Dune.Generator.generatedasrowcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.generatedasrowcolumnconstraint_sql">generatedasrowcolumnconstraint_sql</a></dd>
|
||||
<dd id="Dune.Generator.periodforsystemtimeconstraint_sql" class="function"><a href="../generator.html#Generator.periodforsystemtimeconstraint_sql">periodforsystemtimeconstraint_sql</a></dd>
|
||||
<dd id="Dune.Generator.notnullcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.notnullcolumnconstraint_sql">notnullcolumnconstraint_sql</a></dd>
|
||||
<dd id="Dune.Generator.transformcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.transformcolumnconstraint_sql">transformcolumnconstraint_sql</a></dd>
|
||||
<dd id="Dune.Generator.primarykeycolumnconstraint_sql" class="function"><a href="../generator.html#Generator.primarykeycolumnconstraint_sql">primarykeycolumnconstraint_sql</a></dd>
|
||||
<dd id="Dune.Generator.uniquecolumnconstraint_sql" class="function"><a href="../generator.html#Generator.uniquecolumnconstraint_sql">uniquecolumnconstraint_sql</a></dd>
|
||||
<dd id="Dune.Generator.createable_sql" class="function"><a href="../generator.html#Generator.createable_sql">createable_sql</a></dd>
|
||||
|
@ -1058,6 +1057,7 @@ Default: True</li>
|
|||
<dd id="Dune.Generator.add_column_sql" class="function"><a href="../generator.html#Generator.add_column_sql">add_column_sql</a></dd>
|
||||
<dd id="Dune.Generator.droppartition_sql" class="function"><a href="../generator.html#Generator.droppartition_sql">droppartition_sql</a></dd>
|
||||
<dd id="Dune.Generator.addconstraint_sql" class="function"><a href="../generator.html#Generator.addconstraint_sql">addconstraint_sql</a></dd>
|
||||
<dd id="Dune.Generator.addpartition_sql" class="function"><a href="../generator.html#Generator.addpartition_sql">addpartition_sql</a></dd>
|
||||
<dd id="Dune.Generator.distinct_sql" class="function"><a href="../generator.html#Generator.distinct_sql">distinct_sql</a></dd>
|
||||
<dd id="Dune.Generator.ignorenulls_sql" class="function"><a href="../generator.html#Generator.ignorenulls_sql">ignorenulls_sql</a></dd>
|
||||
<dd id="Dune.Generator.respectnulls_sql" class="function"><a href="../generator.html#Generator.respectnulls_sql">respectnulls_sql</a></dd>
|
||||
|
|
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
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.diff API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.errors API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.executor API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.executor.context API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.executor.env API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.executor.table API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load diff
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.helper API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
@ -2003,7 +2003,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">{'day', 'year', 'year_month', 'quarter', 'week', 'month'}</span>
|
||||
<span class="default_value">{'year', 'year_month', 'month', 'week', 'day', 'quarter'}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.jsonpath API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
@ -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#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#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>'>}</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#JSONPathWildcard">sqlglot.expressions.JSONPathWildcard</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#JSONPathRoot">sqlglot.expressions.JSONPathRoot</a>'>, <class '<a href="expressions.html#JSONPathScript">sqlglot.expressions.JSONPathScript</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#JSONPathFilter">sqlglot.expressions.JSONPathFilter</a>'>}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.lineage API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.optimizer API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.optimizer.canonicalize API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.optimizer.eliminate_ctes API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.optimizer.eliminate_joins API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.optimizer.eliminate_subqueries API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.optimizer.isolate_table_selects API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.optimizer.merge_subqueries API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
@ -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">{'options', 'qualify', 'group', 'locks', 'having', 'prewhere', 'kind', 'offset', 'cluster', 'distinct', 'operation_modifiers', 'settings', 'windows', 'limit', 'match', 'into', 'laterals', 'distribute', 'format', 'sample', 'connect', 'with', 'sort', 'pivots'}</span>
|
||||
<label class="view-value-button pdoc-button" for="UNMERGABLE_ARGS-view-value"></label><span class="default_value">{'windows', 'limit', 'settings', 'cluster', 'offset', 'options', 'format', 'connect', 'locks', 'distinct', 'distribute', 'pivots', 'operation_modifiers', 'having', 'sample', 'kind', 'prewhere', 'sort', 'match', 'group', 'with', 'qualify', 'laterals', 'into'}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.optimizer.normalize API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.optimizer.normalize_identifiers API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.optimizer.optimize_joins API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.optimizer.optimizer API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.optimizer.pushdown_predicates API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.optimizer.pushdown_projections API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.optimizer.qualify API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.optimizer.qualify_columns API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.optimizer.qualify_tables API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.optimizer.scope API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.optimizer.simplify API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
@ -3201,7 +3201,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#LT">sqlglot.expressions.LT</a>'>, <class '<a href="../expressions.html#GTE">sqlglot.expressions.GTE</a>'>, <class '<a href="../expressions.html#EQ">sqlglot.expressions.EQ</a>'>, <class '<a href="../expressions.html#LTE">sqlglot.expressions.LTE</a>'>, <class '<a href="../expressions.html#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>'>}</span>
|
||||
<label class="view-value-button pdoc-button" for="DATETRUNC_COMPARISONS-view-value"></label><span class="default_value">{<class '<a href="../expressions.html#GT">sqlglot.expressions.GT</a>'>, <class '<a href="../expressions.html#In">sqlglot.expressions.In</a>'>, <class '<a href="../expressions.html#LT">sqlglot.expressions.LT</a>'>, <class '<a href="../expressions.html#NEQ">sqlglot.expressions.NEQ</a>'>, <class '<a href="../expressions.html#EQ">sqlglot.expressions.EQ</a>'>, <class '<a href="../expressions.html#GTE">sqlglot.expressions.GTE</a>'>, <class '<a href="../expressions.html#LTE">sqlglot.expressions.LTE</a>'>}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -3285,7 +3285,7 @@ prefix are statically known.</p>
|
|||
<section id="JOINS">
|
||||
<div class="attr variable">
|
||||
<span class="name">JOINS</span> =
|
||||
<span class="default_value">{('', ''), ('RIGHT', 'OUTER'), ('RIGHT', ''), ('', 'INNER')}</span>
|
||||
<span class="default_value">{('', 'INNER'), ('RIGHT', 'OUTER'), ('RIGHT', ''), ('', '')}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.optimizer.unnest_subqueries API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
|
29240
docs/sqlglot/parser.html
29240
docs/sqlglot/parser.html
File diff suppressed because one or more lines are too long
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.planner API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.schema API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.serde API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.tokens API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
@ -9516,7 +9516,7 @@
|
|||
<div class="attr variable">
|
||||
<span class="name">TOKENS_PRECEDING_HINT</span> =
|
||||
<input id="Tokenizer.TOKENS_PRECEDING_HINT-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||
<label class="view-value-button pdoc-button" for="Tokenizer.TOKENS_PRECEDING_HINT-view-value"></label><span class="default_value">{<<a href="#TokenType.SELECT">TokenType.SELECT</a>: 'SELECT'>, <<a href="#TokenType.INSERT">TokenType.INSERT</a>: 'INSERT'>, <<a href="#TokenType.UPDATE">TokenType.UPDATE</a>: 'UPDATE'>, <<a href="#TokenType.DELETE">TokenType.DELETE</a>: 'DELETE'>}</span>
|
||||
<label class="view-value-button pdoc-button" for="Tokenizer.TOKENS_PRECEDING_HINT-view-value"></label><span class="default_value">{<<a href="#TokenType.DELETE">TokenType.DELETE</a>: 'DELETE'>, <<a href="#TokenType.SELECT">TokenType.SELECT</a>: 'SELECT'>, <<a href="#TokenType.INSERT">TokenType.INSERT</a>: 'INSERT'>, <<a href="#TokenType.UPDATE">TokenType.UPDATE</a>: 'UPDATE'>}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -9555,7 +9555,7 @@
|
|||
<div class="attr variable">
|
||||
<span class="name">COMMANDS</span> =
|
||||
<input id="Tokenizer.COMMANDS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||
<label class="view-value-button pdoc-button" for="Tokenizer.COMMANDS-view-value"></label><span class="default_value">{<<a href="#TokenType.EXECUTE">TokenType.EXECUTE</a>: 'EXECUTE'>, <<a href="#TokenType.SHOW">TokenType.SHOW</a>: 'SHOW'>, <<a href="#TokenType.RENAME">TokenType.RENAME</a>: 'RENAME'>, <<a href="#TokenType.COMMAND">TokenType.COMMAND</a>: 'COMMAND'>, <<a href="#TokenType.FETCH">TokenType.FETCH</a>: 'FETCH'>}</span>
|
||||
<label class="view-value-button pdoc-button" for="Tokenizer.COMMANDS-view-value"></label><span class="default_value">{<<a href="#TokenType.SHOW">TokenType.SHOW</a>: 'SHOW'>, <<a href="#TokenType.COMMAND">TokenType.COMMAND</a>: 'COMMAND'>, <<a href="#TokenType.EXECUTE">TokenType.EXECUTE</a>: 'EXECUTE'>, <<a href="#TokenType.RENAME">TokenType.RENAME</a>: 'RENAME'>, <<a href="#TokenType.FETCH">TokenType.FETCH</a>: 'FETCH'>}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.transforms API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
@ -978,173 +978,182 @@
|
|||
</span><span id="L-842"><a href="#L-842"><span class="linenos"> 842</span></a>
|
||||
</span><span id="L-843"><a href="#L-843"><span class="linenos"> 843</span></a>
|
||||
</span><span id="L-844"><a href="#L-844"><span class="linenos"> 844</span></a><span class="k">def</span><span class="w"> </span><span class="nf">eliminate_join_marks</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-845"><a href="#L-845"><span class="linenos"> 845</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="L-846"><a href="#L-846"><span class="linenos"> 846</span></a><span class="sd"> Remove join marks from an AST. This rule assumes that all marked columns are qualified.</span>
|
||||
</span><span id="L-847"><a href="#L-847"><span class="linenos"> 847</span></a><span class="sd"> If this does not hold for a query, consider running `sqlglot.optimizer.qualify` first.</span>
|
||||
</span><span id="L-845"><a href="#L-845"><span class="linenos"> 845</span></a><span class="w"> </span><span class="sd">"""https://docs.oracle.com/cd/B19306_01/server.102/b14200/queries006.htm#sthref3178</span>
|
||||
</span><span id="L-846"><a href="#L-846"><span class="linenos"> 846</span></a>
|
||||
</span><span id="L-847"><a href="#L-847"><span class="linenos"> 847</span></a><span class="sd"> 1. You cannot specify the (+) operator in a query block that also contains FROM clause join syntax.</span>
|
||||
</span><span id="L-848"><a href="#L-848"><span class="linenos"> 848</span></a>
|
||||
</span><span id="L-849"><a href="#L-849"><span class="linenos"> 849</span></a><span class="sd"> For example,</span>
|
||||
</span><span id="L-850"><a href="#L-850"><span class="linenos"> 850</span></a><span class="sd"> SELECT * FROM a, b WHERE a.id = b.id(+) -- ... is converted to</span>
|
||||
</span><span id="L-851"><a href="#L-851"><span class="linenos"> 851</span></a><span class="sd"> SELECT * FROM a LEFT JOIN b ON a.id = b.id -- this</span>
|
||||
</span><span id="L-849"><a href="#L-849"><span class="linenos"> 849</span></a><span class="sd"> 2. The (+) operator can appear only in the WHERE clause or, in the context of left-correlation (that is, when specifying the TABLE clause) in the FROM clause, and can be applied only to a column of a table or view.</span>
|
||||
</span><span id="L-850"><a href="#L-850"><span class="linenos"> 850</span></a>
|
||||
</span><span id="L-851"><a href="#L-851"><span class="linenos"> 851</span></a><span class="sd"> The (+) operator does not produce an outer join if you specify one table in the outer query and the other table in an inner query.</span>
|
||||
</span><span id="L-852"><a href="#L-852"><span class="linenos"> 852</span></a>
|
||||
</span><span id="L-853"><a href="#L-853"><span class="linenos"> 853</span></a><span class="sd"> Args:</span>
|
||||
</span><span id="L-854"><a href="#L-854"><span class="linenos"> 854</span></a><span class="sd"> expression: The AST to remove join marks from.</span>
|
||||
</span><span id="L-855"><a href="#L-855"><span class="linenos"> 855</span></a>
|
||||
</span><span id="L-856"><a href="#L-856"><span class="linenos"> 856</span></a><span class="sd"> Returns:</span>
|
||||
</span><span id="L-857"><a href="#L-857"><span class="linenos"> 857</span></a><span class="sd"> The AST with join marks removed.</span>
|
||||
</span><span id="L-858"><a href="#L-858"><span class="linenos"> 858</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-859"><a href="#L-859"><span class="linenos"> 859</span></a> <span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.optimizer.scope</span><span class="w"> </span><span class="kn">import</span> <span class="n">traverse_scope</span>
|
||||
</span><span id="L-853"><a href="#L-853"><span class="linenos"> 853</span></a><span class="sd"> You cannot use the (+) operator to outer-join a table to itself, although self joins are valid.</span>
|
||||
</span><span id="L-854"><a href="#L-854"><span class="linenos"> 854</span></a>
|
||||
</span><span id="L-855"><a href="#L-855"><span class="linenos"> 855</span></a><span class="sd"> The (+) operator can be applied only to a column, not to an arbitrary expression. However, an arbitrary expression can contain one or more columns marked with the (+) operator.</span>
|
||||
</span><span id="L-856"><a href="#L-856"><span class="linenos"> 856</span></a>
|
||||
</span><span id="L-857"><a href="#L-857"><span class="linenos"> 857</span></a><span class="sd"> A WHERE condition containing the (+) operator cannot be combined with another condition using the OR logical operator.</span>
|
||||
</span><span id="L-858"><a href="#L-858"><span class="linenos"> 858</span></a>
|
||||
</span><span id="L-859"><a href="#L-859"><span class="linenos"> 859</span></a><span class="sd"> A WHERE condition cannot use the IN comparison condition to compare a column marked with the (+) operator with an expression.</span>
|
||||
</span><span id="L-860"><a href="#L-860"><span class="linenos"> 860</span></a>
|
||||
</span><span id="L-861"><a href="#L-861"><span class="linenos"> 861</span></a> <span class="k">for</span> <span class="n">scope</span> <span class="ow">in</span> <span class="n">traverse_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
|
||||
</span><span id="L-862"><a href="#L-862"><span class="linenos"> 862</span></a> <span class="n">query</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">expression</span>
|
||||
</span><span id="L-863"><a href="#L-863"><span class="linenos"> 863</span></a>
|
||||
</span><span id="L-864"><a href="#L-864"><span class="linenos"> 864</span></a> <span class="n">where</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"where"</span><span class="p">)</span>
|
||||
</span><span id="L-865"><a href="#L-865"><span class="linenos"> 865</span></a> <span class="n">joins</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"joins"</span><span class="p">)</span>
|
||||
</span><span id="L-866"><a href="#L-866"><span class="linenos"> 866</span></a>
|
||||
</span><span id="L-867"><a href="#L-867"><span class="linenos"> 867</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">where</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">joins</span><span class="p">:</span>
|
||||
</span><span id="L-868"><a href="#L-868"><span class="linenos"> 868</span></a> <span class="k">continue</span>
|
||||
</span><span id="L-869"><a href="#L-869"><span class="linenos"> 869</span></a>
|
||||
</span><span id="L-870"><a href="#L-870"><span class="linenos"> 870</span></a> <span class="n">query_from</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"from"</span><span class="p">]</span>
|
||||
</span><span id="L-871"><a href="#L-871"><span class="linenos"> 871</span></a>
|
||||
</span><span id="L-872"><a href="#L-872"><span class="linenos"> 872</span></a> <span class="c1"># These keep track of the joins to be replaced</span>
|
||||
</span><span id="L-873"><a href="#L-873"><span class="linenos"> 873</span></a> <span class="n">new_joins</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
</span><span id="L-874"><a href="#L-874"><span class="linenos"> 874</span></a> <span class="n">old_joins</span> <span class="o">=</span> <span class="p">{</span><span class="n">join</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">join</span> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="n">joins</span><span class="p">}</span>
|
||||
</span><span id="L-861"><a href="#L-861"><span class="linenos"> 861</span></a><span class="sd"> A WHERE condition cannot compare any column marked with the (+) operator with a subquery.</span>
|
||||
</span><span id="L-862"><a href="#L-862"><span class="linenos"> 862</span></a>
|
||||
</span><span id="L-863"><a href="#L-863"><span class="linenos"> 863</span></a><span class="sd"> -- example with WHERE</span>
|
||||
</span><span id="L-864"><a href="#L-864"><span class="linenos"> 864</span></a><span class="sd"> SELECT d.department_name, sum(e.salary) as total_salary</span>
|
||||
</span><span id="L-865"><a href="#L-865"><span class="linenos"> 865</span></a><span class="sd"> FROM departments d, employees e</span>
|
||||
</span><span id="L-866"><a href="#L-866"><span class="linenos"> 866</span></a><span class="sd"> WHERE e.department_id(+) = d.department_id</span>
|
||||
</span><span id="L-867"><a href="#L-867"><span class="linenos"> 867</span></a><span class="sd"> group by department_name</span>
|
||||
</span><span id="L-868"><a href="#L-868"><span class="linenos"> 868</span></a>
|
||||
</span><span id="L-869"><a href="#L-869"><span class="linenos"> 869</span></a><span class="sd"> -- example of left correlation in select</span>
|
||||
</span><span id="L-870"><a href="#L-870"><span class="linenos"> 870</span></a><span class="sd"> SELECT d.department_name, (</span>
|
||||
</span><span id="L-871"><a href="#L-871"><span class="linenos"> 871</span></a><span class="sd"> SELECT SUM(e.salary)</span>
|
||||
</span><span id="L-872"><a href="#L-872"><span class="linenos"> 872</span></a><span class="sd"> FROM employees e</span>
|
||||
</span><span id="L-873"><a href="#L-873"><span class="linenos"> 873</span></a><span class="sd"> WHERE e.department_id(+) = d.department_id) AS total_salary</span>
|
||||
</span><span id="L-874"><a href="#L-874"><span class="linenos"> 874</span></a><span class="sd"> FROM departments d;</span>
|
||||
</span><span id="L-875"><a href="#L-875"><span class="linenos"> 875</span></a>
|
||||
</span><span id="L-876"><a href="#L-876"><span class="linenos"> 876</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">columns</span><span class="p">:</span>
|
||||
</span><span id="L-877"><a href="#L-877"><span class="linenos"> 877</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">column</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"join_mark"</span><span class="p">):</span>
|
||||
</span><span id="L-878"><a href="#L-878"><span class="linenos"> 878</span></a> <span class="k">continue</span>
|
||||
</span><span id="L-879"><a href="#L-879"><span class="linenos"> 879</span></a>
|
||||
</span><span id="L-880"><a href="#L-880"><span class="linenos"> 880</span></a> <span class="n">predicate</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">find_ancestor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Predicate</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-881"><a href="#L-881"><span class="linenos"> 881</span></a> <span class="k">assert</span> <span class="nb">isinstance</span><span class="p">(</span>
|
||||
</span><span id="L-882"><a href="#L-882"><span class="linenos"> 882</span></a> <span class="n">predicate</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Binary</span>
|
||||
</span><span id="L-883"><a href="#L-883"><span class="linenos"> 883</span></a> <span class="p">),</span> <span class="s2">"Columns can only be marked with (+) when involved in a binary operation"</span>
|
||||
</span><span id="L-876"><a href="#L-876"><span class="linenos"> 876</span></a><span class="sd"> -- example of left correlation in from</span>
|
||||
</span><span id="L-877"><a href="#L-877"><span class="linenos"> 877</span></a><span class="sd"> SELECT d.department_name, t.total_salary</span>
|
||||
</span><span id="L-878"><a href="#L-878"><span class="linenos"> 878</span></a><span class="sd"> FROM departments d, (</span>
|
||||
</span><span id="L-879"><a href="#L-879"><span class="linenos"> 879</span></a><span class="sd"> SELECT SUM(e.salary) AS total_salary</span>
|
||||
</span><span id="L-880"><a href="#L-880"><span class="linenos"> 880</span></a><span class="sd"> FROM employees e</span>
|
||||
</span><span id="L-881"><a href="#L-881"><span class="linenos"> 881</span></a><span class="sd"> WHERE e.department_id(+) = d.department_id</span>
|
||||
</span><span id="L-882"><a href="#L-882"><span class="linenos"> 882</span></a><span class="sd"> ) t</span>
|
||||
</span><span id="L-883"><a href="#L-883"><span class="linenos"> 883</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-884"><a href="#L-884"><span class="linenos"> 884</span></a>
|
||||
</span><span id="L-885"><a href="#L-885"><span class="linenos"> 885</span></a> <span class="n">predicate_parent</span> <span class="o">=</span> <span class="n">predicate</span><span class="o">.</span><span class="n">parent</span>
|
||||
</span><span id="L-886"><a href="#L-886"><span class="linenos"> 886</span></a> <span class="n">join_predicate</span> <span class="o">=</span> <span class="n">predicate</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
|
||||
</span><span id="L-887"><a href="#L-887"><span class="linenos"> 887</span></a>
|
||||
</span><span id="L-888"><a href="#L-888"><span class="linenos"> 888</span></a> <span class="n">left_columns</span> <span class="o">=</span> <span class="p">[</span>
|
||||
</span><span id="L-889"><a href="#L-889"><span class="linenos"> 889</span></a> <span class="n">c</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">join_predicate</span><span class="o">.</span><span class="n">left</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"join_mark"</span><span class="p">)</span>
|
||||
</span><span id="L-890"><a href="#L-890"><span class="linenos"> 890</span></a> <span class="p">]</span>
|
||||
</span><span id="L-891"><a href="#L-891"><span class="linenos"> 891</span></a> <span class="n">right_columns</span> <span class="o">=</span> <span class="p">[</span>
|
||||
</span><span id="L-892"><a href="#L-892"><span class="linenos"> 892</span></a> <span class="n">c</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">join_predicate</span><span class="o">.</span><span class="n">right</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"join_mark"</span><span class="p">)</span>
|
||||
</span><span id="L-893"><a href="#L-893"><span class="linenos"> 893</span></a> <span class="p">]</span>
|
||||
</span><span id="L-894"><a href="#L-894"><span class="linenos"> 894</span></a>
|
||||
</span><span id="L-895"><a href="#L-895"><span class="linenos"> 895</span></a> <span class="k">assert</span> <span class="ow">not</span> <span class="p">(</span>
|
||||
</span><span id="L-896"><a href="#L-896"><span class="linenos"> 896</span></a> <span class="n">left_columns</span> <span class="ow">and</span> <span class="n">right_columns</span>
|
||||
</span><span id="L-897"><a href="#L-897"><span class="linenos"> 897</span></a> <span class="p">),</span> <span class="s2">"The (+) marker cannot appear in both sides of a binary predicate"</span>
|
||||
</span><span id="L-885"><a href="#L-885"><span class="linenos"> 885</span></a> <span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.optimizer.scope</span><span class="w"> </span><span class="kn">import</span> <span class="n">traverse_scope</span>
|
||||
</span><span id="L-886"><a href="#L-886"><span class="linenos"> 886</span></a> <span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.optimizer.normalize</span><span class="w"> </span><span class="kn">import</span> <span class="n">normalize</span><span class="p">,</span> <span class="n">normalized</span>
|
||||
</span><span id="L-887"><a href="#L-887"><span class="linenos"> 887</span></a> <span class="kn">from</span><span class="w"> </span><span class="nn">collections</span><span class="w"> </span><span class="kn">import</span> <span class="n">defaultdict</span>
|
||||
</span><span id="L-888"><a href="#L-888"><span class="linenos"> 888</span></a>
|
||||
</span><span id="L-889"><a href="#L-889"><span class="linenos"> 889</span></a> <span class="c1"># we go in reverse to check the main query for left correlation</span>
|
||||
</span><span id="L-890"><a href="#L-890"><span class="linenos"> 890</span></a> <span class="k">for</span> <span class="n">scope</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="n">traverse_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">)):</span>
|
||||
</span><span id="L-891"><a href="#L-891"><span class="linenos"> 891</span></a> <span class="n">query</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">expression</span>
|
||||
</span><span id="L-892"><a href="#L-892"><span class="linenos"> 892</span></a>
|
||||
</span><span id="L-893"><a href="#L-893"><span class="linenos"> 893</span></a> <span class="n">where</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"where"</span><span class="p">)</span>
|
||||
</span><span id="L-894"><a href="#L-894"><span class="linenos"> 894</span></a> <span class="n">joins</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"joins"</span><span class="p">,</span> <span class="p">[])</span>
|
||||
</span><span id="L-895"><a href="#L-895"><span class="linenos"> 895</span></a>
|
||||
</span><span id="L-896"><a href="#L-896"><span class="linenos"> 896</span></a> <span class="c1"># knockout: we do not support left correlation (see point 2)</span>
|
||||
</span><span id="L-897"><a href="#L-897"><span class="linenos"> 897</span></a> <span class="k">assert</span> <span class="ow">not</span> <span class="n">scope</span><span class="o">.</span><span class="n">is_correlated_subquery</span><span class="p">,</span> <span class="s2">"Correlated queries are not supported"</span>
|
||||
</span><span id="L-898"><a href="#L-898"><span class="linenos"> 898</span></a>
|
||||
</span><span id="L-899"><a href="#L-899"><span class="linenos"> 899</span></a> <span class="n">marked_column_tables</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
|
||||
</span><span id="L-900"><a href="#L-900"><span class="linenos"> 900</span></a> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">left_columns</span> <span class="ow">or</span> <span class="n">right_columns</span><span class="p">:</span>
|
||||
</span><span id="L-901"><a href="#L-901"><span class="linenos"> 901</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">col</span><span class="o">.</span><span class="n">table</span>
|
||||
</span><span id="L-902"><a href="#L-902"><span class="linenos"> 902</span></a> <span class="k">assert</span> <span class="n">table</span><span class="p">,</span> <span class="sa">f</span><span class="s2">"Column </span><span class="si">{</span><span class="n">col</span><span class="si">}</span><span class="s2"> needs to be qualified with a table"</span>
|
||||
</span><span id="L-903"><a href="#L-903"><span class="linenos"> 903</span></a>
|
||||
</span><span id="L-904"><a href="#L-904"><span class="linenos"> 904</span></a> <span class="n">col</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"join_mark"</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
|
||||
</span><span id="L-905"><a href="#L-905"><span class="linenos"> 905</span></a> <span class="n">marked_column_tables</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
|
||||
</span><span id="L-899"><a href="#L-899"><span class="linenos"> 899</span></a> <span class="c1"># nothing to do - we check it here after knockout above</span>
|
||||
</span><span id="L-900"><a href="#L-900"><span class="linenos"> 900</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">where</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">any</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"join_mark"</span><span class="p">)</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">where</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)):</span>
|
||||
</span><span id="L-901"><a href="#L-901"><span class="linenos"> 901</span></a> <span class="k">continue</span>
|
||||
</span><span id="L-902"><a href="#L-902"><span class="linenos"> 902</span></a>
|
||||
</span><span id="L-903"><a href="#L-903"><span class="linenos"> 903</span></a> <span class="c1"># make sure we have AND of ORs to have clear join terms</span>
|
||||
</span><span id="L-904"><a href="#L-904"><span class="linenos"> 904</span></a> <span class="n">where</span> <span class="o">=</span> <span class="n">normalize</span><span class="p">(</span><span class="n">where</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
|
||||
</span><span id="L-905"><a href="#L-905"><span class="linenos"> 905</span></a> <span class="k">assert</span> <span class="n">normalized</span><span class="p">(</span><span class="n">where</span><span class="p">),</span> <span class="s2">"Cannot normalize JOIN predicates"</span>
|
||||
</span><span id="L-906"><a href="#L-906"><span class="linenos"> 906</span></a>
|
||||
</span><span id="L-907"><a href="#L-907"><span class="linenos"> 907</span></a> <span class="k">assert</span> <span class="p">(</span>
|
||||
</span><span id="L-908"><a href="#L-908"><span class="linenos"> 908</span></a> <span class="nb">len</span><span class="p">(</span><span class="n">marked_column_tables</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span>
|
||||
</span><span id="L-909"><a href="#L-909"><span class="linenos"> 909</span></a> <span class="p">),</span> <span class="s2">"Columns of only a single table can be marked with (+) in a given binary predicate"</span>
|
||||
</span><span id="L-907"><a href="#L-907"><span class="linenos"> 907</span></a> <span class="n">joins_ons</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span> <span class="c1"># dict of {name: list of join AND conditions}</span>
|
||||
</span><span id="L-908"><a href="#L-908"><span class="linenos"> 908</span></a> <span class="k">for</span> <span class="n">cond</span> <span class="ow">in</span> <span class="p">[</span><span class="n">where</span><span class="p">]</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">where</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span><span class="p">)</span> <span class="k">else</span> <span class="n">where</span><span class="o">.</span><span class="n">flatten</span><span class="p">():</span>
|
||||
</span><span id="L-909"><a href="#L-909"><span class="linenos"> 909</span></a> <span class="n">join_cols</span> <span class="o">=</span> <span class="p">[</span><span class="n">col</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">cond</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="k">if</span> <span class="n">col</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"join_mark"</span><span class="p">)]</span>
|
||||
</span><span id="L-910"><a href="#L-910"><span class="linenos"> 910</span></a>
|
||||
</span><span id="L-911"><a href="#L-911"><span class="linenos"> 911</span></a> <span class="c1"># Add predicate if join already copied, or add join if it is new</span>
|
||||
</span><span id="L-912"><a href="#L-912"><span class="linenos"> 912</span></a> <span class="n">join_this</span> <span class="o">=</span> <span class="n">old_joins</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">,</span> <span class="n">query_from</span><span class="p">)</span><span class="o">.</span><span class="n">this</span>
|
||||
</span><span id="L-913"><a href="#L-913"><span class="linenos"> 913</span></a> <span class="n">existing_join</span> <span class="o">=</span> <span class="n">new_joins</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">join_this</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">)</span>
|
||||
</span><span id="L-914"><a href="#L-914"><span class="linenos"> 914</span></a> <span class="k">if</span> <span class="n">existing_join</span><span class="p">:</span>
|
||||
</span><span id="L-915"><a href="#L-915"><span class="linenos"> 915</span></a> <span class="n">existing_join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"on"</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span><span class="n">existing_join</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"on"</span><span class="p">],</span> <span class="n">join_predicate</span><span class="p">))</span>
|
||||
</span><span id="L-916"><a href="#L-916"><span class="linenos"> 916</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-917"><a href="#L-917"><span class="linenos"> 917</span></a> <span class="n">new_joins</span><span class="p">[</span><span class="n">join_this</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">(</span>
|
||||
</span><span id="L-918"><a href="#L-918"><span class="linenos"> 918</span></a> <span class="n">this</span><span class="o">=</span><span class="n">join_this</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">on</span><span class="o">=</span><span class="n">join_predicate</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">kind</span><span class="o">=</span><span class="s2">"LEFT"</span>
|
||||
</span><span id="L-919"><a href="#L-919"><span class="linenos"> 919</span></a> <span class="p">)</span>
|
||||
</span><span id="L-920"><a href="#L-920"><span class="linenos"> 920</span></a>
|
||||
</span><span id="L-921"><a href="#L-921"><span class="linenos"> 921</span></a> <span class="c1"># If the parent of the target predicate is a binary node, then it now has only one child</span>
|
||||
</span><span id="L-922"><a href="#L-922"><span class="linenos"> 922</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">predicate_parent</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-923"><a href="#L-923"><span class="linenos"> 923</span></a> <span class="k">if</span> <span class="n">predicate_parent</span><span class="o">.</span><span class="n">left</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
</span><span id="L-924"><a href="#L-924"><span class="linenos"> 924</span></a> <span class="n">predicate_parent</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">predicate_parent</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
|
||||
</span><span id="L-925"><a href="#L-925"><span class="linenos"> 925</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-926"><a href="#L-926"><span class="linenos"> 926</span></a> <span class="n">predicate_parent</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">predicate_parent</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
|
||||
</span><span id="L-911"><a href="#L-911"><span class="linenos"> 911</span></a> <span class="n">left_join_table</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">table</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">join_cols</span><span class="p">)</span>
|
||||
</span><span id="L-912"><a href="#L-912"><span class="linenos"> 912</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">left_join_table</span><span class="p">:</span>
|
||||
</span><span id="L-913"><a href="#L-913"><span class="linenos"> 913</span></a> <span class="k">continue</span>
|
||||
</span><span id="L-914"><a href="#L-914"><span class="linenos"> 914</span></a>
|
||||
</span><span id="L-915"><a href="#L-915"><span class="linenos"> 915</span></a> <span class="k">assert</span> <span class="ow">not</span> <span class="p">(</span>
|
||||
</span><span id="L-916"><a href="#L-916"><span class="linenos"> 916</span></a> <span class="nb">len</span><span class="p">(</span><span class="n">left_join_table</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span>
|
||||
</span><span id="L-917"><a href="#L-917"><span class="linenos"> 917</span></a> <span class="p">),</span> <span class="s2">"Cannot combine JOIN predicates from different tables"</span>
|
||||
</span><span id="L-918"><a href="#L-918"><span class="linenos"> 918</span></a>
|
||||
</span><span id="L-919"><a href="#L-919"><span class="linenos"> 919</span></a> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">join_cols</span><span class="p">:</span>
|
||||
</span><span id="L-920"><a href="#L-920"><span class="linenos"> 920</span></a> <span class="n">col</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"join_mark"</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
|
||||
</span><span id="L-921"><a href="#L-921"><span class="linenos"> 921</span></a>
|
||||
</span><span id="L-922"><a href="#L-922"><span class="linenos"> 922</span></a> <span class="n">joins_ons</span><span class="p">[</span><span class="n">left_join_table</span><span class="o">.</span><span class="n">pop</span><span class="p">()]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cond</span><span class="p">)</span>
|
||||
</span><span id="L-923"><a href="#L-923"><span class="linenos"> 923</span></a>
|
||||
</span><span id="L-924"><a href="#L-924"><span class="linenos"> 924</span></a> <span class="n">old_joins</span> <span class="o">=</span> <span class="p">{</span><span class="n">join</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">join</span> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="n">joins</span><span class="p">}</span>
|
||||
</span><span id="L-925"><a href="#L-925"><span class="linenos"> 925</span></a> <span class="n">new_joins</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
</span><span id="L-926"><a href="#L-926"><span class="linenos"> 926</span></a> <span class="n">query_from</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"from"</span><span class="p">]</span>
|
||||
</span><span id="L-927"><a href="#L-927"><span class="linenos"> 927</span></a>
|
||||
</span><span id="L-928"><a href="#L-928"><span class="linenos"> 928</span></a> <span class="n">only_old_join_sources</span> <span class="o">=</span> <span class="n">old_joins</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> <span class="o">-</span> <span class="n">new_joins</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span>
|
||||
</span><span id="L-929"><a href="#L-929"><span class="linenos"> 929</span></a>
|
||||
</span><span id="L-930"><a href="#L-930"><span class="linenos"> 930</span></a> <span class="k">if</span> <span class="n">query_from</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">in</span> <span class="n">new_joins</span><span class="p">:</span>
|
||||
</span><span id="L-931"><a href="#L-931"><span class="linenos"> 931</span></a> <span class="k">assert</span> <span class="p">(</span>
|
||||
</span><span id="L-932"><a href="#L-932"><span class="linenos"> 932</span></a> <span class="nb">len</span><span class="p">(</span><span class="n">only_old_join_sources</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">1</span>
|
||||
</span><span id="L-933"><a href="#L-933"><span class="linenos"> 933</span></a> <span class="p">),</span> <span class="s2">"Cannot determine which table to use in the new FROM clause"</span>
|
||||
</span><span id="L-934"><a href="#L-934"><span class="linenos"> 934</span></a>
|
||||
</span><span id="L-935"><a href="#L-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_join_sources</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
||||
</span><span id="L-936"><a href="#L-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="o">.</span><span class="n">pop</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-937"><a href="#L-937"><span class="linenos"> 937</span></a> <span class="n">only_old_join_sources</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">new_from_name</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="n">new_joins</span><span class="p">:</span>
|
||||
</span><span id="L-940"><a href="#L-940"><span class="linenos"> 940</span></a> <span class="n">only_old_join_expressions</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
</span><span id="L-941"><a href="#L-941"><span class="linenos"> 941</span></a> <span class="k">for</span> <span class="n">old_join_source</span> <span class="ow">in</span> <span class="n">only_old_join_sources</span><span class="p">:</span>
|
||||
</span><span id="L-942"><a href="#L-942"><span class="linenos"> 942</span></a> <span class="n">old_join_expression</span> <span class="o">=</span> <span class="n">old_joins</span><span class="p">[</span><span class="n">old_join_source</span><span class="p">]</span>
|
||||
</span><span id="L-943"><a href="#L-943"><span class="linenos"> 943</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">old_join_expression</span><span class="o">.</span><span class="n">kind</span><span class="p">:</span>
|
||||
</span><span id="L-944"><a href="#L-944"><span class="linenos"> 944</span></a> <span class="n">old_join_expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"kind"</span><span class="p">,</span> <span class="s2">"CROSS"</span><span class="p">)</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="n">only_old_join_expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">old_join_expression</span><span class="p">)</span>
|
||||
</span><span id="L-947"><a href="#L-947"><span class="linenos"> 947</span></a>
|
||||
</span><span id="L-948"><a href="#L-948"><span class="linenos"> 948</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 class="o">+</span> <span class="n">only_old_join_expressions</span><span class="p">)</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="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-951"><a href="#L-951"><span class="linenos"> 951</span></a> <span class="n">where</span><span class="o">.</span><span class="n">pop</span><span class="p">()</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="k">return</span> <span class="n">expression</span>
|
||||
</span><span id="L-954"><a href="#L-954"><span class="linenos"> 954</span></a>
|
||||
</span><span id="L-955"><a href="#L-955"><span class="linenos"> 955</span></a>
|
||||
</span><span id="L-956"><a href="#L-956"><span class="linenos"> 956</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-957"><a href="#L-957"><span class="linenos"> 957</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="L-958"><a href="#L-958"><span class="linenos"> 958</span></a><span class="sd"> Transform ANY operator to Spark's EXISTS</span>
|
||||
</span><span id="L-959"><a href="#L-959"><span class="linenos"> 959</span></a>
|
||||
</span><span id="L-960"><a href="#L-960"><span class="linenos"> 960</span></a><span class="sd"> For example,</span>
|
||||
</span><span id="L-961"><a href="#L-961"><span class="linenos"> 961</span></a><span class="sd"> - Postgres: SELECT * FROM tbl WHERE 5 > ANY(tbl.col)</span>
|
||||
</span><span id="L-962"><a href="#L-962"><span class="linenos"> 962</span></a><span class="sd"> - Spark: SELECT * FROM tbl WHERE EXISTS(tbl.col, x -> x < 5)</span>
|
||||
</span><span id="L-928"><a href="#L-928"><span class="linenos"> 928</span></a> <span class="k">for</span> <span class="n">table</span><span class="p">,</span> <span class="n">predicates</span> <span class="ow">in</span> <span class="n">joins_ons</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
||||
</span><span id="L-929"><a href="#L-929"><span class="linenos"> 929</span></a> <span class="n">join_what</span> <span class="o">=</span> <span class="n">old_joins</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">query_from</span><span class="p">)</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
||||
</span><span id="L-930"><a href="#L-930"><span class="linenos"> 930</span></a> <span class="n">new_joins</span><span class="p">[</span><span class="n">join_what</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">(</span>
|
||||
</span><span id="L-931"><a href="#L-931"><span class="linenos"> 931</span></a> <span class="n">this</span><span class="o">=</span><span class="n">join_what</span><span class="p">,</span> <span class="n">on</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span><span class="o">*</span><span class="n">predicates</span><span class="p">),</span> <span class="n">kind</span><span class="o">=</span><span class="s2">"LEFT"</span>
|
||||
</span><span id="L-932"><a href="#L-932"><span class="linenos"> 932</span></a> <span class="p">)</span>
|
||||
</span><span id="L-933"><a href="#L-933"><span class="linenos"> 933</span></a>
|
||||
</span><span id="L-934"><a href="#L-934"><span class="linenos"> 934</span></a> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">predicates</span><span class="p">:</span>
|
||||
</span><span id="L-935"><a href="#L-935"><span class="linenos"> 935</span></a> <span class="k">while</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Paren</span><span class="p">):</span>
|
||||
</span><span id="L-936"><a href="#L-936"><span class="linenos"> 936</span></a> <span class="n">p</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
|
||||
</span><span id="L-937"><a href="#L-937"><span class="linenos"> 937</span></a>
|
||||
</span><span id="L-938"><a href="#L-938"><span class="linenos"> 938</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">parent</span>
|
||||
</span><span id="L-939"><a href="#L-939"><span class="linenos"> 939</span></a> <span class="n">p</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
|
||||
</span><span id="L-940"><a href="#L-940"><span class="linenos"> 940</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</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-941"><a href="#L-941"><span class="linenos"> 941</span></a> <span class="n">parent</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">parent</span><span class="o">.</span><span class="n">right</span> <span class="k">if</span> <span class="n">parent</span><span class="o">.</span><span class="n">left</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">parent</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
|
||||
</span><span id="L-942"><a href="#L-942"><span class="linenos"> 942</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">):</span>
|
||||
</span><span id="L-943"><a href="#L-943"><span class="linenos"> 943</span></a> <span class="n">parent</span><span class="o">.</span><span class="n">pop</span><span class="p">()</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">if</span> <span class="n">query_from</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">in</span> <span class="n">new_joins</span><span class="p">:</span>
|
||||
</span><span id="L-946"><a href="#L-946"><span class="linenos"> 946</span></a> <span class="n">only_old_joins</span> <span class="o">=</span> <span class="n">old_joins</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> <span class="o">-</span> <span class="n">new_joins</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span>
|
||||
</span><span id="L-947"><a href="#L-947"><span class="linenos"> 947</span></a> <span class="k">assert</span> <span class="p">(</span>
|
||||
</span><span id="L-948"><a href="#L-948"><span class="linenos"> 948</span></a> <span class="nb">len</span><span class="p">(</span><span class="n">only_old_joins</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">1</span>
|
||||
</span><span id="L-949"><a href="#L-949"><span class="linenos"> 949</span></a> <span class="p">),</span> <span class="s2">"Cannot determine which table to use in the new FROM clause"</span>
|
||||
</span><span id="L-950"><a href="#L-950"><span class="linenos"> 950</span></a>
|
||||
</span><span id="L-951"><a href="#L-951"><span class="linenos"> 951</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-952"><a href="#L-952"><span class="linenos"> 952</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-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="k">if</span> <span class="n">new_joins</span><span class="p">:</span>
|
||||
</span><span id="L-955"><a href="#L-955"><span class="linenos"> 955</span></a> <span class="k">for</span> <span class="n">n</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">old_joins</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> <span class="c1"># preserve any other joins</span>
|
||||
</span><span id="L-956"><a href="#L-956"><span class="linenos"> 956</span></a> <span class="k">if</span> <span class="n">n</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">new_joins</span> <span class="ow">and</span> <span class="n">n</span> <span class="o">!=</span> <span class="n">query</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"from"</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="p">:</span>
|
||||
</span><span id="L-957"><a href="#L-957"><span class="linenos"> 957</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">j</span><span class="o">.</span><span class="n">kind</span><span class="p">:</span>
|
||||
</span><span id="L-958"><a href="#L-958"><span class="linenos"> 958</span></a> <span class="n">j</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"kind"</span><span class="p">,</span> <span class="s2">"CROSS"</span><span class="p">)</span>
|
||||
</span><span id="L-959"><a href="#L-959"><span class="linenos"> 959</span></a> <span class="n">new_joins</span><span class="p">[</span><span class="n">n</span><span class="p">]</span> <span class="o">=</span> <span class="n">j</span>
|
||||
</span><span id="L-960"><a href="#L-960"><span class="linenos"> 960</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-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="k">return</span> <span class="n">expression</span>
|
||||
</span><span id="L-963"><a href="#L-963"><span class="linenos"> 963</span></a>
|
||||
</span><span id="L-964"><a href="#L-964"><span class="linenos"> 964</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-965"><a href="#L-965"><span class="linenos"> 965</span></a><span class="sd"> transformation</span>
|
||||
</span><span id="L-966"><a href="#L-966"><span class="linenos"> 966</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-967"><a href="#L-967"><span class="linenos"> 967</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-968"><a href="#L-968"><span class="linenos"> 968</span></a> <span class="k">for</span> <span class="n">any_expr</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-969"><a href="#L-969"><span class="linenos"> 969</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">any_expr</span><span class="o">.</span><span class="n">this</span>
|
||||
</span><span id="L-970"><a href="#L-970"><span class="linenos"> 970</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-971"><a href="#L-971"><span class="linenos"> 971</span></a> <span class="k">continue</span>
|
||||
</span><span id="L-964"><a href="#L-964"><span class="linenos"> 964</span></a>
|
||||
</span><span id="L-965"><a href="#L-965"><span class="linenos"> 965</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-966"><a href="#L-966"><span class="linenos"> 966</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="L-967"><a href="#L-967"><span class="linenos"> 967</span></a><span class="sd"> Transform ANY operator to Spark's EXISTS</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="sd"> For example,</span>
|
||||
</span><span id="L-970"><a href="#L-970"><span class="linenos"> 970</span></a><span class="sd"> - Postgres: SELECT * FROM tbl WHERE 5 > ANY(tbl.col)</span>
|
||||
</span><span id="L-971"><a href="#L-971"><span class="linenos"> 971</span></a><span class="sd"> - Spark: SELECT * FROM tbl WHERE EXISTS(tbl.col, x -> x < 5)</span>
|
||||
</span><span id="L-972"><a href="#L-972"><span class="linenos"> 972</span></a>
|
||||
</span><span id="L-973"><a href="#L-973"><span class="linenos"> 973</span></a> <span class="n">binop</span> <span class="o">=</span> <span class="n">any_expr</span><span class="o">.</span><span class="n">parent</span>
|
||||
</span><span id="L-974"><a href="#L-974"><span class="linenos"> 974</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-975"><a href="#L-975"><span class="linenos"> 975</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-976"><a href="#L-976"><span class="linenos"> 976</span></a> <span class="n">any_expr</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-977"><a href="#L-977"><span class="linenos"> 977</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-978"><a href="#L-978"><span class="linenos"> 978</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-979"><a href="#L-979"><span class="linenos"> 979</span></a>
|
||||
</span><span id="L-980"><a href="#L-980"><span class="linenos"> 980</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span><span id="L-973"><a href="#L-973"><span class="linenos"> 973</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-974"><a href="#L-974"><span class="linenos"> 974</span></a><span class="sd"> transformation</span>
|
||||
</span><span id="L-975"><a href="#L-975"><span class="linenos"> 975</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-976"><a href="#L-976"><span class="linenos"> 976</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-977"><a href="#L-977"><span class="linenos"> 977</span></a> <span class="k">for</span> <span class="n">any_expr</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-978"><a href="#L-978"><span class="linenos"> 978</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">any_expr</span><span class="o">.</span><span class="n">this</span>
|
||||
</span><span id="L-979"><a href="#L-979"><span class="linenos"> 979</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-980"><a href="#L-980"><span class="linenos"> 980</span></a> <span class="k">continue</span>
|
||||
</span><span id="L-981"><a href="#L-981"><span class="linenos"> 981</span></a>
|
||||
</span><span id="L-982"><a href="#L-982"><span class="linenos"> 982</span></a>
|
||||
</span><span id="L-983"><a href="#L-983"><span class="linenos"> 983</span></a><span class="k">def</span><span class="w"> </span><span class="nf">eliminate_window_clause</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-984"><a href="#L-984"><span class="linenos"> 984</span></a><span class="w"> </span><span class="sd">"""Eliminates the `WINDOW` query clause by inling each named window."""</span>
|
||||
</span><span id="L-985"><a href="#L-985"><span class="linenos"> 985</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 class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"windows"</span><span class="p">):</span>
|
||||
</span><span id="L-986"><a href="#L-986"><span class="linenos"> 986</span></a> <span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.optimizer.scope</span><span class="w"> </span><span class="kn">import</span> <span class="n">find_all_in_scope</span>
|
||||
</span><span id="L-987"><a href="#L-987"><span class="linenos"> 987</span></a>
|
||||
</span><span id="L-988"><a href="#L-988"><span class="linenos"> 988</span></a> <span class="n">windows</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"windows"</span><span class="p">]</span>
|
||||
</span><span id="L-989"><a href="#L-989"><span class="linenos"> 989</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"windows"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
</span><span id="L-982"><a href="#L-982"><span class="linenos"> 982</span></a> <span class="n">binop</span> <span class="o">=</span> <span class="n">any_expr</span><span class="o">.</span><span class="n">parent</span>
|
||||
</span><span id="L-983"><a href="#L-983"><span class="linenos"> 983</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-984"><a href="#L-984"><span class="linenos"> 984</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-985"><a href="#L-985"><span class="linenos"> 985</span></a> <span class="n">any_expr</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-986"><a href="#L-986"><span class="linenos"> 986</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-987"><a href="#L-987"><span class="linenos"> 987</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-988"><a href="#L-988"><span class="linenos"> 988</span></a>
|
||||
</span><span id="L-989"><a href="#L-989"><span class="linenos"> 989</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span><span id="L-990"><a href="#L-990"><span class="linenos"> 990</span></a>
|
||||
</span><span id="L-991"><a href="#L-991"><span class="linenos"> 991</span></a> <span class="n">window_expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
</span><span id="L-992"><a href="#L-992"><span class="linenos"> 992</span></a>
|
||||
</span><span id="L-993"><a href="#L-993"><span class="linenos"> 993</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_inline_inherited_window</span><span class="p">(</span><span class="n">window</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||
</span><span id="L-994"><a href="#L-994"><span class="linenos"> 994</span></a> <span class="n">inherited_window</span> <span class="o">=</span> <span class="n">window_expression</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">window</span><span class="o">.</span><span class="n">alias</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
|
||||
</span><span id="L-995"><a href="#L-995"><span class="linenos"> 995</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">inherited_window</span><span class="p">:</span>
|
||||
</span><span id="L-996"><a href="#L-996"><span class="linenos"> 996</span></a> <span class="k">return</span>
|
||||
</span><span id="L-997"><a href="#L-997"><span class="linenos"> 997</span></a>
|
||||
</span><span id="L-998"><a href="#L-998"><span class="linenos"> 998</span></a> <span class="n">window</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"alias"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
</span><span id="L-999"><a href="#L-999"><span class="linenos"> 999</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"partition_by"</span><span class="p">,</span> <span class="s2">"order"</span><span class="p">,</span> <span class="s2">"spec"</span><span class="p">):</span>
|
||||
</span><span id="L-1000"><a href="#L-1000"><span class="linenos">1000</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">inherited_window</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
|
||||
</span><span id="L-1001"><a href="#L-1001"><span class="linenos">1001</span></a> <span class="k">if</span> <span class="n">arg</span><span class="p">:</span>
|
||||
</span><span id="L-1002"><a href="#L-1002"><span class="linenos">1002</span></a> <span class="n">window</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">arg</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
|
||||
</span><span id="L-1003"><a href="#L-1003"><span class="linenos">1003</span></a>
|
||||
</span><span id="L-1004"><a href="#L-1004"><span class="linenos">1004</span></a> <span class="k">for</span> <span class="n">window</span> <span class="ow">in</span> <span class="n">windows</span><span class="p">:</span>
|
||||
</span><span id="L-1005"><a href="#L-1005"><span class="linenos">1005</span></a> <span class="n">_inline_inherited_window</span><span class="p">(</span><span class="n">window</span><span class="p">)</span>
|
||||
</span><span id="L-1006"><a href="#L-1006"><span class="linenos">1006</span></a> <span class="n">window_expression</span><span class="p">[</span><span class="n">window</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()]</span> <span class="o">=</span> <span class="n">window</span>
|
||||
</span><span id="L-1007"><a href="#L-1007"><span class="linenos">1007</span></a>
|
||||
</span><span id="L-1008"><a href="#L-1008"><span class="linenos">1008</span></a> <span class="k">for</span> <span class="n">window</span> <span class="ow">in</span> <span class="n">find_all_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">):</span>
|
||||
</span><span id="L-1009"><a href="#L-1009"><span class="linenos">1009</span></a> <span class="n">_inline_inherited_window</span><span class="p">(</span><span class="n">window</span><span class="p">)</span>
|
||||
</span><span id="L-1010"><a href="#L-1010"><span class="linenos">1010</span></a>
|
||||
</span><span id="L-1011"><a href="#L-1011"><span class="linenos">1011</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span><span id="L-991"><a href="#L-991"><span class="linenos"> 991</span></a>
|
||||
</span><span id="L-992"><a href="#L-992"><span class="linenos"> 992</span></a><span class="k">def</span><span class="w"> </span><span class="nf">eliminate_window_clause</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-993"><a href="#L-993"><span class="linenos"> 993</span></a><span class="w"> </span><span class="sd">"""Eliminates the `WINDOW` query clause by inling each named window."""</span>
|
||||
</span><span id="L-994"><a href="#L-994"><span class="linenos"> 994</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 class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"windows"</span><span class="p">):</span>
|
||||
</span><span id="L-995"><a href="#L-995"><span class="linenos"> 995</span></a> <span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.optimizer.scope</span><span class="w"> </span><span class="kn">import</span> <span class="n">find_all_in_scope</span>
|
||||
</span><span id="L-996"><a href="#L-996"><span class="linenos"> 996</span></a>
|
||||
</span><span id="L-997"><a href="#L-997"><span class="linenos"> 997</span></a> <span class="n">windows</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"windows"</span><span class="p">]</span>
|
||||
</span><span id="L-998"><a href="#L-998"><span class="linenos"> 998</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"windows"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
</span><span id="L-999"><a href="#L-999"><span class="linenos"> 999</span></a>
|
||||
</span><span id="L-1000"><a href="#L-1000"><span class="linenos">1000</span></a> <span class="n">window_expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
</span><span id="L-1001"><a href="#L-1001"><span class="linenos">1001</span></a>
|
||||
</span><span id="L-1002"><a href="#L-1002"><span class="linenos">1002</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_inline_inherited_window</span><span class="p">(</span><span class="n">window</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||
</span><span id="L-1003"><a href="#L-1003"><span class="linenos">1003</span></a> <span class="n">inherited_window</span> <span class="o">=</span> <span class="n">window_expression</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">window</span><span class="o">.</span><span class="n">alias</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
|
||||
</span><span id="L-1004"><a href="#L-1004"><span class="linenos">1004</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">inherited_window</span><span class="p">:</span>
|
||||
</span><span id="L-1005"><a href="#L-1005"><span class="linenos">1005</span></a> <span class="k">return</span>
|
||||
</span><span id="L-1006"><a href="#L-1006"><span class="linenos">1006</span></a>
|
||||
</span><span id="L-1007"><a href="#L-1007"><span class="linenos">1007</span></a> <span class="n">window</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"alias"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
</span><span id="L-1008"><a href="#L-1008"><span class="linenos">1008</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"partition_by"</span><span class="p">,</span> <span class="s2">"order"</span><span class="p">,</span> <span class="s2">"spec"</span><span class="p">):</span>
|
||||
</span><span id="L-1009"><a href="#L-1009"><span class="linenos">1009</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">inherited_window</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
|
||||
</span><span id="L-1010"><a href="#L-1010"><span class="linenos">1010</span></a> <span class="k">if</span> <span class="n">arg</span><span class="p">:</span>
|
||||
</span><span id="L-1011"><a href="#L-1011"><span class="linenos">1011</span></a> <span class="n">window</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">arg</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
|
||||
</span><span id="L-1012"><a href="#L-1012"><span class="linenos">1012</span></a>
|
||||
</span><span id="L-1013"><a href="#L-1013"><span class="linenos">1013</span></a> <span class="k">for</span> <span class="n">window</span> <span class="ow">in</span> <span class="n">windows</span><span class="p">:</span>
|
||||
</span><span id="L-1014"><a href="#L-1014"><span class="linenos">1014</span></a> <span class="n">_inline_inherited_window</span><span class="p">(</span><span class="n">window</span><span class="p">)</span>
|
||||
</span><span id="L-1015"><a href="#L-1015"><span class="linenos">1015</span></a> <span class="n">window_expression</span><span class="p">[</span><span class="n">window</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()]</span> <span class="o">=</span> <span class="n">window</span>
|
||||
</span><span id="L-1016"><a href="#L-1016"><span class="linenos">1016</span></a>
|
||||
</span><span id="L-1017"><a href="#L-1017"><span class="linenos">1017</span></a> <span class="k">for</span> <span class="n">window</span> <span class="ow">in</span> <span class="n">find_all_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">):</span>
|
||||
</span><span id="L-1018"><a href="#L-1018"><span class="linenos">1018</span></a> <span class="n">_inline_inherited_window</span><span class="p">(</span><span class="n">window</span><span class="p">)</span>
|
||||
</span><span id="L-1019"><a href="#L-1019"><span class="linenos">1019</span></a>
|
||||
</span><span id="L-1020"><a href="#L-1020"><span class="linenos">1020</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -2467,136 +2476,166 @@ The corresponding columns are removed from the create statement.</p>
|
|||
</div>
|
||||
<a class="headerlink" href="#eliminate_join_marks"></a>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="eliminate_join_marks-845"><a href="#eliminate_join_marks-845"><span class="linenos">845</span></a><span class="k">def</span><span class="w"> </span><span class="nf">eliminate_join_marks</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-846"><a href="#eliminate_join_marks-846"><span class="linenos">846</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="eliminate_join_marks-847"><a href="#eliminate_join_marks-847"><span class="linenos">847</span></a><span class="sd"> Remove join marks from an AST. This rule assumes that all marked columns are qualified.</span>
|
||||
</span><span id="eliminate_join_marks-848"><a href="#eliminate_join_marks-848"><span class="linenos">848</span></a><span class="sd"> If this does not hold for a query, consider running `sqlglot.optimizer.qualify` first.</span>
|
||||
</span><span id="eliminate_join_marks-846"><a href="#eliminate_join_marks-846"><span class="linenos">846</span></a><span class="w"> </span><span class="sd">"""https://docs.oracle.com/cd/B19306_01/server.102/b14200/queries006.htm#sthref3178</span>
|
||||
</span><span id="eliminate_join_marks-847"><a href="#eliminate_join_marks-847"><span class="linenos">847</span></a>
|
||||
</span><span id="eliminate_join_marks-848"><a href="#eliminate_join_marks-848"><span class="linenos">848</span></a><span class="sd"> 1. You cannot specify the (+) operator in a query block that also contains FROM clause join syntax.</span>
|
||||
</span><span id="eliminate_join_marks-849"><a href="#eliminate_join_marks-849"><span class="linenos">849</span></a>
|
||||
</span><span id="eliminate_join_marks-850"><a href="#eliminate_join_marks-850"><span class="linenos">850</span></a><span class="sd"> For example,</span>
|
||||
</span><span id="eliminate_join_marks-851"><a href="#eliminate_join_marks-851"><span class="linenos">851</span></a><span class="sd"> SELECT * FROM a, b WHERE a.id = b.id(+) -- ... is converted to</span>
|
||||
</span><span id="eliminate_join_marks-852"><a href="#eliminate_join_marks-852"><span class="linenos">852</span></a><span class="sd"> SELECT * FROM a LEFT JOIN b ON a.id = b.id -- this</span>
|
||||
</span><span id="eliminate_join_marks-850"><a href="#eliminate_join_marks-850"><span class="linenos">850</span></a><span class="sd"> 2. The (+) operator can appear only in the WHERE clause or, in the context of left-correlation (that is, when specifying the TABLE clause) in the FROM clause, and can be applied only to a column of a table or view.</span>
|
||||
</span><span id="eliminate_join_marks-851"><a href="#eliminate_join_marks-851"><span class="linenos">851</span></a>
|
||||
</span><span id="eliminate_join_marks-852"><a href="#eliminate_join_marks-852"><span class="linenos">852</span></a><span class="sd"> The (+) operator does not produce an outer join if you specify one table in the outer query and the other table in an inner query.</span>
|
||||
</span><span id="eliminate_join_marks-853"><a href="#eliminate_join_marks-853"><span class="linenos">853</span></a>
|
||||
</span><span id="eliminate_join_marks-854"><a href="#eliminate_join_marks-854"><span class="linenos">854</span></a><span class="sd"> Args:</span>
|
||||
</span><span id="eliminate_join_marks-855"><a href="#eliminate_join_marks-855"><span class="linenos">855</span></a><span class="sd"> expression: The AST to remove join marks from.</span>
|
||||
</span><span id="eliminate_join_marks-856"><a href="#eliminate_join_marks-856"><span class="linenos">856</span></a>
|
||||
</span><span id="eliminate_join_marks-857"><a href="#eliminate_join_marks-857"><span class="linenos">857</span></a><span class="sd"> Returns:</span>
|
||||
</span><span id="eliminate_join_marks-858"><a href="#eliminate_join_marks-858"><span class="linenos">858</span></a><span class="sd"> The AST with join marks removed.</span>
|
||||
</span><span id="eliminate_join_marks-859"><a href="#eliminate_join_marks-859"><span class="linenos">859</span></a><span class="sd"> """</span>
|
||||
</span><span id="eliminate_join_marks-860"><a href="#eliminate_join_marks-860"><span class="linenos">860</span></a> <span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.optimizer.scope</span><span class="w"> </span><span class="kn">import</span> <span class="n">traverse_scope</span>
|
||||
</span><span id="eliminate_join_marks-854"><a href="#eliminate_join_marks-854"><span class="linenos">854</span></a><span class="sd"> You cannot use the (+) operator to outer-join a table to itself, although self joins are valid.</span>
|
||||
</span><span id="eliminate_join_marks-855"><a href="#eliminate_join_marks-855"><span class="linenos">855</span></a>
|
||||
</span><span id="eliminate_join_marks-856"><a href="#eliminate_join_marks-856"><span class="linenos">856</span></a><span class="sd"> The (+) operator can be applied only to a column, not to an arbitrary expression. However, an arbitrary expression can contain one or more columns marked with the (+) operator.</span>
|
||||
</span><span id="eliminate_join_marks-857"><a href="#eliminate_join_marks-857"><span class="linenos">857</span></a>
|
||||
</span><span id="eliminate_join_marks-858"><a href="#eliminate_join_marks-858"><span class="linenos">858</span></a><span class="sd"> A WHERE condition containing the (+) operator cannot be combined with another condition using the OR logical operator.</span>
|
||||
</span><span id="eliminate_join_marks-859"><a href="#eliminate_join_marks-859"><span class="linenos">859</span></a>
|
||||
</span><span id="eliminate_join_marks-860"><a href="#eliminate_join_marks-860"><span class="linenos">860</span></a><span class="sd"> A WHERE condition cannot use the IN comparison condition to compare a column marked with the (+) operator with an expression.</span>
|
||||
</span><span id="eliminate_join_marks-861"><a href="#eliminate_join_marks-861"><span class="linenos">861</span></a>
|
||||
</span><span id="eliminate_join_marks-862"><a href="#eliminate_join_marks-862"><span class="linenos">862</span></a> <span class="k">for</span> <span class="n">scope</span> <span class="ow">in</span> <span class="n">traverse_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
|
||||
</span><span id="eliminate_join_marks-863"><a href="#eliminate_join_marks-863"><span class="linenos">863</span></a> <span class="n">query</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">expression</span>
|
||||
</span><span id="eliminate_join_marks-864"><a href="#eliminate_join_marks-864"><span class="linenos">864</span></a>
|
||||
</span><span id="eliminate_join_marks-865"><a href="#eliminate_join_marks-865"><span class="linenos">865</span></a> <span class="n">where</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"where"</span><span class="p">)</span>
|
||||
</span><span id="eliminate_join_marks-866"><a href="#eliminate_join_marks-866"><span class="linenos">866</span></a> <span class="n">joins</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"joins"</span><span class="p">)</span>
|
||||
</span><span id="eliminate_join_marks-867"><a href="#eliminate_join_marks-867"><span class="linenos">867</span></a>
|
||||
</span><span id="eliminate_join_marks-868"><a href="#eliminate_join_marks-868"><span class="linenos">868</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">where</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">joins</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-869"><a href="#eliminate_join_marks-869"><span class="linenos">869</span></a> <span class="k">continue</span>
|
||||
</span><span id="eliminate_join_marks-870"><a href="#eliminate_join_marks-870"><span class="linenos">870</span></a>
|
||||
</span><span id="eliminate_join_marks-871"><a href="#eliminate_join_marks-871"><span class="linenos">871</span></a> <span class="n">query_from</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"from"</span><span class="p">]</span>
|
||||
</span><span id="eliminate_join_marks-872"><a href="#eliminate_join_marks-872"><span class="linenos">872</span></a>
|
||||
</span><span id="eliminate_join_marks-873"><a href="#eliminate_join_marks-873"><span class="linenos">873</span></a> <span class="c1"># These keep track of the joins to be replaced</span>
|
||||
</span><span id="eliminate_join_marks-874"><a href="#eliminate_join_marks-874"><span class="linenos">874</span></a> <span class="n">new_joins</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
</span><span id="eliminate_join_marks-875"><a href="#eliminate_join_marks-875"><span class="linenos">875</span></a> <span class="n">old_joins</span> <span class="o">=</span> <span class="p">{</span><span class="n">join</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">join</span> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="n">joins</span><span class="p">}</span>
|
||||
</span><span id="eliminate_join_marks-862"><a href="#eliminate_join_marks-862"><span class="linenos">862</span></a><span class="sd"> A WHERE condition cannot compare any column marked with the (+) operator with a subquery.</span>
|
||||
</span><span id="eliminate_join_marks-863"><a href="#eliminate_join_marks-863"><span class="linenos">863</span></a>
|
||||
</span><span id="eliminate_join_marks-864"><a href="#eliminate_join_marks-864"><span class="linenos">864</span></a><span class="sd"> -- example with WHERE</span>
|
||||
</span><span id="eliminate_join_marks-865"><a href="#eliminate_join_marks-865"><span class="linenos">865</span></a><span class="sd"> SELECT d.department_name, sum(e.salary) as total_salary</span>
|
||||
</span><span id="eliminate_join_marks-866"><a href="#eliminate_join_marks-866"><span class="linenos">866</span></a><span class="sd"> FROM departments d, employees e</span>
|
||||
</span><span id="eliminate_join_marks-867"><a href="#eliminate_join_marks-867"><span class="linenos">867</span></a><span class="sd"> WHERE e.department_id(+) = d.department_id</span>
|
||||
</span><span id="eliminate_join_marks-868"><a href="#eliminate_join_marks-868"><span class="linenos">868</span></a><span class="sd"> group by department_name</span>
|
||||
</span><span id="eliminate_join_marks-869"><a href="#eliminate_join_marks-869"><span class="linenos">869</span></a>
|
||||
</span><span id="eliminate_join_marks-870"><a href="#eliminate_join_marks-870"><span class="linenos">870</span></a><span class="sd"> -- example of left correlation in select</span>
|
||||
</span><span id="eliminate_join_marks-871"><a href="#eliminate_join_marks-871"><span class="linenos">871</span></a><span class="sd"> SELECT d.department_name, (</span>
|
||||
</span><span id="eliminate_join_marks-872"><a href="#eliminate_join_marks-872"><span class="linenos">872</span></a><span class="sd"> SELECT SUM(e.salary)</span>
|
||||
</span><span id="eliminate_join_marks-873"><a href="#eliminate_join_marks-873"><span class="linenos">873</span></a><span class="sd"> FROM employees e</span>
|
||||
</span><span id="eliminate_join_marks-874"><a href="#eliminate_join_marks-874"><span class="linenos">874</span></a><span class="sd"> WHERE e.department_id(+) = d.department_id) AS total_salary</span>
|
||||
</span><span id="eliminate_join_marks-875"><a href="#eliminate_join_marks-875"><span class="linenos">875</span></a><span class="sd"> FROM departments d;</span>
|
||||
</span><span id="eliminate_join_marks-876"><a href="#eliminate_join_marks-876"><span class="linenos">876</span></a>
|
||||
</span><span id="eliminate_join_marks-877"><a href="#eliminate_join_marks-877"><span class="linenos">877</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">columns</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-878"><a href="#eliminate_join_marks-878"><span class="linenos">878</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">column</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"join_mark"</span><span class="p">):</span>
|
||||
</span><span id="eliminate_join_marks-879"><a href="#eliminate_join_marks-879"><span class="linenos">879</span></a> <span class="k">continue</span>
|
||||
</span><span id="eliminate_join_marks-880"><a href="#eliminate_join_marks-880"><span class="linenos">880</span></a>
|
||||
</span><span id="eliminate_join_marks-881"><a href="#eliminate_join_marks-881"><span class="linenos">881</span></a> <span class="n">predicate</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">find_ancestor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Predicate</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span>
|
||||
</span><span id="eliminate_join_marks-882"><a href="#eliminate_join_marks-882"><span class="linenos">882</span></a> <span class="k">assert</span> <span class="nb">isinstance</span><span class="p">(</span>
|
||||
</span><span id="eliminate_join_marks-883"><a href="#eliminate_join_marks-883"><span class="linenos">883</span></a> <span class="n">predicate</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Binary</span>
|
||||
</span><span id="eliminate_join_marks-884"><a href="#eliminate_join_marks-884"><span class="linenos">884</span></a> <span class="p">),</span> <span class="s2">"Columns can only be marked with (+) when involved in a binary operation"</span>
|
||||
</span><span id="eliminate_join_marks-877"><a href="#eliminate_join_marks-877"><span class="linenos">877</span></a><span class="sd"> -- example of left correlation in from</span>
|
||||
</span><span id="eliminate_join_marks-878"><a href="#eliminate_join_marks-878"><span class="linenos">878</span></a><span class="sd"> SELECT d.department_name, t.total_salary</span>
|
||||
</span><span id="eliminate_join_marks-879"><a href="#eliminate_join_marks-879"><span class="linenos">879</span></a><span class="sd"> FROM departments d, (</span>
|
||||
</span><span id="eliminate_join_marks-880"><a href="#eliminate_join_marks-880"><span class="linenos">880</span></a><span class="sd"> SELECT SUM(e.salary) AS total_salary</span>
|
||||
</span><span id="eliminate_join_marks-881"><a href="#eliminate_join_marks-881"><span class="linenos">881</span></a><span class="sd"> FROM employees e</span>
|
||||
</span><span id="eliminate_join_marks-882"><a href="#eliminate_join_marks-882"><span class="linenos">882</span></a><span class="sd"> WHERE e.department_id(+) = d.department_id</span>
|
||||
</span><span id="eliminate_join_marks-883"><a href="#eliminate_join_marks-883"><span class="linenos">883</span></a><span class="sd"> ) t</span>
|
||||
</span><span id="eliminate_join_marks-884"><a href="#eliminate_join_marks-884"><span class="linenos">884</span></a><span class="sd"> """</span>
|
||||
</span><span id="eliminate_join_marks-885"><a href="#eliminate_join_marks-885"><span class="linenos">885</span></a>
|
||||
</span><span id="eliminate_join_marks-886"><a href="#eliminate_join_marks-886"><span class="linenos">886</span></a> <span class="n">predicate_parent</span> <span class="o">=</span> <span class="n">predicate</span><span class="o">.</span><span class="n">parent</span>
|
||||
</span><span id="eliminate_join_marks-887"><a href="#eliminate_join_marks-887"><span class="linenos">887</span></a> <span class="n">join_predicate</span> <span class="o">=</span> <span class="n">predicate</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
|
||||
</span><span id="eliminate_join_marks-888"><a href="#eliminate_join_marks-888"><span class="linenos">888</span></a>
|
||||
</span><span id="eliminate_join_marks-889"><a href="#eliminate_join_marks-889"><span class="linenos">889</span></a> <span class="n">left_columns</span> <span class="o">=</span> <span class="p">[</span>
|
||||
</span><span id="eliminate_join_marks-890"><a href="#eliminate_join_marks-890"><span class="linenos">890</span></a> <span class="n">c</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">join_predicate</span><span class="o">.</span><span class="n">left</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"join_mark"</span><span class="p">)</span>
|
||||
</span><span id="eliminate_join_marks-891"><a href="#eliminate_join_marks-891"><span class="linenos">891</span></a> <span class="p">]</span>
|
||||
</span><span id="eliminate_join_marks-892"><a href="#eliminate_join_marks-892"><span class="linenos">892</span></a> <span class="n">right_columns</span> <span class="o">=</span> <span class="p">[</span>
|
||||
</span><span id="eliminate_join_marks-893"><a href="#eliminate_join_marks-893"><span class="linenos">893</span></a> <span class="n">c</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">join_predicate</span><span class="o">.</span><span class="n">right</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"join_mark"</span><span class="p">)</span>
|
||||
</span><span id="eliminate_join_marks-894"><a href="#eliminate_join_marks-894"><span class="linenos">894</span></a> <span class="p">]</span>
|
||||
</span><span id="eliminate_join_marks-895"><a href="#eliminate_join_marks-895"><span class="linenos">895</span></a>
|
||||
</span><span id="eliminate_join_marks-896"><a href="#eliminate_join_marks-896"><span class="linenos">896</span></a> <span class="k">assert</span> <span class="ow">not</span> <span class="p">(</span>
|
||||
</span><span id="eliminate_join_marks-897"><a href="#eliminate_join_marks-897"><span class="linenos">897</span></a> <span class="n">left_columns</span> <span class="ow">and</span> <span class="n">right_columns</span>
|
||||
</span><span id="eliminate_join_marks-898"><a href="#eliminate_join_marks-898"><span class="linenos">898</span></a> <span class="p">),</span> <span class="s2">"The (+) marker cannot appear in both sides of a binary predicate"</span>
|
||||
</span><span id="eliminate_join_marks-886"><a href="#eliminate_join_marks-886"><span class="linenos">886</span></a> <span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.optimizer.scope</span><span class="w"> </span><span class="kn">import</span> <span class="n">traverse_scope</span>
|
||||
</span><span id="eliminate_join_marks-887"><a href="#eliminate_join_marks-887"><span class="linenos">887</span></a> <span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.optimizer.normalize</span><span class="w"> </span><span class="kn">import</span> <span class="n">normalize</span><span class="p">,</span> <span class="n">normalized</span>
|
||||
</span><span id="eliminate_join_marks-888"><a href="#eliminate_join_marks-888"><span class="linenos">888</span></a> <span class="kn">from</span><span class="w"> </span><span class="nn">collections</span><span class="w"> </span><span class="kn">import</span> <span class="n">defaultdict</span>
|
||||
</span><span id="eliminate_join_marks-889"><a href="#eliminate_join_marks-889"><span class="linenos">889</span></a>
|
||||
</span><span id="eliminate_join_marks-890"><a href="#eliminate_join_marks-890"><span class="linenos">890</span></a> <span class="c1"># we go in reverse to check the main query for left correlation</span>
|
||||
</span><span id="eliminate_join_marks-891"><a href="#eliminate_join_marks-891"><span class="linenos">891</span></a> <span class="k">for</span> <span class="n">scope</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="n">traverse_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">)):</span>
|
||||
</span><span id="eliminate_join_marks-892"><a href="#eliminate_join_marks-892"><span class="linenos">892</span></a> <span class="n">query</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">expression</span>
|
||||
</span><span id="eliminate_join_marks-893"><a href="#eliminate_join_marks-893"><span class="linenos">893</span></a>
|
||||
</span><span id="eliminate_join_marks-894"><a href="#eliminate_join_marks-894"><span class="linenos">894</span></a> <span class="n">where</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"where"</span><span class="p">)</span>
|
||||
</span><span id="eliminate_join_marks-895"><a href="#eliminate_join_marks-895"><span class="linenos">895</span></a> <span class="n">joins</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"joins"</span><span class="p">,</span> <span class="p">[])</span>
|
||||
</span><span id="eliminate_join_marks-896"><a href="#eliminate_join_marks-896"><span class="linenos">896</span></a>
|
||||
</span><span id="eliminate_join_marks-897"><a href="#eliminate_join_marks-897"><span class="linenos">897</span></a> <span class="c1"># knockout: we do not support left correlation (see point 2)</span>
|
||||
</span><span id="eliminate_join_marks-898"><a href="#eliminate_join_marks-898"><span class="linenos">898</span></a> <span class="k">assert</span> <span class="ow">not</span> <span class="n">scope</span><span class="o">.</span><span class="n">is_correlated_subquery</span><span class="p">,</span> <span class="s2">"Correlated queries are not supported"</span>
|
||||
</span><span id="eliminate_join_marks-899"><a href="#eliminate_join_marks-899"><span class="linenos">899</span></a>
|
||||
</span><span id="eliminate_join_marks-900"><a href="#eliminate_join_marks-900"><span class="linenos">900</span></a> <span class="n">marked_column_tables</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
|
||||
</span><span id="eliminate_join_marks-901"><a href="#eliminate_join_marks-901"><span class="linenos">901</span></a> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">left_columns</span> <span class="ow">or</span> <span class="n">right_columns</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-902"><a href="#eliminate_join_marks-902"><span class="linenos">902</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">col</span><span class="o">.</span><span class="n">table</span>
|
||||
</span><span id="eliminate_join_marks-903"><a href="#eliminate_join_marks-903"><span class="linenos">903</span></a> <span class="k">assert</span> <span class="n">table</span><span class="p">,</span> <span class="sa">f</span><span class="s2">"Column </span><span class="si">{</span><span class="n">col</span><span class="si">}</span><span class="s2"> needs to be qualified with a table"</span>
|
||||
</span><span id="eliminate_join_marks-904"><a href="#eliminate_join_marks-904"><span class="linenos">904</span></a>
|
||||
</span><span id="eliminate_join_marks-905"><a href="#eliminate_join_marks-905"><span class="linenos">905</span></a> <span class="n">col</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"join_mark"</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
|
||||
</span><span id="eliminate_join_marks-906"><a href="#eliminate_join_marks-906"><span class="linenos">906</span></a> <span class="n">marked_column_tables</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
|
||||
</span><span id="eliminate_join_marks-900"><a href="#eliminate_join_marks-900"><span class="linenos">900</span></a> <span class="c1"># nothing to do - we check it here after knockout above</span>
|
||||
</span><span id="eliminate_join_marks-901"><a href="#eliminate_join_marks-901"><span class="linenos">901</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">where</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">any</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"join_mark"</span><span class="p">)</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">where</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)):</span>
|
||||
</span><span id="eliminate_join_marks-902"><a href="#eliminate_join_marks-902"><span class="linenos">902</span></a> <span class="k">continue</span>
|
||||
</span><span id="eliminate_join_marks-903"><a href="#eliminate_join_marks-903"><span class="linenos">903</span></a>
|
||||
</span><span id="eliminate_join_marks-904"><a href="#eliminate_join_marks-904"><span class="linenos">904</span></a> <span class="c1"># make sure we have AND of ORs to have clear join terms</span>
|
||||
</span><span id="eliminate_join_marks-905"><a href="#eliminate_join_marks-905"><span class="linenos">905</span></a> <span class="n">where</span> <span class="o">=</span> <span class="n">normalize</span><span class="p">(</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-906"><a href="#eliminate_join_marks-906"><span class="linenos">906</span></a> <span class="k">assert</span> <span class="n">normalized</span><span class="p">(</span><span class="n">where</span><span class="p">),</span> <span class="s2">"Cannot normalize JOIN predicates"</span>
|
||||
</span><span id="eliminate_join_marks-907"><a href="#eliminate_join_marks-907"><span class="linenos">907</span></a>
|
||||
</span><span id="eliminate_join_marks-908"><a href="#eliminate_join_marks-908"><span class="linenos">908</span></a> <span class="k">assert</span> <span class="p">(</span>
|
||||
</span><span id="eliminate_join_marks-909"><a href="#eliminate_join_marks-909"><span class="linenos">909</span></a> <span class="nb">len</span><span class="p">(</span><span class="n">marked_column_tables</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span>
|
||||
</span><span id="eliminate_join_marks-910"><a href="#eliminate_join_marks-910"><span class="linenos">910</span></a> <span class="p">),</span> <span class="s2">"Columns of only a single table can be marked with (+) in a given binary predicate"</span>
|
||||
</span><span id="eliminate_join_marks-908"><a href="#eliminate_join_marks-908"><span class="linenos">908</span></a> <span class="n">joins_ons</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span> <span class="c1"># dict of {name: list of join AND conditions}</span>
|
||||
</span><span id="eliminate_join_marks-909"><a href="#eliminate_join_marks-909"><span class="linenos">909</span></a> <span class="k">for</span> <span class="n">cond</span> <span class="ow">in</span> <span class="p">[</span><span class="n">where</span><span class="p">]</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">where</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span><span class="p">)</span> <span class="k">else</span> <span class="n">where</span><span class="o">.</span><span class="n">flatten</span><span class="p">():</span>
|
||||
</span><span id="eliminate_join_marks-910"><a href="#eliminate_join_marks-910"><span class="linenos">910</span></a> <span class="n">join_cols</span> <span class="o">=</span> <span class="p">[</span><span class="n">col</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">cond</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="k">if</span> <span class="n">col</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"join_mark"</span><span class="p">)]</span>
|
||||
</span><span id="eliminate_join_marks-911"><a href="#eliminate_join_marks-911"><span class="linenos">911</span></a>
|
||||
</span><span id="eliminate_join_marks-912"><a href="#eliminate_join_marks-912"><span class="linenos">912</span></a> <span class="c1"># Add predicate if join already copied, or add join if it is new</span>
|
||||
</span><span id="eliminate_join_marks-913"><a href="#eliminate_join_marks-913"><span class="linenos">913</span></a> <span class="n">join_this</span> <span class="o">=</span> <span class="n">old_joins</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">,</span> <span class="n">query_from</span><span class="p">)</span><span class="o">.</span><span class="n">this</span>
|
||||
</span><span id="eliminate_join_marks-914"><a href="#eliminate_join_marks-914"><span class="linenos">914</span></a> <span class="n">existing_join</span> <span class="o">=</span> <span class="n">new_joins</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">join_this</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">)</span>
|
||||
</span><span id="eliminate_join_marks-915"><a href="#eliminate_join_marks-915"><span class="linenos">915</span></a> <span class="k">if</span> <span class="n">existing_join</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-916"><a href="#eliminate_join_marks-916"><span class="linenos">916</span></a> <span class="n">existing_join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"on"</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span><span class="n">existing_join</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"on"</span><span class="p">],</span> <span class="n">join_predicate</span><span class="p">))</span>
|
||||
</span><span id="eliminate_join_marks-917"><a href="#eliminate_join_marks-917"><span class="linenos">917</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-918"><a href="#eliminate_join_marks-918"><span class="linenos">918</span></a> <span class="n">new_joins</span><span class="p">[</span><span class="n">join_this</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">(</span>
|
||||
</span><span id="eliminate_join_marks-919"><a href="#eliminate_join_marks-919"><span class="linenos">919</span></a> <span class="n">this</span><span class="o">=</span><span class="n">join_this</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">on</span><span class="o">=</span><span class="n">join_predicate</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">kind</span><span class="o">=</span><span class="s2">"LEFT"</span>
|
||||
</span><span id="eliminate_join_marks-920"><a href="#eliminate_join_marks-920"><span class="linenos">920</span></a> <span class="p">)</span>
|
||||
</span><span id="eliminate_join_marks-921"><a href="#eliminate_join_marks-921"><span class="linenos">921</span></a>
|
||||
</span><span id="eliminate_join_marks-922"><a href="#eliminate_join_marks-922"><span class="linenos">922</span></a> <span class="c1"># If the parent of the target predicate is a binary node, then it now has only one child</span>
|
||||
</span><span id="eliminate_join_marks-923"><a href="#eliminate_join_marks-923"><span class="linenos">923</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">predicate_parent</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="eliminate_join_marks-924"><a href="#eliminate_join_marks-924"><span class="linenos">924</span></a> <span class="k">if</span> <span class="n">predicate_parent</span><span class="o">.</span><span class="n">left</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-925"><a href="#eliminate_join_marks-925"><span class="linenos">925</span></a> <span class="n">predicate_parent</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">predicate_parent</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
|
||||
</span><span id="eliminate_join_marks-926"><a href="#eliminate_join_marks-926"><span class="linenos">926</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-927"><a href="#eliminate_join_marks-927"><span class="linenos">927</span></a> <span class="n">predicate_parent</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">predicate_parent</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
|
||||
</span><span id="eliminate_join_marks-912"><a href="#eliminate_join_marks-912"><span class="linenos">912</span></a> <span class="n">left_join_table</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">table</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">join_cols</span><span class="p">)</span>
|
||||
</span><span id="eliminate_join_marks-913"><a href="#eliminate_join_marks-913"><span class="linenos">913</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">left_join_table</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-914"><a href="#eliminate_join_marks-914"><span class="linenos">914</span></a> <span class="k">continue</span>
|
||||
</span><span id="eliminate_join_marks-915"><a href="#eliminate_join_marks-915"><span class="linenos">915</span></a>
|
||||
</span><span id="eliminate_join_marks-916"><a href="#eliminate_join_marks-916"><span class="linenos">916</span></a> <span class="k">assert</span> <span class="ow">not</span> <span class="p">(</span>
|
||||
</span><span id="eliminate_join_marks-917"><a href="#eliminate_join_marks-917"><span class="linenos">917</span></a> <span class="nb">len</span><span class="p">(</span><span class="n">left_join_table</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span>
|
||||
</span><span id="eliminate_join_marks-918"><a href="#eliminate_join_marks-918"><span class="linenos">918</span></a> <span class="p">),</span> <span class="s2">"Cannot combine JOIN predicates from different tables"</span>
|
||||
</span><span id="eliminate_join_marks-919"><a href="#eliminate_join_marks-919"><span class="linenos">919</span></a>
|
||||
</span><span id="eliminate_join_marks-920"><a href="#eliminate_join_marks-920"><span class="linenos">920</span></a> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">join_cols</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-921"><a href="#eliminate_join_marks-921"><span class="linenos">921</span></a> <span class="n">col</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"join_mark"</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
|
||||
</span><span id="eliminate_join_marks-922"><a href="#eliminate_join_marks-922"><span class="linenos">922</span></a>
|
||||
</span><span id="eliminate_join_marks-923"><a href="#eliminate_join_marks-923"><span class="linenos">923</span></a> <span class="n">joins_ons</span><span class="p">[</span><span class="n">left_join_table</span><span class="o">.</span><span class="n">pop</span><span class="p">()]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cond</span><span class="p">)</span>
|
||||
</span><span id="eliminate_join_marks-924"><a href="#eliminate_join_marks-924"><span class="linenos">924</span></a>
|
||||
</span><span id="eliminate_join_marks-925"><a href="#eliminate_join_marks-925"><span class="linenos">925</span></a> <span class="n">old_joins</span> <span class="o">=</span> <span class="p">{</span><span class="n">join</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">join</span> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="n">joins</span><span class="p">}</span>
|
||||
</span><span id="eliminate_join_marks-926"><a href="#eliminate_join_marks-926"><span class="linenos">926</span></a> <span class="n">new_joins</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
</span><span id="eliminate_join_marks-927"><a href="#eliminate_join_marks-927"><span class="linenos">927</span></a> <span class="n">query_from</span> <span class="o">=</span> <span class="n">query</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"from"</span><span class="p">]</span>
|
||||
</span><span id="eliminate_join_marks-928"><a href="#eliminate_join_marks-928"><span class="linenos">928</span></a>
|
||||
</span><span id="eliminate_join_marks-929"><a href="#eliminate_join_marks-929"><span class="linenos">929</span></a> <span class="n">only_old_join_sources</span> <span class="o">=</span> <span class="n">old_joins</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> <span class="o">-</span> <span class="n">new_joins</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span>
|
||||
</span><span id="eliminate_join_marks-930"><a href="#eliminate_join_marks-930"><span class="linenos">930</span></a>
|
||||
</span><span id="eliminate_join_marks-931"><a href="#eliminate_join_marks-931"><span class="linenos">931</span></a> <span class="k">if</span> <span class="n">query_from</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">in</span> <span class="n">new_joins</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-932"><a href="#eliminate_join_marks-932"><span class="linenos">932</span></a> <span class="k">assert</span> <span class="p">(</span>
|
||||
</span><span id="eliminate_join_marks-933"><a href="#eliminate_join_marks-933"><span class="linenos">933</span></a> <span class="nb">len</span><span class="p">(</span><span class="n">only_old_join_sources</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">1</span>
|
||||
</span><span id="eliminate_join_marks-934"><a href="#eliminate_join_marks-934"><span class="linenos">934</span></a> <span class="p">),</span> <span class="s2">"Cannot determine which table to use in the new FROM clause"</span>
|
||||
</span><span id="eliminate_join_marks-935"><a href="#eliminate_join_marks-935"><span class="linenos">935</span></a>
|
||||
</span><span id="eliminate_join_marks-936"><a href="#eliminate_join_marks-936"><span class="linenos">936</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_join_sources</span><span class="p">)[</span><span class="mi">0</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 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="o">.</span><span class="n">pop</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-938"><a href="#eliminate_join_marks-938"><span class="linenos">938</span></a> <span class="n">only_old_join_sources</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">new_from_name</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="n">new_joins</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">only_old_join_expressions</span> <span class="o">=</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="k">for</span> <span class="n">old_join_source</span> <span class="ow">in</span> <span class="n">only_old_join_sources</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 class="n">old_join_expression</span> <span class="o">=</span> <span class="n">old_joins</span><span class="p">[</span><span class="n">old_join_source</span><span class="p">]</span>
|
||||
</span><span id="eliminate_join_marks-944"><a href="#eliminate_join_marks-944"><span class="linenos">944</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">old_join_expression</span><span class="o">.</span><span class="n">kind</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-945"><a href="#eliminate_join_marks-945"><span class="linenos">945</span></a> <span class="n">old_join_expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"kind"</span><span class="p">,</span> <span class="s2">"CROSS"</span><span class="p">)</span>
|
||||
</span><span id="eliminate_join_marks-946"><a href="#eliminate_join_marks-946"><span class="linenos">946</span></a>
|
||||
</span><span id="eliminate_join_marks-947"><a href="#eliminate_join_marks-947"><span class="linenos">947</span></a> <span class="n">only_old_join_expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">old_join_expression</span><span class="p">)</span>
|
||||
</span><span id="eliminate_join_marks-948"><a href="#eliminate_join_marks-948"><span class="linenos">948</span></a>
|
||||
</span><span id="eliminate_join_marks-949"><a href="#eliminate_join_marks-949"><span class="linenos">949</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 class="o">+</span> <span class="n">only_old_join_expressions</span><span class="p">)</span>
|
||||
</span><span id="eliminate_join_marks-950"><a href="#eliminate_join_marks-950"><span class="linenos">950</span></a>
|
||||
</span><span id="eliminate_join_marks-951"><a href="#eliminate_join_marks-951"><span class="linenos">951</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-952"><a href="#eliminate_join_marks-952"><span class="linenos">952</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-953"><a href="#eliminate_join_marks-953"><span class="linenos">953</span></a>
|
||||
</span><span id="eliminate_join_marks-954"><a href="#eliminate_join_marks-954"><span class="linenos">954</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span><span id="eliminate_join_marks-929"><a href="#eliminate_join_marks-929"><span class="linenos">929</span></a> <span class="k">for</span> <span class="n">table</span><span class="p">,</span> <span class="n">predicates</span> <span class="ow">in</span> <span class="n">joins_ons</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
||||
</span><span id="eliminate_join_marks-930"><a href="#eliminate_join_marks-930"><span class="linenos">930</span></a> <span class="n">join_what</span> <span class="o">=</span> <span class="n">old_joins</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">query_from</span><span class="p">)</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
||||
</span><span id="eliminate_join_marks-931"><a href="#eliminate_join_marks-931"><span class="linenos">931</span></a> <span class="n">new_joins</span><span class="p">[</span><span class="n">join_what</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">(</span>
|
||||
</span><span id="eliminate_join_marks-932"><a href="#eliminate_join_marks-932"><span class="linenos">932</span></a> <span class="n">this</span><span class="o">=</span><span class="n">join_what</span><span class="p">,</span> <span class="n">on</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span><span class="o">*</span><span class="n">predicates</span><span class="p">),</span> <span class="n">kind</span><span class="o">=</span><span class="s2">"LEFT"</span>
|
||||
</span><span id="eliminate_join_marks-933"><a href="#eliminate_join_marks-933"><span class="linenos">933</span></a> <span class="p">)</span>
|
||||
</span><span id="eliminate_join_marks-934"><a href="#eliminate_join_marks-934"><span class="linenos">934</span></a>
|
||||
</span><span id="eliminate_join_marks-935"><a href="#eliminate_join_marks-935"><span class="linenos">935</span></a> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">predicates</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="k">while</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Paren</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 class="n">p</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
|
||||
</span><span id="eliminate_join_marks-938"><a href="#eliminate_join_marks-938"><span class="linenos">938</span></a>
|
||||
</span><span id="eliminate_join_marks-939"><a href="#eliminate_join_marks-939"><span class="linenos">939</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">parent</span>
|
||||
</span><span id="eliminate_join_marks-940"><a href="#eliminate_join_marks-940"><span class="linenos">940</span></a> <span class="n">p</span><span class="o">.</span><span class="n">pop</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="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</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="eliminate_join_marks-942"><a href="#eliminate_join_marks-942"><span class="linenos">942</span></a> <span class="n">parent</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">parent</span><span class="o">.</span><span class="n">right</span> <span class="k">if</span> <span class="n">parent</span><span class="o">.</span><span class="n">left</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">parent</span><span class="o">.</span><span class="n">left</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 class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">):</span>
|
||||
</span><span id="eliminate_join_marks-944"><a href="#eliminate_join_marks-944"><span class="linenos">944</span></a> <span class="n">parent</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
|
||||
</span><span id="eliminate_join_marks-945"><a href="#eliminate_join_marks-945"><span class="linenos">945</span></a>
|
||||
</span><span id="eliminate_join_marks-946"><a href="#eliminate_join_marks-946"><span class="linenos">946</span></a> <span class="k">if</span> <span class="n">query_from</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">in</span> <span class="n">new_joins</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-947"><a href="#eliminate_join_marks-947"><span class="linenos">947</span></a> <span class="n">only_old_joins</span> <span class="o">=</span> <span class="n">old_joins</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> <span class="o">-</span> <span class="n">new_joins</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span>
|
||||
</span><span id="eliminate_join_marks-948"><a href="#eliminate_join_marks-948"><span class="linenos">948</span></a> <span class="k">assert</span> <span class="p">(</span>
|
||||
</span><span id="eliminate_join_marks-949"><a href="#eliminate_join_marks-949"><span class="linenos">949</span></a> <span class="nb">len</span><span class="p">(</span><span class="n">only_old_joins</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">1</span>
|
||||
</span><span id="eliminate_join_marks-950"><a href="#eliminate_join_marks-950"><span class="linenos">950</span></a> <span class="p">),</span> <span class="s2">"Cannot determine which table to use in the new FROM clause"</span>
|
||||
</span><span id="eliminate_join_marks-951"><a href="#eliminate_join_marks-951"><span class="linenos">951</span></a>
|
||||
</span><span id="eliminate_join_marks-952"><a href="#eliminate_join_marks-952"><span class="linenos">952</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-953"><a href="#eliminate_join_marks-953"><span class="linenos">953</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-954"><a href="#eliminate_join_marks-954"><span class="linenos">954</span></a>
|
||||
</span><span id="eliminate_join_marks-955"><a href="#eliminate_join_marks-955"><span class="linenos">955</span></a> <span class="k">if</span> <span class="n">new_joins</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-956"><a href="#eliminate_join_marks-956"><span class="linenos">956</span></a> <span class="k">for</span> <span class="n">n</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">old_joins</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> <span class="c1"># preserve any other joins</span>
|
||||
</span><span id="eliminate_join_marks-957"><a href="#eliminate_join_marks-957"><span class="linenos">957</span></a> <span class="k">if</span> <span class="n">n</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">new_joins</span> <span class="ow">and</span> <span class="n">n</span> <span class="o">!=</span> <span class="n">query</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"from"</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-958"><a href="#eliminate_join_marks-958"><span class="linenos">958</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">j</span><span class="o">.</span><span class="n">kind</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-959"><a href="#eliminate_join_marks-959"><span class="linenos">959</span></a> <span class="n">j</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"kind"</span><span class="p">,</span> <span class="s2">"CROSS"</span><span class="p">)</span>
|
||||
</span><span id="eliminate_join_marks-960"><a href="#eliminate_join_marks-960"><span class="linenos">960</span></a> <span class="n">new_joins</span><span class="p">[</span><span class="n">n</span><span class="p">]</span> <span class="o">=</span> <span class="n">j</span>
|
||||
</span><span id="eliminate_join_marks-961"><a href="#eliminate_join_marks-961"><span class="linenos">961</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-962"><a href="#eliminate_join_marks-962"><span class="linenos">962</span></a>
|
||||
</span><span id="eliminate_join_marks-963"><a href="#eliminate_join_marks-963"><span class="linenos">963</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
<div class="docstring"><p>Remove join marks from an AST. This rule assumes that all marked columns are qualified.
|
||||
If this does not hold for a query, consider running <code><a href="optimizer/qualify.html">sqlglot.optimizer.qualify</a></code> first.</p>
|
||||
<div class="docstring"><p><a href="https://docs.oracle.com/cd/B19306_01/server.102/b14200/queries006.htm#sthref3178">https://docs.oracle.com/cd/B19306_01/server.102/b14200/queries006.htm#sthref3178</a></p>
|
||||
|
||||
<p>For example,
|
||||
SELECT * FROM a, b WHERE a.id = b.id(+) -- ... is converted to
|
||||
SELECT * FROM a LEFT JOIN b ON a.id = b.id -- this</p>
|
||||
<ol>
|
||||
<li><p>You cannot specify the (+) operator in a query block that also contains FROM clause join syntax.</p></li>
|
||||
<li><p>The (+) operator can appear only in the WHERE clause or, in the context of left-correlation (that is, when specifying the TABLE clause) in the FROM clause, and can be applied only to a column of a table or view.</p></li>
|
||||
</ol>
|
||||
|
||||
<h6 id="arguments">Arguments:</h6>
|
||||
<p>The (+) operator does not produce an outer join if you specify one table in the outer query and the other table in an inner query.</p>
|
||||
|
||||
<ul>
|
||||
<li><strong>expression:</strong> The AST to remove join marks from.</li>
|
||||
</ul>
|
||||
<p>You cannot use the (+) operator to outer-join a table to itself, although self joins are valid.</p>
|
||||
|
||||
<h6 id="returns">Returns:</h6>
|
||||
<p>The (+) operator can be applied only to a column, not to an arbitrary expression. However, an arbitrary expression can contain one or more columns marked with the (+) operator.</p>
|
||||
|
||||
<blockquote>
|
||||
<p>The AST with join marks removed.</p>
|
||||
</blockquote>
|
||||
<p>A WHERE condition containing the (+) operator cannot be combined with another condition using the OR logical operator.</p>
|
||||
|
||||
<p>A WHERE condition cannot use the IN comparison condition to compare a column marked with the (+) operator with an expression.</p>
|
||||
|
||||
<p>A WHERE condition cannot compare any column marked with the (+) operator with a subquery.</p>
|
||||
|
||||
<p>-- example with WHERE
|
||||
SELECT d.department_name, sum(e.salary) as total_salary
|
||||
FROM departments d, employees e
|
||||
WHERE e.department_id(+) = d.department_id
|
||||
group by department_name</p>
|
||||
|
||||
<p>-- example of left correlation in select
|
||||
SELECT d.department_name, (
|
||||
SELECT SUM(e.salary)
|
||||
FROM employees e
|
||||
WHERE e.department_id(+) = d.department_id) AS total_salary
|
||||
FROM departments d;</p>
|
||||
|
||||
<p>-- example of left correlation in from
|
||||
SELECT d.department_name, t.total_salary
|
||||
FROM departments d, (
|
||||
SELECT SUM(e.salary) AS total_salary
|
||||
FROM employees e
|
||||
WHERE e.department_id(+) = d.department_id
|
||||
) t</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
@ -2612,31 +2651,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-957"><a href="#any_to_exists-957"><span class="linenos">957</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-958"><a href="#any_to_exists-958"><span class="linenos">958</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="any_to_exists-959"><a href="#any_to_exists-959"><span class="linenos">959</span></a><span class="sd"> Transform ANY operator to Spark's EXISTS</span>
|
||||
</span><span id="any_to_exists-960"><a href="#any_to_exists-960"><span class="linenos">960</span></a>
|
||||
</span><span id="any_to_exists-961"><a href="#any_to_exists-961"><span class="linenos">961</span></a><span class="sd"> For example,</span>
|
||||
</span><span id="any_to_exists-962"><a href="#any_to_exists-962"><span class="linenos">962</span></a><span class="sd"> - Postgres: SELECT * FROM tbl WHERE 5 > ANY(tbl.col)</span>
|
||||
</span><span id="any_to_exists-963"><a href="#any_to_exists-963"><span class="linenos">963</span></a><span class="sd"> - Spark: SELECT * FROM tbl WHERE EXISTS(tbl.col, x -> x < 5)</span>
|
||||
</span><span id="any_to_exists-964"><a href="#any_to_exists-964"><span class="linenos">964</span></a>
|
||||
</span><span id="any_to_exists-965"><a href="#any_to_exists-965"><span class="linenos">965</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-966"><a href="#any_to_exists-966"><span class="linenos">966</span></a><span class="sd"> transformation</span>
|
||||
</span><span id="any_to_exists-967"><a href="#any_to_exists-967"><span class="linenos">967</span></a><span class="sd"> """</span>
|
||||
</span><span id="any_to_exists-968"><a href="#any_to_exists-968"><span class="linenos">968</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-969"><a href="#any_to_exists-969"><span class="linenos">969</span></a> <span class="k">for</span> <span class="n">any_expr</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-970"><a href="#any_to_exists-970"><span class="linenos">970</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">any_expr</span><span class="o">.</span><span class="n">this</span>
|
||||
</span><span id="any_to_exists-971"><a href="#any_to_exists-971"><span class="linenos">971</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-972"><a href="#any_to_exists-972"><span class="linenos">972</span></a> <span class="k">continue</span>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="any_to_exists-966"><a href="#any_to_exists-966"><span class="linenos">966</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-967"><a href="#any_to_exists-967"><span class="linenos">967</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="any_to_exists-968"><a href="#any_to_exists-968"><span class="linenos">968</span></a><span class="sd"> Transform ANY operator to Spark's EXISTS</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="sd"> For example,</span>
|
||||
</span><span id="any_to_exists-971"><a href="#any_to_exists-971"><span class="linenos">971</span></a><span class="sd"> - Postgres: SELECT * FROM tbl WHERE 5 > ANY(tbl.col)</span>
|
||||
</span><span id="any_to_exists-972"><a href="#any_to_exists-972"><span class="linenos">972</span></a><span class="sd"> - Spark: SELECT * FROM tbl WHERE EXISTS(tbl.col, x -> x < 5)</span>
|
||||
</span><span id="any_to_exists-973"><a href="#any_to_exists-973"><span class="linenos">973</span></a>
|
||||
</span><span id="any_to_exists-974"><a href="#any_to_exists-974"><span class="linenos">974</span></a> <span class="n">binop</span> <span class="o">=</span> <span class="n">any_expr</span><span class="o">.</span><span class="n">parent</span>
|
||||
</span><span id="any_to_exists-975"><a href="#any_to_exists-975"><span class="linenos">975</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-976"><a href="#any_to_exists-976"><span class="linenos">976</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-977"><a href="#any_to_exists-977"><span class="linenos">977</span></a> <span class="n">any_expr</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-978"><a href="#any_to_exists-978"><span class="linenos">978</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-979"><a href="#any_to_exists-979"><span class="linenos">979</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-980"><a href="#any_to_exists-980"><span class="linenos">980</span></a>
|
||||
</span><span id="any_to_exists-981"><a href="#any_to_exists-981"><span class="linenos">981</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span><span id="any_to_exists-974"><a href="#any_to_exists-974"><span class="linenos">974</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-975"><a href="#any_to_exists-975"><span class="linenos">975</span></a><span class="sd"> transformation</span>
|
||||
</span><span id="any_to_exists-976"><a href="#any_to_exists-976"><span class="linenos">976</span></a><span class="sd"> """</span>
|
||||
</span><span id="any_to_exists-977"><a href="#any_to_exists-977"><span class="linenos">977</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-978"><a href="#any_to_exists-978"><span class="linenos">978</span></a> <span class="k">for</span> <span class="n">any_expr</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-979"><a href="#any_to_exists-979"><span class="linenos">979</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">any_expr</span><span class="o">.</span><span class="n">this</span>
|
||||
</span><span id="any_to_exists-980"><a href="#any_to_exists-980"><span class="linenos">980</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-981"><a href="#any_to_exists-981"><span class="linenos">981</span></a> <span class="k">continue</span>
|
||||
</span><span id="any_to_exists-982"><a href="#any_to_exists-982"><span class="linenos">982</span></a>
|
||||
</span><span id="any_to_exists-983"><a href="#any_to_exists-983"><span class="linenos">983</span></a> <span class="n">binop</span> <span class="o">=</span> <span class="n">any_expr</span><span class="o">.</span><span class="n">parent</span>
|
||||
</span><span id="any_to_exists-984"><a href="#any_to_exists-984"><span class="linenos">984</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-985"><a href="#any_to_exists-985"><span class="linenos">985</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-986"><a href="#any_to_exists-986"><span class="linenos">986</span></a> <span class="n">any_expr</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-987"><a href="#any_to_exists-987"><span class="linenos">987</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-988"><a href="#any_to_exists-988"><span class="linenos">988</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-989"><a href="#any_to_exists-989"><span class="linenos">989</span></a>
|
||||
</span><span id="any_to_exists-990"><a href="#any_to_exists-990"><span class="linenos">990</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -2663,35 +2702,35 @@ transformation</p>
|
|||
|
||||
</div>
|
||||
<a class="headerlink" href="#eliminate_window_clause"></a>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="eliminate_window_clause-984"><a href="#eliminate_window_clause-984"><span class="linenos"> 984</span></a><span class="k">def</span><span class="w"> </span><span class="nf">eliminate_window_clause</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
|
||||
</span><span id="eliminate_window_clause-985"><a href="#eliminate_window_clause-985"><span class="linenos"> 985</span></a><span class="w"> </span><span class="sd">"""Eliminates the `WINDOW` query clause by inling each named window."""</span>
|
||||
</span><span id="eliminate_window_clause-986"><a href="#eliminate_window_clause-986"><span class="linenos"> 986</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 class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"windows"</span><span class="p">):</span>
|
||||
</span><span id="eliminate_window_clause-987"><a href="#eliminate_window_clause-987"><span class="linenos"> 987</span></a> <span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.optimizer.scope</span><span class="w"> </span><span class="kn">import</span> <span class="n">find_all_in_scope</span>
|
||||
</span><span id="eliminate_window_clause-988"><a href="#eliminate_window_clause-988"><span class="linenos"> 988</span></a>
|
||||
</span><span id="eliminate_window_clause-989"><a href="#eliminate_window_clause-989"><span class="linenos"> 989</span></a> <span class="n">windows</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"windows"</span><span class="p">]</span>
|
||||
</span><span id="eliminate_window_clause-990"><a href="#eliminate_window_clause-990"><span class="linenos"> 990</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"windows"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
</span><span id="eliminate_window_clause-991"><a href="#eliminate_window_clause-991"><span class="linenos"> 991</span></a>
|
||||
</span><span id="eliminate_window_clause-992"><a href="#eliminate_window_clause-992"><span class="linenos"> 992</span></a> <span class="n">window_expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
</span><span id="eliminate_window_clause-993"><a href="#eliminate_window_clause-993"><span class="linenos"> 993</span></a>
|
||||
</span><span id="eliminate_window_clause-994"><a href="#eliminate_window_clause-994"><span class="linenos"> 994</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_inline_inherited_window</span><span class="p">(</span><span class="n">window</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||
</span><span id="eliminate_window_clause-995"><a href="#eliminate_window_clause-995"><span class="linenos"> 995</span></a> <span class="n">inherited_window</span> <span class="o">=</span> <span class="n">window_expression</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">window</span><span class="o">.</span><span class="n">alias</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
|
||||
</span><span id="eliminate_window_clause-996"><a href="#eliminate_window_clause-996"><span class="linenos"> 996</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">inherited_window</span><span class="p">:</span>
|
||||
</span><span id="eliminate_window_clause-997"><a href="#eliminate_window_clause-997"><span class="linenos"> 997</span></a> <span class="k">return</span>
|
||||
</span><span id="eliminate_window_clause-998"><a href="#eliminate_window_clause-998"><span class="linenos"> 998</span></a>
|
||||
</span><span id="eliminate_window_clause-999"><a href="#eliminate_window_clause-999"><span class="linenos"> 999</span></a> <span class="n">window</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"alias"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
</span><span id="eliminate_window_clause-1000"><a href="#eliminate_window_clause-1000"><span class="linenos">1000</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"partition_by"</span><span class="p">,</span> <span class="s2">"order"</span><span class="p">,</span> <span class="s2">"spec"</span><span class="p">):</span>
|
||||
</span><span id="eliminate_window_clause-1001"><a href="#eliminate_window_clause-1001"><span class="linenos">1001</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">inherited_window</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
|
||||
</span><span id="eliminate_window_clause-1002"><a href="#eliminate_window_clause-1002"><span class="linenos">1002</span></a> <span class="k">if</span> <span class="n">arg</span><span class="p">:</span>
|
||||
</span><span id="eliminate_window_clause-1003"><a href="#eliminate_window_clause-1003"><span class="linenos">1003</span></a> <span class="n">window</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">arg</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
|
||||
</span><span id="eliminate_window_clause-1004"><a href="#eliminate_window_clause-1004"><span class="linenos">1004</span></a>
|
||||
</span><span id="eliminate_window_clause-1005"><a href="#eliminate_window_clause-1005"><span class="linenos">1005</span></a> <span class="k">for</span> <span class="n">window</span> <span class="ow">in</span> <span class="n">windows</span><span class="p">:</span>
|
||||
</span><span id="eliminate_window_clause-1006"><a href="#eliminate_window_clause-1006"><span class="linenos">1006</span></a> <span class="n">_inline_inherited_window</span><span class="p">(</span><span class="n">window</span><span class="p">)</span>
|
||||
</span><span id="eliminate_window_clause-1007"><a href="#eliminate_window_clause-1007"><span class="linenos">1007</span></a> <span class="n">window_expression</span><span class="p">[</span><span class="n">window</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()]</span> <span class="o">=</span> <span class="n">window</span>
|
||||
</span><span id="eliminate_window_clause-1008"><a href="#eliminate_window_clause-1008"><span class="linenos">1008</span></a>
|
||||
</span><span id="eliminate_window_clause-1009"><a href="#eliminate_window_clause-1009"><span class="linenos">1009</span></a> <span class="k">for</span> <span class="n">window</span> <span class="ow">in</span> <span class="n">find_all_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">):</span>
|
||||
</span><span id="eliminate_window_clause-1010"><a href="#eliminate_window_clause-1010"><span class="linenos">1010</span></a> <span class="n">_inline_inherited_window</span><span class="p">(</span><span class="n">window</span><span class="p">)</span>
|
||||
</span><span id="eliminate_window_clause-1011"><a href="#eliminate_window_clause-1011"><span class="linenos">1011</span></a>
|
||||
</span><span id="eliminate_window_clause-1012"><a href="#eliminate_window_clause-1012"><span class="linenos">1012</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="eliminate_window_clause-993"><a href="#eliminate_window_clause-993"><span class="linenos"> 993</span></a><span class="k">def</span><span class="w"> </span><span class="nf">eliminate_window_clause</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
|
||||
</span><span id="eliminate_window_clause-994"><a href="#eliminate_window_clause-994"><span class="linenos"> 994</span></a><span class="w"> </span><span class="sd">"""Eliminates the `WINDOW` query clause by inling each named window."""</span>
|
||||
</span><span id="eliminate_window_clause-995"><a href="#eliminate_window_clause-995"><span class="linenos"> 995</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 class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"windows"</span><span class="p">):</span>
|
||||
</span><span id="eliminate_window_clause-996"><a href="#eliminate_window_clause-996"><span class="linenos"> 996</span></a> <span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.optimizer.scope</span><span class="w"> </span><span class="kn">import</span> <span class="n">find_all_in_scope</span>
|
||||
</span><span id="eliminate_window_clause-997"><a href="#eliminate_window_clause-997"><span class="linenos"> 997</span></a>
|
||||
</span><span id="eliminate_window_clause-998"><a href="#eliminate_window_clause-998"><span class="linenos"> 998</span></a> <span class="n">windows</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"windows"</span><span class="p">]</span>
|
||||
</span><span id="eliminate_window_clause-999"><a href="#eliminate_window_clause-999"><span class="linenos"> 999</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"windows"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
</span><span id="eliminate_window_clause-1000"><a href="#eliminate_window_clause-1000"><span class="linenos">1000</span></a>
|
||||
</span><span id="eliminate_window_clause-1001"><a href="#eliminate_window_clause-1001"><span class="linenos">1001</span></a> <span class="n">window_expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
</span><span id="eliminate_window_clause-1002"><a href="#eliminate_window_clause-1002"><span class="linenos">1002</span></a>
|
||||
</span><span id="eliminate_window_clause-1003"><a href="#eliminate_window_clause-1003"><span class="linenos">1003</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_inline_inherited_window</span><span class="p">(</span><span class="n">window</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
||||
</span><span id="eliminate_window_clause-1004"><a href="#eliminate_window_clause-1004"><span class="linenos">1004</span></a> <span class="n">inherited_window</span> <span class="o">=</span> <span class="n">window_expression</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">window</span><span class="o">.</span><span class="n">alias</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
|
||||
</span><span id="eliminate_window_clause-1005"><a href="#eliminate_window_clause-1005"><span class="linenos">1005</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">inherited_window</span><span class="p">:</span>
|
||||
</span><span id="eliminate_window_clause-1006"><a href="#eliminate_window_clause-1006"><span class="linenos">1006</span></a> <span class="k">return</span>
|
||||
</span><span id="eliminate_window_clause-1007"><a href="#eliminate_window_clause-1007"><span class="linenos">1007</span></a>
|
||||
</span><span id="eliminate_window_clause-1008"><a href="#eliminate_window_clause-1008"><span class="linenos">1008</span></a> <span class="n">window</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"alias"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
</span><span id="eliminate_window_clause-1009"><a href="#eliminate_window_clause-1009"><span class="linenos">1009</span></a> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"partition_by"</span><span class="p">,</span> <span class="s2">"order"</span><span class="p">,</span> <span class="s2">"spec"</span><span class="p">):</span>
|
||||
</span><span id="eliminate_window_clause-1010"><a href="#eliminate_window_clause-1010"><span class="linenos">1010</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">inherited_window</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
|
||||
</span><span id="eliminate_window_clause-1011"><a href="#eliminate_window_clause-1011"><span class="linenos">1011</span></a> <span class="k">if</span> <span class="n">arg</span><span class="p">:</span>
|
||||
</span><span id="eliminate_window_clause-1012"><a href="#eliminate_window_clause-1012"><span class="linenos">1012</span></a> <span class="n">window</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">arg</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
|
||||
</span><span id="eliminate_window_clause-1013"><a href="#eliminate_window_clause-1013"><span class="linenos">1013</span></a>
|
||||
</span><span id="eliminate_window_clause-1014"><a href="#eliminate_window_clause-1014"><span class="linenos">1014</span></a> <span class="k">for</span> <span class="n">window</span> <span class="ow">in</span> <span class="n">windows</span><span class="p">:</span>
|
||||
</span><span id="eliminate_window_clause-1015"><a href="#eliminate_window_clause-1015"><span class="linenos">1015</span></a> <span class="n">_inline_inherited_window</span><span class="p">(</span><span class="n">window</span><span class="p">)</span>
|
||||
</span><span id="eliminate_window_clause-1016"><a href="#eliminate_window_clause-1016"><span class="linenos">1016</span></a> <span class="n">window_expression</span><span class="p">[</span><span class="n">window</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()]</span> <span class="o">=</span> <span class="n">window</span>
|
||||
</span><span id="eliminate_window_clause-1017"><a href="#eliminate_window_clause-1017"><span class="linenos">1017</span></a>
|
||||
</span><span id="eliminate_window_clause-1018"><a href="#eliminate_window_clause-1018"><span class="linenos">1018</span></a> <span class="k">for</span> <span class="n">window</span> <span class="ow">in</span> <span class="n">find_all_in_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">):</span>
|
||||
</span><span id="eliminate_window_clause-1019"><a href="#eliminate_window_clause-1019"><span class="linenos">1019</span></a> <span class="n">_inline_inherited_window</span><span class="p">(</span><span class="n">window</span><span class="p">)</span>
|
||||
</span><span id="eliminate_window_clause-1020"><a href="#eliminate_window_clause-1020"><span class="linenos">1020</span></a>
|
||||
</span><span id="eliminate_window_clause-1021"><a href="#eliminate_window_clause-1021"><span class="linenos">1021</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="generator" content="pdoc 15.0.3"/>
|
||||
<meta name="generator" content="pdoc 15.0.4"/>
|
||||
<title>sqlglot.trie API documentation</title>
|
||||
|
||||
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
|
||||
|
|
|
@ -557,6 +557,7 @@ class Hive(Dialect):
|
|||
exp.GenerateDateArray: sequence_sql,
|
||||
exp.If: if_sql(),
|
||||
exp.ILike: no_ilike_sql,
|
||||
exp.IntDiv: lambda self, e: self.binary(e, "DIV"),
|
||||
exp.IsNan: rename_func("ISNAN"),
|
||||
exp.JSONExtract: lambda self, e: self.func("GET_JSON_OBJECT", e.this, e.expression),
|
||||
exp.JSONExtractScalar: lambda self, e: self.func(
|
||||
|
|
|
@ -489,6 +489,27 @@ class MySQL(Dialect):
|
|||
VALUES_FOLLOWED_BY_PAREN = False
|
||||
SUPPORTS_PARTITION_SELECTION = True
|
||||
|
||||
def _parse_generated_as_identity(
|
||||
self,
|
||||
) -> (
|
||||
exp.GeneratedAsIdentityColumnConstraint
|
||||
| exp.ComputedColumnConstraint
|
||||
| exp.GeneratedAsRowColumnConstraint
|
||||
):
|
||||
this = super()._parse_generated_as_identity()
|
||||
|
||||
if self._match_texts(("STORED", "VIRTUAL")):
|
||||
persisted = self._prev.text.upper() == "STORED"
|
||||
|
||||
if isinstance(this, exp.ComputedColumnConstraint):
|
||||
this.set("persisted", persisted)
|
||||
elif isinstance(this, exp.GeneratedAsIdentityColumnConstraint):
|
||||
this = self.expression(
|
||||
exp.ComputedColumnConstraint, this=this.expression, persisted=persisted
|
||||
)
|
||||
|
||||
return this
|
||||
|
||||
def _parse_primary_key_part(self) -> t.Optional[exp.Expression]:
|
||||
this = self._parse_id_var()
|
||||
if not self._match(TokenType.L_PAREN):
|
||||
|
@ -1154,6 +1175,10 @@ class MySQL(Dialect):
|
|||
"zerofill",
|
||||
}
|
||||
|
||||
def computedcolumnconstraint_sql(self, expression: exp.ComputedColumnConstraint) -> str:
|
||||
persisted = "STORED" if expression.args.get("persisted") else "VIRTUAL"
|
||||
return f"GENERATED ALWAYS AS ({self.sql(expression.this.unnest())}) {persisted}"
|
||||
|
||||
def array_sql(self, expression: exp.Array) -> str:
|
||||
self.unsupported("Arrays are not supported by MySQL")
|
||||
return self.function_fallback_sql(expression)
|
||||
|
|
|
@ -512,6 +512,18 @@ class Postgres(Dialect):
|
|||
|
||||
return this
|
||||
|
||||
def _parse_user_defined_type(
|
||||
self, identifier: exp.Identifier
|
||||
) -> t.Optional[exp.Expression]:
|
||||
udt_type: exp.Identifier | exp.Dot = identifier
|
||||
|
||||
while self._match(TokenType.DOT):
|
||||
part = self._parse_id_var()
|
||||
if part:
|
||||
udt_type = exp.Dot(this=udt_type, expression=part)
|
||||
|
||||
return exp.DataType.build(udt_type, udt=True)
|
||||
|
||||
class Generator(generator.Generator):
|
||||
SINGLE_STRING_INTERVAL = True
|
||||
RENAME_TABLE_WITH_DB = False
|
||||
|
|
|
@ -863,8 +863,14 @@ class Snowflake(Dialect):
|
|||
properties=self._parse_properties(),
|
||||
)
|
||||
|
||||
def _parse_get(self) -> exp.Get | exp.Command:
|
||||
def _parse_get(self) -> t.Optional[exp.Expression]:
|
||||
start = self._prev
|
||||
|
||||
# If we detect GET( then we need to parse a function, not a statement
|
||||
if self._match(TokenType.L_PAREN):
|
||||
self._retreat(self._index - 2)
|
||||
return self._parse_expression()
|
||||
|
||||
target = self._parse_location_path()
|
||||
|
||||
# Parse as command if unquoted file path
|
||||
|
@ -1100,6 +1106,7 @@ class Snowflake(Dialect):
|
|||
self, e, func_name="CHARINDEX", supports_position=True
|
||||
),
|
||||
exp.StrToDate: lambda self, e: self.func("DATE", e.this, self.format_time(e)),
|
||||
exp.StringToArray: rename_func("STRTOK_TO_ARRAY"),
|
||||
exp.Stuff: rename_func("INSERT"),
|
||||
exp.StPoint: rename_func("ST_MAKEPOINT"),
|
||||
exp.TimeAdd: date_delta_sql("TIMEADD"),
|
||||
|
|
|
@ -109,7 +109,9 @@ class SQLite(Dialect):
|
|||
"DATETIME": lambda args: exp.Anonymous(this="DATETIME", expressions=args),
|
||||
"TIME": lambda args: exp.Anonymous(this="TIME", expressions=args),
|
||||
}
|
||||
|
||||
STRING_ALIASES = True
|
||||
ALTER_RENAME_REQUIRES_COLUMN = False
|
||||
|
||||
def _parse_unique(self) -> exp.UniqueColumnConstraint:
|
||||
# Do not consume more tokens if UNIQUE is used as a standalone constraint, e.g:
|
||||
|
|
|
@ -51,8 +51,8 @@ class _Expression(type):
|
|||
def __new__(cls, clsname, bases, attrs):
|
||||
klass = super().__new__(cls, clsname, bases, attrs)
|
||||
|
||||
# When an Expression class is created, its key is automatically set to be
|
||||
# the lowercase version of the class' name.
|
||||
# When an Expression class is created, its key is automatically set
|
||||
# to be the lowercase version of the class' name.
|
||||
klass.key = clsname.lower()
|
||||
|
||||
# This is so that docstrings are not inherited in pdoc
|
||||
|
@ -1724,15 +1724,15 @@ class Column(Condition):
|
|||
if self.args.get(part)
|
||||
]
|
||||
|
||||
def to_dot(self) -> Dot | Identifier:
|
||||
def to_dot(self, include_dots: bool = True) -> Dot | Identifier:
|
||||
"""Converts the column into a dot expression."""
|
||||
parts = self.parts
|
||||
parent = self.parent
|
||||
|
||||
while parent:
|
||||
if isinstance(parent, Dot):
|
||||
if include_dots:
|
||||
while isinstance(parent, Dot):
|
||||
parts.append(parent.expression)
|
||||
parent = parent.parent
|
||||
parent = parent.parent
|
||||
|
||||
return Dot.build(deepcopy(parts)) if len(parts) > 1 else parts[0]
|
||||
|
||||
|
@ -4753,6 +4753,8 @@ class DataType(Expression):
|
|||
if udt:
|
||||
return DataType(this=DataType.Type.USERDEFINED, kind=dtype, **kwargs)
|
||||
raise
|
||||
elif isinstance(dtype, (Identifier, Dot)) and udt:
|
||||
return DataType(this=DataType.Type.USERDEFINED, kind=dtype, **kwargs)
|
||||
elif isinstance(dtype, DataType.Type):
|
||||
data_type_exp = DataType(this=dtype)
|
||||
elif isinstance(dtype, DataType):
|
||||
|
@ -4794,9 +4796,6 @@ class DataType(Expression):
|
|||
return False
|
||||
|
||||
|
||||
DATA_TYPE = t.Union[str, DataType, DataType.Type]
|
||||
|
||||
|
||||
# https://www.postgresql.org/docs/15/datatype-pseudo.html
|
||||
class PseudoType(DataType):
|
||||
arg_types = {"this": True}
|
||||
|
@ -4926,6 +4925,10 @@ class AddConstraint(Expression):
|
|||
arg_types = {"expressions": True}
|
||||
|
||||
|
||||
class AddPartition(Expression):
|
||||
arg_types = {"this": True, "exists": False}
|
||||
|
||||
|
||||
class AttachOption(Expression):
|
||||
arg_types = {"this": True, "expression": False}
|
||||
|
||||
|
@ -5026,6 +5029,9 @@ class Dot(Binary):
|
|||
return parts
|
||||
|
||||
|
||||
DATA_TYPE = t.Union[str, Identifier, Dot, DataType, DataType.Type]
|
||||
|
||||
|
||||
class DPipe(Binary):
|
||||
arg_types = {"this": True, "expression": True, "safe": False}
|
||||
|
||||
|
@ -5587,7 +5593,7 @@ class String(Func):
|
|||
|
||||
|
||||
class StringToArray(Func):
|
||||
arg_types = {"this": True, "expression": True, "null": False}
|
||||
arg_types = {"this": True, "expression": False, "null": False}
|
||||
_sql_names = ["STRING_TO_ARRAY", "SPLIT_BY_STRING", "STRTOK_TO_ARRAY"]
|
||||
|
||||
|
||||
|
|
|
@ -3498,6 +3498,10 @@ class Generator(metaclass=_Generator):
|
|||
def addconstraint_sql(self, expression: exp.AddConstraint) -> str:
|
||||
return f"ADD {self.expressions(expression)}"
|
||||
|
||||
def addpartition_sql(self, expression: exp.AddPartition) -> str:
|
||||
exists = "IF NOT EXISTS " if expression.args.get("exists") else ""
|
||||
return f"ADD {exists}{self.sql(expression.this)}"
|
||||
|
||||
def distinct_sql(self, expression: exp.Distinct) -> str:
|
||||
this = self.expressions(expression, flat=True)
|
||||
|
||||
|
|
|
@ -758,6 +758,8 @@ def _traverse_tables(scope):
|
|||
expressions.extend(join.this for join in expression.args.get("joins") or [])
|
||||
continue
|
||||
|
||||
child_scope = None
|
||||
|
||||
for child_scope in _traverse_scope(
|
||||
scope.branch(
|
||||
expression,
|
||||
|
@ -775,8 +777,9 @@ def _traverse_tables(scope):
|
|||
sources[expression.alias] = child_scope
|
||||
|
||||
# append the final child_scope yielded
|
||||
scopes.append(child_scope)
|
||||
scope.table_scopes.append(child_scope)
|
||||
if child_scope:
|
||||
scopes.append(child_scope)
|
||||
scope.table_scopes.append(child_scope)
|
||||
|
||||
scope.sources.update(sources)
|
||||
|
||||
|
|
|
@ -932,11 +932,14 @@ class Parser(metaclass=_Parser):
|
|||
|
||||
PIPE_SYNTAX_TRANSFORM_PARSERS = {
|
||||
"SELECT": lambda self, query: self._parse_pipe_syntax_select(query),
|
||||
"WHERE": lambda self, query: self._parse_pipe_syntax_where(query),
|
||||
"ORDER BY": lambda self, query: query.order_by(self._parse_order(), copy=False),
|
||||
"WHERE": lambda self, query: query.where(self._parse_where(), copy=False),
|
||||
"ORDER BY": lambda self, query: query.order_by(
|
||||
self._parse_order(), append=False, copy=False
|
||||
),
|
||||
"LIMIT": lambda self, query: self._parse_pipe_syntax_limit(query),
|
||||
"OFFSET": lambda self, query: query.offset(self._parse_offset(), copy=False),
|
||||
"AGGREGATE": lambda self, query: self._parse_pipe_syntax_aggregate(query),
|
||||
"PIVOT": lambda self, query: self._parse_pipe_syntax_pivot(query),
|
||||
"UNPIVOT": lambda self, query: self._parse_pipe_syntax_pivot(query),
|
||||
}
|
||||
|
||||
PROPERTY_PARSERS: t.Dict[str, t.Callable] = {
|
||||
|
@ -1125,97 +1128,6 @@ class Parser(metaclass=_Parser):
|
|||
"TRUNCATE": lambda self: self._parse_partitioned_by_bucket_or_truncate(),
|
||||
}
|
||||
|
||||
def _parse_pipe_syntax_select(self, query: exp.Query) -> exp.Query:
|
||||
select = self._parse_select()
|
||||
if isinstance(select, exp.Select):
|
||||
return select.from_(query.subquery(copy=False), copy=False)
|
||||
return query
|
||||
|
||||
def _parse_pipe_syntax_where(self, query: exp.Query) -> exp.Query:
|
||||
where = self._parse_where()
|
||||
return query.where(where, copy=False)
|
||||
|
||||
def _parse_pipe_syntax_limit(self, query: exp.Query) -> exp.Query:
|
||||
limit = self._parse_limit()
|
||||
offset = self._parse_offset()
|
||||
if limit:
|
||||
query.limit(limit, copy=False)
|
||||
if offset:
|
||||
query.offset(offset, copy=False)
|
||||
return query
|
||||
|
||||
def _parse_pipe_syntax_aggregate_fields(self) -> t.Optional[exp.Expression]:
|
||||
this = self._parse_assignment()
|
||||
if self._match_text_seq("GROUP", "AND", advance=False):
|
||||
return this
|
||||
|
||||
this = self._parse_alias(this)
|
||||
|
||||
if self._match_set((TokenType.ASC, TokenType.DESC), advance=False):
|
||||
return self._parse_ordered(lambda: this)
|
||||
|
||||
return this
|
||||
|
||||
def _parse_pipe_syntax_aggregate_group_order_by(
|
||||
self, query: exp.Query, group_by_exists: bool = True
|
||||
) -> exp.Query:
|
||||
expr = self._parse_csv(self._parse_pipe_syntax_aggregate_fields)
|
||||
aggregates_or_groups, orders = [], []
|
||||
for element in expr:
|
||||
if isinstance(element, exp.Ordered):
|
||||
this = element.this
|
||||
if isinstance(this, exp.Alias):
|
||||
element.set("this", this.args["alias"])
|
||||
orders.append(element)
|
||||
else:
|
||||
this = element
|
||||
aggregates_or_groups.append(this)
|
||||
|
||||
if group_by_exists and isinstance(query, exp.Select):
|
||||
query = query.select(*aggregates_or_groups, copy=False).group_by(
|
||||
*[element.args.get("alias", element) for element in aggregates_or_groups],
|
||||
copy=False,
|
||||
)
|
||||
else:
|
||||
query = exp.select(*aggregates_or_groups, copy=False).from_(
|
||||
query.subquery(copy=False), copy=False
|
||||
)
|
||||
|
||||
if orders:
|
||||
return query.order_by(*orders, copy=False)
|
||||
|
||||
return query
|
||||
|
||||
def _parse_pipe_syntax_aggregate(self, query: exp.Query) -> exp.Query:
|
||||
self._match_text_seq("AGGREGATE")
|
||||
query = self._parse_pipe_syntax_aggregate_group_order_by(query, group_by_exists=False)
|
||||
|
||||
if self._match(TokenType.GROUP_BY) or (
|
||||
self._match_text_seq("GROUP", "AND") and self._match(TokenType.ORDER_BY)
|
||||
):
|
||||
return self._parse_pipe_syntax_aggregate_group_order_by(query)
|
||||
|
||||
return query
|
||||
|
||||
def _parse_pipe_syntax_set_operator(
|
||||
self, query: t.Optional[exp.Query]
|
||||
) -> t.Optional[exp.Query]:
|
||||
first_setop = self.parse_set_operation(this=query)
|
||||
|
||||
if not first_setop or not query:
|
||||
return None
|
||||
|
||||
first_setop.this.pop()
|
||||
distinct = first_setop.args.pop("distinct")
|
||||
|
||||
setops = [first_setop.expression.pop(), *self._parse_expressions()]
|
||||
|
||||
if isinstance(first_setop, exp.Union):
|
||||
return query.union(*setops, distinct=distinct, **first_setop.args)
|
||||
if isinstance(first_setop, exp.Except):
|
||||
return query.except_(*setops, distinct=distinct, **first_setop.args)
|
||||
return query.intersect(*setops, distinct=distinct, **first_setop.args)
|
||||
|
||||
def _parse_partitioned_by_bucket_or_truncate(self) -> exp.Expression:
|
||||
klass = (
|
||||
exp.PartitionedByBucket
|
||||
|
@ -1596,6 +1508,9 @@ class Parser(metaclass=_Parser):
|
|||
# Whether the 'AS' keyword is optional in the CTE definition syntax
|
||||
OPTIONAL_ALIAS_TOKEN_CTE = True
|
||||
|
||||
# Whether renaming a column with an ALTER statement requires the presence of the COLUMN keyword
|
||||
ALTER_RENAME_REQUIRES_COLUMN = True
|
||||
|
||||
__slots__ = (
|
||||
"error_level",
|
||||
"error_message_context",
|
||||
|
@ -1609,6 +1524,7 @@ class Parser(metaclass=_Parser):
|
|||
"_next",
|
||||
"_prev",
|
||||
"_prev_comments",
|
||||
"_pipe_cte_counter",
|
||||
)
|
||||
|
||||
# Autofilled
|
||||
|
@ -1639,6 +1555,7 @@ class Parser(metaclass=_Parser):
|
|||
self._next = None
|
||||
self._prev = None
|
||||
self._prev_comments = None
|
||||
self._pipe_cte_counter = 0
|
||||
|
||||
def parse(
|
||||
self, raw_tokens: t.List[Token], sql: t.Optional[str] = None
|
||||
|
@ -3335,9 +3252,11 @@ class Parser(metaclass=_Parser):
|
|||
elif self._match(TokenType.VALUES, advance=False):
|
||||
this = self._parse_derived_table_values()
|
||||
elif from_:
|
||||
this = exp.select("*").from_(from_.this, copy=False)
|
||||
if self._match(TokenType.PIPE_GT, advance=False):
|
||||
return self._parse_pipe_syntax_query(this)
|
||||
return self._parse_pipe_syntax_query(
|
||||
exp.Select().from_(from_.this, append=False, copy=False)
|
||||
)
|
||||
this = exp.select("*").from_(from_.this, copy=False)
|
||||
elif self._match(TokenType.SUMMARIZE):
|
||||
table = self._match(TokenType.TABLE)
|
||||
this = self._parse_select() or self._parse_string() or self._parse_table()
|
||||
|
@ -5203,6 +5122,14 @@ class Parser(metaclass=_Parser):
|
|||
exp.DataTypeParam, this=this, expression=self._parse_var(any_token=True)
|
||||
)
|
||||
|
||||
def _parse_user_defined_type(self, identifier: exp.Identifier) -> t.Optional[exp.Expression]:
|
||||
type_name = identifier.name
|
||||
|
||||
while self._match(TokenType.DOT):
|
||||
type_name = f"{type_name}.{self._advance_any() and self._prev.text}"
|
||||
|
||||
return exp.DataType.build(type_name, udt=True)
|
||||
|
||||
def _parse_types(
|
||||
self, check_func: bool = False, schema: bool = False, allow_identifiers: bool = True
|
||||
) -> t.Optional[exp.Expression]:
|
||||
|
@ -5224,12 +5151,7 @@ class Parser(metaclass=_Parser):
|
|||
if tokens[0].token_type in self.TYPE_TOKENS:
|
||||
self._prev = tokens[0]
|
||||
elif self.dialect.SUPPORTS_USER_DEFINED_TYPES:
|
||||
type_name = identifier.name
|
||||
|
||||
while self._match(TokenType.DOT):
|
||||
type_name = f"{type_name}.{self._advance_any() and self._prev.text}"
|
||||
|
||||
this = exp.DataType.build(type_name, udt=True)
|
||||
this = self._parse_user_defined_type(identifier)
|
||||
else:
|
||||
self._retreat(self._index - 1)
|
||||
return None
|
||||
|
@ -5587,18 +5509,12 @@ class Parser(metaclass=_Parser):
|
|||
else:
|
||||
field = self._parse_field(any_token=True, anonymous_func=True)
|
||||
|
||||
# Function calls can be qualified, e.g., x.y.FOO()
|
||||
# This converts the final AST to a series of Dots leading to the function call
|
||||
# https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-reference#function_call_rules
|
||||
if isinstance(field, (exp.Func, exp.Window)) and this:
|
||||
# BQ & snowflake allow function calls like x.y.count(...), SAFE.SUBSTR(...) etc
|
||||
# https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-reference#function_call_rules
|
||||
this = exp.replace_tree(
|
||||
this,
|
||||
lambda n: (
|
||||
self.expression(exp.Dot, this=n.args.get("table"), expression=n.this)
|
||||
if n.table
|
||||
else n.this
|
||||
)
|
||||
if isinstance(n, exp.Column)
|
||||
else n,
|
||||
this = this.transform(
|
||||
lambda n: n.to_dot(include_dots=False) if isinstance(n, exp.Column) else n
|
||||
)
|
||||
|
||||
if op:
|
||||
|
@ -5973,7 +5889,11 @@ class Parser(metaclass=_Parser):
|
|||
constraints.append(
|
||||
self.expression(
|
||||
exp.ColumnConstraint,
|
||||
kind=exp.ComputedColumnConstraint(this=self._parse_disjunction()),
|
||||
kind=exp.ComputedColumnConstraint(
|
||||
this=self._parse_disjunction(),
|
||||
persisted=self._match_texts(("STORED", "VIRTUAL"))
|
||||
and self._prev.text.upper() == "STORED",
|
||||
),
|
||||
)
|
||||
)
|
||||
|
||||
|
@ -7236,23 +7156,6 @@ class Parser(metaclass=_Parser):
|
|||
|
||||
return this
|
||||
|
||||
def _parse_pipe_syntax_query(self, query: exp.Query) -> t.Optional[exp.Query]:
|
||||
while self._match(TokenType.PIPE_GT):
|
||||
start = self._curr
|
||||
parser = self.PIPE_SYNTAX_TRANSFORM_PARSERS.get(self._curr.text.upper())
|
||||
if not parser:
|
||||
set_op_query = self._parse_pipe_syntax_set_operator(query)
|
||||
if not set_op_query:
|
||||
self._retreat(start)
|
||||
self.raise_error(f"Unsupported pipe syntax operator: '{start.text.upper()}'.")
|
||||
break
|
||||
|
||||
query = set_op_query
|
||||
else:
|
||||
query = parser(self, query)
|
||||
|
||||
return query
|
||||
|
||||
def _parse_wrapped_id_vars(self, optional: bool = False) -> t.List[exp.Expression]:
|
||||
return self._parse_wrapped_csv(self._parse_id_var, optional=optional)
|
||||
|
||||
|
@ -7331,24 +7234,29 @@ class Parser(metaclass=_Parser):
|
|||
self._match(TokenType.TABLE)
|
||||
return self.expression(exp.Refresh, this=self._parse_string() or self._parse_table())
|
||||
|
||||
def _parse_add_column(self) -> t.Optional[exp.Expression]:
|
||||
def _parse_add_column(self) -> t.Optional[exp.ColumnDef]:
|
||||
if not self._prev.text.upper() == "ADD":
|
||||
return None
|
||||
|
||||
start = self._index
|
||||
self._match(TokenType.COLUMN)
|
||||
|
||||
exists_column = self._parse_exists(not_=True)
|
||||
expression = self._parse_field_def()
|
||||
|
||||
if expression:
|
||||
expression.set("exists", exists_column)
|
||||
if not isinstance(expression, exp.ColumnDef):
|
||||
self._retreat(start)
|
||||
return None
|
||||
|
||||
# https://docs.databricks.com/delta/update-schema.html#explicitly-update-schema-to-add-columns
|
||||
if self._match_texts(("FIRST", "AFTER")):
|
||||
position = self._prev.text
|
||||
column_position = self.expression(
|
||||
exp.ColumnPosition, this=self._parse_column(), position=position
|
||||
)
|
||||
expression.set("position", column_position)
|
||||
expression.set("exists", exists_column)
|
||||
|
||||
# https://docs.databricks.com/delta/update-schema.html#explicitly-update-schema-to-add-columns
|
||||
if self._match_texts(("FIRST", "AFTER")):
|
||||
position = self._prev.text
|
||||
column_position = self.expression(
|
||||
exp.ColumnPosition, this=self._parse_column(), position=position
|
||||
)
|
||||
expression.set("position", column_position)
|
||||
|
||||
return expression
|
||||
|
||||
|
@ -7365,13 +7273,24 @@ class Parser(metaclass=_Parser):
|
|||
)
|
||||
|
||||
def _parse_alter_table_add(self) -> t.List[exp.Expression]:
|
||||
def _parse_add_column_or_constraint():
|
||||
def _parse_add_alteration() -> t.Optional[exp.Expression]:
|
||||
self._match_text_seq("ADD")
|
||||
if self._match_set(self.ADD_CONSTRAINT_TOKENS, advance=False):
|
||||
return self.expression(
|
||||
exp.AddConstraint, expressions=self._parse_csv(self._parse_constraint)
|
||||
)
|
||||
return self._parse_add_column()
|
||||
|
||||
column_def = self._parse_add_column()
|
||||
if isinstance(column_def, exp.ColumnDef):
|
||||
return column_def
|
||||
|
||||
exists = self._parse_exists(not_=True)
|
||||
if self._match_pair(TokenType.PARTITION, TokenType.L_PAREN, advance=False):
|
||||
return self.expression(
|
||||
exp.AddPartition, exists=exists, this=self._parse_field(any_token=True)
|
||||
)
|
||||
|
||||
return None
|
||||
|
||||
if not self.dialect.ALTER_TABLE_ADD_REQUIRED_FOR_EACH_COLUMN or self._match_text_seq(
|
||||
"COLUMNS"
|
||||
|
@ -7380,7 +7299,7 @@ class Parser(metaclass=_Parser):
|
|||
|
||||
return ensure_list(schema) if schema else self._parse_csv(self._parse_field_def)
|
||||
|
||||
return self._parse_csv(_parse_add_column_or_constraint)
|
||||
return self._parse_csv(_parse_add_alteration)
|
||||
|
||||
def _parse_alter_table_alter(self) -> t.Optional[exp.Expression]:
|
||||
if self._match_texts(self.ALTER_ALTER_PARSERS):
|
||||
|
@ -7458,7 +7377,7 @@ class Parser(metaclass=_Parser):
|
|||
return self._parse_csv(self._parse_drop_column)
|
||||
|
||||
def _parse_alter_table_rename(self) -> t.Optional[exp.AlterRename | exp.RenameColumn]:
|
||||
if self._match(TokenType.COLUMN):
|
||||
if self._match(TokenType.COLUMN) or not self.ALTER_RENAME_REQUIRES_COLUMN:
|
||||
exists = self._parse_exists()
|
||||
old_column = self._parse_column()
|
||||
to = self._match_text_seq("TO")
|
||||
|
@ -8408,3 +8327,160 @@ class Parser(metaclass=_Parser):
|
|||
expression = self.expression(exp.Identifier, this=token.text, **kwargs)
|
||||
expression.update_positions(token)
|
||||
return expression
|
||||
|
||||
def _build_pipe_cte(self, query: exp.Query, expressions: t.List[exp.Expression]) -> exp.Select:
|
||||
if not query.selects:
|
||||
query = query.select("*", copy=False)
|
||||
|
||||
self._pipe_cte_counter += 1
|
||||
new_cte = f"__tmp{self._pipe_cte_counter}"
|
||||
|
||||
with_ = query.args.get("with")
|
||||
ctes = with_.pop() if with_ else None
|
||||
|
||||
new_select = exp.select(*expressions, copy=False).from_(new_cte, copy=False)
|
||||
if ctes:
|
||||
new_select.set("with", ctes)
|
||||
|
||||
return new_select.with_(new_cte, as_=query, copy=False)
|
||||
|
||||
def _parse_pipe_syntax_select(self, query: exp.Select) -> exp.Select:
|
||||
select = self._parse_select()
|
||||
if not select:
|
||||
return query
|
||||
|
||||
if not query.selects:
|
||||
return self._build_pipe_cte(query.select(*select.expressions), [exp.Star()])
|
||||
|
||||
return self._build_pipe_cte(query, select.expressions)
|
||||
|
||||
def _parse_pipe_syntax_limit(self, query: exp.Select) -> exp.Select:
|
||||
limit = self._parse_limit()
|
||||
offset = self._parse_offset()
|
||||
if limit:
|
||||
curr_limit = query.args.get("limit", limit)
|
||||
if curr_limit.expression.to_py() >= limit.expression.to_py():
|
||||
query.limit(limit, copy=False)
|
||||
if offset:
|
||||
curr_offset = query.args.get("offset")
|
||||
curr_offset = curr_offset.expression.to_py() if curr_offset else 0
|
||||
query.offset(exp.Literal.number(curr_offset + offset.expression.to_py()), copy=False)
|
||||
|
||||
return query
|
||||
|
||||
def _parse_pipe_syntax_aggregate_fields(self) -> t.Optional[exp.Expression]:
|
||||
this = self._parse_assignment()
|
||||
if self._match_text_seq("GROUP", "AND", advance=False):
|
||||
return this
|
||||
|
||||
this = self._parse_alias(this)
|
||||
|
||||
if self._match_set((TokenType.ASC, TokenType.DESC), advance=False):
|
||||
return self._parse_ordered(lambda: this)
|
||||
|
||||
return this
|
||||
|
||||
def _parse_pipe_syntax_aggregate_group_order_by(
|
||||
self, query: exp.Select, group_by_exists: bool = True
|
||||
) -> exp.Select:
|
||||
expr = self._parse_csv(self._parse_pipe_syntax_aggregate_fields)
|
||||
aggregates_or_groups, orders = [], []
|
||||
for element in expr:
|
||||
if isinstance(element, exp.Ordered):
|
||||
this = element.this
|
||||
if isinstance(this, exp.Alias):
|
||||
element.set("this", this.args["alias"])
|
||||
orders.append(element)
|
||||
else:
|
||||
this = element
|
||||
aggregates_or_groups.append(this)
|
||||
|
||||
if group_by_exists:
|
||||
query = query.select(*aggregates_or_groups, copy=False).group_by(
|
||||
*[projection.args.get("alias", projection) for projection in aggregates_or_groups],
|
||||
copy=False,
|
||||
)
|
||||
else:
|
||||
query = query.select(*aggregates_or_groups, copy=False)
|
||||
|
||||
if orders:
|
||||
return query.order_by(*orders, append=False, copy=False)
|
||||
|
||||
return query
|
||||
|
||||
def _parse_pipe_syntax_aggregate(self, query: exp.Select) -> exp.Select:
|
||||
self._match_text_seq("AGGREGATE")
|
||||
query = self._parse_pipe_syntax_aggregate_group_order_by(query, group_by_exists=False)
|
||||
|
||||
if self._match(TokenType.GROUP_BY) or (
|
||||
self._match_text_seq("GROUP", "AND") and self._match(TokenType.ORDER_BY)
|
||||
):
|
||||
query = self._parse_pipe_syntax_aggregate_group_order_by(query)
|
||||
|
||||
return self._build_pipe_cte(query, [exp.Star()])
|
||||
|
||||
def _parse_pipe_syntax_set_operator(
|
||||
self, query: t.Optional[exp.Query]
|
||||
) -> t.Optional[exp.Select]:
|
||||
first_setop = self.parse_set_operation(this=query)
|
||||
|
||||
if not first_setop or not query:
|
||||
return None
|
||||
|
||||
first_setop.this.pop()
|
||||
distinct = first_setop.args.pop("distinct")
|
||||
setops = [first_setop.expression.pop(), *self._parse_expressions()]
|
||||
|
||||
query = self._build_pipe_cte(query, [exp.Star()])
|
||||
with_ = query.args.get("with")
|
||||
ctes = with_.pop() if with_ else None
|
||||
|
||||
if isinstance(first_setop, exp.Union):
|
||||
query = query.union(*setops, distinct=distinct, copy=False, **first_setop.args)
|
||||
elif isinstance(first_setop, exp.Except):
|
||||
query = query.except_(*setops, distinct=distinct, copy=False, **first_setop.args)
|
||||
else:
|
||||
query = query.intersect(*setops, distinct=distinct, copy=False, **first_setop.args)
|
||||
|
||||
query.set("with", ctes)
|
||||
|
||||
return self._build_pipe_cte(query, [exp.Star()])
|
||||
|
||||
def _parse_pipe_syntax_join(self, query: exp.Select) -> t.Optional[exp.Select]:
|
||||
join = self._parse_join()
|
||||
if not join:
|
||||
return None
|
||||
|
||||
return query.join(join, copy=False)
|
||||
|
||||
def _parse_pipe_syntax_pivot(self, query: exp.Select) -> exp.Select:
|
||||
pivots = self._parse_pivots()
|
||||
if not pivots:
|
||||
return query
|
||||
|
||||
from_ = query.args.get("from")
|
||||
if from_:
|
||||
from_.this.set("pivots", pivots)
|
||||
|
||||
return self._build_pipe_cte(query, [exp.Star()])
|
||||
|
||||
def _parse_pipe_syntax_query(self, query: exp.Select) -> t.Optional[exp.Select]:
|
||||
while self._match(TokenType.PIPE_GT):
|
||||
start = self._curr
|
||||
parser = self.PIPE_SYNTAX_TRANSFORM_PARSERS.get(self._curr.text.upper())
|
||||
if not parser:
|
||||
parsed_query = self._parse_pipe_syntax_set_operator(
|
||||
query
|
||||
) or self._parse_pipe_syntax_join(query)
|
||||
if not parsed_query:
|
||||
self._retreat(start)
|
||||
self.raise_error(f"Unsupported pipe syntax operator: '{start.text.upper()}'.")
|
||||
break
|
||||
query = parsed_query
|
||||
else:
|
||||
query = parser(self, query)
|
||||
|
||||
if query and not query.selects:
|
||||
return query.select("*", copy=False)
|
||||
|
||||
return query
|
||||
|
|
|
@ -842,113 +842,122 @@ def struct_kv_to_alias(expression: exp.Expression) -> exp.Expression:
|
|||
|
||||
|
||||
def eliminate_join_marks(expression: exp.Expression) -> exp.Expression:
|
||||
"""https://docs.oracle.com/cd/B19306_01/server.102/b14200/queries006.htm#sthref3178
|
||||
|
||||
1. You cannot specify the (+) operator in a query block that also contains FROM clause join syntax.
|
||||
|
||||
2. The (+) operator can appear only in the WHERE clause or, in the context of left-correlation (that is, when specifying the TABLE clause) in the FROM clause, and can be applied only to a column of a table or view.
|
||||
|
||||
The (+) operator does not produce an outer join if you specify one table in the outer query and the other table in an inner query.
|
||||
|
||||
You cannot use the (+) operator to outer-join a table to itself, although self joins are valid.
|
||||
|
||||
The (+) operator can be applied only to a column, not to an arbitrary expression. However, an arbitrary expression can contain one or more columns marked with the (+) operator.
|
||||
|
||||
A WHERE condition containing the (+) operator cannot be combined with another condition using the OR logical operator.
|
||||
|
||||
A WHERE condition cannot use the IN comparison condition to compare a column marked with the (+) operator with an expression.
|
||||
|
||||
A WHERE condition cannot compare any column marked with the (+) operator with a subquery.
|
||||
|
||||
-- example with WHERE
|
||||
SELECT d.department_name, sum(e.salary) as total_salary
|
||||
FROM departments d, employees e
|
||||
WHERE e.department_id(+) = d.department_id
|
||||
group by department_name
|
||||
|
||||
-- example of left correlation in select
|
||||
SELECT d.department_name, (
|
||||
SELECT SUM(e.salary)
|
||||
FROM employees e
|
||||
WHERE e.department_id(+) = d.department_id) AS total_salary
|
||||
FROM departments d;
|
||||
|
||||
-- example of left correlation in from
|
||||
SELECT d.department_name, t.total_salary
|
||||
FROM departments d, (
|
||||
SELECT SUM(e.salary) AS total_salary
|
||||
FROM employees e
|
||||
WHERE e.department_id(+) = d.department_id
|
||||
) t
|
||||
"""
|
||||
Remove join marks from an AST. This rule assumes that all marked columns are qualified.
|
||||
If this does not hold for a query, consider running `sqlglot.optimizer.qualify` first.
|
||||
|
||||
For example,
|
||||
SELECT * FROM a, b WHERE a.id = b.id(+) -- ... is converted to
|
||||
SELECT * FROM a LEFT JOIN b ON a.id = b.id -- this
|
||||
|
||||
Args:
|
||||
expression: The AST to remove join marks from.
|
||||
|
||||
Returns:
|
||||
The AST with join marks removed.
|
||||
"""
|
||||
from sqlglot.optimizer.scope import traverse_scope
|
||||
from sqlglot.optimizer.normalize import normalize, normalized
|
||||
from collections import defaultdict
|
||||
|
||||
for scope in traverse_scope(expression):
|
||||
# we go in reverse to check the main query for left correlation
|
||||
for scope in reversed(traverse_scope(expression)):
|
||||
query = scope.expression
|
||||
|
||||
where = query.args.get("where")
|
||||
joins = query.args.get("joins")
|
||||
joins = query.args.get("joins", [])
|
||||
|
||||
if not where or not joins:
|
||||
# knockout: we do not support left correlation (see point 2)
|
||||
assert not scope.is_correlated_subquery, "Correlated queries are not supported"
|
||||
|
||||
# nothing to do - we check it here after knockout above
|
||||
if not where or not any(c.args.get("join_mark") for c in where.find_all(exp.Column)):
|
||||
continue
|
||||
|
||||
query_from = query.args["from"]
|
||||
# make sure we have AND of ORs to have clear join terms
|
||||
where = normalize(where.this)
|
||||
assert normalized(where), "Cannot normalize JOIN predicates"
|
||||
|
||||
# These keep track of the joins to be replaced
|
||||
new_joins: t.Dict[str, exp.Join] = {}
|
||||
old_joins = {join.alias_or_name: join for join in joins}
|
||||
joins_ons = defaultdict(list) # dict of {name: list of join AND conditions}
|
||||
for cond in [where] if not isinstance(where, exp.And) else where.flatten():
|
||||
join_cols = [col for col in cond.find_all(exp.Column) if col.args.get("join_mark")]
|
||||
|
||||
for column in scope.columns:
|
||||
if not column.args.get("join_mark"):
|
||||
left_join_table = set(col.table for col in join_cols)
|
||||
if not left_join_table:
|
||||
continue
|
||||
|
||||
predicate = column.find_ancestor(exp.Predicate, exp.Select)
|
||||
assert isinstance(
|
||||
predicate, exp.Binary
|
||||
), "Columns can only be marked with (+) when involved in a binary operation"
|
||||
|
||||
predicate_parent = predicate.parent
|
||||
join_predicate = predicate.pop()
|
||||
|
||||
left_columns = [
|
||||
c for c in join_predicate.left.find_all(exp.Column) if c.args.get("join_mark")
|
||||
]
|
||||
right_columns = [
|
||||
c for c in join_predicate.right.find_all(exp.Column) if c.args.get("join_mark")
|
||||
]
|
||||
|
||||
assert not (
|
||||
left_columns and right_columns
|
||||
), "The (+) marker cannot appear in both sides of a binary predicate"
|
||||
|
||||
marked_column_tables = set()
|
||||
for col in left_columns or right_columns:
|
||||
table = col.table
|
||||
assert table, f"Column {col} needs to be qualified with a table"
|
||||
len(left_join_table) > 1
|
||||
), "Cannot combine JOIN predicates from different tables"
|
||||
|
||||
for col in join_cols:
|
||||
col.set("join_mark", False)
|
||||
marked_column_tables.add(table)
|
||||
|
||||
assert (
|
||||
len(marked_column_tables) == 1
|
||||
), "Columns of only a single table can be marked with (+) in a given binary predicate"
|
||||
joins_ons[left_join_table.pop()].append(cond)
|
||||
|
||||
# Add predicate if join already copied, or add join if it is new
|
||||
join_this = old_joins.get(col.table, query_from).this
|
||||
existing_join = new_joins.get(join_this.alias_or_name)
|
||||
if existing_join:
|
||||
existing_join.set("on", exp.and_(existing_join.args["on"], join_predicate))
|
||||
else:
|
||||
new_joins[join_this.alias_or_name] = exp.Join(
|
||||
this=join_this.copy(), on=join_predicate.copy(), kind="LEFT"
|
||||
)
|
||||
old_joins = {join.alias_or_name: join for join in joins}
|
||||
new_joins = {}
|
||||
query_from = query.args["from"]
|
||||
|
||||
# If the parent of the target predicate is a binary node, then it now has only one child
|
||||
if isinstance(predicate_parent, exp.Binary):
|
||||
if predicate_parent.left is None:
|
||||
predicate_parent.replace(predicate_parent.right)
|
||||
else:
|
||||
predicate_parent.replace(predicate_parent.left)
|
||||
for table, predicates in joins_ons.items():
|
||||
join_what = old_joins.get(table, query_from).this.copy()
|
||||
new_joins[join_what.alias_or_name] = exp.Join(
|
||||
this=join_what, on=exp.and_(*predicates), kind="LEFT"
|
||||
)
|
||||
|
||||
only_old_join_sources = old_joins.keys() - new_joins.keys()
|
||||
for p in predicates:
|
||||
while isinstance(p.parent, exp.Paren):
|
||||
p.parent.replace(p)
|
||||
|
||||
parent = p.parent
|
||||
p.pop()
|
||||
if isinstance(parent, exp.Binary):
|
||||
parent.replace(parent.right if parent.left is None else parent.left)
|
||||
elif isinstance(parent, exp.Where):
|
||||
parent.pop()
|
||||
|
||||
if query_from.alias_or_name in new_joins:
|
||||
only_old_joins = old_joins.keys() - new_joins.keys()
|
||||
assert (
|
||||
len(only_old_join_sources) >= 1
|
||||
len(only_old_joins) >= 1
|
||||
), "Cannot determine which table to use in the new FROM clause"
|
||||
|
||||
new_from_name = list(only_old_join_sources)[0]
|
||||
query.set("from", exp.From(this=old_joins.pop(new_from_name).this))
|
||||
only_old_join_sources.remove(new_from_name)
|
||||
new_from_name = list(only_old_joins)[0]
|
||||
query.set("from", exp.From(this=old_joins[new_from_name].this))
|
||||
|
||||
if new_joins:
|
||||
only_old_join_expressions = []
|
||||
for old_join_source in only_old_join_sources:
|
||||
old_join_expression = old_joins[old_join_source]
|
||||
if not old_join_expression.kind:
|
||||
old_join_expression.set("kind", "CROSS")
|
||||
|
||||
only_old_join_expressions.append(old_join_expression)
|
||||
|
||||
query.set("joins", list(new_joins.values()) + only_old_join_expressions)
|
||||
|
||||
if not where.this:
|
||||
where.pop()
|
||||
for n, j in old_joins.items(): # preserve any other joins
|
||||
if n not in new_joins and n != query.args["from"].name:
|
||||
if not j.kind:
|
||||
j.set("kind", "CROSS")
|
||||
new_joins[n] = j
|
||||
query.set("joins", list(new_joins.values()))
|
||||
|
||||
return expression
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@ class TestBigQuery(Validator):
|
|||
self.assertEqual(table.db, "x-0")
|
||||
self.assertEqual(table.name, "_y")
|
||||
|
||||
self.validate_identity("SAFE.SUBSTR('foo', 0, -2)").assert_is(exp.Dot)
|
||||
self.validate_identity("SELECT * FROM x-0.y")
|
||||
self.assertEqual(exp.to_table("`a.b`.`c.d`", dialect="bigquery").sql(), '"a"."b"."c"."d"')
|
||||
self.assertEqual(exp.to_table("`x`.`y.z`", dialect="bigquery").sql(), '"x"."y"."z"')
|
||||
|
|
|
@ -3504,141 +3504,3 @@ FROM subquery2""",
|
|||
parse_one("SELECT 0xCC", read=read_dialect).sql(other_integer_dialects),
|
||||
"SELECT 0xCC",
|
||||
)
|
||||
|
||||
def test_pipe_syntax(self):
|
||||
self.validate_identity("FROM x", "SELECT * FROM x")
|
||||
self.validate_identity("FROM x |> SELECT x1, x2", "SELECT x1, x2 FROM (SELECT * FROM x)")
|
||||
self.validate_identity(
|
||||
"FROM x |> SELECT x1 as c1, x2 as c2",
|
||||
"SELECT x1 AS c1, x2 AS c2 FROM (SELECT * FROM x)",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> SELECT x1 + 1 as x1_a, x2 - 1 as x2_a |> WHERE x1_a > 1",
|
||||
"SELECT x1 + 1 AS x1_a, x2 - 1 AS x2_a FROM (SELECT * FROM x) WHERE x1_a > 1",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> SELECT x1 + 1 as x1_a, x2 - 1 as x2_a |> WHERE x1_a > 1 |> SELECT x2_a",
|
||||
"SELECT x2_a FROM (SELECT x1 + 1 AS x1_a, x2 - 1 AS x2_a FROM (SELECT * FROM x) WHERE x1_a > 1)",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> WHERE x1 > 0 OR x2 > 0 |> WHERE x3 > 1 AND x4 > 1 |> SELECT x1, x4",
|
||||
"SELECT x1, x4 FROM (SELECT * FROM x WHERE (x1 > 0 OR x2 > 0) AND (x3 > 1 AND x4 > 1))",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> WHERE x1 > 1 |> WHERE x2 > 2 |> SELECT x1 as gt1, x2 as gt2",
|
||||
"SELECT x1 AS gt1, x2 AS gt2 FROM (SELECT * FROM x WHERE x1 > 1 AND x2 > 2)",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> WHERE x1 > 1 AND x2 > 2 |> SELECT x1 as gt1, x2 as gt2 |> SELECT gt1 * 2 + gt2 * 2 AS gt2_2",
|
||||
"SELECT gt1 * 2 + gt2 * 2 AS gt2_2 FROM (SELECT x1 AS gt1, x2 AS gt2 FROM (SELECT * FROM x WHERE x1 > 1 AND x2 > 2))",
|
||||
)
|
||||
self.validate_identity("FROM x |> ORDER BY x1", "SELECT * FROM x ORDER BY x1")
|
||||
self.validate_identity(
|
||||
"FROM x |> ORDER BY x1 |> ORDER BY x2", "SELECT * FROM x ORDER BY x1, x2"
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> ORDER BY x1 |> WHERE x1 > 0 OR x1 != 1 |> ORDER BY x2 |> WHERE x2 > 0 AND x2 != 1 |> SELECT x1, x2",
|
||||
"SELECT x1, x2 FROM (SELECT * FROM x WHERE (x1 > 0 OR x1 <> 1) AND (x2 > 0 AND x2 <> 1) ORDER BY x1, x2)",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> ORDER BY x1 |> WHERE x1 > 0 |> SELECT x1",
|
||||
"SELECT x1 FROM (SELECT * FROM x WHERE x1 > 0 ORDER BY x1)",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> WHERE x1 > 0 |> SELECT x1 |> ORDER BY x1",
|
||||
"SELECT x1 FROM (SELECT * FROM x WHERE x1 > 0) ORDER BY x1",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> SELECT x1, x2, x3 |> ORDER BY x1 DESC NULLS FIRST, x2 ASC NULLS LAST, x3",
|
||||
"SELECT x1, x2, x3 FROM (SELECT * FROM x) ORDER BY x1 DESC NULLS FIRST, x2 ASC NULLS LAST, x3",
|
||||
)
|
||||
for option in ("LIMIT 1", "OFFSET 2", "LIMIT 1 OFFSET 2"):
|
||||
with self.subTest(f"Testing pipe syntax LIMIT and OFFSET option: {option}"):
|
||||
self.validate_identity(f"FROM x |> {option}", f"SELECT * FROM x {option}")
|
||||
self.validate_identity(f"FROM x |> {option}", f"SELECT * FROM x {option}")
|
||||
self.validate_identity(
|
||||
f"FROM x |> {option} |> SELECT x1, x2 |> WHERE x1 > 0 |> WHERE x2 > 0 |> ORDER BY x1, x2 ",
|
||||
f"SELECT x1, x2 FROM (SELECT * FROM x {option}) WHERE x1 > 0 AND x2 > 0 ORDER BY x1, x2",
|
||||
)
|
||||
self.validate_identity(
|
||||
f"FROM x |> SELECT x1, x2 |> WHERE x1 > 0 |> WHERE x2 > 0 |> ORDER BY x1, x2 |> {option}",
|
||||
f"SELECT x1, x2 FROM (SELECT * FROM x) WHERE x1 > 0 AND x2 > 0 ORDER BY x1, x2 {option}",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> AGGREGATE SUM(x1), MAX(x2), MIN(x3)",
|
||||
"SELECT SUM(x1), MAX(x2), MIN(x3) FROM (SELECT * FROM x)",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> AGGREGATE SUM(x1) AS s_x1 |> SELECT s_x1",
|
||||
"SELECT s_x1 FROM (SELECT SUM(x1) AS s_x1 FROM (SELECT * FROM x))",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> AGGREGATE SUM(x1), MAX(x2), MIN(x3) GROUP BY x4, x5",
|
||||
"SELECT SUM(x1), MAX(x2), MIN(x3), x4, x5 FROM (SELECT * FROM x) GROUP BY x4, x5",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> AGGREGATE SUM(x1), MAX(x2), MIN(x3) GROUP BY x4 AS a_x4, x5 AS a_x5",
|
||||
"SELECT SUM(x1), MAX(x2), MIN(x3), x4 AS a_x4, x5 AS a_x5 FROM (SELECT * FROM x) GROUP BY a_x4, a_x5",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> AGGREGATE SUM(x1) as s_x1 GROUP BY x1 |> SELECT s_x1, x1 as ss_x1",
|
||||
"SELECT s_x1, x1 AS ss_x1 FROM (SELECT SUM(x1) AS s_x1, x1 FROM (SELECT * FROM x) GROUP BY x1)",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> AGGREGATE SUM(x1) GROUP", "SELECT SUM(x1) AS GROUP FROM (SELECT * FROM x)"
|
||||
)
|
||||
for order_option in ("ASC", "DESC", "ASC NULLS LAST", "DESC NULLS FIRST"):
|
||||
with self.subTest(f"Testing pipe syntax AGGREGATE for order option: {order_option}"):
|
||||
self.validate_all(
|
||||
f"SELECT SUM(x1) AS x_s FROM (SELECT * FROM x) ORDER BY x_s {order_option}",
|
||||
read={
|
||||
"bigquery": f"FROM x |> AGGREGATE SUM(x1) AS x_s {order_option}",
|
||||
},
|
||||
)
|
||||
self.validate_all(
|
||||
f"SELECT SUM(x1) AS x_s, x1 AS g_x1 FROM (SELECT * FROM x) GROUP BY g_x1 ORDER BY x_s {order_option}",
|
||||
read={
|
||||
"bigquery": f"FROM x |> AGGREGATE SUM(x1) AS x_s {order_option} GROUP BY x1 AS g_x1",
|
||||
},
|
||||
)
|
||||
with self.subTest(
|
||||
f"Testing pipe syntax AGGREGATE with GROUP AND ORDER BY for order option: {order_option}"
|
||||
):
|
||||
self.validate_all(
|
||||
f"SELECT g_x1, x_s FROM (SELECT SUM(x1) AS x_s, x1 AS g_x1 FROM (SELECT * FROM x) GROUP BY g_x1 ORDER BY g_x1 {order_option})",
|
||||
read={
|
||||
"bigquery": f"FROM x |> AGGREGATE SUM(x1) AS x_s GROUP AND ORDER BY x1 AS g_x1 {order_option} |> SELECT g_x1, x_s",
|
||||
},
|
||||
)
|
||||
|
||||
for op_operator in (
|
||||
"UNION ALL",
|
||||
"UNION DISTINCT",
|
||||
"INTERSECT DISTINCT",
|
||||
"EXCEPT DISTINCT",
|
||||
):
|
||||
with self.subTest(f"Testing pipe syntax SET OPERATORS: {op_operator}"):
|
||||
self.validate_all(
|
||||
f"FROM x|> {op_operator} (SELECT y1 FROM y), (SELECT z1 FROM z)",
|
||||
write={
|
||||
"bigquery": f"SELECT * FROM x {op_operator} (SELECT y1 FROM y) {op_operator} (SELECT z1 FROM z)",
|
||||
},
|
||||
)
|
||||
|
||||
for op_prefix in ("LEFT OUTER", "FULL OUTER"):
|
||||
for op_operator in (
|
||||
"UNION ALL",
|
||||
"UNION DISTINCT",
|
||||
"INTERSECT DISTINCT",
|
||||
"EXCEPT DISTINCT",
|
||||
):
|
||||
for suffix_operator in ("BY NAME", "CORRESPONDING"):
|
||||
with self.subTest(
|
||||
f"Testing pipe syntax SET OPERATORS: {op_prefix} {op_operator} {suffix_operator}"
|
||||
):
|
||||
self.validate_all(
|
||||
f"FROM x|> SELECT x1, x2 FROM x |> {op_prefix} {op_operator} {suffix_operator} (SELECT y1, y2 FROM y), (SELECT z1, z2 FROM z)",
|
||||
write={
|
||||
"bigquery": f"SELECT x1, x2 FROM (SELECT * FROM x) {op_prefix} {op_operator} BY NAME (SELECT y1, y2 FROM y) {op_prefix} {op_operator} BY NAME (SELECT z1, z2 FROM z)",
|
||||
},
|
||||
)
|
||||
|
|
|
@ -732,12 +732,20 @@ class TestHive(Validator):
|
|||
},
|
||||
)
|
||||
self.validate_all(
|
||||
"x div y",
|
||||
"x DIV y",
|
||||
read={
|
||||
"databricks": "x DIV y",
|
||||
"duckdb": "x // y",
|
||||
"hive": "x DIV y",
|
||||
"spark2": "x DIV y",
|
||||
"spark": "x DIV y",
|
||||
},
|
||||
write={
|
||||
"duckdb": "x // y",
|
||||
"databricks": "x DIV y",
|
||||
"presto": "CAST(CAST(x AS DOUBLE) / y AS INTEGER)",
|
||||
"hive": "CAST(x / y AS INT)",
|
||||
"spark": "CAST(x / y AS INT)",
|
||||
"spark2": "x DIV y",
|
||||
"spark": "x DIV y",
|
||||
},
|
||||
)
|
||||
self.validate_all(
|
||||
|
|
|
@ -89,6 +89,20 @@ class TestMySQL(Validator):
|
|||
self.validate_identity(
|
||||
"CREATE TABLE test_table (id INT AUTO_INCREMENT, PRIMARY KEY (id) USING HASH)"
|
||||
)
|
||||
self.validate_identity(
|
||||
"CREATE TABLE test (a INT, b INT GENERATED ALWAYS AS (a + a) STORED)"
|
||||
)
|
||||
self.validate_identity(
|
||||
"CREATE TABLE test (a INT, b INT GENERATED ALWAYS AS (a + a) VIRTUAL)"
|
||||
)
|
||||
self.validate_identity(
|
||||
"CREATE TABLE test (a INT, b INT AS (a + a) STORED)",
|
||||
"CREATE TABLE test (a INT, b INT GENERATED ALWAYS AS (a + a) STORED)",
|
||||
)
|
||||
self.validate_identity(
|
||||
"CREATE TABLE test (a INT, b INT AS (a + a) VIRTUAL)",
|
||||
"CREATE TABLE test (a INT, b INT GENERATED ALWAYS AS (a + a) VIRTUAL)",
|
||||
)
|
||||
self.validate_identity(
|
||||
"/*left*/ EXPLAIN SELECT /*hint*/ col FROM t1 /*right*/",
|
||||
"/* left */ DESCRIBE /* hint */ SELECT col FROM t1 /* right */",
|
||||
|
|
380
tests/dialects/test_pipe_syntax.py
Normal file
380
tests/dialects/test_pipe_syntax.py
Normal file
|
@ -0,0 +1,380 @@
|
|||
from tests.dialects.test_dialect import Validator
|
||||
|
||||
|
||||
class TestPipeSyntax(Validator):
|
||||
def test_select(self):
|
||||
self.validate_identity("FROM x", "SELECT * FROM x")
|
||||
self.validate_identity(
|
||||
"FROM x |> SELECT x1, x2", "WITH __tmp1 AS (SELECT x1, x2 FROM x) SELECT * FROM __tmp1"
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> SELECT x.x1, x.x2",
|
||||
"WITH __tmp1 AS (SELECT x.x1, x.x2 FROM x) SELECT * FROM __tmp1",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> SELECT x1 as c1, x2 as c2",
|
||||
"WITH __tmp1 AS (SELECT x1 AS c1, x2 AS c2 FROM x) SELECT * FROM __tmp1",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> SELECT x1 + 1 as x1_a, x2 - 1 as x2_a |> WHERE x1_a > 1",
|
||||
"WITH __tmp1 AS (SELECT x1 + 1 AS x1_a, x2 - 1 AS x2_a FROM x) SELECT * FROM __tmp1 WHERE x1_a > 1",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> SELECT x1 + 1 as x1_a, x2 - 1 as x2_a |> WHERE x1_a > 1 |> SELECT x2_a",
|
||||
"WITH __tmp1 AS (SELECT x1 + 1 AS x1_a, x2 - 1 AS x2_a FROM x), __tmp2 AS (SELECT * FROM __tmp1 WHERE x1_a > 1) SELECT x2_a FROM __tmp2",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> WHERE x1 > 0 OR x2 > 0 |> WHERE x3 > 1 AND x4 > 1 |> SELECT x1, x4",
|
||||
"WITH __tmp1 AS (SELECT x1, x4 FROM x WHERE (x1 > 0 OR x2 > 0) AND (x3 > 1 AND x4 > 1)) SELECT * FROM __tmp1",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> WHERE x1 > 1 |> WHERE x2 > 2 |> SELECT x1 as gt1, x2 as gt2",
|
||||
"WITH __tmp1 AS (SELECT x1 AS gt1, x2 AS gt2 FROM x WHERE x1 > 1 AND x2 > 2) SELECT * FROM __tmp1",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> WHERE x1 > 1 AND x2 > 2 |> SELECT x1 as gt1, x2 as gt2 |> SELECT gt1 * 2 + gt2 * 2 AS gt2_2",
|
||||
"WITH __tmp1 AS (SELECT x1 AS gt1, x2 AS gt2 FROM x WHERE x1 > 1 AND x2 > 2), __tmp2 AS (SELECT * FROM __tmp1) SELECT gt1 * 2 + gt2 * 2 AS gt2_2 FROM __tmp2",
|
||||
)
|
||||
|
||||
def test_order_by(self):
|
||||
self.validate_identity("FROM x |> ORDER BY x1", "SELECT * FROM x ORDER BY x1")
|
||||
self.validate_identity(
|
||||
"FROM x |> ORDER BY x1 |> ORDER BY x2", "SELECT * FROM x ORDER BY x2"
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> ORDER BY x1 |> WHERE x1 > 0 OR x1 != 1 |> ORDER BY x2 |> WHERE x2 > 0 AND x2 != 1 |> SELECT x1, x2",
|
||||
"WITH __tmp1 AS (SELECT x1, x2 FROM x WHERE (x1 > 0 OR x1 <> 1) AND (x2 > 0 AND x2 <> 1) ORDER BY x2) SELECT * FROM __tmp1",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> ORDER BY x1 |> WHERE x1 > 0 |> SELECT x1",
|
||||
"WITH __tmp1 AS (SELECT x1 FROM x WHERE x1 > 0 ORDER BY x1) SELECT * FROM __tmp1",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> WHERE x1 > 0 |> SELECT x1 |> ORDER BY x1",
|
||||
"WITH __tmp1 AS (SELECT x1 FROM x WHERE x1 > 0) SELECT * FROM __tmp1 ORDER BY x1",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> SELECT x1, x2, x3 |> ORDER BY x1 DESC NULLS FIRST, x2 ASC NULLS LAST, x3",
|
||||
"WITH __tmp1 AS (SELECT x1, x2, x3 FROM x) SELECT * FROM __tmp1 ORDER BY x1 DESC NULLS FIRST, x2 ASC NULLS LAST, x3",
|
||||
)
|
||||
|
||||
def test_limit(self):
|
||||
for option in ("LIMIT 1", "LIMIT 1 OFFSET 2"):
|
||||
with self.subTest(f"Testing pipe syntax LIMIT and OFFSET option: {option}"):
|
||||
self.validate_identity(f"FROM x |> {option}", f"SELECT * FROM x {option}")
|
||||
self.validate_identity(f"FROM x |> {option}", f"SELECT * FROM x {option}")
|
||||
self.validate_identity(
|
||||
f"FROM x |> {option} |> SELECT x1, x2 |> WHERE x1 > 0 |> WHERE x2 > 0 |> ORDER BY x1, x2",
|
||||
f"WITH __tmp1 AS (SELECT x1, x2 FROM x {option}) SELECT * FROM __tmp1 WHERE x1 > 0 AND x2 > 0 ORDER BY x1, x2",
|
||||
)
|
||||
self.validate_identity(
|
||||
f"FROM x |> SELECT x1, x2 |> WHERE x1 > 0 |> WHERE x2 > 0 |> ORDER BY x1, x2 |> {option}",
|
||||
f"WITH __tmp1 AS (SELECT x1, x2 FROM x) SELECT * FROM __tmp1 WHERE x1 > 0 AND x2 > 0 ORDER BY x1, x2 {option}",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> SELECT x1, x2 |> LIMIT 2 |> LIMIT 4",
|
||||
"WITH __tmp1 AS (SELECT x1, x2 FROM x) SELECT * FROM __tmp1 LIMIT 2",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> SELECT x1, x2 |> LIMIT 2 OFFSET 2 |> LIMIT 4 OFFSET 2",
|
||||
"WITH __tmp1 AS (SELECT x1, x2 FROM x) SELECT * FROM __tmp1 LIMIT 2 OFFSET 4",
|
||||
)
|
||||
|
||||
def test_aggregate(self):
|
||||
self.validate_identity(
|
||||
"FROM x |> AGGREGATE SUM(x1), MAX(x2), MIN(x3)",
|
||||
"WITH __tmp1 AS (SELECT SUM(x1), MAX(x2), MIN(x3) FROM x) SELECT * FROM __tmp1",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> AGGREGATE SUM(x1) AS s_x1 |> SELECT s_x1",
|
||||
"WITH __tmp1 AS (SELECT SUM(x1) AS s_x1 FROM x), __tmp2 AS (SELECT * FROM __tmp1) SELECT s_x1 FROM __tmp2",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> AGGREGATE SUM(x1), MAX(x2), MIN(x3) GROUP BY x4, x5",
|
||||
"WITH __tmp1 AS (SELECT SUM(x1), MAX(x2), MIN(x3), x4, x5 FROM x GROUP BY x4, x5) SELECT * FROM __tmp1",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> AGGREGATE SUM(x1), MAX(x2), MIN(x3) GROUP BY x4 AS a_x4, x5 AS a_x5",
|
||||
"WITH __tmp1 AS (SELECT SUM(x1), MAX(x2), MIN(x3), x4 AS a_x4, x5 AS a_x5 FROM x GROUP BY a_x4, a_x5) SELECT * FROM __tmp1",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> AGGREGATE SUM(x1) as s_x1 GROUP BY x1 |> SELECT s_x1, x1 as ss_x1",
|
||||
"WITH __tmp1 AS (SELECT SUM(x1) AS s_x1, x1 FROM x GROUP BY x1), __tmp2 AS (SELECT * FROM __tmp1) SELECT s_x1, x1 AS ss_x1 FROM __tmp2",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> AGGREGATE SUM(x1) GROUP",
|
||||
"WITH __tmp1 AS (SELECT SUM(x1) AS GROUP FROM x) SELECT * FROM __tmp1",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> AGGREGATE SUM(x1) as s_x1 GROUP BY x2 as g_x2 |> WHERE s_x1 > 0",
|
||||
"WITH __tmp1 AS (SELECT SUM(x1) AS s_x1, x2 AS g_x2 FROM x GROUP BY g_x2) SELECT * FROM __tmp1 WHERE s_x1 > 0",
|
||||
)
|
||||
for order_option in ("ASC", "DESC", "ASC NULLS LAST", "DESC NULLS FIRST"):
|
||||
with self.subTest(f"Testing pipe syntax AGGREGATE for order option: {order_option}"):
|
||||
self.validate_all(
|
||||
f"WITH __tmp1 AS (SELECT SUM(x1) AS x_s FROM x ORDER BY x_s {order_option}) SELECT * FROM __tmp1",
|
||||
read={
|
||||
"bigquery": f"FROM x |> AGGREGATE SUM(x1) AS x_s {order_option}",
|
||||
},
|
||||
)
|
||||
self.validate_all(
|
||||
f"WITH __tmp1 AS (SELECT SUM(x1) AS x_s, x1 AS g_x1 FROM x GROUP BY g_x1 ORDER BY x_s {order_option}) SELECT * FROM __tmp1",
|
||||
read={
|
||||
"bigquery": f"FROM x |> AGGREGATE SUM(x1) AS x_s {order_option} GROUP BY x1 AS g_x1",
|
||||
},
|
||||
)
|
||||
with self.subTest(
|
||||
f"Testing pipe syntax AGGREGATE with GROUP AND ORDER BY for order option: {order_option}"
|
||||
):
|
||||
self.validate_all(
|
||||
f"WITH __tmp1 AS (SELECT SUM(x1) AS x_s, x1 AS g_x1 FROM x GROUP BY g_x1 ORDER BY g_x1 {order_option}), __tmp2 AS (SELECT * FROM __tmp1) SELECT g_x1, x_s FROM __tmp2",
|
||||
read={
|
||||
"bigquery": f"FROM x |> AGGREGATE SUM(x1) AS x_s GROUP AND ORDER BY x1 AS g_x1 {order_option} |> SELECT g_x1, x_s",
|
||||
},
|
||||
)
|
||||
|
||||
def test_set_operators(self):
|
||||
self.validate_identity(
|
||||
"FROM x |> SELECT x.x1 |> UNION ALL (SELECT 1 AS c)",
|
||||
"WITH __tmp1 AS (SELECT x.x1 FROM x), __tmp2 AS (SELECT * FROM __tmp1), __tmp3 AS (SELECT * FROM __tmp2 UNION ALL (SELECT 1 AS c)) SELECT * FROM __tmp3",
|
||||
)
|
||||
|
||||
for op_operator in (
|
||||
"UNION ALL",
|
||||
"UNION DISTINCT",
|
||||
"INTERSECT DISTINCT",
|
||||
"EXCEPT DISTINCT",
|
||||
):
|
||||
with self.subTest(f"Testing pipe syntax SET OPERATORS: {op_operator}"):
|
||||
self.validate_all(
|
||||
f"FROM x|> {op_operator} (SELECT y1 FROM y), (SELECT z1 FROM z)",
|
||||
write={
|
||||
"bigquery": f"WITH __tmp1 AS (SELECT * FROM x), __tmp2 AS (SELECT * FROM __tmp1 {op_operator} (SELECT y1 FROM y) {op_operator} (SELECT z1 FROM z)) SELECT * FROM __tmp2"
|
||||
},
|
||||
)
|
||||
|
||||
for op_prefix in ("LEFT OUTER", "FULL OUTER"):
|
||||
for op_operator in (
|
||||
"UNION ALL",
|
||||
"UNION DISTINCT",
|
||||
"INTERSECT DISTINCT",
|
||||
"EXCEPT DISTINCT",
|
||||
):
|
||||
with self.subTest(f"Testing pipe syntax SET OPERATORS: {op_prefix} {op_operator}"):
|
||||
self.validate_all(
|
||||
f"FROM x|> SELECT x1, x2 |> {op_prefix} {op_operator} BY NAME (SELECT y1, y2 FROM y), (SELECT z1, z2 FROM z)",
|
||||
write={
|
||||
"bigquery": f"WITH __tmp1 AS (SELECT x1, x2 FROM x), __tmp2 AS (SELECT * FROM __tmp1), __tmp3 AS (SELECT * FROM __tmp2 {op_prefix} {op_operator} BY NAME (SELECT y1, y2 FROM y) {op_prefix} {op_operator} BY NAME (SELECT z1, z2 FROM z)) SELECT * FROM __tmp3",
|
||||
},
|
||||
)
|
||||
|
||||
self.validate_identity(
|
||||
"FROM d.x |> SELECT x.x1 |> UNION (SELECT 2 AS a1) |> SELECT x1 |> UNION (SELECT 3 as a2) |> SELECT x1 |> WHERE x1 > 100",
|
||||
"""WITH __tmp1 AS (
|
||||
SELECT
|
||||
x.x1
|
||||
FROM d.x
|
||||
), __tmp2 AS (
|
||||
SELECT
|
||||
*
|
||||
FROM __tmp1
|
||||
), __tmp3 AS (
|
||||
SELECT
|
||||
*
|
||||
FROM __tmp2
|
||||
UNION
|
||||
(
|
||||
SELECT
|
||||
2 AS a1
|
||||
)
|
||||
), __tmp4 AS (
|
||||
SELECT
|
||||
*
|
||||
FROM __tmp3
|
||||
), __tmp5 AS (
|
||||
SELECT
|
||||
x1
|
||||
FROM __tmp4
|
||||
), __tmp6 AS (
|
||||
SELECT
|
||||
*
|
||||
FROM __tmp5
|
||||
UNION
|
||||
(
|
||||
SELECT
|
||||
3 AS a2
|
||||
)
|
||||
), __tmp7 AS (
|
||||
SELECT
|
||||
*
|
||||
FROM __tmp6
|
||||
)
|
||||
SELECT
|
||||
x1
|
||||
FROM __tmp7
|
||||
WHERE
|
||||
x1 > 100""",
|
||||
pretty=True,
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM c.x |> UNION ALL (SELECT 2 AS a1, '2' as a2) |> AGGREGATE AVG(x1) as m_x1 |> SELECT * |> UNION ALL (SELECT y1 FROM c.y) |> SELECT m_x1",
|
||||
"""WITH __tmp1 AS (
|
||||
SELECT
|
||||
*
|
||||
FROM c.x
|
||||
), __tmp2 AS (
|
||||
SELECT
|
||||
*
|
||||
FROM __tmp1
|
||||
UNION ALL
|
||||
(
|
||||
SELECT
|
||||
2 AS a1,
|
||||
'2' AS a2
|
||||
)
|
||||
), __tmp3 AS (
|
||||
SELECT
|
||||
*,
|
||||
AVG(x1) AS m_x1
|
||||
FROM __tmp2
|
||||
), __tmp4 AS (
|
||||
SELECT
|
||||
*
|
||||
FROM __tmp3
|
||||
), __tmp5 AS (
|
||||
SELECT
|
||||
*
|
||||
FROM __tmp4
|
||||
), __tmp6 AS (
|
||||
SELECT
|
||||
*
|
||||
FROM __tmp5
|
||||
UNION ALL
|
||||
(
|
||||
SELECT
|
||||
y1
|
||||
FROM c.y
|
||||
)
|
||||
), __tmp7 AS (
|
||||
SELECT
|
||||
*
|
||||
FROM __tmp6
|
||||
)
|
||||
SELECT
|
||||
m_x1
|
||||
FROM __tmp7""",
|
||||
pretty=True,
|
||||
)
|
||||
|
||||
self.validate_identity(
|
||||
"FROM c.x |> UNION ALL (SELECT 2 AS a1, '2' as a2) |> UNION ALL (SELECT y1 FROM c.y) |> WHERE x > 200",
|
||||
"""WITH __tmp1 AS (
|
||||
SELECT
|
||||
*
|
||||
FROM c.x
|
||||
), __tmp2 AS (
|
||||
SELECT
|
||||
*
|
||||
FROM __tmp1
|
||||
UNION ALL
|
||||
(
|
||||
SELECT
|
||||
2 AS a1,
|
||||
'2' AS a2
|
||||
)
|
||||
), __tmp3 AS (
|
||||
SELECT
|
||||
*
|
||||
FROM __tmp2
|
||||
), __tmp4 AS (
|
||||
SELECT
|
||||
*
|
||||
FROM __tmp3
|
||||
UNION ALL
|
||||
(
|
||||
SELECT
|
||||
y1
|
||||
FROM c.y
|
||||
)
|
||||
)
|
||||
SELECT
|
||||
*
|
||||
FROM __tmp4
|
||||
WHERE
|
||||
x > 200""",
|
||||
pretty=True,
|
||||
)
|
||||
|
||||
def test_join(self):
|
||||
self.validate_identity("FROM x |> CROSS JOIN y", "SELECT * FROM x CROSS JOIN y")
|
||||
for join_type in (
|
||||
"JOIN",
|
||||
"INNER JOIN",
|
||||
"FULL JOIN",
|
||||
"FULL OUTER JOIN",
|
||||
"LEFT JOIN",
|
||||
"LEFT OUTER JOIN",
|
||||
"RIGHT JOIN",
|
||||
"RIGHT OUTER JOIN",
|
||||
):
|
||||
with self.subTest(f"Testing pipe syntax no projecton with JOIN : {join_type}"):
|
||||
self.validate_identity(
|
||||
f"FROM x |> {join_type} y ON x.id = y.id",
|
||||
f"SELECT * FROM x {join_type} y ON x.id = y.id",
|
||||
)
|
||||
with self.subTest(f"Testing pipe syntax projection with JOIN: {join_type}"):
|
||||
self.validate_identity(
|
||||
f"FROM x |> SELECT id |> {join_type} y ON x.id = y.id",
|
||||
f"WITH __tmp1 AS (SELECT id FROM x) SELECT * FROM __tmp1 {join_type} y ON x.id = y.id",
|
||||
)
|
||||
with self.subTest(f"Testing pipe syntax complex queries with JOIN: {join_type}"):
|
||||
self.validate_identity(
|
||||
f"FROM x |> {join_type} y ON x.id = y.id |> SELECT x1 as a_x1, x2 |> UNION ALL (SELECT 1, 2) |> WHERE a_x1 > 0",
|
||||
f"""WITH __tmp1 AS (
|
||||
SELECT
|
||||
x1 AS a_x1,
|
||||
x2
|
||||
FROM x
|
||||
{join_type} y
|
||||
ON x.id = y.id
|
||||
), __tmp2 AS (
|
||||
SELECT
|
||||
*
|
||||
FROM __tmp1
|
||||
), __tmp3 AS (
|
||||
SELECT
|
||||
*
|
||||
FROM __tmp2
|
||||
UNION ALL
|
||||
(
|
||||
SELECT
|
||||
1,
|
||||
2
|
||||
)
|
||||
)
|
||||
SELECT
|
||||
*
|
||||
FROM __tmp3
|
||||
WHERE
|
||||
a_x1 > 0""",
|
||||
pretty=True,
|
||||
)
|
||||
|
||||
def test_pivot_unpivot(self):
|
||||
self.validate_identity(
|
||||
"FROM x |> PIVOT(SUM(x1) FOR quarter IN ('foo1', 'foo2'))",
|
||||
"WITH __tmp1 AS (SELECT * FROM x PIVOT(SUM(x1) FOR quarter IN ('foo1', 'foo2'))) SELECT * FROM __tmp1",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> JOIN y on x.id = y.id |> PIVOT(SUM(x1) FOR quarter IN ('foo1', 'foo2'))",
|
||||
"WITH __tmp1 AS (SELECT * FROM x PIVOT(SUM(x1) FOR quarter IN ('foo1', 'foo2')) JOIN y ON x.id = y.id) SELECT * FROM __tmp1",
|
||||
)
|
||||
|
||||
self.validate_identity(
|
||||
"FROM x |> UNPIVOT(col FOR item IN (foo1, foo2))",
|
||||
"WITH __tmp1 AS (SELECT * FROM x UNPIVOT(col FOR item IN (foo1, foo2))) SELECT * FROM __tmp1",
|
||||
)
|
||||
self.validate_identity(
|
||||
"FROM x |> JOIN y on x.id = y.id |> UNPIVOT(col FOR item IN (foo1, foo2))",
|
||||
"WITH __tmp1 AS (SELECT * FROM x UNPIVOT(col FOR item IN (foo1, foo2)) JOIN y ON x.id = y.id) SELECT * FROM __tmp1",
|
||||
)
|
|
@ -1449,3 +1449,14 @@ CROSS JOIN JSON_ARRAY_ELEMENTS(CAST(JSON_EXTRACT_PATH(tbox, 'boxes') AS JSON)) A
|
|||
"clickhouse": "SELECT JSONExtractString(foo, '12')",
|
||||
},
|
||||
)
|
||||
|
||||
def test_udt(self):
|
||||
def _validate_udt(sql: str):
|
||||
self.validate_identity(sql).to.assert_is(exp.DataType)
|
||||
|
||||
_validate_udt("CAST(5 AS MyType)")
|
||||
_validate_udt('CAST(5 AS "MyType")')
|
||||
_validate_udt("CAST(5 AS MySchema.MyType)")
|
||||
_validate_udt('CAST(5 AS "MySchema"."MyType")')
|
||||
_validate_udt('CAST(5 AS MySchema."MyType")')
|
||||
_validate_udt('CAST(5 AS "MyCatalog"."MySchema"."MyType")')
|
||||
|
|
|
@ -22,6 +22,9 @@ class TestSnowflake(Validator):
|
|||
expr.selects[0].assert_is(exp.AggFunc)
|
||||
self.assertEqual(expr.sql(dialect="snowflake"), "SELECT APPROX_TOP_K(C4, 3, 5) FROM t")
|
||||
|
||||
self.validate_identity("STRTOK_TO_ARRAY('a b c')")
|
||||
self.validate_identity("STRTOK_TO_ARRAY('a.b.c', '.')")
|
||||
self.validate_identity("GET(a, b)")
|
||||
self.validate_identity("INSERT INTO test VALUES (x'48FAF43B0AFCEF9B63EE3A93EE2AC2')")
|
||||
self.validate_identity("SELECT STAR(tbl, exclude := [foo])")
|
||||
self.validate_identity("SELECT CAST([1, 2, 3] AS VECTOR(FLOAT, 3))")
|
||||
|
@ -107,6 +110,10 @@ class TestSnowflake(Validator):
|
|||
self.validate_identity(
|
||||
"""SELECT TO_TIMESTAMP('2025-01-16T14:45:30.123+0500', 'yyyy-mm-DD"T"hh24:mi:ss.ff3TZHTZM')"""
|
||||
)
|
||||
self.validate_identity(
|
||||
"GET(value, 'foo')::VARCHAR",
|
||||
"CAST(GET(value, 'foo') AS VARCHAR)",
|
||||
)
|
||||
self.validate_identity(
|
||||
"SELECT 1 put",
|
||||
"SELECT 1 AS put",
|
||||
|
|
|
@ -247,6 +247,8 @@ TBLPROPERTIES (
|
|||
"REFRESH TABLE t",
|
||||
)
|
||||
|
||||
self.validate_identity("ALTER TABLE foo ADD PARTITION(event = 'click')")
|
||||
self.validate_identity("ALTER TABLE foo ADD IF NOT EXISTS PARTITION(event = 'click')")
|
||||
self.validate_identity("IF(cond, foo AS bar, bla AS baz)")
|
||||
self.validate_identity("any_value(col, true)", "ANY_VALUE(col) IGNORE NULLS")
|
||||
self.validate_identity("first(col, true)", "FIRST(col) IGNORE NULLS")
|
||||
|
|
|
@ -20,14 +20,18 @@ class TestSQLite(Validator):
|
|||
self.validate_identity("SELECT (JULIANDAY('now') - 2440587.5) * 86400.0")
|
||||
self.validate_identity("SELECT UNIXEPOCH('now', 'subsec')")
|
||||
self.validate_identity("SELECT TIMEDIFF('now', '1809-02-12')")
|
||||
self.validate_identity("SELECT * FROM GENERATE_SERIES(1, 5)")
|
||||
self.validate_identity("SELECT INSTR(haystack, needle)")
|
||||
self.validate_identity(
|
||||
"SELECT JSON_EXTRACT('[10, 20, [30, 40]]', '$[2]', '$[0]', '$[1]')",
|
||||
)
|
||||
self.validate_identity(
|
||||
"""SELECT item AS "item", some AS "some" FROM data WHERE (item = 'value_1' COLLATE NOCASE) AND (some = 't' COLLATE NOCASE) ORDER BY item ASC LIMIT 1 OFFSET 0"""
|
||||
)
|
||||
self.validate_identity("SELECT * FROM GENERATE_SERIES(1, 5)")
|
||||
self.validate_identity("SELECT INSTR(haystack, needle)")
|
||||
self.validate_identity(
|
||||
"ALTER TABLE t RENAME a TO b",
|
||||
"ALTER TABLE t RENAME COLUMN a TO b",
|
||||
)
|
||||
|
||||
self.validate_all("SELECT LIKE(y, x)", write={"sqlite": "SELECT x LIKE y"})
|
||||
self.validate_all("SELECT GLOB('*y*', 'xyz')", write={"sqlite": "SELECT 'xyz' GLOB '*y*'"})
|
||||
|
|
|
@ -39,7 +39,7 @@ class TestTSQL(Validator):
|
|||
self.validate_identity("CAST(x AS int) OR y", "CAST(x AS INTEGER) <> 0 OR y <> 0")
|
||||
self.validate_identity("TRUNCATE TABLE t1 WITH (PARTITIONS(1, 2 TO 5, 10 TO 20, 84))")
|
||||
self.validate_identity(
|
||||
"SELECT TOP 10 s.RECORDID, n.c.value('(/*:FORM_ROOT/*:SOME_TAG)[1]', 'float') AS SOME_TAG_VALUE FROM source_table.dbo.source_data AS s(nolock) CROSS APPLY FormContent.nodes('/*:FORM_ROOT') AS N(C)"
|
||||
"SELECT TOP 10 s.RECORDID, n.c.VALUE('(/*:FORM_ROOT/*:SOME_TAG)[1]', 'float') AS SOME_TAG_VALUE FROM source_table.dbo.source_data AS s(nolock) CROSS APPLY FormContent.nodes('/*:FORM_ROOT') AS N(C)"
|
||||
)
|
||||
self.validate_identity(
|
||||
"CREATE CLUSTERED INDEX [IX_OfficeTagDetail_TagDetailID] ON [dbo].[OfficeTagDetail]([TagDetailID] ASC)"
|
||||
|
|
4
tests/fixtures/identity.sql
vendored
4
tests/fixtures/identity.sql
vendored
|
@ -890,4 +890,6 @@ CAST(x AS UINT128)
|
|||
CAST(x AS UINT256)
|
||||
SELECT export
|
||||
SELECT ARG_MAX(DISTINCT selected_col, filtered_col) FROM table
|
||||
SELECT ARG_MIN(DISTINCT selected_col, filtered_col) FROM table
|
||||
SELECT ARG_MIN(DISTINCT selected_col, filtered_col) FROM table
|
||||
a.b.c.D()
|
||||
a.b.c.d.e.f.G()
|
||||
|
|
|
@ -1003,3 +1003,9 @@ class TestParser(unittest.TestCase):
|
|||
|
||||
table_meta = ast.args["from"].this.this.meta
|
||||
self.assertEqual(sql[table_meta["start"] : table_meta["end"] + 1], '"test_table_a"')
|
||||
|
||||
def test_qualified_function(self):
|
||||
sql = "a.b.c.d.e.f.g.foo()"
|
||||
ast = parse_one(sql)
|
||||
assert not any(isinstance(n, exp.Column) for n in ast.walk())
|
||||
assert len(list(ast.find_all(exp.Dot))) == 7
|
||||
|
|
|
@ -17,7 +17,8 @@ class TestTransforms(unittest.TestCase):
|
|||
def validate(self, transform, sql, target, dialect=None):
|
||||
with self.subTest(f"{dialect} - {sql}"):
|
||||
self.assertEqual(
|
||||
parse_one(sql, dialect=dialect).transform(transform).sql(dialect=dialect), target
|
||||
parse_one(sql, dialect=dialect).transform(transform).sql(dialect=dialect),
|
||||
target,
|
||||
)
|
||||
|
||||
def test_unalias_group(self):
|
||||
|
@ -274,6 +275,42 @@ class TestTransforms(unittest.TestCase):
|
|||
== "SELECT a.id FROM a LEFT JOIN b ON a.id = b.id AND b.d = const"
|
||||
)
|
||||
|
||||
# validate parens
|
||||
self.validate(
|
||||
eliminate_join_marks,
|
||||
"select t1.a, t2.b from t1, t2 where (1 = 1) and (t1.id = t2.id1 (+))",
|
||||
"SELECT t1.a, t2.b FROM t1 LEFT JOIN t2 ON t1.id = t2.id1 WHERE (1 = 1)",
|
||||
dialect,
|
||||
)
|
||||
|
||||
# validate a CASE
|
||||
self.validate(
|
||||
eliminate_join_marks,
|
||||
"select t1.a, t2.b from t1, t2 where t1.id = case when t2.id (+) = 'n/a' then null else t2.id (+) end",
|
||||
"SELECT t1.a, t2.b FROM t1 LEFT JOIN t2 ON t1.id = CASE WHEN t2.id = 'n/a' THEN NULL ELSE t2.id END",
|
||||
dialect,
|
||||
)
|
||||
|
||||
# validate OR
|
||||
self.validate(
|
||||
eliminate_join_marks,
|
||||
"select t1.a, t2.b from t1, t2 where t1.id = t2.id1 (+) or t1.id = t2.id2 (+)",
|
||||
"SELECT t1.a, t2.b FROM t1 LEFT JOIN t2 ON t1.id = t2.id1 OR t1.id = t2.id2",
|
||||
dialect,
|
||||
)
|
||||
|
||||
# validate knockout
|
||||
script = """
|
||||
SELECT c.customer_name,
|
||||
(SELECT MAX(o.order_date)
|
||||
FROM orders o
|
||||
WHERE o.customer_id(+) = c.customer_id) AS latest_order_date
|
||||
FROM customers c
|
||||
"""
|
||||
self.assertRaises(
|
||||
AssertionError, eliminate_join_marks, parse_one(script, dialect=dialect)
|
||||
)
|
||||
|
||||
def test_eliminate_window_clause(self):
|
||||
self.validate(
|
||||
eliminate_window_clause,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue