Merging upstream version 25.0.3.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
03b67e2ec9
commit
021892b3ff
84 changed files with 33016 additions and 31040 deletions
67
CHANGELOG.md
67
CHANGELOG.md
|
@ -1,6 +1,68 @@
|
|||
Changelog
|
||||
=========
|
||||
|
||||
## [v25.0.2] - 2024-06-05
|
||||
### :sparkles: New Features
|
||||
- [`472058d`](https://github.com/tobymao/sqlglot/commit/472058daccf8dc2a7f7f4b7082309a06802017a5) - **bigquery**: add support for GAP_FILL function *(commit by [@georgesittas](https://github.com/georgesittas))*
|
||||
|
||||
|
||||
## [v25.0.0] - 2024-06-05
|
||||
### :bug: Bug Fixes
|
||||
- [`f7081c4`](https://github.com/tobymao/sqlglot/commit/f7081c455cf2f61af61dcfd0859a1bf272b84258) - builder other props closes [#3588](https://github.com/tobymao/sqlglot/pull/3588) *(commit by [@tobymao](https://github.com/tobymao))*
|
||||
- [`13009ca`](https://github.com/tobymao/sqlglot/commit/13009ca5c14d81b7a07311a38f329b967f909926) - **doris**: use CSV syntax for GROUP_CONCAT *(PR [#3592](https://github.com/tobymao/sqlglot/pull/3592) by [@Toms1999](https://github.com/Toms1999))*
|
||||
- [`bf7fd12`](https://github.com/tobymao/sqlglot/commit/bf7fd12f9a19bf91dd89f76cf376bf6004d83dc0) - no_ilike_sql to lower both sides *(PR [#3593](https://github.com/tobymao/sqlglot/pull/3593) by [@barakalon](https://github.com/barakalon))*
|
||||
- [`8d87568`](https://github.com/tobymao/sqlglot/commit/8d875681403a43282e1f414ca90f3cf955f26027) - stop normalization_distance early *(PR [#3594](https://github.com/tobymao/sqlglot/pull/3594) by [@barakalon](https://github.com/barakalon))*
|
||||
- [`3e38912`](https://github.com/tobymao/sqlglot/commit/3e38912cd0de2e3939221b6ad8ae194e68cfe288) - **duckdb**: add reserved keywords *(PR [#3597](https://github.com/tobymao/sqlglot/pull/3597) by [@georgesittas](https://github.com/georgesittas))*
|
||||
- [`5683d5f`](https://github.com/tobymao/sqlglot/commit/5683d5fe7eeae8f70751de962644c0981c21c7fc) - **hive**: generate TRUNC for TimestampTrunc *(PR [#3600](https://github.com/tobymao/sqlglot/pull/3600) by [@Toms1999](https://github.com/Toms1999))*
|
||||
- [`ff55ec1`](https://github.com/tobymao/sqlglot/commit/ff55ec1ca8c259f3c304aa7f6039c033f1fe728c) - **hive**: generate string unit for TRUNC, parse it into TimestampTrunc too *(commit by [@georgesittas](https://github.com/georgesittas))*
|
||||
- [`12b6aa7`](https://github.com/tobymao/sqlglot/commit/12b6aa7006bbf005c750070d9e266153057ff281) - **snowflake**: Fix COPY INTO with subquery *(PR [#3605](https://github.com/tobymao/sqlglot/pull/3605) by [@VaggelisD](https://github.com/VaggelisD))*
|
||||
- :arrow_lower_right: *fixes issue [#3604](https://github.com/tobymao/sqlglot/issues/3604) opened by [@ajuszczak](https://github.com/ajuszczak)*
|
||||
- [`061be9b`](https://github.com/tobymao/sqlglot/commit/061be9bda9e03b17590a0ac58fa2fec0540e2e77) - optimize absorb_and_eliminate and remove_complements *(PR [#3595](https://github.com/tobymao/sqlglot/pull/3595) by [@barakalon](https://github.com/barakalon))*
|
||||
|
||||
### :wrench: Chores
|
||||
- [`7dd244b`](https://github.com/tobymao/sqlglot/commit/7dd244b6a57e4e8cc9d07cbaf3e89c60fa665a69) - **hive**: test TRUNC roundtrip *(commit by [@georgesittas](https://github.com/georgesittas))*
|
||||
|
||||
|
||||
## [v24.1.2] - 2024-06-04
|
||||
### :sparkles: New Features
|
||||
- [`158ca97`](https://github.com/tobymao/sqlglot/commit/158ca9724c23e7a58f6782719b477f2adb57acae) - **duckdb**: transpile TIMESTAMPNTZ into TIMESTAMP *(PR [#3587](https://github.com/tobymao/sqlglot/pull/3587) by [@georgesittas](https://github.com/georgesittas))*
|
||||
|
||||
|
||||
## [v24.1.1] - 2024-06-03
|
||||
### :bug: Bug Fixes
|
||||
- [`60d9085`](https://github.com/tobymao/sqlglot/commit/60d9085a4ec2d0c39aa904bf81b7e15b5bac8ea5) - **postgres**: collate with identifier closes [#3578](https://github.com/tobymao/sqlglot/pull/3578) *(commit by [@tobymao](https://github.com/tobymao))*
|
||||
- [`317e3a9`](https://github.com/tobymao/sqlglot/commit/317e3a96a49f439aa06af31abb06990f9a1b0d63) - **bigquery**: expanding positional refs with ambiguous references *(PR [#3585](https://github.com/tobymao/sqlglot/pull/3585) by [@tobymao](https://github.com/tobymao))*
|
||||
- [`5e321f1`](https://github.com/tobymao/sqlglot/commit/5e321f15ac4e54c78b9f90475e1bac4a94eaa48d) - div aliases closes [#3583](https://github.com/tobymao/sqlglot/pull/3583) *(PR [#3586](https://github.com/tobymao/sqlglot/pull/3586) by [@tobymao](https://github.com/tobymao))*
|
||||
|
||||
|
||||
## [v24.1.0] - 2024-05-30
|
||||
### :boom: BREAKING CHANGES
|
||||
- due to [`0788c94`](https://github.com/tobymao/sqlglot/commit/0788c944a85d7323b61109ee1ccb5859e3d08404) - Expand stars on BigQuery's tbl.struct_col.* selections *(PR [#3531](https://github.com/tobymao/sqlglot/pull/3531) by [@VaggelisD](https://github.com/VaggelisD))*:
|
||||
|
||||
Expand stars on BigQuery's tbl.struct_col.* selections (#3531)
|
||||
|
||||
- due to [`3e71393`](https://github.com/tobymao/sqlglot/commit/3e71393cb8e201a75321fbc179289eb15b1dc6ce) - Refactor struct star expansion in BQ *(PR [#3576](https://github.com/tobymao/sqlglot/pull/3576) by [@VaggelisD](https://github.com/VaggelisD))*:
|
||||
|
||||
Refactor struct star expansion in BQ (#3576)
|
||||
|
||||
|
||||
### :sparkles: New Features
|
||||
- [`0788c94`](https://github.com/tobymao/sqlglot/commit/0788c944a85d7323b61109ee1ccb5859e3d08404) - **optimizer**: Expand stars on BigQuery's tbl.struct_col.* selections *(PR [#3531](https://github.com/tobymao/sqlglot/pull/3531) by [@VaggelisD](https://github.com/VaggelisD))*
|
||||
- :arrow_lower_right: *addresses issue [#3484](https://github.com/tobymao/sqlglot/issues/3484) opened by [@Bladieblah](https://github.com/Bladieblah)*
|
||||
|
||||
### :bug: Bug Fixes
|
||||
- [`14d63ee`](https://github.com/tobymao/sqlglot/commit/14d63ee8172ddc972d6677071cae3880c748c3aa) - bubble up Identifier comments to TableAliases *(PR [#3571](https://github.com/tobymao/sqlglot/pull/3571) by [@georgesittas](https://github.com/georgesittas))*
|
||||
- :arrow_lower_right: *fixes issue [#3570](https://github.com/tobymao/sqlglot/issues/3570) opened by [@fangxingli](https://github.com/fangxingli)*
|
||||
- [`ba90c22`](https://github.com/tobymao/sqlglot/commit/ba90c22921448ef6b5a0497a9a48918d0e8a9654) - **snowflake**: COPY Postfix *(PR [#3564](https://github.com/tobymao/sqlglot/pull/3564) by [@VaggelisD](https://github.com/VaggelisD))*
|
||||
- [`3e71393`](https://github.com/tobymao/sqlglot/commit/3e71393cb8e201a75321fbc179289eb15b1dc6ce) - **optimizer**: Refactor struct star expansion in BQ *(PR [#3576](https://github.com/tobymao/sqlglot/pull/3576) by [@VaggelisD](https://github.com/VaggelisD))*
|
||||
|
||||
### :recycle: Refactors
|
||||
- [`1e1dc3f`](https://github.com/tobymao/sqlglot/commit/1e1dc3fea8c5fc1f86fefe6af384e38c8531f2d2) - **optimizer**: minor improvements in the struct star expansion *(PR [#3568](https://github.com/tobymao/sqlglot/pull/3568) by [@georgesittas](https://github.com/georgesittas))*
|
||||
|
||||
### :wrench: Chores
|
||||
- [`b12ea8c`](https://github.com/tobymao/sqlglot/commit/b12ea8c126d5debef59e9d9bcbbc6fd5ecf56682) - minor style changes related to COPY INTO *(commit by [@georgesittas](https://github.com/georgesittas))*
|
||||
|
||||
|
||||
## [v24.0.3] - 2024-05-29
|
||||
### :bug: Bug Fixes
|
||||
- [`fb8db9f`](https://github.com/tobymao/sqlglot/commit/fb8db9f2219cfd578fda5c3f51737c180d5aecc6) - **parser**: edge case where TYPE_CONVERTERS leads to type instead of column *(PR [#3566](https://github.com/tobymao/sqlglot/pull/3566) by [@georgesittas](https://github.com/georgesittas))*
|
||||
|
@ -3792,3 +3854,8 @@ Changelog
|
|||
[v24.0.1]: https://github.com/tobymao/sqlglot/compare/v24.0.0...v24.0.1
|
||||
[v24.0.2]: https://github.com/tobymao/sqlglot/compare/v24.0.1...v24.0.2
|
||||
[v24.0.3]: https://github.com/tobymao/sqlglot/compare/v24.0.2...v24.0.3
|
||||
[v24.1.0]: https://github.com/tobymao/sqlglot/compare/v24.0.3...v24.1.0
|
||||
[v24.1.1]: https://github.com/tobymao/sqlglot/compare/v24.1.0...v24.1.1
|
||||
[v24.1.2]: https://github.com/tobymao/sqlglot/compare/v24.1.1...v24.1.2
|
||||
[v25.0.0]: https://github.com/tobymao/sqlglot/compare/v24.1.2...v25.0.0
|
||||
[v25.0.2]: https://github.com/tobymao/sqlglot/compare/v25.0.1...v25.0.2
|
||||
|
|
0
benchmarks/__init__.py
Normal file
0
benchmarks/__init__.py
Normal file
|
@ -1,5 +1,7 @@
|
|||
import collections.abc
|
||||
|
||||
from benchmarks.helpers import ascii_table
|
||||
|
||||
# moz_sql_parser 3.10 compatibility
|
||||
collections.Iterable = collections.abc.Iterable
|
||||
import timeit
|
||||
|
@ -188,11 +190,6 @@ def sqlfluff_parse(sql):
|
|||
sqlfluff.parse(sql)
|
||||
|
||||
|
||||
def border(columns):
|
||||
columns = " | ".join(columns)
|
||||
return f"| {columns} |"
|
||||
|
||||
|
||||
def diff(row, column):
|
||||
if column == "Query":
|
||||
return ""
|
||||
|
@ -223,19 +220,11 @@ for name, sql in {"tpch": tpch, "short": short, "long": long, "crazy": crazy}.it
|
|||
print(e)
|
||||
row[lib] = "error"
|
||||
|
||||
columns = ["Query"] + libs
|
||||
widths = {column: max(len(column), 15) for column in columns}
|
||||
|
||||
lines = [border(column.rjust(width) for column, width in widths.items())]
|
||||
lines.append(border(str("-" * width) for width in widths.values()))
|
||||
|
||||
for i, row in enumerate(table):
|
||||
lines.append(
|
||||
border(
|
||||
(str(row[column])[0:7] + diff(row, column)).rjust(width)[0:width]
|
||||
for column, width in widths.items()
|
||||
print(
|
||||
ascii_table(
|
||||
[
|
||||
{k: v if v == "Query" else str(row[k])[0:7] + diff(row, k) for k, v in row.items()}
|
||||
for row in table
|
||||
]
|
||||
)
|
||||
)
|
||||
|
||||
for line in lines:
|
||||
print(line)
|
||||
)
|
||||
|
|
28
benchmarks/helpers.py
Normal file
28
benchmarks/helpers.py
Normal file
|
@ -0,0 +1,28 @@
|
|||
import typing as t
|
||||
|
||||
|
||||
def border(columns: t.Iterable[str]) -> str:
|
||||
columns = " | ".join(columns)
|
||||
return f"| {columns} |"
|
||||
|
||||
|
||||
def ascii_table(table: list[dict[str, t.Any]]) -> str:
|
||||
columns = []
|
||||
for row in table:
|
||||
for key in row:
|
||||
if key not in columns:
|
||||
columns.append(key)
|
||||
|
||||
widths = {column: max(len(column), 15) for column in columns}
|
||||
|
||||
lines = [
|
||||
border(column.rjust(width) for column, width in widths.items()),
|
||||
border(str("-" * width) for width in widths.values()),
|
||||
]
|
||||
|
||||
for row in table:
|
||||
lines.append(
|
||||
border(str(row[column]).rjust(width)[0:width] for column, width in widths.items())
|
||||
)
|
||||
|
||||
return "\n".join(lines)
|
70
benchmarks/optimize.py
Normal file
70
benchmarks/optimize.py
Normal file
|
@ -0,0 +1,70 @@
|
|||
import typing as t
|
||||
from argparse import ArgumentParser
|
||||
|
||||
from benchmarks.helpers import ascii_table
|
||||
from sqlglot.optimizer import optimize
|
||||
from sqlglot import parse_one
|
||||
from tests.helpers import load_sql_fixture_pairs, TPCH_SCHEMA, TPCDS_SCHEMA
|
||||
from timeit import Timer
|
||||
import sys
|
||||
|
||||
# Deeply nested conditions currently require a lot of recursion
|
||||
sys.setrecursionlimit(10000)
|
||||
|
||||
|
||||
def gen_condition(n):
|
||||
return parse_one(" OR ".join(f"a = {i} AND b = {i}" for i in range(n)))
|
||||
|
||||
|
||||
BENCHMARKS = {
|
||||
"tpch": lambda: (
|
||||
[parse_one(sql) for _, sql, _ in load_sql_fixture_pairs(f"optimizer/tpc-h/tpc-h.sql")],
|
||||
TPCH_SCHEMA,
|
||||
3,
|
||||
),
|
||||
"tpcds": lambda: (
|
||||
[parse_one(sql) for _, sql, _ in load_sql_fixture_pairs(f"optimizer/tpc-ds/tpc-ds.sql")],
|
||||
TPCDS_SCHEMA,
|
||||
3,
|
||||
),
|
||||
"condition_10": lambda: (
|
||||
[gen_condition(10)],
|
||||
{},
|
||||
10,
|
||||
),
|
||||
"condition_100": lambda: (
|
||||
[gen_condition(100)],
|
||||
{},
|
||||
10,
|
||||
),
|
||||
"condition_1000": lambda: (
|
||||
[gen_condition(1000)],
|
||||
{},
|
||||
3,
|
||||
),
|
||||
}
|
||||
|
||||
|
||||
def bench() -> list[dict[str, t.Any]]:
|
||||
parser = ArgumentParser()
|
||||
parser.add_argument("-b", "--benchmark", choices=BENCHMARKS, action="append")
|
||||
args = parser.parse_args()
|
||||
benchmarks = list(args.benchmark or BENCHMARKS)
|
||||
|
||||
table = []
|
||||
for benchmark in benchmarks:
|
||||
expressions, schema, n = BENCHMARKS[benchmark]()
|
||||
|
||||
def func():
|
||||
for e in expressions:
|
||||
optimize(e, schema)
|
||||
|
||||
timer = Timer(func)
|
||||
min_duration = min(timer.repeat(repeat=n, number=1))
|
||||
table.append({"Benchmark": benchmark, "Duration (s)": round(min_duration, 4)})
|
||||
|
||||
return table
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print(ascii_table(bench()))
|
File diff suppressed because one or more lines are too long
|
@ -67,9 +67,6 @@
|
|||
<li>
|
||||
<a class="variable" href="#pretty">pretty</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="variable" href="#schema">schema</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="function" href="#tokenize">tokenize</a>
|
||||
</li>
|
||||
|
@ -809,117 +806,114 @@ make check # Full test suite & linter checks
|
|||
</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a><span class="n">pretty</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a><span class="sd">"""Whether to format generated SQL by default."""</span>
|
||||
</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a>
|
||||
</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a><span class="n">schema</span> <span class="o">=</span> <span class="n">MappingSchema</span><span class="p">()</span>
|
||||
</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a><span class="sd">"""The default schema used by SQLGlot (e.g. in the optimizer)."""</span>
|
||||
</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a>
|
||||
</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a>
|
||||
</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a><span class="k">def</span> <span class="nf">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">read</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
|
||||
</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a><span class="sd"> Tokenizes the given SQL string.</span>
|
||||
</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a>
|
||||
</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a><span class="sd"> Args:</span>
|
||||
</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a><span class="sd"> sql: the SQL code string to tokenize.</span>
|
||||
</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a><span class="sd"> read: the SQL dialect to apply during tokenizing (eg. "spark", "hive", "presto", "mysql").</span>
|
||||
</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a><span class="sd"> dialect: the SQL dialect (alias for read).</span>
|
||||
</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a>
|
||||
</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a><span class="sd"> Returns:</span>
|
||||
</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a><span class="sd"> The resulting list of tokens.</span>
|
||||
</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="k">return</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">read</span> <span class="ow">or</span> <span class="n">dialect</span><span class="p">)</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
|
||||
</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a>
|
||||
</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a>
|
||||
</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a><span class="k">def</span> <span class="nf">parse</span><span class="p">(</span>
|
||||
</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">read</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
|
||||
</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Expression</span><span class="p">]]:</span>
|
||||
</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a><span class="sd"> Parses the given SQL string into a collection of syntax trees, one per parsed SQL statement.</span>
|
||||
</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a>
|
||||
</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a><span class="sd"> Args:</span>
|
||||
</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a><span class="sd"> sql: the SQL code string to parse.</span>
|
||||
</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a><span class="sd"> read: the SQL dialect to apply during parsing (eg. "spark", "hive", "presto", "mysql").</span>
|
||||
</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a><span class="sd"> dialect: the SQL dialect (alias for read).</span>
|
||||
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a><span class="sd"> **opts: other `sqlglot.parser.Parser` options.</span>
|
||||
</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a>
|
||||
</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a><span class="sd"> Returns:</span>
|
||||
</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a><span class="sd"> The resulting syntax tree collection.</span>
|
||||
</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="k">return</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">read</span> <span class="ow">or</span> <span class="n">dialect</span><span class="p">)</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
|
||||
</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a>
|
||||
</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a>
|
||||
</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a><span class="k">def</span> <span class="nf">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">read</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
|
||||
</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a><span class="sd"> Tokenizes the given SQL string.</span>
|
||||
</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a>
|
||||
</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a><span class="sd"> Args:</span>
|
||||
</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a><span class="sd"> sql: the SQL code string to tokenize.</span>
|
||||
</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a><span class="sd"> read: the SQL dialect to apply during tokenizing (eg. "spark", "hive", "presto", "mysql").</span>
|
||||
</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a><span class="sd"> dialect: the SQL dialect (alias for read).</span>
|
||||
</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a>
|
||||
</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a><span class="sd"> Returns:</span>
|
||||
</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a><span class="sd"> The resulting list of tokens.</span>
|
||||
</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="k">return</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">read</span> <span class="ow">or</span> <span class="n">dialect</span><span class="p">)</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
|
||||
</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a>
|
||||
</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a>
|
||||
</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a><span class="k">def</span> <span class="nf">parse</span><span class="p">(</span>
|
||||
</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">read</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
|
||||
</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Expression</span><span class="p">]]:</span>
|
||||
</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a><span class="sd"> Parses the given SQL string into a collection of syntax trees, one per parsed SQL statement.</span>
|
||||
</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a>
|
||||
</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a><span class="sd"> Args:</span>
|
||||
</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a><span class="sd"> sql: the SQL code string to parse.</span>
|
||||
</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a><span class="sd"> read: the SQL dialect to apply during parsing (eg. "spark", "hive", "presto", "mysql").</span>
|
||||
</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a><span class="sd"> dialect: the SQL dialect (alias for read).</span>
|
||||
</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a><span class="sd"> **opts: other `sqlglot.parser.Parser` options.</span>
|
||||
</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a>
|
||||
</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a><span class="sd"> Returns:</span>
|
||||
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a><span class="sd"> The resulting syntax tree collection.</span>
|
||||
</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="k">return</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">read</span> <span class="ow">or</span> <span class="n">dialect</span><span class="p">)</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
|
||||
</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a>
|
||||
</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a>
|
||||
</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
|
||||
</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a><span class="k">def</span> <span class="nf">parse_one</span><span class="p">(</span><span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">*</span><span class="p">,</span> <span class="n">into</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-></span> <span class="n">E</span><span class="p">:</span> <span class="o">...</span>
|
||||
</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a>
|
||||
</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
|
||||
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a><span class="k">def</span> <span class="nf">parse_one</span><span class="p">(</span><span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">*</span><span class="p">,</span> <span class="n">into</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-></span> <span class="n">E</span><span class="p">:</span> <span class="o">...</span>
|
||||
</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a>
|
||||
</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a>
|
||||
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
|
||||
</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a><span class="k">def</span> <span class="nf">parse_one</span><span class="p">(</span><span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-></span> <span class="n">Expression</span><span class="p">:</span> <span class="o">...</span>
|
||||
</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a>
|
||||
</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
|
||||
</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a><span class="k">def</span> <span class="nf">parse_one</span><span class="p">(</span><span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-></span> <span class="n">Expression</span><span class="p">:</span> <span class="o">...</span>
|
||||
</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a>
|
||||
</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a>
|
||||
</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a><span class="k">def</span> <span class="nf">parse_one</span><span class="p">(</span>
|
||||
</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
|
||||
</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="n">read</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="n">into</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">IntoType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
|
||||
</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a><span class="p">)</span> <span class="o">-></span> <span class="n">Expression</span><span class="p">:</span>
|
||||
</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a><span class="sd"> Parses the given SQL string and returns a syntax tree for the first parsed SQL statement.</span>
|
||||
</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a>
|
||||
</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a><span class="sd"> Args:</span>
|
||||
</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a><span class="sd"> sql: the SQL code string to parse.</span>
|
||||
</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a><span class="sd"> read: the SQL dialect to apply during parsing (eg. "spark", "hive", "presto", "mysql").</span>
|
||||
</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a><span class="sd"> dialect: the SQL dialect (alias for read)</span>
|
||||
</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a><span class="sd"> into: the SQLGlot Expression to parse into.</span>
|
||||
</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a><span class="sd"> **opts: other `sqlglot.parser.Parser` options.</span>
|
||||
</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a>
|
||||
</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a><span class="sd"> Returns:</span>
|
||||
</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a><span class="sd"> The syntax tree for the first parsed statement.</span>
|
||||
</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a>
|
||||
</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="n">dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">read</span> <span class="ow">or</span> <span class="n">dialect</span><span class="p">)</span>
|
||||
</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a>
|
||||
</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="k">if</span> <span class="n">into</span><span class="p">:</span>
|
||||
</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">dialect</span><span class="o">.</span><span class="n">parse_into</span><span class="p">(</span><span class="n">into</span><span class="p">,</span> <span class="n">sql</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
|
||||
</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">dialect</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
|
||||
</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a>
|
||||
</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">result</span><span class="p">:</span>
|
||||
</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
|
||||
</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a>
|
||||
</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a><span class="k">def</span> <span class="nf">parse_one</span><span class="p">(</span>
|
||||
</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
|
||||
</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="n">read</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="n">into</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">IntoType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
|
||||
</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a><span class="p">)</span> <span class="o">-></span> <span class="n">Expression</span><span class="p">:</span>
|
||||
</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a><span class="sd"> Parses the given SQL string and returns a syntax tree for the first parsed SQL statement.</span>
|
||||
</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a>
|
||||
</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a><span class="sd"> Args:</span>
|
||||
</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a><span class="sd"> sql: the SQL code string to parse.</span>
|
||||
</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a><span class="sd"> read: the SQL dialect to apply during parsing (eg. "spark", "hive", "presto", "mysql").</span>
|
||||
</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a><span class="sd"> dialect: the SQL dialect (alias for read)</span>
|
||||
</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a><span class="sd"> into: the SQLGlot Expression to parse into.</span>
|
||||
</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a><span class="sd"> **opts: other `sqlglot.parser.Parser` options.</span>
|
||||
</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a>
|
||||
</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a><span class="sd"> Returns:</span>
|
||||
</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a><span class="sd"> The syntax tree for the first parsed statement.</span>
|
||||
</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a>
|
||||
</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="n">dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">read</span> <span class="ow">or</span> <span class="n">dialect</span><span class="p">)</span>
|
||||
</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a>
|
||||
</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="k">if</span> <span class="n">into</span><span class="p">:</span>
|
||||
</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">dialect</span><span class="o">.</span><span class="n">parse_into</span><span class="p">(</span><span class="n">into</span><span class="p">,</span> <span class="n">sql</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
|
||||
</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">dialect</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
|
||||
</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a>
|
||||
</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">result</span><span class="p">:</span>
|
||||
</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
|
||||
</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"No expression was parsed from '</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">'"</span><span class="p">)</span>
|
||||
</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"No expression was parsed from '</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">'"</span><span class="p">)</span>
|
||||
</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"No expression was parsed from '</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">'"</span><span class="p">)</span>
|
||||
</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a>
|
||||
</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a>
|
||||
</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a><span class="k">def</span> <span class="nf">transpile</span><span class="p">(</span>
|
||||
</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
|
||||
</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="n">read</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="n">write</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="n">identity</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
|
||||
</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="n">error_level</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ErrorLevel</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
|
||||
</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
|
||||
</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a><span class="sd"> Parses the given SQL string in accordance with the source dialect and returns a list of SQL strings transformed</span>
|
||||
</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a><span class="sd"> to conform to the target dialect. Each string in the returned list represents a single transformed SQL statement.</span>
|
||||
</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a>
|
||||
</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a><span class="sd"> Args:</span>
|
||||
</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a><span class="sd"> sql: the SQL code string to transpile.</span>
|
||||
</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a><span class="sd"> read: the source dialect used to parse the input string (eg. "spark", "hive", "presto", "mysql").</span>
|
||||
</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a><span class="sd"> write: the target dialect into which the input should be transformed (eg. "spark", "hive", "presto", "mysql").</span>
|
||||
</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a><span class="sd"> identity: if set to `True` and if the target dialect is not specified the source dialect will be used as both:</span>
|
||||
</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a><span class="sd"> the source and the target dialect.</span>
|
||||
</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a><span class="sd"> error_level: the desired error level of the parser.</span>
|
||||
</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a><span class="sd"> **opts: other `sqlglot.generator.Generator` options.</span>
|
||||
</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a>
|
||||
</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a><span class="sd"> Returns:</span>
|
||||
</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a><span class="sd"> The list of transpiled SQL statements.</span>
|
||||
</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="n">write</span> <span class="o">=</span> <span class="p">(</span><span class="n">read</span> <span class="k">if</span> <span class="n">write</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">write</span><span class="p">)</span> <span class="k">if</span> <span class="n">identity</span> <span class="k">else</span> <span class="n">write</span>
|
||||
</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="n">write</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">write</span><span class="p">)</span>
|
||||
</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="k">return</span> <span class="p">[</span>
|
||||
</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="n">write</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">parse</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="n">read</span><span class="p">,</span> <span class="n">error_level</span><span class="o">=</span><span class="n">error_level</span><span class="p">)</span>
|
||||
</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="p">]</span>
|
||||
</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a>
|
||||
</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a>
|
||||
</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a><span class="k">def</span> <span class="nf">transpile</span><span class="p">(</span>
|
||||
</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
|
||||
</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="n">read</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="n">write</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="n">identity</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
|
||||
</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="n">error_level</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ErrorLevel</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
|
||||
</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
|
||||
</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a><span class="sd"> Parses the given SQL string in accordance with the source dialect and returns a list of SQL strings transformed</span>
|
||||
</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a><span class="sd"> to conform to the target dialect. Each string in the returned list represents a single transformed SQL statement.</span>
|
||||
</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a>
|
||||
</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a><span class="sd"> Args:</span>
|
||||
</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a><span class="sd"> sql: the SQL code string to transpile.</span>
|
||||
</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a><span class="sd"> read: the source dialect used to parse the input string (eg. "spark", "hive", "presto", "mysql").</span>
|
||||
</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a><span class="sd"> write: the target dialect into which the input should be transformed (eg. "spark", "hive", "presto", "mysql").</span>
|
||||
</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a><span class="sd"> identity: if set to `True` and if the target dialect is not specified the source dialect will be used as both:</span>
|
||||
</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a><span class="sd"> the source and the target dialect.</span>
|
||||
</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a><span class="sd"> error_level: the desired error level of the parser.</span>
|
||||
</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a><span class="sd"> **opts: other `sqlglot.generator.Generator` options.</span>
|
||||
</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a>
|
||||
</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a><span class="sd"> Returns:</span>
|
||||
</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a><span class="sd"> The list of transpiled SQL statements.</span>
|
||||
</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="n">write</span> <span class="o">=</span> <span class="p">(</span><span class="n">read</span> <span class="k">if</span> <span class="n">write</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">write</span><span class="p">)</span> <span class="k">if</span> <span class="n">identity</span> <span class="k">else</span> <span class="n">write</span>
|
||||
</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="n">write</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">write</span><span class="p">)</span>
|
||||
</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="k">return</span> <span class="p">[</span>
|
||||
</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="n">write</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">parse</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="n">read</span><span class="p">,</span> <span class="n">error_level</span><span class="o">=</span><span class="n">error_level</span><span class="p">)</span>
|
||||
</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="p">]</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -949,20 +943,6 @@ make check # Full test suite & linter checks
|
|||
</div>
|
||||
|
||||
|
||||
</section>
|
||||
<section id="schema">
|
||||
<div class="attr variable">
|
||||
<span class="name">schema</span> =
|
||||
<span class="default_value"><<a href="sqlglot/schema.html#MappingSchema">sqlglot.schema.MappingSchema</a> object></span>
|
||||
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#schema"></a>
|
||||
|
||||
<div class="docstring"><p>The default schema used by SQLGlot (e.g. in the optimizer).</p>
|
||||
</div>
|
||||
|
||||
|
||||
</section>
|
||||
<section id="tokenize">
|
||||
<input id="tokenize-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||
|
@ -975,19 +955,19 @@ make check # Full test suite & linter checks
|
|||
|
||||
</div>
|
||||
<a class="headerlink" href="#tokenize"></a>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="tokenize-73"><a href="#tokenize-73"><span class="linenos">73</span></a><span class="k">def</span> <span class="nf">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">read</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
|
||||
</span><span id="tokenize-74"><a href="#tokenize-74"><span class="linenos">74</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="tokenize-75"><a href="#tokenize-75"><span class="linenos">75</span></a><span class="sd"> Tokenizes the given SQL string.</span>
|
||||
</span><span id="tokenize-76"><a href="#tokenize-76"><span class="linenos">76</span></a>
|
||||
</span><span id="tokenize-77"><a href="#tokenize-77"><span class="linenos">77</span></a><span class="sd"> Args:</span>
|
||||
</span><span id="tokenize-78"><a href="#tokenize-78"><span class="linenos">78</span></a><span class="sd"> sql: the SQL code string to tokenize.</span>
|
||||
</span><span id="tokenize-79"><a href="#tokenize-79"><span class="linenos">79</span></a><span class="sd"> read: the SQL dialect to apply during tokenizing (eg. "spark", "hive", "presto", "mysql").</span>
|
||||
</span><span id="tokenize-80"><a href="#tokenize-80"><span class="linenos">80</span></a><span class="sd"> dialect: the SQL dialect (alias for read).</span>
|
||||
</span><span id="tokenize-81"><a href="#tokenize-81"><span class="linenos">81</span></a>
|
||||
</span><span id="tokenize-82"><a href="#tokenize-82"><span class="linenos">82</span></a><span class="sd"> Returns:</span>
|
||||
</span><span id="tokenize-83"><a href="#tokenize-83"><span class="linenos">83</span></a><span class="sd"> The resulting list of tokens.</span>
|
||||
</span><span id="tokenize-84"><a href="#tokenize-84"><span class="linenos">84</span></a><span class="sd"> """</span>
|
||||
</span><span id="tokenize-85"><a href="#tokenize-85"><span class="linenos">85</span></a> <span class="k">return</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">read</span> <span class="ow">or</span> <span class="n">dialect</span><span class="p">)</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="tokenize-70"><a href="#tokenize-70"><span class="linenos">70</span></a><span class="k">def</span> <span class="nf">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">read</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
|
||||
</span><span id="tokenize-71"><a href="#tokenize-71"><span class="linenos">71</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="tokenize-72"><a href="#tokenize-72"><span class="linenos">72</span></a><span class="sd"> Tokenizes the given SQL string.</span>
|
||||
</span><span id="tokenize-73"><a href="#tokenize-73"><span class="linenos">73</span></a>
|
||||
</span><span id="tokenize-74"><a href="#tokenize-74"><span class="linenos">74</span></a><span class="sd"> Args:</span>
|
||||
</span><span id="tokenize-75"><a href="#tokenize-75"><span class="linenos">75</span></a><span class="sd"> sql: the SQL code string to tokenize.</span>
|
||||
</span><span id="tokenize-76"><a href="#tokenize-76"><span class="linenos">76</span></a><span class="sd"> read: the SQL dialect to apply during tokenizing (eg. "spark", "hive", "presto", "mysql").</span>
|
||||
</span><span id="tokenize-77"><a href="#tokenize-77"><span class="linenos">77</span></a><span class="sd"> dialect: the SQL dialect (alias for read).</span>
|
||||
</span><span id="tokenize-78"><a href="#tokenize-78"><span class="linenos">78</span></a>
|
||||
</span><span id="tokenize-79"><a href="#tokenize-79"><span class="linenos">79</span></a><span class="sd"> Returns:</span>
|
||||
</span><span id="tokenize-80"><a href="#tokenize-80"><span class="linenos">80</span></a><span class="sd"> The resulting list of tokens.</span>
|
||||
</span><span id="tokenize-81"><a href="#tokenize-81"><span class="linenos">81</span></a><span class="sd"> """</span>
|
||||
</span><span id="tokenize-82"><a href="#tokenize-82"><span class="linenos">82</span></a> <span class="k">return</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">read</span> <span class="ow">or</span> <span class="n">dialect</span><span class="p">)</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -1021,22 +1001,22 @@ make check # Full test suite & linter checks
|
|||
|
||||
</div>
|
||||
<a class="headerlink" href="#parse"></a>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="parse-88"><a href="#parse-88"><span class="linenos"> 88</span></a><span class="k">def</span> <span class="nf">parse</span><span class="p">(</span>
|
||||
</span><span id="parse-89"><a href="#parse-89"><span class="linenos"> 89</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">read</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
|
||||
</span><span id="parse-90"><a href="#parse-90"><span class="linenos"> 90</span></a><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Expression</span><span class="p">]]:</span>
|
||||
</span><span id="parse-91"><a href="#parse-91"><span class="linenos"> 91</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="parse-92"><a href="#parse-92"><span class="linenos"> 92</span></a><span class="sd"> Parses the given SQL string into a collection of syntax trees, one per parsed SQL statement.</span>
|
||||
</span><span id="parse-93"><a href="#parse-93"><span class="linenos"> 93</span></a>
|
||||
</span><span id="parse-94"><a href="#parse-94"><span class="linenos"> 94</span></a><span class="sd"> Args:</span>
|
||||
</span><span id="parse-95"><a href="#parse-95"><span class="linenos"> 95</span></a><span class="sd"> sql: the SQL code string to parse.</span>
|
||||
</span><span id="parse-96"><a href="#parse-96"><span class="linenos"> 96</span></a><span class="sd"> read: the SQL dialect to apply during parsing (eg. "spark", "hive", "presto", "mysql").</span>
|
||||
</span><span id="parse-97"><a href="#parse-97"><span class="linenos"> 97</span></a><span class="sd"> dialect: the SQL dialect (alias for read).</span>
|
||||
</span><span id="parse-98"><a href="#parse-98"><span class="linenos"> 98</span></a><span class="sd"> **opts: other `sqlglot.parser.Parser` options.</span>
|
||||
</span><span id="parse-99"><a href="#parse-99"><span class="linenos"> 99</span></a>
|
||||
</span><span id="parse-100"><a href="#parse-100"><span class="linenos">100</span></a><span class="sd"> Returns:</span>
|
||||
</span><span id="parse-101"><a href="#parse-101"><span class="linenos">101</span></a><span class="sd"> The resulting syntax tree collection.</span>
|
||||
</span><span id="parse-102"><a href="#parse-102"><span class="linenos">102</span></a><span class="sd"> """</span>
|
||||
</span><span id="parse-103"><a href="#parse-103"><span class="linenos">103</span></a> <span class="k">return</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">read</span> <span class="ow">or</span> <span class="n">dialect</span><span class="p">)</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="parse-85"><a href="#parse-85"><span class="linenos"> 85</span></a><span class="k">def</span> <span class="nf">parse</span><span class="p">(</span>
|
||||
</span><span id="parse-86"><a href="#parse-86"><span class="linenos"> 86</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">read</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
|
||||
</span><span id="parse-87"><a href="#parse-87"><span class="linenos"> 87</span></a><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Expression</span><span class="p">]]:</span>
|
||||
</span><span id="parse-88"><a href="#parse-88"><span class="linenos"> 88</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="parse-89"><a href="#parse-89"><span class="linenos"> 89</span></a><span class="sd"> Parses the given SQL string into a collection of syntax trees, one per parsed SQL statement.</span>
|
||||
</span><span id="parse-90"><a href="#parse-90"><span class="linenos"> 90</span></a>
|
||||
</span><span id="parse-91"><a href="#parse-91"><span class="linenos"> 91</span></a><span class="sd"> Args:</span>
|
||||
</span><span id="parse-92"><a href="#parse-92"><span class="linenos"> 92</span></a><span class="sd"> sql: the SQL code string to parse.</span>
|
||||
</span><span id="parse-93"><a href="#parse-93"><span class="linenos"> 93</span></a><span class="sd"> read: the SQL dialect to apply during parsing (eg. "spark", "hive", "presto", "mysql").</span>
|
||||
</span><span id="parse-94"><a href="#parse-94"><span class="linenos"> 94</span></a><span class="sd"> dialect: the SQL dialect (alias for read).</span>
|
||||
</span><span id="parse-95"><a href="#parse-95"><span class="linenos"> 95</span></a><span class="sd"> **opts: other `sqlglot.parser.Parser` options.</span>
|
||||
</span><span id="parse-96"><a href="#parse-96"><span class="linenos"> 96</span></a>
|
||||
</span><span id="parse-97"><a href="#parse-97"><span class="linenos"> 97</span></a><span class="sd"> Returns:</span>
|
||||
</span><span id="parse-98"><a href="#parse-98"><span class="linenos"> 98</span></a><span class="sd"> The resulting syntax tree collection.</span>
|
||||
</span><span id="parse-99"><a href="#parse-99"><span class="linenos"> 99</span></a><span class="sd"> """</span>
|
||||
</span><span id="parse-100"><a href="#parse-100"><span class="linenos">100</span></a> <span class="k">return</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">read</span> <span class="ow">or</span> <span class="n">dialect</span><span class="p">)</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -1071,40 +1051,40 @@ make check # Full test suite & linter checks
|
|||
|
||||
</div>
|
||||
<a class="headerlink" href="#parse_one"></a>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="parse_one-114"><a href="#parse_one-114"><span class="linenos">114</span></a><span class="k">def</span> <span class="nf">parse_one</span><span class="p">(</span>
|
||||
</span><span id="parse_one-115"><a href="#parse_one-115"><span class="linenos">115</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
|
||||
</span><span id="parse_one-116"><a href="#parse_one-116"><span class="linenos">116</span></a> <span class="n">read</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="parse_one-117"><a href="#parse_one-117"><span class="linenos">117</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="parse_one-118"><a href="#parse_one-118"><span class="linenos">118</span></a> <span class="n">into</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">IntoType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="parse_one-119"><a href="#parse_one-119"><span class="linenos">119</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
|
||||
</span><span id="parse_one-120"><a href="#parse_one-120"><span class="linenos">120</span></a><span class="p">)</span> <span class="o">-></span> <span class="n">Expression</span><span class="p">:</span>
|
||||
</span><span id="parse_one-121"><a href="#parse_one-121"><span class="linenos">121</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="parse_one-122"><a href="#parse_one-122"><span class="linenos">122</span></a><span class="sd"> Parses the given SQL string and returns a syntax tree for the first parsed SQL statement.</span>
|
||||
</span><span id="parse_one-123"><a href="#parse_one-123"><span class="linenos">123</span></a>
|
||||
</span><span id="parse_one-124"><a href="#parse_one-124"><span class="linenos">124</span></a><span class="sd"> Args:</span>
|
||||
</span><span id="parse_one-125"><a href="#parse_one-125"><span class="linenos">125</span></a><span class="sd"> sql: the SQL code string to parse.</span>
|
||||
</span><span id="parse_one-126"><a href="#parse_one-126"><span class="linenos">126</span></a><span class="sd"> read: the SQL dialect to apply during parsing (eg. "spark", "hive", "presto", "mysql").</span>
|
||||
</span><span id="parse_one-127"><a href="#parse_one-127"><span class="linenos">127</span></a><span class="sd"> dialect: the SQL dialect (alias for read)</span>
|
||||
</span><span id="parse_one-128"><a href="#parse_one-128"><span class="linenos">128</span></a><span class="sd"> into: the SQLGlot Expression to parse into.</span>
|
||||
</span><span id="parse_one-129"><a href="#parse_one-129"><span class="linenos">129</span></a><span class="sd"> **opts: other `sqlglot.parser.Parser` options.</span>
|
||||
</span><span id="parse_one-130"><a href="#parse_one-130"><span class="linenos">130</span></a>
|
||||
</span><span id="parse_one-131"><a href="#parse_one-131"><span class="linenos">131</span></a><span class="sd"> Returns:</span>
|
||||
</span><span id="parse_one-132"><a href="#parse_one-132"><span class="linenos">132</span></a><span class="sd"> The syntax tree for the first parsed statement.</span>
|
||||
</span><span id="parse_one-133"><a href="#parse_one-133"><span class="linenos">133</span></a><span class="sd"> """</span>
|
||||
</span><span id="parse_one-134"><a href="#parse_one-134"><span class="linenos">134</span></a>
|
||||
</span><span id="parse_one-135"><a href="#parse_one-135"><span class="linenos">135</span></a> <span class="n">dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">read</span> <span class="ow">or</span> <span class="n">dialect</span><span class="p">)</span>
|
||||
</span><span id="parse_one-136"><a href="#parse_one-136"><span class="linenos">136</span></a>
|
||||
</span><span id="parse_one-137"><a href="#parse_one-137"><span class="linenos">137</span></a> <span class="k">if</span> <span class="n">into</span><span class="p">:</span>
|
||||
</span><span id="parse_one-138"><a href="#parse_one-138"><span class="linenos">138</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">dialect</span><span class="o">.</span><span class="n">parse_into</span><span class="p">(</span><span class="n">into</span><span class="p">,</span> <span class="n">sql</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
|
||||
</span><span id="parse_one-139"><a href="#parse_one-139"><span class="linenos">139</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="parse_one-140"><a href="#parse_one-140"><span class="linenos">140</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">dialect</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
|
||||
</span><span id="parse_one-141"><a href="#parse_one-141"><span class="linenos">141</span></a>
|
||||
</span><span id="parse_one-142"><a href="#parse_one-142"><span class="linenos">142</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">result</span><span class="p">:</span>
|
||||
</span><span id="parse_one-143"><a href="#parse_one-143"><span class="linenos">143</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="parse_one-111"><a href="#parse_one-111"><span class="linenos">111</span></a><span class="k">def</span> <span class="nf">parse_one</span><span class="p">(</span>
|
||||
</span><span id="parse_one-112"><a href="#parse_one-112"><span class="linenos">112</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
|
||||
</span><span id="parse_one-113"><a href="#parse_one-113"><span class="linenos">113</span></a> <span class="n">read</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="parse_one-114"><a href="#parse_one-114"><span class="linenos">114</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="parse_one-115"><a href="#parse_one-115"><span class="linenos">115</span></a> <span class="n">into</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">IntoType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="parse_one-116"><a href="#parse_one-116"><span class="linenos">116</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
|
||||
</span><span id="parse_one-117"><a href="#parse_one-117"><span class="linenos">117</span></a><span class="p">)</span> <span class="o">-></span> <span class="n">Expression</span><span class="p">:</span>
|
||||
</span><span id="parse_one-118"><a href="#parse_one-118"><span class="linenos">118</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="parse_one-119"><a href="#parse_one-119"><span class="linenos">119</span></a><span class="sd"> Parses the given SQL string and returns a syntax tree for the first parsed SQL statement.</span>
|
||||
</span><span id="parse_one-120"><a href="#parse_one-120"><span class="linenos">120</span></a>
|
||||
</span><span id="parse_one-121"><a href="#parse_one-121"><span class="linenos">121</span></a><span class="sd"> Args:</span>
|
||||
</span><span id="parse_one-122"><a href="#parse_one-122"><span class="linenos">122</span></a><span class="sd"> sql: the SQL code string to parse.</span>
|
||||
</span><span id="parse_one-123"><a href="#parse_one-123"><span class="linenos">123</span></a><span class="sd"> read: the SQL dialect to apply during parsing (eg. "spark", "hive", "presto", "mysql").</span>
|
||||
</span><span id="parse_one-124"><a href="#parse_one-124"><span class="linenos">124</span></a><span class="sd"> dialect: the SQL dialect (alias for read)</span>
|
||||
</span><span id="parse_one-125"><a href="#parse_one-125"><span class="linenos">125</span></a><span class="sd"> into: the SQLGlot Expression to parse into.</span>
|
||||
</span><span id="parse_one-126"><a href="#parse_one-126"><span class="linenos">126</span></a><span class="sd"> **opts: other `sqlglot.parser.Parser` options.</span>
|
||||
</span><span id="parse_one-127"><a href="#parse_one-127"><span class="linenos">127</span></a>
|
||||
</span><span id="parse_one-128"><a href="#parse_one-128"><span class="linenos">128</span></a><span class="sd"> Returns:</span>
|
||||
</span><span id="parse_one-129"><a href="#parse_one-129"><span class="linenos">129</span></a><span class="sd"> The syntax tree for the first parsed statement.</span>
|
||||
</span><span id="parse_one-130"><a href="#parse_one-130"><span class="linenos">130</span></a><span class="sd"> """</span>
|
||||
</span><span id="parse_one-131"><a href="#parse_one-131"><span class="linenos">131</span></a>
|
||||
</span><span id="parse_one-132"><a href="#parse_one-132"><span class="linenos">132</span></a> <span class="n">dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">read</span> <span class="ow">or</span> <span class="n">dialect</span><span class="p">)</span>
|
||||
</span><span id="parse_one-133"><a href="#parse_one-133"><span class="linenos">133</span></a>
|
||||
</span><span id="parse_one-134"><a href="#parse_one-134"><span class="linenos">134</span></a> <span class="k">if</span> <span class="n">into</span><span class="p">:</span>
|
||||
</span><span id="parse_one-135"><a href="#parse_one-135"><span class="linenos">135</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">dialect</span><span class="o">.</span><span class="n">parse_into</span><span class="p">(</span><span class="n">into</span><span class="p">,</span> <span class="n">sql</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
|
||||
</span><span id="parse_one-136"><a href="#parse_one-136"><span class="linenos">136</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="parse_one-137"><a href="#parse_one-137"><span class="linenos">137</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">dialect</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
|
||||
</span><span id="parse_one-138"><a href="#parse_one-138"><span class="linenos">138</span></a>
|
||||
</span><span id="parse_one-139"><a href="#parse_one-139"><span class="linenos">139</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">result</span><span class="p">:</span>
|
||||
</span><span id="parse_one-140"><a href="#parse_one-140"><span class="linenos">140</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
|
||||
</span><span id="parse_one-141"><a href="#parse_one-141"><span class="linenos">141</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"No expression was parsed from '</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">'"</span><span class="p">)</span>
|
||||
</span><span id="parse_one-142"><a href="#parse_one-142"><span class="linenos">142</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span><span id="parse_one-143"><a href="#parse_one-143"><span class="linenos">143</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="parse_one-144"><a href="#parse_one-144"><span class="linenos">144</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"No expression was parsed from '</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">'"</span><span class="p">)</span>
|
||||
</span><span id="parse_one-145"><a href="#parse_one-145"><span class="linenos">145</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span><span id="parse_one-146"><a href="#parse_one-146"><span class="linenos">146</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="parse_one-147"><a href="#parse_one-147"><span class="linenos">147</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"No expression was parsed from '</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">'"</span><span class="p">)</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -1140,36 +1120,36 @@ make check # Full test suite & linter checks
|
|||
|
||||
</div>
|
||||
<a class="headerlink" href="#transpile"></a>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="transpile-150"><a href="#transpile-150"><span class="linenos">150</span></a><span class="k">def</span> <span class="nf">transpile</span><span class="p">(</span>
|
||||
</span><span id="transpile-151"><a href="#transpile-151"><span class="linenos">151</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
|
||||
</span><span id="transpile-152"><a href="#transpile-152"><span class="linenos">152</span></a> <span class="n">read</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="transpile-153"><a href="#transpile-153"><span class="linenos">153</span></a> <span class="n">write</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="transpile-154"><a href="#transpile-154"><span class="linenos">154</span></a> <span class="n">identity</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
|
||||
</span><span id="transpile-155"><a href="#transpile-155"><span class="linenos">155</span></a> <span class="n">error_level</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ErrorLevel</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="transpile-156"><a href="#transpile-156"><span class="linenos">156</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
|
||||
</span><span id="transpile-157"><a href="#transpile-157"><span class="linenos">157</span></a><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
|
||||
</span><span id="transpile-158"><a href="#transpile-158"><span class="linenos">158</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="transpile-159"><a href="#transpile-159"><span class="linenos">159</span></a><span class="sd"> Parses the given SQL string in accordance with the source dialect and returns a list of SQL strings transformed</span>
|
||||
</span><span id="transpile-160"><a href="#transpile-160"><span class="linenos">160</span></a><span class="sd"> to conform to the target dialect. Each string in the returned list represents a single transformed SQL statement.</span>
|
||||
</span><span id="transpile-161"><a href="#transpile-161"><span class="linenos">161</span></a>
|
||||
</span><span id="transpile-162"><a href="#transpile-162"><span class="linenos">162</span></a><span class="sd"> Args:</span>
|
||||
</span><span id="transpile-163"><a href="#transpile-163"><span class="linenos">163</span></a><span class="sd"> sql: the SQL code string to transpile.</span>
|
||||
</span><span id="transpile-164"><a href="#transpile-164"><span class="linenos">164</span></a><span class="sd"> read: the source dialect used to parse the input string (eg. "spark", "hive", "presto", "mysql").</span>
|
||||
</span><span id="transpile-165"><a href="#transpile-165"><span class="linenos">165</span></a><span class="sd"> write: the target dialect into which the input should be transformed (eg. "spark", "hive", "presto", "mysql").</span>
|
||||
</span><span id="transpile-166"><a href="#transpile-166"><span class="linenos">166</span></a><span class="sd"> identity: if set to `True` and if the target dialect is not specified the source dialect will be used as both:</span>
|
||||
</span><span id="transpile-167"><a href="#transpile-167"><span class="linenos">167</span></a><span class="sd"> the source and the target dialect.</span>
|
||||
</span><span id="transpile-168"><a href="#transpile-168"><span class="linenos">168</span></a><span class="sd"> error_level: the desired error level of the parser.</span>
|
||||
</span><span id="transpile-169"><a href="#transpile-169"><span class="linenos">169</span></a><span class="sd"> **opts: other `sqlglot.generator.Generator` options.</span>
|
||||
</span><span id="transpile-170"><a href="#transpile-170"><span class="linenos">170</span></a>
|
||||
</span><span id="transpile-171"><a href="#transpile-171"><span class="linenos">171</span></a><span class="sd"> Returns:</span>
|
||||
</span><span id="transpile-172"><a href="#transpile-172"><span class="linenos">172</span></a><span class="sd"> The list of transpiled SQL statements.</span>
|
||||
</span><span id="transpile-173"><a href="#transpile-173"><span class="linenos">173</span></a><span class="sd"> """</span>
|
||||
</span><span id="transpile-174"><a href="#transpile-174"><span class="linenos">174</span></a> <span class="n">write</span> <span class="o">=</span> <span class="p">(</span><span class="n">read</span> <span class="k">if</span> <span class="n">write</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">write</span><span class="p">)</span> <span class="k">if</span> <span class="n">identity</span> <span class="k">else</span> <span class="n">write</span>
|
||||
</span><span id="transpile-175"><a href="#transpile-175"><span class="linenos">175</span></a> <span class="n">write</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">write</span><span class="p">)</span>
|
||||
</span><span id="transpile-176"><a href="#transpile-176"><span class="linenos">176</span></a> <span class="k">return</span> <span class="p">[</span>
|
||||
</span><span id="transpile-177"><a href="#transpile-177"><span class="linenos">177</span></a> <span class="n">write</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="transpile-178"><a href="#transpile-178"><span class="linenos">178</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">parse</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="n">read</span><span class="p">,</span> <span class="n">error_level</span><span class="o">=</span><span class="n">error_level</span><span class="p">)</span>
|
||||
</span><span id="transpile-179"><a href="#transpile-179"><span class="linenos">179</span></a> <span class="p">]</span>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="transpile-147"><a href="#transpile-147"><span class="linenos">147</span></a><span class="k">def</span> <span class="nf">transpile</span><span class="p">(</span>
|
||||
</span><span id="transpile-148"><a href="#transpile-148"><span class="linenos">148</span></a> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
|
||||
</span><span id="transpile-149"><a href="#transpile-149"><span class="linenos">149</span></a> <span class="n">read</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="transpile-150"><a href="#transpile-150"><span class="linenos">150</span></a> <span class="n">write</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="transpile-151"><a href="#transpile-151"><span class="linenos">151</span></a> <span class="n">identity</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
|
||||
</span><span id="transpile-152"><a href="#transpile-152"><span class="linenos">152</span></a> <span class="n">error_level</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ErrorLevel</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="transpile-153"><a href="#transpile-153"><span class="linenos">153</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
|
||||
</span><span id="transpile-154"><a href="#transpile-154"><span class="linenos">154</span></a><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
|
||||
</span><span id="transpile-155"><a href="#transpile-155"><span class="linenos">155</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="transpile-156"><a href="#transpile-156"><span class="linenos">156</span></a><span class="sd"> Parses the given SQL string in accordance with the source dialect and returns a list of SQL strings transformed</span>
|
||||
</span><span id="transpile-157"><a href="#transpile-157"><span class="linenos">157</span></a><span class="sd"> to conform to the target dialect. Each string in the returned list represents a single transformed SQL statement.</span>
|
||||
</span><span id="transpile-158"><a href="#transpile-158"><span class="linenos">158</span></a>
|
||||
</span><span id="transpile-159"><a href="#transpile-159"><span class="linenos">159</span></a><span class="sd"> Args:</span>
|
||||
</span><span id="transpile-160"><a href="#transpile-160"><span class="linenos">160</span></a><span class="sd"> sql: the SQL code string to transpile.</span>
|
||||
</span><span id="transpile-161"><a href="#transpile-161"><span class="linenos">161</span></a><span class="sd"> read: the source dialect used to parse the input string (eg. "spark", "hive", "presto", "mysql").</span>
|
||||
</span><span id="transpile-162"><a href="#transpile-162"><span class="linenos">162</span></a><span class="sd"> write: the target dialect into which the input should be transformed (eg. "spark", "hive", "presto", "mysql").</span>
|
||||
</span><span id="transpile-163"><a href="#transpile-163"><span class="linenos">163</span></a><span class="sd"> identity: if set to `True` and if the target dialect is not specified the source dialect will be used as both:</span>
|
||||
</span><span id="transpile-164"><a href="#transpile-164"><span class="linenos">164</span></a><span class="sd"> the source and the target dialect.</span>
|
||||
</span><span id="transpile-165"><a href="#transpile-165"><span class="linenos">165</span></a><span class="sd"> error_level: the desired error level of the parser.</span>
|
||||
</span><span id="transpile-166"><a href="#transpile-166"><span class="linenos">166</span></a><span class="sd"> **opts: other `sqlglot.generator.Generator` options.</span>
|
||||
</span><span id="transpile-167"><a href="#transpile-167"><span class="linenos">167</span></a>
|
||||
</span><span id="transpile-168"><a href="#transpile-168"><span class="linenos">168</span></a><span class="sd"> Returns:</span>
|
||||
</span><span id="transpile-169"><a href="#transpile-169"><span class="linenos">169</span></a><span class="sd"> The list of transpiled SQL statements.</span>
|
||||
</span><span id="transpile-170"><a href="#transpile-170"><span class="linenos">170</span></a><span class="sd"> """</span>
|
||||
</span><span id="transpile-171"><a href="#transpile-171"><span class="linenos">171</span></a> <span class="n">write</span> <span class="o">=</span> <span class="p">(</span><span class="n">read</span> <span class="k">if</span> <span class="n">write</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">write</span><span class="p">)</span> <span class="k">if</span> <span class="n">identity</span> <span class="k">else</span> <span class="n">write</span>
|
||||
</span><span id="transpile-172"><a href="#transpile-172"><span class="linenos">172</span></a> <span class="n">write</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">write</span><span class="p">)</span>
|
||||
</span><span id="transpile-173"><a href="#transpile-173"><span class="linenos">173</span></a> <span class="k">return</span> <span class="p">[</span>
|
||||
</span><span id="transpile-174"><a href="#transpile-174"><span class="linenos">174</span></a> <span class="n">write</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="transpile-175"><a href="#transpile-175"><span class="linenos">175</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">parse</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="n">read</span><span class="p">,</span> <span class="n">error_level</span><span class="o">=</span><span class="n">error_level</span><span class="p">)</span>
|
||||
</span><span id="transpile-176"><a href="#transpile-176"><span class="linenos">176</span></a> <span class="p">]</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
|
|
@ -76,8 +76,8 @@
|
|||
</span><span id="L-12"><a href="#L-12"><span class="linenos">12</span></a><span class="n">__version_tuple__</span><span class="p">:</span> <span class="n">VERSION_TUPLE</span>
|
||||
</span><span id="L-13"><a href="#L-13"><span class="linenos">13</span></a><span class="n">version_tuple</span><span class="p">:</span> <span class="n">VERSION_TUPLE</span>
|
||||
</span><span id="L-14"><a href="#L-14"><span class="linenos">14</span></a>
|
||||
</span><span id="L-15"><a href="#L-15"><span class="linenos">15</span></a><span class="n">__version__</span> <span class="o">=</span> <span class="n">version</span> <span class="o">=</span> <span class="s1">'24.0.3'</span>
|
||||
</span><span id="L-16"><a href="#L-16"><span class="linenos">16</span></a><span class="n">__version_tuple__</span> <span class="o">=</span> <span class="n">version_tuple</span> <span class="o">=</span> <span class="p">(</span><span class="mi">24</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
|
||||
</span><span id="L-15"><a href="#L-15"><span class="linenos">15</span></a><span class="n">__version__</span> <span class="o">=</span> <span class="n">version</span> <span class="o">=</span> <span class="s1">'25.0.2'</span>
|
||||
</span><span id="L-16"><a href="#L-16"><span class="linenos">16</span></a><span class="n">__version_tuple__</span> <span class="o">=</span> <span class="n">version_tuple</span> <span class="o">=</span> <span class="p">(</span><span class="mi">25</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -97,7 +97,7 @@
|
|||
<section id="version">
|
||||
<div class="attr variable">
|
||||
<span class="name">version</span><span class="annotation">: str</span> =
|
||||
<span class="default_value">'24.0.3'</span>
|
||||
<span class="default_value">'25.0.2'</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -109,7 +109,7 @@
|
|||
<section id="version_tuple">
|
||||
<div class="attr variable">
|
||||
<span class="name">version_tuple</span><span class="annotation">: object</span> =
|
||||
<span class="default_value">(24, 0, 3)</span>
|
||||
<span class="default_value">(25, 0, 2)</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 it is too large
Load diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
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
|
@ -1311,6 +1311,9 @@
|
|||
<li>
|
||||
<a class="function" href="#Generator.maskingpolicycolumnconstraint_sql">maskingpolicycolumnconstraint_sql</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="function" href="#Generator.gapfill_sql">gapfill_sql</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</li>
|
||||
|
@ -5199,93 +5202,106 @@
|
|||
</span><span id="L-3860"><a href="#L-3860"><span class="linenos">3860</span></a> <span class="k">def</span> <span class="nf">copyparameter_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CopyParameter</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="L-3861"><a href="#L-3861"><span class="linenos">3861</span></a> <span class="n">option</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"this"</span><span class="p">)</span>
|
||||
</span><span id="L-3862"><a href="#L-3862"><span class="linenos">3862</span></a>
|
||||
</span><span id="L-3863"><a href="#L-3863"><span class="linenos">3863</span></a> <span class="k">if</span> <span class="n">option</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">"FILE_FORMAT"</span><span class="p">:</span>
|
||||
</span><span id="L-3864"><a href="#L-3864"><span class="linenos">3864</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">"expression"</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">" "</span><span class="p">)</span>
|
||||
</span><span id="L-3865"><a href="#L-3865"><span class="linenos">3865</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">option</span><span class="si">}</span><span class="s2"> = (</span><span class="si">{</span><span class="n">values</span><span class="si">}</span><span class="s2">)"</span>
|
||||
</span><span id="L-3866"><a href="#L-3866"><span class="linenos">3866</span></a>
|
||||
</span><span id="L-3867"><a href="#L-3867"><span class="linenos">3867</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"expression"</span><span class="p">)</span>
|
||||
</span><span id="L-3863"><a href="#L-3863"><span class="linenos">3863</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
|
||||
</span><span id="L-3864"><a href="#L-3864"><span class="linenos">3864</span></a> <span class="n">upper</span> <span class="o">=</span> <span class="n">option</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
|
||||
</span><span id="L-3865"><a href="#L-3865"><span class="linenos">3865</span></a>
|
||||
</span><span id="L-3866"><a href="#L-3866"><span class="linenos">3866</span></a> <span class="c1"># Snowflake FILE_FORMAT options are separated by whitespace</span>
|
||||
</span><span id="L-3867"><a href="#L-3867"><span class="linenos">3867</span></a> <span class="n">sep</span> <span class="o">=</span> <span class="s2">" "</span> <span class="k">if</span> <span class="n">upper</span> <span class="o">==</span> <span class="s2">"FILE_FORMAT"</span> <span class="k">else</span> <span class="s2">", "</span>
|
||||
</span><span id="L-3868"><a href="#L-3868"><span class="linenos">3868</span></a>
|
||||
</span><span id="L-3869"><a href="#L-3869"><span class="linenos">3869</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">value</span><span class="p">:</span>
|
||||
</span><span id="L-3870"><a href="#L-3870"><span class="linenos">3870</span></a> <span class="k">return</span> <span class="n">option</span>
|
||||
</span><span id="L-3871"><a href="#L-3871"><span class="linenos">3871</span></a>
|
||||
</span><span id="L-3872"><a href="#L-3872"><span class="linenos">3872</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">" = "</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">COPY_PARAMS_EQ_REQUIRED</span> <span class="k">else</span> <span class="s2">" "</span>
|
||||
</span><span id="L-3869"><a href="#L-3869"><span class="linenos">3869</span></a> <span class="c1"># Databricks copy/format options do not set their list of values with EQ</span>
|
||||
</span><span id="L-3870"><a href="#L-3870"><span class="linenos">3870</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">" "</span> <span class="k">if</span> <span class="n">upper</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"COPY_OPTIONS"</span><span class="p">,</span> <span class="s2">"FORMAT_OPTIONS"</span><span class="p">)</span> <span class="k">else</span> <span class="s2">" = "</span>
|
||||
</span><span id="L-3871"><a href="#L-3871"><span class="linenos">3871</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">)</span>
|
||||
</span><span id="L-3872"><a href="#L-3872"><span class="linenos">3872</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">option</span><span class="si">}{</span><span class="n">op</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">values</span><span class="si">}</span><span class="s2">)"</span>
|
||||
</span><span id="L-3873"><a href="#L-3873"><span class="linenos">3873</span></a>
|
||||
</span><span id="L-3874"><a href="#L-3874"><span class="linenos">3874</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">option</span><span class="si">}{</span><span class="n">op</span><span class="si">}{</span><span class="n">value</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="L-3874"><a href="#L-3874"><span class="linenos">3874</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"expression"</span><span class="p">)</span>
|
||||
</span><span id="L-3875"><a href="#L-3875"><span class="linenos">3875</span></a>
|
||||
</span><span id="L-3876"><a href="#L-3876"><span class="linenos">3876</span></a> <span class="k">def</span> <span class="nf">credentials_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Credentials</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="L-3877"><a href="#L-3877"><span class="linenos">3877</span></a> <span class="n">cred_expr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"credentials"</span><span class="p">)</span>
|
||||
</span><span id="L-3878"><a href="#L-3878"><span class="linenos">3878</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">cred_expr</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
|
||||
</span><span id="L-3879"><a href="#L-3879"><span class="linenos">3879</span></a> <span class="c1"># Redshift case: CREDENTIALS <string></span>
|
||||
</span><span id="L-3880"><a href="#L-3880"><span class="linenos">3880</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"credentials"</span><span class="p">)</span>
|
||||
</span><span id="L-3881"><a href="#L-3881"><span class="linenos">3881</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"CREDENTIALS </span><span class="si">{</span><span class="n">credentials</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">credentials</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="L-3882"><a href="#L-3882"><span class="linenos">3882</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-3883"><a href="#L-3883"><span class="linenos">3883</span></a> <span class="c1"># Snowflake case: CREDENTIALS = (...)</span>
|
||||
</span><span id="L-3884"><a href="#L-3884"><span class="linenos">3884</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">"credentials"</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">" "</span><span class="p">)</span>
|
||||
</span><span id="L-3885"><a href="#L-3885"><span class="linenos">3885</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"CREDENTIALS = (</span><span class="si">{</span><span class="n">credentials</span><span class="si">}</span><span class="s2">)"</span> <span class="k">if</span> <span class="n">credentials</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="L-3886"><a href="#L-3886"><span class="linenos">3886</span></a>
|
||||
</span><span id="L-3887"><a href="#L-3887"><span class="linenos">3887</span></a> <span class="n">storage</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"storage"</span><span class="p">)</span>
|
||||
</span><span id="L-3888"><a href="#L-3888"><span class="linenos">3888</span></a>
|
||||
</span><span id="L-3889"><a href="#L-3889"><span class="linenos">3889</span></a> <span class="n">encryption</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">"encryption"</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">" "</span><span class="p">)</span>
|
||||
</span><span id="L-3890"><a href="#L-3890"><span class="linenos">3890</span></a> <span class="n">encryption</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" ENCRYPTION = (</span><span class="si">{</span><span class="n">encryption</span><span class="si">}</span><span class="s2">)"</span> <span class="k">if</span> <span class="n">encryption</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="L-3891"><a href="#L-3891"><span class="linenos">3891</span></a>
|
||||
</span><span id="L-3892"><a href="#L-3892"><span class="linenos">3892</span></a> <span class="n">iam_role</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"iam_role"</span><span class="p">)</span>
|
||||
</span><span id="L-3893"><a href="#L-3893"><span class="linenos">3893</span></a> <span class="n">iam_role</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"IAM_ROLE </span><span class="si">{</span><span class="n">iam_role</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">iam_role</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="L-3894"><a href="#L-3894"><span class="linenos">3894</span></a>
|
||||
</span><span id="L-3895"><a href="#L-3895"><span class="linenos">3895</span></a> <span class="n">region</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"region"</span><span class="p">)</span>
|
||||
</span><span id="L-3896"><a href="#L-3896"><span class="linenos">3896</span></a> <span class="n">region</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" REGION </span><span class="si">{</span><span class="n">region</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">region</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="L-3897"><a href="#L-3897"><span class="linenos">3897</span></a>
|
||||
</span><span id="L-3898"><a href="#L-3898"><span class="linenos">3898</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">credentials</span><span class="si">}{</span><span class="n">storage</span><span class="si">}{</span><span class="n">encryption</span><span class="si">}{</span><span class="n">iam_role</span><span class="si">}{</span><span class="n">region</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="L-3876"><a href="#L-3876"><span class="linenos">3876</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">value</span><span class="p">:</span>
|
||||
</span><span id="L-3877"><a href="#L-3877"><span class="linenos">3877</span></a> <span class="k">return</span> <span class="n">option</span>
|
||||
</span><span id="L-3878"><a href="#L-3878"><span class="linenos">3878</span></a>
|
||||
</span><span id="L-3879"><a href="#L-3879"><span class="linenos">3879</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">" = "</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">COPY_PARAMS_EQ_REQUIRED</span> <span class="k">else</span> <span class="s2">" "</span>
|
||||
</span><span id="L-3880"><a href="#L-3880"><span class="linenos">3880</span></a>
|
||||
</span><span id="L-3881"><a href="#L-3881"><span class="linenos">3881</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">option</span><span class="si">}{</span><span class="n">op</span><span class="si">}{</span><span class="n">value</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="L-3882"><a href="#L-3882"><span class="linenos">3882</span></a>
|
||||
</span><span id="L-3883"><a href="#L-3883"><span class="linenos">3883</span></a> <span class="k">def</span> <span class="nf">credentials_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Credentials</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="L-3884"><a href="#L-3884"><span class="linenos">3884</span></a> <span class="n">cred_expr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"credentials"</span><span class="p">)</span>
|
||||
</span><span id="L-3885"><a href="#L-3885"><span class="linenos">3885</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">cred_expr</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
|
||||
</span><span id="L-3886"><a href="#L-3886"><span class="linenos">3886</span></a> <span class="c1"># Redshift case: CREDENTIALS <string></span>
|
||||
</span><span id="L-3887"><a href="#L-3887"><span class="linenos">3887</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"credentials"</span><span class="p">)</span>
|
||||
</span><span id="L-3888"><a href="#L-3888"><span class="linenos">3888</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"CREDENTIALS </span><span class="si">{</span><span class="n">credentials</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">credentials</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="L-3889"><a href="#L-3889"><span class="linenos">3889</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-3890"><a href="#L-3890"><span class="linenos">3890</span></a> <span class="c1"># Snowflake case: CREDENTIALS = (...)</span>
|
||||
</span><span id="L-3891"><a href="#L-3891"><span class="linenos">3891</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">"credentials"</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">" "</span><span class="p">)</span>
|
||||
</span><span id="L-3892"><a href="#L-3892"><span class="linenos">3892</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"CREDENTIALS = (</span><span class="si">{</span><span class="n">credentials</span><span class="si">}</span><span class="s2">)"</span> <span class="k">if</span> <span class="n">cred_expr</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="L-3893"><a href="#L-3893"><span class="linenos">3893</span></a>
|
||||
</span><span id="L-3894"><a href="#L-3894"><span class="linenos">3894</span></a> <span class="n">storage</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"storage"</span><span class="p">)</span>
|
||||
</span><span id="L-3895"><a href="#L-3895"><span class="linenos">3895</span></a> <span class="n">storage</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"STORAGE_INTEGRATION = </span><span class="si">{</span><span class="n">storage</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">storage</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="L-3896"><a href="#L-3896"><span class="linenos">3896</span></a>
|
||||
</span><span id="L-3897"><a href="#L-3897"><span class="linenos">3897</span></a> <span class="n">encryption</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">"encryption"</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">" "</span><span class="p">)</span>
|
||||
</span><span id="L-3898"><a href="#L-3898"><span class="linenos">3898</span></a> <span class="n">encryption</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" ENCRYPTION = (</span><span class="si">{</span><span class="n">encryption</span><span class="si">}</span><span class="s2">)"</span> <span class="k">if</span> <span class="n">encryption</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="L-3899"><a href="#L-3899"><span class="linenos">3899</span></a>
|
||||
</span><span id="L-3900"><a href="#L-3900"><span class="linenos">3900</span></a> <span class="k">def</span> <span class="nf">copy_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Copy</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="L-3901"><a href="#L-3901"><span class="linenos">3901</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"this"</span><span class="p">)</span>
|
||||
</span><span id="L-3902"><a href="#L-3902"><span class="linenos">3902</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" INTO </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">COPY_HAS_INTO_KEYWORD</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">" </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="L-3903"><a href="#L-3903"><span class="linenos">3903</span></a>
|
||||
</span><span id="L-3904"><a href="#L-3904"><span class="linenos">3904</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"credentials"</span><span class="p">)</span>
|
||||
</span><span id="L-3905"><a href="#L-3905"><span class="linenos">3905</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">credentials</span><span class="p">)</span> <span class="k">if</span> <span class="n">credentials</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="L-3906"><a href="#L-3906"><span class="linenos">3906</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">"FROM"</span> <span class="k">if</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">"kind"</span><span class="p">)</span> <span class="k">else</span> <span class="s2">"TO"</span><span class="p">)</span>
|
||||
</span><span id="L-3907"><a href="#L-3907"><span class="linenos">3907</span></a> <span class="n">files</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">"files"</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
</span><span id="L-3908"><a href="#L-3908"><span class="linenos">3908</span></a>
|
||||
</span><span id="L-3909"><a href="#L-3909"><span class="linenos">3909</span></a> <span class="n">sep</span> <span class="o">=</span> <span class="s2">", "</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">COPY_PARAMS_ARE_CSV</span> <span class="k">else</span> <span class="s2">" "</span>
|
||||
</span><span id="L-3910"><a href="#L-3910"><span class="linenos">3910</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span>
|
||||
</span><span id="L-3911"><a href="#L-3911"><span class="linenos">3911</span></a> <span class="n">expression</span><span class="p">,</span>
|
||||
</span><span id="L-3912"><a href="#L-3912"><span class="linenos">3912</span></a> <span class="n">key</span><span class="o">=</span><span class="s2">"params"</span><span class="p">,</span>
|
||||
</span><span id="L-3913"><a href="#L-3913"><span class="linenos">3913</span></a> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">,</span>
|
||||
</span><span id="L-3914"><a href="#L-3914"><span class="linenos">3914</span></a> <span class="n">new_line</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
</span><span id="L-3915"><a href="#L-3915"><span class="linenos">3915</span></a> <span class="n">skip_last</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
</span><span id="L-3916"><a href="#L-3916"><span class="linenos">3916</span></a> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
</span><span id="L-3917"><a href="#L-3917"><span class="linenos">3917</span></a> <span class="n">indent</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">COPY_PARAMS_ARE_WRAPPED</span><span class="p">,</span>
|
||||
</span><span id="L-3918"><a href="#L-3918"><span class="linenos">3918</span></a> <span class="p">)</span>
|
||||
</span><span id="L-3919"><a href="#L-3919"><span class="linenos">3919</span></a>
|
||||
</span><span id="L-3920"><a href="#L-3920"><span class="linenos">3920</span></a> <span class="k">if</span> <span class="n">params</span><span class="p">:</span>
|
||||
</span><span id="L-3921"><a href="#L-3921"><span class="linenos">3921</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">COPY_PARAMS_ARE_WRAPPED</span><span class="p">:</span>
|
||||
</span><span id="L-3922"><a href="#L-3922"><span class="linenos">3922</span></a> <span class="n">params</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" WITH (</span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">)"</span>
|
||||
</span><span id="L-3923"><a href="#L-3923"><span class="linenos">3923</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
|
||||
</span><span id="L-3924"><a href="#L-3924"><span class="linenos">3924</span></a> <span class="n">params</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" </span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="L-3925"><a href="#L-3925"><span class="linenos">3925</span></a>
|
||||
</span><span id="L-3926"><a href="#L-3926"><span class="linenos">3926</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"COPY</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">files</span><span class="si">}{</span><span class="n">credentials</span><span class="si">}{</span><span class="n">params</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="L-3900"><a href="#L-3900"><span class="linenos">3900</span></a> <span class="n">iam_role</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"iam_role"</span><span class="p">)</span>
|
||||
</span><span id="L-3901"><a href="#L-3901"><span class="linenos">3901</span></a> <span class="n">iam_role</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"IAM_ROLE </span><span class="si">{</span><span class="n">iam_role</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">iam_role</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="L-3902"><a href="#L-3902"><span class="linenos">3902</span></a>
|
||||
</span><span id="L-3903"><a href="#L-3903"><span class="linenos">3903</span></a> <span class="n">region</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"region"</span><span class="p">)</span>
|
||||
</span><span id="L-3904"><a href="#L-3904"><span class="linenos">3904</span></a> <span class="n">region</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" REGION </span><span class="si">{</span><span class="n">region</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">region</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="L-3905"><a href="#L-3905"><span class="linenos">3905</span></a>
|
||||
</span><span id="L-3906"><a href="#L-3906"><span class="linenos">3906</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">credentials</span><span class="si">}{</span><span class="n">storage</span><span class="si">}{</span><span class="n">encryption</span><span class="si">}{</span><span class="n">iam_role</span><span class="si">}{</span><span class="n">region</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="L-3907"><a href="#L-3907"><span class="linenos">3907</span></a>
|
||||
</span><span id="L-3908"><a href="#L-3908"><span class="linenos">3908</span></a> <span class="k">def</span> <span class="nf">copy_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Copy</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="L-3909"><a href="#L-3909"><span class="linenos">3909</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"this"</span><span class="p">)</span>
|
||||
</span><span id="L-3910"><a href="#L-3910"><span class="linenos">3910</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" INTO </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">COPY_HAS_INTO_KEYWORD</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">" </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="L-3911"><a href="#L-3911"><span class="linenos">3911</span></a>
|
||||
</span><span id="L-3912"><a href="#L-3912"><span class="linenos">3912</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"credentials"</span><span class="p">)</span>
|
||||
</span><span id="L-3913"><a href="#L-3913"><span class="linenos">3913</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">credentials</span><span class="p">)</span> <span class="k">if</span> <span class="n">credentials</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="L-3914"><a href="#L-3914"><span class="linenos">3914</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">"FROM"</span> <span class="k">if</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">"kind"</span><span class="p">)</span> <span class="k">else</span> <span class="s2">"TO"</span><span class="p">)</span>
|
||||
</span><span id="L-3915"><a href="#L-3915"><span class="linenos">3915</span></a> <span class="n">files</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">"files"</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
</span><span id="L-3916"><a href="#L-3916"><span class="linenos">3916</span></a>
|
||||
</span><span id="L-3917"><a href="#L-3917"><span class="linenos">3917</span></a> <span class="n">sep</span> <span class="o">=</span> <span class="s2">", "</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">COPY_PARAMS_ARE_CSV</span> <span class="k">else</span> <span class="s2">" "</span>
|
||||
</span><span id="L-3918"><a href="#L-3918"><span class="linenos">3918</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span>
|
||||
</span><span id="L-3919"><a href="#L-3919"><span class="linenos">3919</span></a> <span class="n">expression</span><span class="p">,</span>
|
||||
</span><span id="L-3920"><a href="#L-3920"><span class="linenos">3920</span></a> <span class="n">key</span><span class="o">=</span><span class="s2">"params"</span><span class="p">,</span>
|
||||
</span><span id="L-3921"><a href="#L-3921"><span class="linenos">3921</span></a> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">,</span>
|
||||
</span><span id="L-3922"><a href="#L-3922"><span class="linenos">3922</span></a> <span class="n">new_line</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
</span><span id="L-3923"><a href="#L-3923"><span class="linenos">3923</span></a> <span class="n">skip_last</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
</span><span id="L-3924"><a href="#L-3924"><span class="linenos">3924</span></a> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
</span><span id="L-3925"><a href="#L-3925"><span class="linenos">3925</span></a> <span class="n">indent</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">COPY_PARAMS_ARE_WRAPPED</span><span class="p">,</span>
|
||||
</span><span id="L-3926"><a href="#L-3926"><span class="linenos">3926</span></a> <span class="p">)</span>
|
||||
</span><span id="L-3927"><a href="#L-3927"><span class="linenos">3927</span></a>
|
||||
</span><span id="L-3928"><a href="#L-3928"><span class="linenos">3928</span></a> <span class="k">def</span> <span class="nf">semicolon_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Semicolon</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="L-3929"><a href="#L-3929"><span class="linenos">3929</span></a> <span class="k">return</span> <span class="s2">""</span>
|
||||
</span><span id="L-3930"><a href="#L-3930"><span class="linenos">3930</span></a>
|
||||
</span><span id="L-3931"><a href="#L-3931"><span class="linenos">3931</span></a> <span class="k">def</span> <span class="nf">datadeletionproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataDeletionProperty</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="L-3932"><a href="#L-3932"><span class="linenos">3932</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="s2">"ON"</span> <span class="k">if</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">"on"</span><span class="p">)</span> <span class="k">else</span> <span class="s2">"OFF"</span>
|
||||
</span><span id="L-3933"><a href="#L-3933"><span class="linenos">3933</span></a> <span class="n">filter_col</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"filter_column"</span><span class="p">)</span>
|
||||
</span><span id="L-3934"><a href="#L-3934"><span class="linenos">3934</span></a> <span class="n">filter_col</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"FILTER_COLUMN=</span><span class="si">{</span><span class="n">filter_col</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">filter_col</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
</span><span id="L-3935"><a href="#L-3935"><span class="linenos">3935</span></a> <span class="n">retention_period</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"retention_period"</span><span class="p">)</span>
|
||||
</span><span id="L-3936"><a href="#L-3936"><span class="linenos">3936</span></a> <span class="n">retention_period</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"RETENTION_PERIOD=</span><span class="si">{</span><span class="n">retention_period</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">retention_period</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
</span><span id="L-3937"><a href="#L-3937"><span class="linenos">3937</span></a>
|
||||
</span><span id="L-3938"><a href="#L-3938"><span class="linenos">3938</span></a> <span class="k">if</span> <span class="n">filter_col</span> <span class="ow">or</span> <span class="n">retention_period</span><span class="p">:</span>
|
||||
</span><span id="L-3939"><a href="#L-3939"><span class="linenos">3939</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">"ON"</span><span class="p">,</span> <span class="n">filter_col</span><span class="p">,</span> <span class="n">retention_period</span><span class="p">)</span>
|
||||
</span><span id="L-3940"><a href="#L-3940"><span class="linenos">3940</span></a>
|
||||
</span><span id="L-3941"><a href="#L-3941"><span class="linenos">3941</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"DATA_DELETION=</span><span class="si">{</span><span class="n">on_sql</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="L-3942"><a href="#L-3942"><span class="linenos">3942</span></a>
|
||||
</span><span id="L-3943"><a href="#L-3943"><span class="linenos">3943</span></a> <span class="k">def</span> <span class="nf">maskingpolicycolumnconstraint_sql</span><span class="p">(</span>
|
||||
</span><span id="L-3944"><a href="#L-3944"><span class="linenos">3944</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MaskingPolicyColumnConstraint</span>
|
||||
</span><span id="L-3945"><a href="#L-3945"><span class="linenos">3945</span></a> <span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="L-3946"><a href="#L-3946"><span class="linenos">3946</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"this"</span><span class="p">)</span>
|
||||
</span><span id="L-3947"><a href="#L-3947"><span class="linenos">3947</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
</span><span id="L-3948"><a href="#L-3948"><span class="linenos">3948</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" USING (</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)"</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="L-3949"><a href="#L-3949"><span class="linenos">3949</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"MASKING POLICY </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="L-3928"><a href="#L-3928"><span class="linenos">3928</span></a> <span class="k">if</span> <span class="n">params</span><span class="p">:</span>
|
||||
</span><span id="L-3929"><a href="#L-3929"><span class="linenos">3929</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">COPY_PARAMS_ARE_WRAPPED</span><span class="p">:</span>
|
||||
</span><span id="L-3930"><a href="#L-3930"><span class="linenos">3930</span></a> <span class="n">params</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" WITH (</span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">)"</span>
|
||||
</span><span id="L-3931"><a href="#L-3931"><span class="linenos">3931</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
|
||||
</span><span id="L-3932"><a href="#L-3932"><span class="linenos">3932</span></a> <span class="n">params</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" </span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="L-3933"><a href="#L-3933"><span class="linenos">3933</span></a>
|
||||
</span><span id="L-3934"><a href="#L-3934"><span class="linenos">3934</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"COPY</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">files</span><span class="si">}{</span><span class="n">credentials</span><span class="si">}{</span><span class="n">params</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="L-3935"><a href="#L-3935"><span class="linenos">3935</span></a>
|
||||
</span><span id="L-3936"><a href="#L-3936"><span class="linenos">3936</span></a> <span class="k">def</span> <span class="nf">semicolon_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Semicolon</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="L-3937"><a href="#L-3937"><span class="linenos">3937</span></a> <span class="k">return</span> <span class="s2">""</span>
|
||||
</span><span id="L-3938"><a href="#L-3938"><span class="linenos">3938</span></a>
|
||||
</span><span id="L-3939"><a href="#L-3939"><span class="linenos">3939</span></a> <span class="k">def</span> <span class="nf">datadeletionproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataDeletionProperty</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="L-3940"><a href="#L-3940"><span class="linenos">3940</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="s2">"ON"</span> <span class="k">if</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">"on"</span><span class="p">)</span> <span class="k">else</span> <span class="s2">"OFF"</span>
|
||||
</span><span id="L-3941"><a href="#L-3941"><span class="linenos">3941</span></a> <span class="n">filter_col</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"filter_column"</span><span class="p">)</span>
|
||||
</span><span id="L-3942"><a href="#L-3942"><span class="linenos">3942</span></a> <span class="n">filter_col</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"FILTER_COLUMN=</span><span class="si">{</span><span class="n">filter_col</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">filter_col</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
</span><span id="L-3943"><a href="#L-3943"><span class="linenos">3943</span></a> <span class="n">retention_period</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"retention_period"</span><span class="p">)</span>
|
||||
</span><span id="L-3944"><a href="#L-3944"><span class="linenos">3944</span></a> <span class="n">retention_period</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"RETENTION_PERIOD=</span><span class="si">{</span><span class="n">retention_period</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">retention_period</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
</span><span id="L-3945"><a href="#L-3945"><span class="linenos">3945</span></a>
|
||||
</span><span id="L-3946"><a href="#L-3946"><span class="linenos">3946</span></a> <span class="k">if</span> <span class="n">filter_col</span> <span class="ow">or</span> <span class="n">retention_period</span><span class="p">:</span>
|
||||
</span><span id="L-3947"><a href="#L-3947"><span class="linenos">3947</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">"ON"</span><span class="p">,</span> <span class="n">filter_col</span><span class="p">,</span> <span class="n">retention_period</span><span class="p">)</span>
|
||||
</span><span id="L-3948"><a href="#L-3948"><span class="linenos">3948</span></a>
|
||||
</span><span id="L-3949"><a href="#L-3949"><span class="linenos">3949</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"DATA_DELETION=</span><span class="si">{</span><span class="n">on_sql</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="L-3950"><a href="#L-3950"><span class="linenos">3950</span></a>
|
||||
</span><span id="L-3951"><a href="#L-3951"><span class="linenos">3951</span></a> <span class="k">def</span> <span class="nf">maskingpolicycolumnconstraint_sql</span><span class="p">(</span>
|
||||
</span><span id="L-3952"><a href="#L-3952"><span class="linenos">3952</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MaskingPolicyColumnConstraint</span>
|
||||
</span><span id="L-3953"><a href="#L-3953"><span class="linenos">3953</span></a> <span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="L-3954"><a href="#L-3954"><span class="linenos">3954</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"this"</span><span class="p">)</span>
|
||||
</span><span id="L-3955"><a href="#L-3955"><span class="linenos">3955</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
</span><span id="L-3956"><a href="#L-3956"><span class="linenos">3956</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" USING (</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)"</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="L-3957"><a href="#L-3957"><span class="linenos">3957</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"MASKING POLICY </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="L-3958"><a href="#L-3958"><span class="linenos">3958</span></a>
|
||||
</span><span id="L-3959"><a href="#L-3959"><span class="linenos">3959</span></a> <span class="k">def</span> <span class="nf">gapfill_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GapFill</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="L-3960"><a href="#L-3960"><span class="linenos">3960</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"this"</span><span class="p">)</span>
|
||||
</span><span id="L-3961"><a href="#L-3961"><span class="linenos">3961</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"TABLE </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="L-3962"><a href="#L-3962"><span class="linenos">3962</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">"GAP_FILL"</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="o">*</span><span class="p">[</span><span class="n">v</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">k</span> <span class="o">!=</span> <span class="s2">"this"</span><span class="p">])</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -9152,93 +9168,106 @@
|
|||
</span><span id="Generator-3861"><a href="#Generator-3861"><span class="linenos">3861</span></a> <span class="k">def</span> <span class="nf">copyparameter_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CopyParameter</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="Generator-3862"><a href="#Generator-3862"><span class="linenos">3862</span></a> <span class="n">option</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"this"</span><span class="p">)</span>
|
||||
</span><span id="Generator-3863"><a href="#Generator-3863"><span class="linenos">3863</span></a>
|
||||
</span><span id="Generator-3864"><a href="#Generator-3864"><span class="linenos">3864</span></a> <span class="k">if</span> <span class="n">option</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">"FILE_FORMAT"</span><span class="p">:</span>
|
||||
</span><span id="Generator-3865"><a href="#Generator-3865"><span class="linenos">3865</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">"expression"</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">" "</span><span class="p">)</span>
|
||||
</span><span id="Generator-3866"><a href="#Generator-3866"><span class="linenos">3866</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">option</span><span class="si">}</span><span class="s2"> = (</span><span class="si">{</span><span class="n">values</span><span class="si">}</span><span class="s2">)"</span>
|
||||
</span><span id="Generator-3867"><a href="#Generator-3867"><span class="linenos">3867</span></a>
|
||||
</span><span id="Generator-3868"><a href="#Generator-3868"><span class="linenos">3868</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"expression"</span><span class="p">)</span>
|
||||
</span><span id="Generator-3864"><a href="#Generator-3864"><span class="linenos">3864</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
|
||||
</span><span id="Generator-3865"><a href="#Generator-3865"><span class="linenos">3865</span></a> <span class="n">upper</span> <span class="o">=</span> <span class="n">option</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
|
||||
</span><span id="Generator-3866"><a href="#Generator-3866"><span class="linenos">3866</span></a>
|
||||
</span><span id="Generator-3867"><a href="#Generator-3867"><span class="linenos">3867</span></a> <span class="c1"># Snowflake FILE_FORMAT options are separated by whitespace</span>
|
||||
</span><span id="Generator-3868"><a href="#Generator-3868"><span class="linenos">3868</span></a> <span class="n">sep</span> <span class="o">=</span> <span class="s2">" "</span> <span class="k">if</span> <span class="n">upper</span> <span class="o">==</span> <span class="s2">"FILE_FORMAT"</span> <span class="k">else</span> <span class="s2">", "</span>
|
||||
</span><span id="Generator-3869"><a href="#Generator-3869"><span class="linenos">3869</span></a>
|
||||
</span><span id="Generator-3870"><a href="#Generator-3870"><span class="linenos">3870</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">value</span><span class="p">:</span>
|
||||
</span><span id="Generator-3871"><a href="#Generator-3871"><span class="linenos">3871</span></a> <span class="k">return</span> <span class="n">option</span>
|
||||
</span><span id="Generator-3872"><a href="#Generator-3872"><span class="linenos">3872</span></a>
|
||||
</span><span id="Generator-3873"><a href="#Generator-3873"><span class="linenos">3873</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">" = "</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">COPY_PARAMS_EQ_REQUIRED</span> <span class="k">else</span> <span class="s2">" "</span>
|
||||
</span><span id="Generator-3870"><a href="#Generator-3870"><span class="linenos">3870</span></a> <span class="c1"># Databricks copy/format options do not set their list of values with EQ</span>
|
||||
</span><span id="Generator-3871"><a href="#Generator-3871"><span class="linenos">3871</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">" "</span> <span class="k">if</span> <span class="n">upper</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"COPY_OPTIONS"</span><span class="p">,</span> <span class="s2">"FORMAT_OPTIONS"</span><span class="p">)</span> <span class="k">else</span> <span class="s2">" = "</span>
|
||||
</span><span id="Generator-3872"><a href="#Generator-3872"><span class="linenos">3872</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">)</span>
|
||||
</span><span id="Generator-3873"><a href="#Generator-3873"><span class="linenos">3873</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">option</span><span class="si">}{</span><span class="n">op</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">values</span><span class="si">}</span><span class="s2">)"</span>
|
||||
</span><span id="Generator-3874"><a href="#Generator-3874"><span class="linenos">3874</span></a>
|
||||
</span><span id="Generator-3875"><a href="#Generator-3875"><span class="linenos">3875</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">option</span><span class="si">}{</span><span class="n">op</span><span class="si">}{</span><span class="n">value</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="Generator-3875"><a href="#Generator-3875"><span class="linenos">3875</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"expression"</span><span class="p">)</span>
|
||||
</span><span id="Generator-3876"><a href="#Generator-3876"><span class="linenos">3876</span></a>
|
||||
</span><span id="Generator-3877"><a href="#Generator-3877"><span class="linenos">3877</span></a> <span class="k">def</span> <span class="nf">credentials_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Credentials</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="Generator-3878"><a href="#Generator-3878"><span class="linenos">3878</span></a> <span class="n">cred_expr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"credentials"</span><span class="p">)</span>
|
||||
</span><span id="Generator-3879"><a href="#Generator-3879"><span class="linenos">3879</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">cred_expr</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
|
||||
</span><span id="Generator-3880"><a href="#Generator-3880"><span class="linenos">3880</span></a> <span class="c1"># Redshift case: CREDENTIALS <string></span>
|
||||
</span><span id="Generator-3881"><a href="#Generator-3881"><span class="linenos">3881</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"credentials"</span><span class="p">)</span>
|
||||
</span><span id="Generator-3882"><a href="#Generator-3882"><span class="linenos">3882</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"CREDENTIALS </span><span class="si">{</span><span class="n">credentials</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">credentials</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="Generator-3883"><a href="#Generator-3883"><span class="linenos">3883</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="Generator-3884"><a href="#Generator-3884"><span class="linenos">3884</span></a> <span class="c1"># Snowflake case: CREDENTIALS = (...)</span>
|
||||
</span><span id="Generator-3885"><a href="#Generator-3885"><span class="linenos">3885</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">"credentials"</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">" "</span><span class="p">)</span>
|
||||
</span><span id="Generator-3886"><a href="#Generator-3886"><span class="linenos">3886</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"CREDENTIALS = (</span><span class="si">{</span><span class="n">credentials</span><span class="si">}</span><span class="s2">)"</span> <span class="k">if</span> <span class="n">credentials</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="Generator-3887"><a href="#Generator-3887"><span class="linenos">3887</span></a>
|
||||
</span><span id="Generator-3888"><a href="#Generator-3888"><span class="linenos">3888</span></a> <span class="n">storage</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"storage"</span><span class="p">)</span>
|
||||
</span><span id="Generator-3889"><a href="#Generator-3889"><span class="linenos">3889</span></a>
|
||||
</span><span id="Generator-3890"><a href="#Generator-3890"><span class="linenos">3890</span></a> <span class="n">encryption</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">"encryption"</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">" "</span><span class="p">)</span>
|
||||
</span><span id="Generator-3891"><a href="#Generator-3891"><span class="linenos">3891</span></a> <span class="n">encryption</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" ENCRYPTION = (</span><span class="si">{</span><span class="n">encryption</span><span class="si">}</span><span class="s2">)"</span> <span class="k">if</span> <span class="n">encryption</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="Generator-3892"><a href="#Generator-3892"><span class="linenos">3892</span></a>
|
||||
</span><span id="Generator-3893"><a href="#Generator-3893"><span class="linenos">3893</span></a> <span class="n">iam_role</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"iam_role"</span><span class="p">)</span>
|
||||
</span><span id="Generator-3894"><a href="#Generator-3894"><span class="linenos">3894</span></a> <span class="n">iam_role</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"IAM_ROLE </span><span class="si">{</span><span class="n">iam_role</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">iam_role</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="Generator-3895"><a href="#Generator-3895"><span class="linenos">3895</span></a>
|
||||
</span><span id="Generator-3896"><a href="#Generator-3896"><span class="linenos">3896</span></a> <span class="n">region</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"region"</span><span class="p">)</span>
|
||||
</span><span id="Generator-3897"><a href="#Generator-3897"><span class="linenos">3897</span></a> <span class="n">region</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" REGION </span><span class="si">{</span><span class="n">region</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">region</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="Generator-3898"><a href="#Generator-3898"><span class="linenos">3898</span></a>
|
||||
</span><span id="Generator-3899"><a href="#Generator-3899"><span class="linenos">3899</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">credentials</span><span class="si">}{</span><span class="n">storage</span><span class="si">}{</span><span class="n">encryption</span><span class="si">}{</span><span class="n">iam_role</span><span class="si">}{</span><span class="n">region</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="Generator-3877"><a href="#Generator-3877"><span class="linenos">3877</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">value</span><span class="p">:</span>
|
||||
</span><span id="Generator-3878"><a href="#Generator-3878"><span class="linenos">3878</span></a> <span class="k">return</span> <span class="n">option</span>
|
||||
</span><span id="Generator-3879"><a href="#Generator-3879"><span class="linenos">3879</span></a>
|
||||
</span><span id="Generator-3880"><a href="#Generator-3880"><span class="linenos">3880</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">" = "</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">COPY_PARAMS_EQ_REQUIRED</span> <span class="k">else</span> <span class="s2">" "</span>
|
||||
</span><span id="Generator-3881"><a href="#Generator-3881"><span class="linenos">3881</span></a>
|
||||
</span><span id="Generator-3882"><a href="#Generator-3882"><span class="linenos">3882</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">option</span><span class="si">}{</span><span class="n">op</span><span class="si">}{</span><span class="n">value</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="Generator-3883"><a href="#Generator-3883"><span class="linenos">3883</span></a>
|
||||
</span><span id="Generator-3884"><a href="#Generator-3884"><span class="linenos">3884</span></a> <span class="k">def</span> <span class="nf">credentials_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Credentials</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="Generator-3885"><a href="#Generator-3885"><span class="linenos">3885</span></a> <span class="n">cred_expr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"credentials"</span><span class="p">)</span>
|
||||
</span><span id="Generator-3886"><a href="#Generator-3886"><span class="linenos">3886</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">cred_expr</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
|
||||
</span><span id="Generator-3887"><a href="#Generator-3887"><span class="linenos">3887</span></a> <span class="c1"># Redshift case: CREDENTIALS <string></span>
|
||||
</span><span id="Generator-3888"><a href="#Generator-3888"><span class="linenos">3888</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"credentials"</span><span class="p">)</span>
|
||||
</span><span id="Generator-3889"><a href="#Generator-3889"><span class="linenos">3889</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"CREDENTIALS </span><span class="si">{</span><span class="n">credentials</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">credentials</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="Generator-3890"><a href="#Generator-3890"><span class="linenos">3890</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="Generator-3891"><a href="#Generator-3891"><span class="linenos">3891</span></a> <span class="c1"># Snowflake case: CREDENTIALS = (...)</span>
|
||||
</span><span id="Generator-3892"><a href="#Generator-3892"><span class="linenos">3892</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">"credentials"</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">" "</span><span class="p">)</span>
|
||||
</span><span id="Generator-3893"><a href="#Generator-3893"><span class="linenos">3893</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"CREDENTIALS = (</span><span class="si">{</span><span class="n">credentials</span><span class="si">}</span><span class="s2">)"</span> <span class="k">if</span> <span class="n">cred_expr</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="Generator-3894"><a href="#Generator-3894"><span class="linenos">3894</span></a>
|
||||
</span><span id="Generator-3895"><a href="#Generator-3895"><span class="linenos">3895</span></a> <span class="n">storage</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"storage"</span><span class="p">)</span>
|
||||
</span><span id="Generator-3896"><a href="#Generator-3896"><span class="linenos">3896</span></a> <span class="n">storage</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"STORAGE_INTEGRATION = </span><span class="si">{</span><span class="n">storage</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">storage</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="Generator-3897"><a href="#Generator-3897"><span class="linenos">3897</span></a>
|
||||
</span><span id="Generator-3898"><a href="#Generator-3898"><span class="linenos">3898</span></a> <span class="n">encryption</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">"encryption"</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">" "</span><span class="p">)</span>
|
||||
</span><span id="Generator-3899"><a href="#Generator-3899"><span class="linenos">3899</span></a> <span class="n">encryption</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" ENCRYPTION = (</span><span class="si">{</span><span class="n">encryption</span><span class="si">}</span><span class="s2">)"</span> <span class="k">if</span> <span class="n">encryption</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="Generator-3900"><a href="#Generator-3900"><span class="linenos">3900</span></a>
|
||||
</span><span id="Generator-3901"><a href="#Generator-3901"><span class="linenos">3901</span></a> <span class="k">def</span> <span class="nf">copy_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Copy</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="Generator-3902"><a href="#Generator-3902"><span class="linenos">3902</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"this"</span><span class="p">)</span>
|
||||
</span><span id="Generator-3903"><a href="#Generator-3903"><span class="linenos">3903</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" INTO </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">COPY_HAS_INTO_KEYWORD</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">" </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="Generator-3904"><a href="#Generator-3904"><span class="linenos">3904</span></a>
|
||||
</span><span id="Generator-3905"><a href="#Generator-3905"><span class="linenos">3905</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"credentials"</span><span class="p">)</span>
|
||||
</span><span id="Generator-3906"><a href="#Generator-3906"><span class="linenos">3906</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">credentials</span><span class="p">)</span> <span class="k">if</span> <span class="n">credentials</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="Generator-3907"><a href="#Generator-3907"><span class="linenos">3907</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">"FROM"</span> <span class="k">if</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">"kind"</span><span class="p">)</span> <span class="k">else</span> <span class="s2">"TO"</span><span class="p">)</span>
|
||||
</span><span id="Generator-3908"><a href="#Generator-3908"><span class="linenos">3908</span></a> <span class="n">files</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">"files"</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
</span><span id="Generator-3909"><a href="#Generator-3909"><span class="linenos">3909</span></a>
|
||||
</span><span id="Generator-3910"><a href="#Generator-3910"><span class="linenos">3910</span></a> <span class="n">sep</span> <span class="o">=</span> <span class="s2">", "</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">COPY_PARAMS_ARE_CSV</span> <span class="k">else</span> <span class="s2">" "</span>
|
||||
</span><span id="Generator-3911"><a href="#Generator-3911"><span class="linenos">3911</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span>
|
||||
</span><span id="Generator-3912"><a href="#Generator-3912"><span class="linenos">3912</span></a> <span class="n">expression</span><span class="p">,</span>
|
||||
</span><span id="Generator-3913"><a href="#Generator-3913"><span class="linenos">3913</span></a> <span class="n">key</span><span class="o">=</span><span class="s2">"params"</span><span class="p">,</span>
|
||||
</span><span id="Generator-3914"><a href="#Generator-3914"><span class="linenos">3914</span></a> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">,</span>
|
||||
</span><span id="Generator-3915"><a href="#Generator-3915"><span class="linenos">3915</span></a> <span class="n">new_line</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
</span><span id="Generator-3916"><a href="#Generator-3916"><span class="linenos">3916</span></a> <span class="n">skip_last</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
</span><span id="Generator-3917"><a href="#Generator-3917"><span class="linenos">3917</span></a> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
</span><span id="Generator-3918"><a href="#Generator-3918"><span class="linenos">3918</span></a> <span class="n">indent</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">COPY_PARAMS_ARE_WRAPPED</span><span class="p">,</span>
|
||||
</span><span id="Generator-3919"><a href="#Generator-3919"><span class="linenos">3919</span></a> <span class="p">)</span>
|
||||
</span><span id="Generator-3920"><a href="#Generator-3920"><span class="linenos">3920</span></a>
|
||||
</span><span id="Generator-3921"><a href="#Generator-3921"><span class="linenos">3921</span></a> <span class="k">if</span> <span class="n">params</span><span class="p">:</span>
|
||||
</span><span id="Generator-3922"><a href="#Generator-3922"><span class="linenos">3922</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">COPY_PARAMS_ARE_WRAPPED</span><span class="p">:</span>
|
||||
</span><span id="Generator-3923"><a href="#Generator-3923"><span class="linenos">3923</span></a> <span class="n">params</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" WITH (</span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">)"</span>
|
||||
</span><span id="Generator-3924"><a href="#Generator-3924"><span class="linenos">3924</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
|
||||
</span><span id="Generator-3925"><a href="#Generator-3925"><span class="linenos">3925</span></a> <span class="n">params</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" </span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="Generator-3926"><a href="#Generator-3926"><span class="linenos">3926</span></a>
|
||||
</span><span id="Generator-3927"><a href="#Generator-3927"><span class="linenos">3927</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"COPY</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">files</span><span class="si">}{</span><span class="n">credentials</span><span class="si">}{</span><span class="n">params</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="Generator-3901"><a href="#Generator-3901"><span class="linenos">3901</span></a> <span class="n">iam_role</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"iam_role"</span><span class="p">)</span>
|
||||
</span><span id="Generator-3902"><a href="#Generator-3902"><span class="linenos">3902</span></a> <span class="n">iam_role</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"IAM_ROLE </span><span class="si">{</span><span class="n">iam_role</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">iam_role</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="Generator-3903"><a href="#Generator-3903"><span class="linenos">3903</span></a>
|
||||
</span><span id="Generator-3904"><a href="#Generator-3904"><span class="linenos">3904</span></a> <span class="n">region</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"region"</span><span class="p">)</span>
|
||||
</span><span id="Generator-3905"><a href="#Generator-3905"><span class="linenos">3905</span></a> <span class="n">region</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" REGION </span><span class="si">{</span><span class="n">region</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">region</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="Generator-3906"><a href="#Generator-3906"><span class="linenos">3906</span></a>
|
||||
</span><span id="Generator-3907"><a href="#Generator-3907"><span class="linenos">3907</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">credentials</span><span class="si">}{</span><span class="n">storage</span><span class="si">}{</span><span class="n">encryption</span><span class="si">}{</span><span class="n">iam_role</span><span class="si">}{</span><span class="n">region</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="Generator-3908"><a href="#Generator-3908"><span class="linenos">3908</span></a>
|
||||
</span><span id="Generator-3909"><a href="#Generator-3909"><span class="linenos">3909</span></a> <span class="k">def</span> <span class="nf">copy_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Copy</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="Generator-3910"><a href="#Generator-3910"><span class="linenos">3910</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"this"</span><span class="p">)</span>
|
||||
</span><span id="Generator-3911"><a href="#Generator-3911"><span class="linenos">3911</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" INTO </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">COPY_HAS_INTO_KEYWORD</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">" </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="Generator-3912"><a href="#Generator-3912"><span class="linenos">3912</span></a>
|
||||
</span><span id="Generator-3913"><a href="#Generator-3913"><span class="linenos">3913</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"credentials"</span><span class="p">)</span>
|
||||
</span><span id="Generator-3914"><a href="#Generator-3914"><span class="linenos">3914</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">credentials</span><span class="p">)</span> <span class="k">if</span> <span class="n">credentials</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="Generator-3915"><a href="#Generator-3915"><span class="linenos">3915</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">"FROM"</span> <span class="k">if</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">"kind"</span><span class="p">)</span> <span class="k">else</span> <span class="s2">"TO"</span><span class="p">)</span>
|
||||
</span><span id="Generator-3916"><a href="#Generator-3916"><span class="linenos">3916</span></a> <span class="n">files</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">"files"</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
</span><span id="Generator-3917"><a href="#Generator-3917"><span class="linenos">3917</span></a>
|
||||
</span><span id="Generator-3918"><a href="#Generator-3918"><span class="linenos">3918</span></a> <span class="n">sep</span> <span class="o">=</span> <span class="s2">", "</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">COPY_PARAMS_ARE_CSV</span> <span class="k">else</span> <span class="s2">" "</span>
|
||||
</span><span id="Generator-3919"><a href="#Generator-3919"><span class="linenos">3919</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span>
|
||||
</span><span id="Generator-3920"><a href="#Generator-3920"><span class="linenos">3920</span></a> <span class="n">expression</span><span class="p">,</span>
|
||||
</span><span id="Generator-3921"><a href="#Generator-3921"><span class="linenos">3921</span></a> <span class="n">key</span><span class="o">=</span><span class="s2">"params"</span><span class="p">,</span>
|
||||
</span><span id="Generator-3922"><a href="#Generator-3922"><span class="linenos">3922</span></a> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">,</span>
|
||||
</span><span id="Generator-3923"><a href="#Generator-3923"><span class="linenos">3923</span></a> <span class="n">new_line</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
</span><span id="Generator-3924"><a href="#Generator-3924"><span class="linenos">3924</span></a> <span class="n">skip_last</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
</span><span id="Generator-3925"><a href="#Generator-3925"><span class="linenos">3925</span></a> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
</span><span id="Generator-3926"><a href="#Generator-3926"><span class="linenos">3926</span></a> <span class="n">indent</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">COPY_PARAMS_ARE_WRAPPED</span><span class="p">,</span>
|
||||
</span><span id="Generator-3927"><a href="#Generator-3927"><span class="linenos">3927</span></a> <span class="p">)</span>
|
||||
</span><span id="Generator-3928"><a href="#Generator-3928"><span class="linenos">3928</span></a>
|
||||
</span><span id="Generator-3929"><a href="#Generator-3929"><span class="linenos">3929</span></a> <span class="k">def</span> <span class="nf">semicolon_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Semicolon</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="Generator-3930"><a href="#Generator-3930"><span class="linenos">3930</span></a> <span class="k">return</span> <span class="s2">""</span>
|
||||
</span><span id="Generator-3931"><a href="#Generator-3931"><span class="linenos">3931</span></a>
|
||||
</span><span id="Generator-3932"><a href="#Generator-3932"><span class="linenos">3932</span></a> <span class="k">def</span> <span class="nf">datadeletionproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataDeletionProperty</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="Generator-3933"><a href="#Generator-3933"><span class="linenos">3933</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="s2">"ON"</span> <span class="k">if</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">"on"</span><span class="p">)</span> <span class="k">else</span> <span class="s2">"OFF"</span>
|
||||
</span><span id="Generator-3934"><a href="#Generator-3934"><span class="linenos">3934</span></a> <span class="n">filter_col</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"filter_column"</span><span class="p">)</span>
|
||||
</span><span id="Generator-3935"><a href="#Generator-3935"><span class="linenos">3935</span></a> <span class="n">filter_col</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"FILTER_COLUMN=</span><span class="si">{</span><span class="n">filter_col</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">filter_col</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
</span><span id="Generator-3936"><a href="#Generator-3936"><span class="linenos">3936</span></a> <span class="n">retention_period</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"retention_period"</span><span class="p">)</span>
|
||||
</span><span id="Generator-3937"><a href="#Generator-3937"><span class="linenos">3937</span></a> <span class="n">retention_period</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"RETENTION_PERIOD=</span><span class="si">{</span><span class="n">retention_period</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">retention_period</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
</span><span id="Generator-3938"><a href="#Generator-3938"><span class="linenos">3938</span></a>
|
||||
</span><span id="Generator-3939"><a href="#Generator-3939"><span class="linenos">3939</span></a> <span class="k">if</span> <span class="n">filter_col</span> <span class="ow">or</span> <span class="n">retention_period</span><span class="p">:</span>
|
||||
</span><span id="Generator-3940"><a href="#Generator-3940"><span class="linenos">3940</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">"ON"</span><span class="p">,</span> <span class="n">filter_col</span><span class="p">,</span> <span class="n">retention_period</span><span class="p">)</span>
|
||||
</span><span id="Generator-3941"><a href="#Generator-3941"><span class="linenos">3941</span></a>
|
||||
</span><span id="Generator-3942"><a href="#Generator-3942"><span class="linenos">3942</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"DATA_DELETION=</span><span class="si">{</span><span class="n">on_sql</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="Generator-3943"><a href="#Generator-3943"><span class="linenos">3943</span></a>
|
||||
</span><span id="Generator-3944"><a href="#Generator-3944"><span class="linenos">3944</span></a> <span class="k">def</span> <span class="nf">maskingpolicycolumnconstraint_sql</span><span class="p">(</span>
|
||||
</span><span id="Generator-3945"><a href="#Generator-3945"><span class="linenos">3945</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MaskingPolicyColumnConstraint</span>
|
||||
</span><span id="Generator-3946"><a href="#Generator-3946"><span class="linenos">3946</span></a> <span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="Generator-3947"><a href="#Generator-3947"><span class="linenos">3947</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"this"</span><span class="p">)</span>
|
||||
</span><span id="Generator-3948"><a href="#Generator-3948"><span class="linenos">3948</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
</span><span id="Generator-3949"><a href="#Generator-3949"><span class="linenos">3949</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" USING (</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)"</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="Generator-3950"><a href="#Generator-3950"><span class="linenos">3950</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"MASKING POLICY </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="Generator-3929"><a href="#Generator-3929"><span class="linenos">3929</span></a> <span class="k">if</span> <span class="n">params</span><span class="p">:</span>
|
||||
</span><span id="Generator-3930"><a href="#Generator-3930"><span class="linenos">3930</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">COPY_PARAMS_ARE_WRAPPED</span><span class="p">:</span>
|
||||
</span><span id="Generator-3931"><a href="#Generator-3931"><span class="linenos">3931</span></a> <span class="n">params</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" WITH (</span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">)"</span>
|
||||
</span><span id="Generator-3932"><a href="#Generator-3932"><span class="linenos">3932</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
|
||||
</span><span id="Generator-3933"><a href="#Generator-3933"><span class="linenos">3933</span></a> <span class="n">params</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" </span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="Generator-3934"><a href="#Generator-3934"><span class="linenos">3934</span></a>
|
||||
</span><span id="Generator-3935"><a href="#Generator-3935"><span class="linenos">3935</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"COPY</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">files</span><span class="si">}{</span><span class="n">credentials</span><span class="si">}{</span><span class="n">params</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="Generator-3936"><a href="#Generator-3936"><span class="linenos">3936</span></a>
|
||||
</span><span id="Generator-3937"><a href="#Generator-3937"><span class="linenos">3937</span></a> <span class="k">def</span> <span class="nf">semicolon_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Semicolon</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="Generator-3938"><a href="#Generator-3938"><span class="linenos">3938</span></a> <span class="k">return</span> <span class="s2">""</span>
|
||||
</span><span id="Generator-3939"><a href="#Generator-3939"><span class="linenos">3939</span></a>
|
||||
</span><span id="Generator-3940"><a href="#Generator-3940"><span class="linenos">3940</span></a> <span class="k">def</span> <span class="nf">datadeletionproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataDeletionProperty</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="Generator-3941"><a href="#Generator-3941"><span class="linenos">3941</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="s2">"ON"</span> <span class="k">if</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">"on"</span><span class="p">)</span> <span class="k">else</span> <span class="s2">"OFF"</span>
|
||||
</span><span id="Generator-3942"><a href="#Generator-3942"><span class="linenos">3942</span></a> <span class="n">filter_col</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"filter_column"</span><span class="p">)</span>
|
||||
</span><span id="Generator-3943"><a href="#Generator-3943"><span class="linenos">3943</span></a> <span class="n">filter_col</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"FILTER_COLUMN=</span><span class="si">{</span><span class="n">filter_col</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">filter_col</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
</span><span id="Generator-3944"><a href="#Generator-3944"><span class="linenos">3944</span></a> <span class="n">retention_period</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"retention_period"</span><span class="p">)</span>
|
||||
</span><span id="Generator-3945"><a href="#Generator-3945"><span class="linenos">3945</span></a> <span class="n">retention_period</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"RETENTION_PERIOD=</span><span class="si">{</span><span class="n">retention_period</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">retention_period</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
</span><span id="Generator-3946"><a href="#Generator-3946"><span class="linenos">3946</span></a>
|
||||
</span><span id="Generator-3947"><a href="#Generator-3947"><span class="linenos">3947</span></a> <span class="k">if</span> <span class="n">filter_col</span> <span class="ow">or</span> <span class="n">retention_period</span><span class="p">:</span>
|
||||
</span><span id="Generator-3948"><a href="#Generator-3948"><span class="linenos">3948</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">"ON"</span><span class="p">,</span> <span class="n">filter_col</span><span class="p">,</span> <span class="n">retention_period</span><span class="p">)</span>
|
||||
</span><span id="Generator-3949"><a href="#Generator-3949"><span class="linenos">3949</span></a>
|
||||
</span><span id="Generator-3950"><a href="#Generator-3950"><span class="linenos">3950</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"DATA_DELETION=</span><span class="si">{</span><span class="n">on_sql</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="Generator-3951"><a href="#Generator-3951"><span class="linenos">3951</span></a>
|
||||
</span><span id="Generator-3952"><a href="#Generator-3952"><span class="linenos">3952</span></a> <span class="k">def</span> <span class="nf">maskingpolicycolumnconstraint_sql</span><span class="p">(</span>
|
||||
</span><span id="Generator-3953"><a href="#Generator-3953"><span class="linenos">3953</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MaskingPolicyColumnConstraint</span>
|
||||
</span><span id="Generator-3954"><a href="#Generator-3954"><span class="linenos">3954</span></a> <span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="Generator-3955"><a href="#Generator-3955"><span class="linenos">3955</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"this"</span><span class="p">)</span>
|
||||
</span><span id="Generator-3956"><a href="#Generator-3956"><span class="linenos">3956</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
</span><span id="Generator-3957"><a href="#Generator-3957"><span class="linenos">3957</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" USING (</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)"</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="Generator-3958"><a href="#Generator-3958"><span class="linenos">3958</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"MASKING POLICY </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="Generator-3959"><a href="#Generator-3959"><span class="linenos">3959</span></a>
|
||||
</span><span id="Generator-3960"><a href="#Generator-3960"><span class="linenos">3960</span></a> <span class="k">def</span> <span class="nf">gapfill_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GapFill</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="Generator-3961"><a href="#Generator-3961"><span class="linenos">3961</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"this"</span><span class="p">)</span>
|
||||
</span><span id="Generator-3962"><a href="#Generator-3962"><span class="linenos">3962</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"TABLE </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="Generator-3963"><a href="#Generator-3963"><span class="linenos">3963</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">"GAP_FILL"</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="o">*</span><span class="p">[</span><span class="n">v</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">k</span> <span class="o">!=</span> <span class="s2">"this"</span><span class="p">])</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -10044,7 +10073,7 @@ Default: True</li>
|
|||
<div class="attr variable">
|
||||
<span class="name">SUPPORTED_JSON_PATH_PARTS</span> =
|
||||
<input id="Generator.SUPPORTED_JSON_PATH_PARTS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||
<label class="view-value-button pdoc-button" for="Generator.SUPPORTED_JSON_PATH_PARTS-view-value"></label><span class="default_value">{<class '<a href="expressions.html#JSONPathFilter">sqlglot.expressions.JSONPathFilter</a>'>, <class '<a href="expressions.html#JSONPathUnion">sqlglot.expressions.JSONPathUnion</a>'>, <class '<a href="expressions.html#JSONPathSubscript">sqlglot.expressions.JSONPathSubscript</a>'>, <class '<a href="expressions.html#JSONPathSelector">sqlglot.expressions.JSONPathSelector</a>'>, <class '<a href="expressions.html#JSONPathSlice">sqlglot.expressions.JSONPathSlice</a>'>, <class '<a href="expressions.html#JSONPathScript">sqlglot.expressions.JSONPathScript</a>'>, <class '<a href="expressions.html#JSONPathWildcard">sqlglot.expressions.JSONPathWildcard</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>'>}</span>
|
||||
<label class="view-value-button pdoc-button" for="Generator.SUPPORTED_JSON_PATH_PARTS-view-value"></label><span class="default_value">{<class '<a href="expressions.html#JSONPathSlice">sqlglot.expressions.JSONPathSlice</a>'>, <class '<a href="expressions.html#JSONPathScript">sqlglot.expressions.JSONPathScript</a>'>, <class '<a href="expressions.html#JSONPathRoot">sqlglot.expressions.JSONPathRoot</a>'>, <class '<a href="expressions.html#JSONPathRecursive">sqlglot.expressions.JSONPathRecursive</a>'>, <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>'>}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -10326,7 +10355,7 @@ Default: True</li>
|
|||
<div id="Generator.PARAMETERIZABLE_TEXT_TYPES" class="classattr">
|
||||
<div class="attr variable">
|
||||
<span class="name">PARAMETERIZABLE_TEXT_TYPES</span> =
|
||||
<span class="default_value">{<Type.CHAR: 'CHAR'>, <Type.VARCHAR: 'VARCHAR'>, <Type.NVARCHAR: 'NVARCHAR'>, <Type.NCHAR: 'NCHAR'>}</span>
|
||||
<span class="default_value">{<Type.CHAR: 'CHAR'>, <Type.NVARCHAR: 'NVARCHAR'>, <Type.VARCHAR: 'VARCHAR'>, <Type.NCHAR: 'NCHAR'>}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -18858,18 +18887,25 @@ it is safer to copy.</li>
|
|||
<div class="pdoc-code codehilite"><pre><span></span><span id="Generator.copyparameter_sql-3861"><a href="#Generator.copyparameter_sql-3861"><span class="linenos">3861</span></a> <span class="k">def</span> <span class="nf">copyparameter_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CopyParameter</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="Generator.copyparameter_sql-3862"><a href="#Generator.copyparameter_sql-3862"><span class="linenos">3862</span></a> <span class="n">option</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"this"</span><span class="p">)</span>
|
||||
</span><span id="Generator.copyparameter_sql-3863"><a href="#Generator.copyparameter_sql-3863"><span class="linenos">3863</span></a>
|
||||
</span><span id="Generator.copyparameter_sql-3864"><a href="#Generator.copyparameter_sql-3864"><span class="linenos">3864</span></a> <span class="k">if</span> <span class="n">option</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">"FILE_FORMAT"</span><span class="p">:</span>
|
||||
</span><span id="Generator.copyparameter_sql-3865"><a href="#Generator.copyparameter_sql-3865"><span class="linenos">3865</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">"expression"</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">" "</span><span class="p">)</span>
|
||||
</span><span id="Generator.copyparameter_sql-3866"><a href="#Generator.copyparameter_sql-3866"><span class="linenos">3866</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">option</span><span class="si">}</span><span class="s2"> = (</span><span class="si">{</span><span class="n">values</span><span class="si">}</span><span class="s2">)"</span>
|
||||
</span><span id="Generator.copyparameter_sql-3867"><a href="#Generator.copyparameter_sql-3867"><span class="linenos">3867</span></a>
|
||||
</span><span id="Generator.copyparameter_sql-3868"><a href="#Generator.copyparameter_sql-3868"><span class="linenos">3868</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"expression"</span><span class="p">)</span>
|
||||
</span><span id="Generator.copyparameter_sql-3864"><a href="#Generator.copyparameter_sql-3864"><span class="linenos">3864</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
|
||||
</span><span id="Generator.copyparameter_sql-3865"><a href="#Generator.copyparameter_sql-3865"><span class="linenos">3865</span></a> <span class="n">upper</span> <span class="o">=</span> <span class="n">option</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
|
||||
</span><span id="Generator.copyparameter_sql-3866"><a href="#Generator.copyparameter_sql-3866"><span class="linenos">3866</span></a>
|
||||
</span><span id="Generator.copyparameter_sql-3867"><a href="#Generator.copyparameter_sql-3867"><span class="linenos">3867</span></a> <span class="c1"># Snowflake FILE_FORMAT options are separated by whitespace</span>
|
||||
</span><span id="Generator.copyparameter_sql-3868"><a href="#Generator.copyparameter_sql-3868"><span class="linenos">3868</span></a> <span class="n">sep</span> <span class="o">=</span> <span class="s2">" "</span> <span class="k">if</span> <span class="n">upper</span> <span class="o">==</span> <span class="s2">"FILE_FORMAT"</span> <span class="k">else</span> <span class="s2">", "</span>
|
||||
</span><span id="Generator.copyparameter_sql-3869"><a href="#Generator.copyparameter_sql-3869"><span class="linenos">3869</span></a>
|
||||
</span><span id="Generator.copyparameter_sql-3870"><a href="#Generator.copyparameter_sql-3870"><span class="linenos">3870</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">value</span><span class="p">:</span>
|
||||
</span><span id="Generator.copyparameter_sql-3871"><a href="#Generator.copyparameter_sql-3871"><span class="linenos">3871</span></a> <span class="k">return</span> <span class="n">option</span>
|
||||
</span><span id="Generator.copyparameter_sql-3872"><a href="#Generator.copyparameter_sql-3872"><span class="linenos">3872</span></a>
|
||||
</span><span id="Generator.copyparameter_sql-3873"><a href="#Generator.copyparameter_sql-3873"><span class="linenos">3873</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">" = "</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">COPY_PARAMS_EQ_REQUIRED</span> <span class="k">else</span> <span class="s2">" "</span>
|
||||
</span><span id="Generator.copyparameter_sql-3870"><a href="#Generator.copyparameter_sql-3870"><span class="linenos">3870</span></a> <span class="c1"># Databricks copy/format options do not set their list of values with EQ</span>
|
||||
</span><span id="Generator.copyparameter_sql-3871"><a href="#Generator.copyparameter_sql-3871"><span class="linenos">3871</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">" "</span> <span class="k">if</span> <span class="n">upper</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"COPY_OPTIONS"</span><span class="p">,</span> <span class="s2">"FORMAT_OPTIONS"</span><span class="p">)</span> <span class="k">else</span> <span class="s2">" = "</span>
|
||||
</span><span id="Generator.copyparameter_sql-3872"><a href="#Generator.copyparameter_sql-3872"><span class="linenos">3872</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">)</span>
|
||||
</span><span id="Generator.copyparameter_sql-3873"><a href="#Generator.copyparameter_sql-3873"><span class="linenos">3873</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">option</span><span class="si">}{</span><span class="n">op</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">values</span><span class="si">}</span><span class="s2">)"</span>
|
||||
</span><span id="Generator.copyparameter_sql-3874"><a href="#Generator.copyparameter_sql-3874"><span class="linenos">3874</span></a>
|
||||
</span><span id="Generator.copyparameter_sql-3875"><a href="#Generator.copyparameter_sql-3875"><span class="linenos">3875</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">option</span><span class="si">}{</span><span class="n">op</span><span class="si">}{</span><span class="n">value</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="Generator.copyparameter_sql-3875"><a href="#Generator.copyparameter_sql-3875"><span class="linenos">3875</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"expression"</span><span class="p">)</span>
|
||||
</span><span id="Generator.copyparameter_sql-3876"><a href="#Generator.copyparameter_sql-3876"><span class="linenos">3876</span></a>
|
||||
</span><span id="Generator.copyparameter_sql-3877"><a href="#Generator.copyparameter_sql-3877"><span class="linenos">3877</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">value</span><span class="p">:</span>
|
||||
</span><span id="Generator.copyparameter_sql-3878"><a href="#Generator.copyparameter_sql-3878"><span class="linenos">3878</span></a> <span class="k">return</span> <span class="n">option</span>
|
||||
</span><span id="Generator.copyparameter_sql-3879"><a href="#Generator.copyparameter_sql-3879"><span class="linenos">3879</span></a>
|
||||
</span><span id="Generator.copyparameter_sql-3880"><a href="#Generator.copyparameter_sql-3880"><span class="linenos">3880</span></a> <span class="n">op</span> <span class="o">=</span> <span class="s2">" = "</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">COPY_PARAMS_EQ_REQUIRED</span> <span class="k">else</span> <span class="s2">" "</span>
|
||||
</span><span id="Generator.copyparameter_sql-3881"><a href="#Generator.copyparameter_sql-3881"><span class="linenos">3881</span></a>
|
||||
</span><span id="Generator.copyparameter_sql-3882"><a href="#Generator.copyparameter_sql-3882"><span class="linenos">3882</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">option</span><span class="si">}{</span><span class="n">op</span><span class="si">}{</span><span class="n">value</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -18887,29 +18923,30 @@ it is safer to copy.</li>
|
|||
|
||||
</div>
|
||||
<a class="headerlink" href="#Generator.credentials_sql"></a>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="Generator.credentials_sql-3877"><a href="#Generator.credentials_sql-3877"><span class="linenos">3877</span></a> <span class="k">def</span> <span class="nf">credentials_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Credentials</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="Generator.credentials_sql-3878"><a href="#Generator.credentials_sql-3878"><span class="linenos">3878</span></a> <span class="n">cred_expr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"credentials"</span><span class="p">)</span>
|
||||
</span><span id="Generator.credentials_sql-3879"><a href="#Generator.credentials_sql-3879"><span class="linenos">3879</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">cred_expr</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
|
||||
</span><span id="Generator.credentials_sql-3880"><a href="#Generator.credentials_sql-3880"><span class="linenos">3880</span></a> <span class="c1"># Redshift case: CREDENTIALS <string></span>
|
||||
</span><span id="Generator.credentials_sql-3881"><a href="#Generator.credentials_sql-3881"><span class="linenos">3881</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"credentials"</span><span class="p">)</span>
|
||||
</span><span id="Generator.credentials_sql-3882"><a href="#Generator.credentials_sql-3882"><span class="linenos">3882</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"CREDENTIALS </span><span class="si">{</span><span class="n">credentials</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">credentials</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="Generator.credentials_sql-3883"><a href="#Generator.credentials_sql-3883"><span class="linenos">3883</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="Generator.credentials_sql-3884"><a href="#Generator.credentials_sql-3884"><span class="linenos">3884</span></a> <span class="c1"># Snowflake case: CREDENTIALS = (...)</span>
|
||||
</span><span id="Generator.credentials_sql-3885"><a href="#Generator.credentials_sql-3885"><span class="linenos">3885</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">"credentials"</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">" "</span><span class="p">)</span>
|
||||
</span><span id="Generator.credentials_sql-3886"><a href="#Generator.credentials_sql-3886"><span class="linenos">3886</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"CREDENTIALS = (</span><span class="si">{</span><span class="n">credentials</span><span class="si">}</span><span class="s2">)"</span> <span class="k">if</span> <span class="n">credentials</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="Generator.credentials_sql-3887"><a href="#Generator.credentials_sql-3887"><span class="linenos">3887</span></a>
|
||||
</span><span id="Generator.credentials_sql-3888"><a href="#Generator.credentials_sql-3888"><span class="linenos">3888</span></a> <span class="n">storage</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"storage"</span><span class="p">)</span>
|
||||
</span><span id="Generator.credentials_sql-3889"><a href="#Generator.credentials_sql-3889"><span class="linenos">3889</span></a>
|
||||
</span><span id="Generator.credentials_sql-3890"><a href="#Generator.credentials_sql-3890"><span class="linenos">3890</span></a> <span class="n">encryption</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">"encryption"</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">" "</span><span class="p">)</span>
|
||||
</span><span id="Generator.credentials_sql-3891"><a href="#Generator.credentials_sql-3891"><span class="linenos">3891</span></a> <span class="n">encryption</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" ENCRYPTION = (</span><span class="si">{</span><span class="n">encryption</span><span class="si">}</span><span class="s2">)"</span> <span class="k">if</span> <span class="n">encryption</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="Generator.credentials_sql-3892"><a href="#Generator.credentials_sql-3892"><span class="linenos">3892</span></a>
|
||||
</span><span id="Generator.credentials_sql-3893"><a href="#Generator.credentials_sql-3893"><span class="linenos">3893</span></a> <span class="n">iam_role</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"iam_role"</span><span class="p">)</span>
|
||||
</span><span id="Generator.credentials_sql-3894"><a href="#Generator.credentials_sql-3894"><span class="linenos">3894</span></a> <span class="n">iam_role</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"IAM_ROLE </span><span class="si">{</span><span class="n">iam_role</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">iam_role</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="Generator.credentials_sql-3895"><a href="#Generator.credentials_sql-3895"><span class="linenos">3895</span></a>
|
||||
</span><span id="Generator.credentials_sql-3896"><a href="#Generator.credentials_sql-3896"><span class="linenos">3896</span></a> <span class="n">region</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"region"</span><span class="p">)</span>
|
||||
</span><span id="Generator.credentials_sql-3897"><a href="#Generator.credentials_sql-3897"><span class="linenos">3897</span></a> <span class="n">region</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" REGION </span><span class="si">{</span><span class="n">region</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">region</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="Generator.credentials_sql-3898"><a href="#Generator.credentials_sql-3898"><span class="linenos">3898</span></a>
|
||||
</span><span id="Generator.credentials_sql-3899"><a href="#Generator.credentials_sql-3899"><span class="linenos">3899</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">credentials</span><span class="si">}{</span><span class="n">storage</span><span class="si">}{</span><span class="n">encryption</span><span class="si">}{</span><span class="n">iam_role</span><span class="si">}{</span><span class="n">region</span><span class="si">}</span><span class="s2">"</span>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="Generator.credentials_sql-3884"><a href="#Generator.credentials_sql-3884"><span class="linenos">3884</span></a> <span class="k">def</span> <span class="nf">credentials_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Credentials</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="Generator.credentials_sql-3885"><a href="#Generator.credentials_sql-3885"><span class="linenos">3885</span></a> <span class="n">cred_expr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"credentials"</span><span class="p">)</span>
|
||||
</span><span id="Generator.credentials_sql-3886"><a href="#Generator.credentials_sql-3886"><span class="linenos">3886</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">cred_expr</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
|
||||
</span><span id="Generator.credentials_sql-3887"><a href="#Generator.credentials_sql-3887"><span class="linenos">3887</span></a> <span class="c1"># Redshift case: CREDENTIALS <string></span>
|
||||
</span><span id="Generator.credentials_sql-3888"><a href="#Generator.credentials_sql-3888"><span class="linenos">3888</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"credentials"</span><span class="p">)</span>
|
||||
</span><span id="Generator.credentials_sql-3889"><a href="#Generator.credentials_sql-3889"><span class="linenos">3889</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"CREDENTIALS </span><span class="si">{</span><span class="n">credentials</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">credentials</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="Generator.credentials_sql-3890"><a href="#Generator.credentials_sql-3890"><span class="linenos">3890</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="Generator.credentials_sql-3891"><a href="#Generator.credentials_sql-3891"><span class="linenos">3891</span></a> <span class="c1"># Snowflake case: CREDENTIALS = (...)</span>
|
||||
</span><span id="Generator.credentials_sql-3892"><a href="#Generator.credentials_sql-3892"><span class="linenos">3892</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">"credentials"</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">" "</span><span class="p">)</span>
|
||||
</span><span id="Generator.credentials_sql-3893"><a href="#Generator.credentials_sql-3893"><span class="linenos">3893</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"CREDENTIALS = (</span><span class="si">{</span><span class="n">credentials</span><span class="si">}</span><span class="s2">)"</span> <span class="k">if</span> <span class="n">cred_expr</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="Generator.credentials_sql-3894"><a href="#Generator.credentials_sql-3894"><span class="linenos">3894</span></a>
|
||||
</span><span id="Generator.credentials_sql-3895"><a href="#Generator.credentials_sql-3895"><span class="linenos">3895</span></a> <span class="n">storage</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"storage"</span><span class="p">)</span>
|
||||
</span><span id="Generator.credentials_sql-3896"><a href="#Generator.credentials_sql-3896"><span class="linenos">3896</span></a> <span class="n">storage</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"STORAGE_INTEGRATION = </span><span class="si">{</span><span class="n">storage</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">storage</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="Generator.credentials_sql-3897"><a href="#Generator.credentials_sql-3897"><span class="linenos">3897</span></a>
|
||||
</span><span id="Generator.credentials_sql-3898"><a href="#Generator.credentials_sql-3898"><span class="linenos">3898</span></a> <span class="n">encryption</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">"encryption"</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">" "</span><span class="p">)</span>
|
||||
</span><span id="Generator.credentials_sql-3899"><a href="#Generator.credentials_sql-3899"><span class="linenos">3899</span></a> <span class="n">encryption</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" ENCRYPTION = (</span><span class="si">{</span><span class="n">encryption</span><span class="si">}</span><span class="s2">)"</span> <span class="k">if</span> <span class="n">encryption</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="Generator.credentials_sql-3900"><a href="#Generator.credentials_sql-3900"><span class="linenos">3900</span></a>
|
||||
</span><span id="Generator.credentials_sql-3901"><a href="#Generator.credentials_sql-3901"><span class="linenos">3901</span></a> <span class="n">iam_role</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"iam_role"</span><span class="p">)</span>
|
||||
</span><span id="Generator.credentials_sql-3902"><a href="#Generator.credentials_sql-3902"><span class="linenos">3902</span></a> <span class="n">iam_role</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"IAM_ROLE </span><span class="si">{</span><span class="n">iam_role</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">iam_role</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="Generator.credentials_sql-3903"><a href="#Generator.credentials_sql-3903"><span class="linenos">3903</span></a>
|
||||
</span><span id="Generator.credentials_sql-3904"><a href="#Generator.credentials_sql-3904"><span class="linenos">3904</span></a> <span class="n">region</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"region"</span><span class="p">)</span>
|
||||
</span><span id="Generator.credentials_sql-3905"><a href="#Generator.credentials_sql-3905"><span class="linenos">3905</span></a> <span class="n">region</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" REGION </span><span class="si">{</span><span class="n">region</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">region</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="Generator.credentials_sql-3906"><a href="#Generator.credentials_sql-3906"><span class="linenos">3906</span></a>
|
||||
</span><span id="Generator.credentials_sql-3907"><a href="#Generator.credentials_sql-3907"><span class="linenos">3907</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">credentials</span><span class="si">}{</span><span class="n">storage</span><span class="si">}{</span><span class="n">encryption</span><span class="si">}{</span><span class="n">iam_role</span><span class="si">}{</span><span class="n">region</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -18927,33 +18964,33 @@ it is safer to copy.</li>
|
|||
|
||||
</div>
|
||||
<a class="headerlink" href="#Generator.copy_sql"></a>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="Generator.copy_sql-3901"><a href="#Generator.copy_sql-3901"><span class="linenos">3901</span></a> <span class="k">def</span> <span class="nf">copy_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Copy</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="Generator.copy_sql-3902"><a href="#Generator.copy_sql-3902"><span class="linenos">3902</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"this"</span><span class="p">)</span>
|
||||
</span><span id="Generator.copy_sql-3903"><a href="#Generator.copy_sql-3903"><span class="linenos">3903</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" INTO </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">COPY_HAS_INTO_KEYWORD</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">" </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="Generator.copy_sql-3904"><a href="#Generator.copy_sql-3904"><span class="linenos">3904</span></a>
|
||||
</span><span id="Generator.copy_sql-3905"><a href="#Generator.copy_sql-3905"><span class="linenos">3905</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"credentials"</span><span class="p">)</span>
|
||||
</span><span id="Generator.copy_sql-3906"><a href="#Generator.copy_sql-3906"><span class="linenos">3906</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">credentials</span><span class="p">)</span> <span class="k">if</span> <span class="n">credentials</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="Generator.copy_sql-3907"><a href="#Generator.copy_sql-3907"><span class="linenos">3907</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">"FROM"</span> <span class="k">if</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">"kind"</span><span class="p">)</span> <span class="k">else</span> <span class="s2">"TO"</span><span class="p">)</span>
|
||||
</span><span id="Generator.copy_sql-3908"><a href="#Generator.copy_sql-3908"><span class="linenos">3908</span></a> <span class="n">files</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">"files"</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
</span><span id="Generator.copy_sql-3909"><a href="#Generator.copy_sql-3909"><span class="linenos">3909</span></a>
|
||||
</span><span id="Generator.copy_sql-3910"><a href="#Generator.copy_sql-3910"><span class="linenos">3910</span></a> <span class="n">sep</span> <span class="o">=</span> <span class="s2">", "</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">COPY_PARAMS_ARE_CSV</span> <span class="k">else</span> <span class="s2">" "</span>
|
||||
</span><span id="Generator.copy_sql-3911"><a href="#Generator.copy_sql-3911"><span class="linenos">3911</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span>
|
||||
</span><span id="Generator.copy_sql-3912"><a href="#Generator.copy_sql-3912"><span class="linenos">3912</span></a> <span class="n">expression</span><span class="p">,</span>
|
||||
</span><span id="Generator.copy_sql-3913"><a href="#Generator.copy_sql-3913"><span class="linenos">3913</span></a> <span class="n">key</span><span class="o">=</span><span class="s2">"params"</span><span class="p">,</span>
|
||||
</span><span id="Generator.copy_sql-3914"><a href="#Generator.copy_sql-3914"><span class="linenos">3914</span></a> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">,</span>
|
||||
</span><span id="Generator.copy_sql-3915"><a href="#Generator.copy_sql-3915"><span class="linenos">3915</span></a> <span class="n">new_line</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
</span><span id="Generator.copy_sql-3916"><a href="#Generator.copy_sql-3916"><span class="linenos">3916</span></a> <span class="n">skip_last</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
</span><span id="Generator.copy_sql-3917"><a href="#Generator.copy_sql-3917"><span class="linenos">3917</span></a> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
</span><span id="Generator.copy_sql-3918"><a href="#Generator.copy_sql-3918"><span class="linenos">3918</span></a> <span class="n">indent</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">COPY_PARAMS_ARE_WRAPPED</span><span class="p">,</span>
|
||||
</span><span id="Generator.copy_sql-3919"><a href="#Generator.copy_sql-3919"><span class="linenos">3919</span></a> <span class="p">)</span>
|
||||
</span><span id="Generator.copy_sql-3920"><a href="#Generator.copy_sql-3920"><span class="linenos">3920</span></a>
|
||||
</span><span id="Generator.copy_sql-3921"><a href="#Generator.copy_sql-3921"><span class="linenos">3921</span></a> <span class="k">if</span> <span class="n">params</span><span class="p">:</span>
|
||||
</span><span id="Generator.copy_sql-3922"><a href="#Generator.copy_sql-3922"><span class="linenos">3922</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">COPY_PARAMS_ARE_WRAPPED</span><span class="p">:</span>
|
||||
</span><span id="Generator.copy_sql-3923"><a href="#Generator.copy_sql-3923"><span class="linenos">3923</span></a> <span class="n">params</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" WITH (</span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">)"</span>
|
||||
</span><span id="Generator.copy_sql-3924"><a href="#Generator.copy_sql-3924"><span class="linenos">3924</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
|
||||
</span><span id="Generator.copy_sql-3925"><a href="#Generator.copy_sql-3925"><span class="linenos">3925</span></a> <span class="n">params</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" </span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="Generator.copy_sql-3926"><a href="#Generator.copy_sql-3926"><span class="linenos">3926</span></a>
|
||||
</span><span id="Generator.copy_sql-3927"><a href="#Generator.copy_sql-3927"><span class="linenos">3927</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"COPY</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">files</span><span class="si">}{</span><span class="n">credentials</span><span class="si">}{</span><span class="n">params</span><span class="si">}</span><span class="s2">"</span>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="Generator.copy_sql-3909"><a href="#Generator.copy_sql-3909"><span class="linenos">3909</span></a> <span class="k">def</span> <span class="nf">copy_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Copy</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="Generator.copy_sql-3910"><a href="#Generator.copy_sql-3910"><span class="linenos">3910</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"this"</span><span class="p">)</span>
|
||||
</span><span id="Generator.copy_sql-3911"><a href="#Generator.copy_sql-3911"><span class="linenos">3911</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" INTO </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">COPY_HAS_INTO_KEYWORD</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">" </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="Generator.copy_sql-3912"><a href="#Generator.copy_sql-3912"><span class="linenos">3912</span></a>
|
||||
</span><span id="Generator.copy_sql-3913"><a href="#Generator.copy_sql-3913"><span class="linenos">3913</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"credentials"</span><span class="p">)</span>
|
||||
</span><span id="Generator.copy_sql-3914"><a href="#Generator.copy_sql-3914"><span class="linenos">3914</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">credentials</span><span class="p">)</span> <span class="k">if</span> <span class="n">credentials</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="Generator.copy_sql-3915"><a href="#Generator.copy_sql-3915"><span class="linenos">3915</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s2">"FROM"</span> <span class="k">if</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">"kind"</span><span class="p">)</span> <span class="k">else</span> <span class="s2">"TO"</span><span class="p">)</span>
|
||||
</span><span id="Generator.copy_sql-3916"><a href="#Generator.copy_sql-3916"><span class="linenos">3916</span></a> <span class="n">files</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">"files"</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
</span><span id="Generator.copy_sql-3917"><a href="#Generator.copy_sql-3917"><span class="linenos">3917</span></a>
|
||||
</span><span id="Generator.copy_sql-3918"><a href="#Generator.copy_sql-3918"><span class="linenos">3918</span></a> <span class="n">sep</span> <span class="o">=</span> <span class="s2">", "</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">COPY_PARAMS_ARE_CSV</span> <span class="k">else</span> <span class="s2">" "</span>
|
||||
</span><span id="Generator.copy_sql-3919"><a href="#Generator.copy_sql-3919"><span class="linenos">3919</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span>
|
||||
</span><span id="Generator.copy_sql-3920"><a href="#Generator.copy_sql-3920"><span class="linenos">3920</span></a> <span class="n">expression</span><span class="p">,</span>
|
||||
</span><span id="Generator.copy_sql-3921"><a href="#Generator.copy_sql-3921"><span class="linenos">3921</span></a> <span class="n">key</span><span class="o">=</span><span class="s2">"params"</span><span class="p">,</span>
|
||||
</span><span id="Generator.copy_sql-3922"><a href="#Generator.copy_sql-3922"><span class="linenos">3922</span></a> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">,</span>
|
||||
</span><span id="Generator.copy_sql-3923"><a href="#Generator.copy_sql-3923"><span class="linenos">3923</span></a> <span class="n">new_line</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
</span><span id="Generator.copy_sql-3924"><a href="#Generator.copy_sql-3924"><span class="linenos">3924</span></a> <span class="n">skip_last</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
</span><span id="Generator.copy_sql-3925"><a href="#Generator.copy_sql-3925"><span class="linenos">3925</span></a> <span class="n">skip_first</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
</span><span id="Generator.copy_sql-3926"><a href="#Generator.copy_sql-3926"><span class="linenos">3926</span></a> <span class="n">indent</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">COPY_PARAMS_ARE_WRAPPED</span><span class="p">,</span>
|
||||
</span><span id="Generator.copy_sql-3927"><a href="#Generator.copy_sql-3927"><span class="linenos">3927</span></a> <span class="p">)</span>
|
||||
</span><span id="Generator.copy_sql-3928"><a href="#Generator.copy_sql-3928"><span class="linenos">3928</span></a>
|
||||
</span><span id="Generator.copy_sql-3929"><a href="#Generator.copy_sql-3929"><span class="linenos">3929</span></a> <span class="k">if</span> <span class="n">params</span><span class="p">:</span>
|
||||
</span><span id="Generator.copy_sql-3930"><a href="#Generator.copy_sql-3930"><span class="linenos">3930</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">COPY_PARAMS_ARE_WRAPPED</span><span class="p">:</span>
|
||||
</span><span id="Generator.copy_sql-3931"><a href="#Generator.copy_sql-3931"><span class="linenos">3931</span></a> <span class="n">params</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" WITH (</span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">)"</span>
|
||||
</span><span id="Generator.copy_sql-3932"><a href="#Generator.copy_sql-3932"><span class="linenos">3932</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">pretty</span><span class="p">:</span>
|
||||
</span><span id="Generator.copy_sql-3933"><a href="#Generator.copy_sql-3933"><span class="linenos">3933</span></a> <span class="n">params</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" </span><span class="si">{</span><span class="n">params</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="Generator.copy_sql-3934"><a href="#Generator.copy_sql-3934"><span class="linenos">3934</span></a>
|
||||
</span><span id="Generator.copy_sql-3935"><a href="#Generator.copy_sql-3935"><span class="linenos">3935</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"COPY</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">kind</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">files</span><span class="si">}{</span><span class="n">credentials</span><span class="si">}{</span><span class="n">params</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -18971,8 +19008,8 @@ it is safer to copy.</li>
|
|||
|
||||
</div>
|
||||
<a class="headerlink" href="#Generator.semicolon_sql"></a>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="Generator.semicolon_sql-3929"><a href="#Generator.semicolon_sql-3929"><span class="linenos">3929</span></a> <span class="k">def</span> <span class="nf">semicolon_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Semicolon</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="Generator.semicolon_sql-3930"><a href="#Generator.semicolon_sql-3930"><span class="linenos">3930</span></a> <span class="k">return</span> <span class="s2">""</span>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="Generator.semicolon_sql-3937"><a href="#Generator.semicolon_sql-3937"><span class="linenos">3937</span></a> <span class="k">def</span> <span class="nf">semicolon_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Semicolon</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="Generator.semicolon_sql-3938"><a href="#Generator.semicolon_sql-3938"><span class="linenos">3938</span></a> <span class="k">return</span> <span class="s2">""</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -18990,17 +19027,17 @@ it is safer to copy.</li>
|
|||
|
||||
</div>
|
||||
<a class="headerlink" href="#Generator.datadeletionproperty_sql"></a>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="Generator.datadeletionproperty_sql-3932"><a href="#Generator.datadeletionproperty_sql-3932"><span class="linenos">3932</span></a> <span class="k">def</span> <span class="nf">datadeletionproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataDeletionProperty</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="Generator.datadeletionproperty_sql-3933"><a href="#Generator.datadeletionproperty_sql-3933"><span class="linenos">3933</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="s2">"ON"</span> <span class="k">if</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">"on"</span><span class="p">)</span> <span class="k">else</span> <span class="s2">"OFF"</span>
|
||||
</span><span id="Generator.datadeletionproperty_sql-3934"><a href="#Generator.datadeletionproperty_sql-3934"><span class="linenos">3934</span></a> <span class="n">filter_col</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"filter_column"</span><span class="p">)</span>
|
||||
</span><span id="Generator.datadeletionproperty_sql-3935"><a href="#Generator.datadeletionproperty_sql-3935"><span class="linenos">3935</span></a> <span class="n">filter_col</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"FILTER_COLUMN=</span><span class="si">{</span><span class="n">filter_col</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">filter_col</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
</span><span id="Generator.datadeletionproperty_sql-3936"><a href="#Generator.datadeletionproperty_sql-3936"><span class="linenos">3936</span></a> <span class="n">retention_period</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"retention_period"</span><span class="p">)</span>
|
||||
</span><span id="Generator.datadeletionproperty_sql-3937"><a href="#Generator.datadeletionproperty_sql-3937"><span class="linenos">3937</span></a> <span class="n">retention_period</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"RETENTION_PERIOD=</span><span class="si">{</span><span class="n">retention_period</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">retention_period</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
</span><span id="Generator.datadeletionproperty_sql-3938"><a href="#Generator.datadeletionproperty_sql-3938"><span class="linenos">3938</span></a>
|
||||
</span><span id="Generator.datadeletionproperty_sql-3939"><a href="#Generator.datadeletionproperty_sql-3939"><span class="linenos">3939</span></a> <span class="k">if</span> <span class="n">filter_col</span> <span class="ow">or</span> <span class="n">retention_period</span><span class="p">:</span>
|
||||
</span><span id="Generator.datadeletionproperty_sql-3940"><a href="#Generator.datadeletionproperty_sql-3940"><span class="linenos">3940</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">"ON"</span><span class="p">,</span> <span class="n">filter_col</span><span class="p">,</span> <span class="n">retention_period</span><span class="p">)</span>
|
||||
</span><span id="Generator.datadeletionproperty_sql-3941"><a href="#Generator.datadeletionproperty_sql-3941"><span class="linenos">3941</span></a>
|
||||
</span><span id="Generator.datadeletionproperty_sql-3942"><a href="#Generator.datadeletionproperty_sql-3942"><span class="linenos">3942</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"DATA_DELETION=</span><span class="si">{</span><span class="n">on_sql</span><span class="si">}</span><span class="s2">"</span>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="Generator.datadeletionproperty_sql-3940"><a href="#Generator.datadeletionproperty_sql-3940"><span class="linenos">3940</span></a> <span class="k">def</span> <span class="nf">datadeletionproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataDeletionProperty</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="Generator.datadeletionproperty_sql-3941"><a href="#Generator.datadeletionproperty_sql-3941"><span class="linenos">3941</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="s2">"ON"</span> <span class="k">if</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">"on"</span><span class="p">)</span> <span class="k">else</span> <span class="s2">"OFF"</span>
|
||||
</span><span id="Generator.datadeletionproperty_sql-3942"><a href="#Generator.datadeletionproperty_sql-3942"><span class="linenos">3942</span></a> <span class="n">filter_col</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"filter_column"</span><span class="p">)</span>
|
||||
</span><span id="Generator.datadeletionproperty_sql-3943"><a href="#Generator.datadeletionproperty_sql-3943"><span class="linenos">3943</span></a> <span class="n">filter_col</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"FILTER_COLUMN=</span><span class="si">{</span><span class="n">filter_col</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">filter_col</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
</span><span id="Generator.datadeletionproperty_sql-3944"><a href="#Generator.datadeletionproperty_sql-3944"><span class="linenos">3944</span></a> <span class="n">retention_period</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"retention_period"</span><span class="p">)</span>
|
||||
</span><span id="Generator.datadeletionproperty_sql-3945"><a href="#Generator.datadeletionproperty_sql-3945"><span class="linenos">3945</span></a> <span class="n">retention_period</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"RETENTION_PERIOD=</span><span class="si">{</span><span class="n">retention_period</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">retention_period</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
</span><span id="Generator.datadeletionproperty_sql-3946"><a href="#Generator.datadeletionproperty_sql-3946"><span class="linenos">3946</span></a>
|
||||
</span><span id="Generator.datadeletionproperty_sql-3947"><a href="#Generator.datadeletionproperty_sql-3947"><span class="linenos">3947</span></a> <span class="k">if</span> <span class="n">filter_col</span> <span class="ow">or</span> <span class="n">retention_period</span><span class="p">:</span>
|
||||
</span><span id="Generator.datadeletionproperty_sql-3948"><a href="#Generator.datadeletionproperty_sql-3948"><span class="linenos">3948</span></a> <span class="n">on_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">"ON"</span><span class="p">,</span> <span class="n">filter_col</span><span class="p">,</span> <span class="n">retention_period</span><span class="p">)</span>
|
||||
</span><span id="Generator.datadeletionproperty_sql-3949"><a href="#Generator.datadeletionproperty_sql-3949"><span class="linenos">3949</span></a>
|
||||
</span><span id="Generator.datadeletionproperty_sql-3950"><a href="#Generator.datadeletionproperty_sql-3950"><span class="linenos">3950</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"DATA_DELETION=</span><span class="si">{</span><span class="n">on_sql</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -19018,13 +19055,34 @@ it is safer to copy.</li>
|
|||
|
||||
</div>
|
||||
<a class="headerlink" href="#Generator.maskingpolicycolumnconstraint_sql"></a>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="Generator.maskingpolicycolumnconstraint_sql-3944"><a href="#Generator.maskingpolicycolumnconstraint_sql-3944"><span class="linenos">3944</span></a> <span class="k">def</span> <span class="nf">maskingpolicycolumnconstraint_sql</span><span class="p">(</span>
|
||||
</span><span id="Generator.maskingpolicycolumnconstraint_sql-3945"><a href="#Generator.maskingpolicycolumnconstraint_sql-3945"><span class="linenos">3945</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MaskingPolicyColumnConstraint</span>
|
||||
</span><span id="Generator.maskingpolicycolumnconstraint_sql-3946"><a href="#Generator.maskingpolicycolumnconstraint_sql-3946"><span class="linenos">3946</span></a> <span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="Generator.maskingpolicycolumnconstraint_sql-3947"><a href="#Generator.maskingpolicycolumnconstraint_sql-3947"><span class="linenos">3947</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"this"</span><span class="p">)</span>
|
||||
</span><span id="Generator.maskingpolicycolumnconstraint_sql-3948"><a href="#Generator.maskingpolicycolumnconstraint_sql-3948"><span class="linenos">3948</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
</span><span id="Generator.maskingpolicycolumnconstraint_sql-3949"><a href="#Generator.maskingpolicycolumnconstraint_sql-3949"><span class="linenos">3949</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" USING (</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)"</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="Generator.maskingpolicycolumnconstraint_sql-3950"><a href="#Generator.maskingpolicycolumnconstraint_sql-3950"><span class="linenos">3950</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"MASKING POLICY </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">"</span>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="Generator.maskingpolicycolumnconstraint_sql-3952"><a href="#Generator.maskingpolicycolumnconstraint_sql-3952"><span class="linenos">3952</span></a> <span class="k">def</span> <span class="nf">maskingpolicycolumnconstraint_sql</span><span class="p">(</span>
|
||||
</span><span id="Generator.maskingpolicycolumnconstraint_sql-3953"><a href="#Generator.maskingpolicycolumnconstraint_sql-3953"><span class="linenos">3953</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">MaskingPolicyColumnConstraint</span>
|
||||
</span><span id="Generator.maskingpolicycolumnconstraint_sql-3954"><a href="#Generator.maskingpolicycolumnconstraint_sql-3954"><span class="linenos">3954</span></a> <span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="Generator.maskingpolicycolumnconstraint_sql-3955"><a href="#Generator.maskingpolicycolumnconstraint_sql-3955"><span class="linenos">3955</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"this"</span><span class="p">)</span>
|
||||
</span><span id="Generator.maskingpolicycolumnconstraint_sql-3956"><a href="#Generator.maskingpolicycolumnconstraint_sql-3956"><span class="linenos">3956</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
</span><span id="Generator.maskingpolicycolumnconstraint_sql-3957"><a href="#Generator.maskingpolicycolumnconstraint_sql-3957"><span class="linenos">3957</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" USING (</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">)"</span> <span class="k">if</span> <span class="n">expressions</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
</span><span id="Generator.maskingpolicycolumnconstraint_sql-3958"><a href="#Generator.maskingpolicycolumnconstraint_sql-3958"><span class="linenos">3958</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">"MASKING POLICY </span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<div id="Generator.gapfill_sql" class="classattr">
|
||||
<input id="Generator.gapfill_sql-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||
<div class="attr function">
|
||||
|
||||
<span class="def">def</span>
|
||||
<span class="name">gapfill_sql</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">expression</span><span class="p">:</span> <span class="n"><a href="expressions.html#GapFill">sqlglot.expressions.GapFill</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
|
||||
|
||||
<label class="view-source-button" for="Generator.gapfill_sql-view-source"><span>View Source</span></label>
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#Generator.gapfill_sql"></a>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="Generator.gapfill_sql-3960"><a href="#Generator.gapfill_sql-3960"><span class="linenos">3960</span></a> <span class="k">def</span> <span class="nf">gapfill_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GapFill</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
</span><span id="Generator.gapfill_sql-3961"><a href="#Generator.gapfill_sql-3961"><span class="linenos">3961</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">"this"</span><span class="p">)</span>
|
||||
</span><span id="Generator.gapfill_sql-3962"><a href="#Generator.gapfill_sql-3962"><span class="linenos">3962</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"TABLE </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">"</span>
|
||||
</span><span id="Generator.gapfill_sql-3963"><a href="#Generator.gapfill_sql-3963"><span class="linenos">3963</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">"GAP_FILL"</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="o">*</span><span class="p">[</span><span class="n">v</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">k</span> <span class="o">!=</span> <span class="s2">"this"</span><span class="p">])</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
|
|
@ -1893,7 +1893,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">{'year', 'week', 'year_month', 'day', 'month', 'quarter'}</span>
|
||||
<span class="default_value">{'year', 'month', 'quarter', 'day', 'year_month', 'week'}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
|
@ -577,7 +577,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#JSONPathFilter">sqlglot.expressions.JSONPathFilter</a>'>, <class '<a href="expressions.html#JSONPathUnion">sqlglot.expressions.JSONPathUnion</a>'>, <class '<a href="expressions.html#JSONPathSubscript">sqlglot.expressions.JSONPathSubscript</a>'>, <class '<a href="expressions.html#JSONPathSelector">sqlglot.expressions.JSONPathSelector</a>'>, <class '<a href="expressions.html#JSONPathSlice">sqlglot.expressions.JSONPathSlice</a>'>, <class '<a href="expressions.html#JSONPathScript">sqlglot.expressions.JSONPathScript</a>'>, <class '<a href="expressions.html#JSONPathWildcard">sqlglot.expressions.JSONPathWildcard</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>'>}</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#JSONPathSlice">sqlglot.expressions.JSONPathSlice</a>'>, <class '<a href="expressions.html#JSONPathScript">sqlglot.expressions.JSONPathScript</a>'>, <class '<a href="expressions.html#JSONPathRoot">sqlglot.expressions.JSONPathRoot</a>'>, <class '<a href="expressions.html#JSONPathRecursive">sqlglot.expressions.JSONPathRecursive</a>'>, <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>'>}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -586,7 +586,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">{'offset', 'prewhere', 'match', 'locks', 'qualify', 'windows', 'pivots', 'cluster', 'settings', 'having', 'group', 'options', 'distinct', 'with', 'distribute', 'sample', 'format', 'connect', 'laterals', 'limit', 'sort', 'into', 'kind'}</span>
|
||||
<label class="view-value-button pdoc-button" for="UNMERGABLE_ARGS-view-value"></label><span class="default_value">{'sample', 'prewhere', 'offset', 'group', 'with', 'laterals', 'kind', 'distinct', 'having', 'sort', 'cluster', 'limit', 'format', 'locks', 'distribute', 'settings', 'match', 'connect', 'qualify', 'options', 'windows', 'into', 'pivots'}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
|
@ -106,7 +106,7 @@
|
|||
</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a> <span class="n">original</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
||||
</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a>
|
||||
</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="n">node</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">rewrite_between</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="n">distance</span> <span class="o">=</span> <span class="n">normalization_distance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">dnf</span><span class="o">=</span><span class="n">dnf</span><span class="p">)</span>
|
||||
</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="n">distance</span> <span class="o">=</span> <span class="n">normalization_distance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">dnf</span><span class="o">=</span><span class="n">dnf</span><span class="p">,</span> <span class="n">max_</span><span class="o">=</span><span class="n">max_distance</span><span class="p">)</span>
|
||||
</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a>
|
||||
</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="k">if</span> <span class="n">distance</span> <span class="o">></span> <span class="n">max_distance</span><span class="p">:</span>
|
||||
</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
|
||||
|
@ -155,103 +155,119 @@
|
|||
</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="p">)</span>
|
||||
</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a>
|
||||
</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a>
|
||||
</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a><span class="k">def</span> <span class="nf">normalization_distance</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">dnf</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-></span> <span class="nb">int</span><span class="p">:</span>
|
||||
</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a><span class="sd"> The difference in the number of predicates between a given expression and its normalized form.</span>
|
||||
</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a>
|
||||
</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a><span class="sd"> This is used as an estimate of the cost of the conversion which is exponential in complexity.</span>
|
||||
</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a><span class="k">def</span> <span class="nf">normalization_distance</span><span class="p">(</span>
|
||||
</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">dnf</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">max_</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="s2">"inf"</span><span class="p">)</span>
|
||||
</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a><span class="p">)</span> <span class="o">-></span> <span class="nb">int</span><span class="p">:</span>
|
||||
</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a><span class="sd"> The difference in the number of predicates between a given expression and its normalized form.</span>
|
||||
</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a>
|
||||
</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a><span class="sd"> Example:</span>
|
||||
</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a><span class="sd"> >>> import sqlglot</span>
|
||||
</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a><span class="sd"> >>> expression = sqlglot.parse_one("(a AND b) OR (c AND d)")</span>
|
||||
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a><span class="sd"> >>> normalization_distance(expression)</span>
|
||||
</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a><span class="sd"> 4</span>
|
||||
</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a>
|
||||
</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a><span class="sd"> Args:</span>
|
||||
</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a><span class="sd"> expression: The expression to compute the normalization distance for.</span>
|
||||
</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a><span class="sd"> dnf: Whether to check if the expression is in Disjunctive Normal Form (DNF).</span>
|
||||
</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a><span class="sd"> Default: False, i.e. we check if it's in Conjunctive Normal Form (CNF).</span>
|
||||
</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a>
|
||||
</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a><span class="sd"> Returns:</span>
|
||||
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a><span class="sd"> The normalization distance.</span>
|
||||
</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="k">return</span> <span class="nb">sum</span><span class="p">(</span><span class="n">_predicate_lengths</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">dnf</span><span class="p">))</span> <span class="o">-</span> <span class="p">(</span>
|
||||
</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="nb">sum</span><span class="p">(</span><span class="mi">1</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">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">Connector</span><span class="p">))</span> <span class="o">+</span> <span class="mi">1</span>
|
||||
</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="p">)</span>
|
||||
</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a>
|
||||
</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a><span class="sd"> This is used as an estimate of the cost of the conversion which is exponential in complexity.</span>
|
||||
</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a>
|
||||
</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a><span class="sd"> Example:</span>
|
||||
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a><span class="sd"> >>> import sqlglot</span>
|
||||
</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a><span class="sd"> >>> expression = sqlglot.parse_one("(a AND b) OR (c AND d)")</span>
|
||||
</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a><span class="sd"> >>> normalization_distance(expression)</span>
|
||||
</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a><span class="sd"> 4</span>
|
||||
</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a>
|
||||
</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a><span class="sd"> Args:</span>
|
||||
</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a><span class="sd"> expression: The expression to compute the normalization distance for.</span>
|
||||
</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a><span class="sd"> dnf: Whether to check if the expression is in Disjunctive Normal Form (DNF).</span>
|
||||
</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a><span class="sd"> Default: False, i.e. we check if it's in Conjunctive Normal Form (CNF).</span>
|
||||
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a><span class="sd"> max_: stop early if count exceeds this.</span>
|
||||
</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a>
|
||||
</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a><span class="sd"> Returns:</span>
|
||||
</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a><span class="sd"> The normalization distance.</span>
|
||||
</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="n">total</span> <span class="o">=</span> <span class="o">-</span><span class="p">(</span><span class="nb">sum</span><span class="p">(</span><span class="mi">1</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">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">Connector</span><span class="p">))</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
|
||||
</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a>
|
||||
</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a><span class="k">def</span> <span class="nf">_predicate_lengths</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">dnf</span><span class="p">):</span>
|
||||
</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a><span class="sd"> Returns a list of predicate lengths when expanded to normalized form.</span>
|
||||
</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a>
|
||||
</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a><span class="sd"> (A AND B) OR C -> [2, 2] because len(A OR C), len(B OR C).</span>
|
||||
</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">unnest</span><span class="p">()</span>
|
||||
</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="k">for</span> <span class="n">length</span> <span class="ow">in</span> <span class="n">_predicate_lengths</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">dnf</span><span class="p">,</span> <span class="n">max_</span><span class="p">):</span>
|
||||
</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="n">total</span> <span class="o">+=</span> <span class="n">length</span>
|
||||
</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="k">if</span> <span class="n">total</span> <span class="o">></span> <span class="n">max_</span><span class="p">:</span>
|
||||
</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="k">return</span> <span class="n">total</span>
|
||||
</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a>
|
||||
</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="k">return</span> <span class="n">total</span>
|
||||
</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a>
|
||||
</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a>
|
||||
</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Connector</span><span class="p">):</span>
|
||||
</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="k">return</span> <span class="p">(</span><span class="mi">1</span><span class="p">,)</span>
|
||||
</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a>
|
||||
</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="n">left</span><span class="p">,</span> <span class="n">right</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">values</span><span class="p">()</span>
|
||||
</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a>
|
||||
</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="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">And</span> <span class="k">if</span> <span class="n">dnf</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Or</span><span class="p">):</span>
|
||||
</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="k">return</span> <span class="nb">tuple</span><span class="p">(</span>
|
||||
</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="n">a</span> <span class="o">+</span> <span class="n">b</span> <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="n">_predicate_lengths</span><span class="p">(</span><span class="n">left</span><span class="p">,</span> <span class="n">dnf</span><span class="p">)</span> <span class="k">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">_predicate_lengths</span><span class="p">(</span><span class="n">right</span><span class="p">,</span> <span class="n">dnf</span><span class="p">)</span>
|
||||
</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="p">)</span>
|
||||
</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="k">return</span> <span class="n">_predicate_lengths</span><span class="p">(</span><span class="n">left</span><span class="p">,</span> <span class="n">dnf</span><span class="p">)</span> <span class="o">+</span> <span class="n">_predicate_lengths</span><span class="p">(</span><span class="n">right</span><span class="p">,</span> <span class="n">dnf</span><span class="p">)</span>
|
||||
</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a>
|
||||
</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a><span class="k">def</span> <span class="nf">_predicate_lengths</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">dnf</span><span class="p">,</span> <span class="n">max_</span><span class="o">=</span><span class="nb">float</span><span class="p">(</span><span class="s2">"inf"</span><span class="p">),</span> <span class="n">depth</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||
</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a><span class="sd"> Returns a list of predicate lengths when expanded to normalized form.</span>
|
||||
</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a>
|
||||
</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a><span class="sd"> (A AND B) OR C -> [2, 2] because len(A OR C), len(B OR C).</span>
|
||||
</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="k">if</span> <span class="n">depth</span> <span class="o">></span> <span class="n">max_</span><span class="p">:</span>
|
||||
</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="k">yield</span> <span class="n">depth</span>
|
||||
</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="k">return</span>
|
||||
</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a>
|
||||
</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">unnest</span><span class="p">()</span>
|
||||
</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a>
|
||||
</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a><span class="k">def</span> <span class="nf">distributive_law</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">dnf</span><span class="p">,</span> <span class="n">max_distance</span><span class="p">):</span>
|
||||
</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a><span class="sd"> x OR (y AND z) -> (x OR y) AND (x OR z)</span>
|
||||
</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a><span class="sd"> (x AND y) OR (y AND z) -> (x OR y) AND (x OR z) AND (y OR y) AND (y OR z)</span>
|
||||
</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="k">if</span> <span class="n">normalized</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">dnf</span><span class="o">=</span><span class="n">dnf</span><span class="p">):</span>
|
||||
</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a>
|
||||
</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="n">distance</span> <span class="o">=</span> <span class="n">normalization_distance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">dnf</span><span class="o">=</span><span class="n">dnf</span><span class="p">)</span>
|
||||
</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a>
|
||||
</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="k">if</span> <span class="n">distance</span> <span class="o">></span> <span class="n">max_distance</span><span class="p">:</span>
|
||||
</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="k">raise</span> <span class="n">OptimizeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Normalization distance </span><span class="si">{</span><span class="n">distance</span><span class="si">}</span><span class="s2"> exceeds max </span><span class="si">{</span><span class="n">max_distance</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a>
|
||||
</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">replace_children</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="k">lambda</span> <span class="n">e</span><span class="p">:</span> <span class="n">distributive_law</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">dnf</span><span class="p">,</span> <span class="n">max_distance</span><span class="p">))</span>
|
||||
</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="n">to_exp</span><span class="p">,</span> <span class="n">from_exp</span> <span class="o">=</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Or</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">if</span> <span class="n">dnf</span> <span class="k">else</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">exp</span><span class="o">.</span><span class="n">Or</span><span class="p">)</span>
|
||||
</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Connector</span><span class="p">):</span>
|
||||
</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="k">yield</span> <span class="mi">1</span>
|
||||
</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="k">return</span>
|
||||
</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a>
|
||||
</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="n">depth</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="n">left</span><span class="p">,</span> <span class="n">right</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">values</span><span class="p">()</span>
|
||||
</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a>
|
||||
</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="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">And</span> <span class="k">if</span> <span class="n">dnf</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Or</span><span class="p">):</span>
|
||||
</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="n">_predicate_lengths</span><span class="p">(</span><span class="n">left</span><span class="p">,</span> <span class="n">dnf</span><span class="p">,</span> <span class="n">max_</span><span class="p">,</span> <span class="n">depth</span><span class="p">):</span>
|
||||
</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="k">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">_predicate_lengths</span><span class="p">(</span><span class="n">right</span><span class="p">,</span> <span class="n">dnf</span><span class="p">,</span> <span class="n">max_</span><span class="p">,</span> <span class="n">depth</span><span class="p">):</span>
|
||||
</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="k">yield</span> <span class="n">a</span> <span class="o">+</span> <span class="n">b</span>
|
||||
</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="k">yield from</span> <span class="n">_predicate_lengths</span><span class="p">(</span><span class="n">left</span><span class="p">,</span> <span class="n">dnf</span><span class="p">,</span> <span class="n">max_</span><span class="p">,</span> <span class="n">depth</span><span class="p">)</span>
|
||||
</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="k">yield from</span> <span class="n">_predicate_lengths</span><span class="p">(</span><span class="n">right</span><span class="p">,</span> <span class="n">dnf</span><span class="p">,</span> <span class="n">max_</span><span class="p">,</span> <span class="n">depth</span><span class="p">)</span>
|
||||
</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a>
|
||||
</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a>
|
||||
</span><span id="L-149"><a href="#L-149"><span class="linenos">149</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">from_exp</span><span class="p">):</span>
|
||||
</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">unnest_operands</span><span class="p">()</span>
|
||||
</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a>
|
||||
</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="n">from_func</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span> <span class="k">if</span> <span class="n">from_exp</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">or_</span>
|
||||
</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="n">to_func</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span> <span class="k">if</span> <span class="n">to_exp</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">or_</span>
|
||||
</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a>
|
||||
</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">to_exp</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">to_exp</span><span class="p">):</span>
|
||||
</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="nb">tuple</span><span class="p">(</span><span class="n">a</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">Connector</span><span class="p">)))</span> <span class="o">></span> <span class="nb">len</span><span class="p">(</span><span class="nb">tuple</span><span class="p">(</span><span class="n">b</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">Connector</span><span class="p">))):</span>
|
||||
</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="k">return</span> <span class="n">_distribute</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">from_func</span><span class="p">,</span> <span class="n">to_func</span><span class="p">)</span>
|
||||
</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="k">return</span> <span class="n">_distribute</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">from_func</span><span class="p">,</span> <span class="n">to_func</span><span class="p">)</span>
|
||||
</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">to_exp</span><span class="p">):</span>
|
||||
</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="k">return</span> <span class="n">_distribute</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">from_func</span><span class="p">,</span> <span class="n">to_func</span><span class="p">)</span>
|
||||
</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">to_exp</span><span class="p">):</span>
|
||||
</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="k">return</span> <span class="n">_distribute</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">from_func</span><span class="p">,</span> <span class="n">to_func</span><span class="p">)</span>
|
||||
</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a>
|
||||
</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a>
|
||||
</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a>
|
||||
</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a><span class="k">def</span> <span class="nf">_distribute</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">from_func</span><span class="p">,</span> <span class="n">to_func</span><span class="p">):</span>
|
||||
</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Connector</span><span class="p">):</span>
|
||||
</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">replace_children</span><span class="p">(</span>
|
||||
</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="n">a</span><span class="p">,</span>
|
||||
</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="k">lambda</span> <span class="n">c</span><span class="p">:</span> <span class="n">to_func</span><span class="p">(</span>
|
||||
</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="n">uniq_sort</span><span class="p">(</span><span class="n">flatten</span><span class="p">(</span><span class="n">from_func</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">b</span><span class="o">.</span><span class="n">left</span><span class="p">))),</span>
|
||||
</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="n">uniq_sort</span><span class="p">(</span><span class="n">flatten</span><span class="p">(</span><span class="n">from_func</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">b</span><span class="o">.</span><span class="n">right</span><span class="p">))),</span>
|
||||
</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||
</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="p">),</span>
|
||||
</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="p">)</span>
|
||||
</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="n">a</span> <span class="o">=</span> <span class="n">to_func</span><span class="p">(</span>
|
||||
</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="n">uniq_sort</span><span class="p">(</span><span class="n">flatten</span><span class="p">(</span><span class="n">from_func</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="o">.</span><span class="n">left</span><span class="p">))),</span>
|
||||
</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="n">uniq_sort</span><span class="p">(</span><span class="n">flatten</span><span class="p">(</span><span class="n">from_func</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="o">.</span><span class="n">right</span><span class="p">))),</span>
|
||||
</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||
</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="p">)</span>
|
||||
</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a>
|
||||
</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="k">return</span> <span class="n">a</span>
|
||||
</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a><span class="k">def</span> <span class="nf">distributive_law</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">dnf</span><span class="p">,</span> <span class="n">max_distance</span><span class="p">):</span>
|
||||
</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a><span class="sd"> x OR (y AND z) -> (x OR y) AND (x OR z)</span>
|
||||
</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a><span class="sd"> (x AND y) OR (y AND z) -> (x OR y) AND (x OR z) AND (y OR y) AND (y OR z)</span>
|
||||
</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="k">if</span> <span class="n">normalized</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">dnf</span><span class="o">=</span><span class="n">dnf</span><span class="p">):</span>
|
||||
</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a>
|
||||
</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="n">distance</span> <span class="o">=</span> <span class="n">normalization_distance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">dnf</span><span class="o">=</span><span class="n">dnf</span><span class="p">,</span> <span class="n">max_</span><span class="o">=</span><span class="n">max_distance</span><span class="p">)</span>
|
||||
</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a>
|
||||
</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="k">if</span> <span class="n">distance</span> <span class="o">></span> <span class="n">max_distance</span><span class="p">:</span>
|
||||
</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="k">raise</span> <span class="n">OptimizeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Normalization distance </span><span class="si">{</span><span class="n">distance</span><span class="si">}</span><span class="s2"> exceeds max </span><span class="si">{</span><span class="n">max_distance</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a>
|
||||
</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">replace_children</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="k">lambda</span> <span class="n">e</span><span class="p">:</span> <span class="n">distributive_law</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">dnf</span><span class="p">,</span> <span class="n">max_distance</span><span class="p">))</span>
|
||||
</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="n">to_exp</span><span class="p">,</span> <span class="n">from_exp</span> <span class="o">=</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Or</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">if</span> <span class="n">dnf</span> <span class="k">else</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">exp</span><span class="o">.</span><span class="n">Or</span><span class="p">)</span>
|
||||
</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a>
|
||||
</span><span id="L-165"><a href="#L-165"><span class="linenos">165</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">from_exp</span><span class="p">):</span>
|
||||
</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">unnest_operands</span><span class="p">()</span>
|
||||
</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a>
|
||||
</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="n">from_func</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span> <span class="k">if</span> <span class="n">from_exp</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">or_</span>
|
||||
</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="n">to_func</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span> <span class="k">if</span> <span class="n">to_exp</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">or_</span>
|
||||
</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a>
|
||||
</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">to_exp</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">to_exp</span><span class="p">):</span>
|
||||
</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="nb">tuple</span><span class="p">(</span><span class="n">a</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">Connector</span><span class="p">)))</span> <span class="o">></span> <span class="nb">len</span><span class="p">(</span><span class="nb">tuple</span><span class="p">(</span><span class="n">b</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">Connector</span><span class="p">))):</span>
|
||||
</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="k">return</span> <span class="n">_distribute</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">from_func</span><span class="p">,</span> <span class="n">to_func</span><span class="p">)</span>
|
||||
</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="k">return</span> <span class="n">_distribute</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">from_func</span><span class="p">,</span> <span class="n">to_func</span><span class="p">)</span>
|
||||
</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">to_exp</span><span class="p">):</span>
|
||||
</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="k">return</span> <span class="n">_distribute</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">from_func</span><span class="p">,</span> <span class="n">to_func</span><span class="p">)</span>
|
||||
</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">to_exp</span><span class="p">):</span>
|
||||
</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="k">return</span> <span class="n">_distribute</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">from_func</span><span class="p">,</span> <span class="n">to_func</span><span class="p">)</span>
|
||||
</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a>
|
||||
</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a>
|
||||
</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a>
|
||||
</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a><span class="k">def</span> <span class="nf">_distribute</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">from_func</span><span class="p">,</span> <span class="n">to_func</span><span class="p">):</span>
|
||||
</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Connector</span><span class="p">):</span>
|
||||
</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">replace_children</span><span class="p">(</span>
|
||||
</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="n">a</span><span class="p">,</span>
|
||||
</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="k">lambda</span> <span class="n">c</span><span class="p">:</span> <span class="n">to_func</span><span class="p">(</span>
|
||||
</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="n">uniq_sort</span><span class="p">(</span><span class="n">flatten</span><span class="p">(</span><span class="n">from_func</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">b</span><span class="o">.</span><span class="n">left</span><span class="p">))),</span>
|
||||
</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="n">uniq_sort</span><span class="p">(</span><span class="n">flatten</span><span class="p">(</span><span class="n">from_func</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">b</span><span class="o">.</span><span class="n">right</span><span class="p">))),</span>
|
||||
</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||
</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="p">),</span>
|
||||
</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="p">)</span>
|
||||
</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="n">a</span> <span class="o">=</span> <span class="n">to_func</span><span class="p">(</span>
|
||||
</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="n">uniq_sort</span><span class="p">(</span><span class="n">flatten</span><span class="p">(</span><span class="n">from_func</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="o">.</span><span class="n">left</span><span class="p">))),</span>
|
||||
</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="n">uniq_sort</span><span class="p">(</span><span class="n">flatten</span><span class="p">(</span><span class="n">from_func</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="o">.</span><span class="n">right</span><span class="p">))),</span>
|
||||
</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||
</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="p">)</span>
|
||||
</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a>
|
||||
</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="k">return</span> <span class="n">a</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -304,7 +320,7 @@
|
|||
</span><span id="normalize-37"><a href="#normalize-37"><span class="linenos">37</span></a> <span class="n">original</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
||||
</span><span id="normalize-38"><a href="#normalize-38"><span class="linenos">38</span></a>
|
||||
</span><span id="normalize-39"><a href="#normalize-39"><span class="linenos">39</span></a> <span class="n">node</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">rewrite_between</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
</span><span id="normalize-40"><a href="#normalize-40"><span class="linenos">40</span></a> <span class="n">distance</span> <span class="o">=</span> <span class="n">normalization_distance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">dnf</span><span class="o">=</span><span class="n">dnf</span><span class="p">)</span>
|
||||
</span><span id="normalize-40"><a href="#normalize-40"><span class="linenos">40</span></a> <span class="n">distance</span> <span class="o">=</span> <span class="n">normalization_distance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">dnf</span><span class="o">=</span><span class="n">dnf</span><span class="p">,</span> <span class="n">max_</span><span class="o">=</span><span class="n">max_distance</span><span class="p">)</span>
|
||||
</span><span id="normalize-41"><a href="#normalize-41"><span class="linenos">41</span></a>
|
||||
</span><span id="normalize-42"><a href="#normalize-42"><span class="linenos">42</span></a> <span class="k">if</span> <span class="n">distance</span> <span class="o">></span> <span class="n">max_distance</span><span class="p">:</span>
|
||||
</span><span id="normalize-43"><a href="#normalize-43"><span class="linenos">43</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
|
||||
|
@ -430,35 +446,43 @@ Default: False, i.e. we check if it's in Conjunctive Normal Form (CNF).</li>
|
|||
<div class="attr function">
|
||||
|
||||
<span class="def">def</span>
|
||||
<span class="name">normalization_distance</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#Expression">sqlglot.expressions.Expression</a></span>, </span><span class="param"><span class="n">dnf</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span></span><span class="return-annotation">) -> <span class="nb">int</span>:</span></span>
|
||||
<span class="name">normalization_distance</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#Expression">sqlglot.expressions.Expression</a></span>,</span><span class="param"> <span class="n">dnf</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>,</span><span class="param"> <span class="n">max_</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="n">inf</span></span><span class="return-annotation">) -> <span class="nb">int</span>:</span></span>
|
||||
|
||||
<label class="view-source-button" for="normalization_distance-view-source"><span>View Source</span></label>
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#normalization_distance"></a>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="normalization_distance-89"><a href="#normalization_distance-89"><span class="linenos"> 89</span></a><span class="k">def</span> <span class="nf">normalization_distance</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">dnf</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-></span> <span class="nb">int</span><span class="p">:</span>
|
||||
</span><span id="normalization_distance-90"><a href="#normalization_distance-90"><span class="linenos"> 90</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="normalization_distance-91"><a href="#normalization_distance-91"><span class="linenos"> 91</span></a><span class="sd"> The difference in the number of predicates between a given expression and its normalized form.</span>
|
||||
</span><span id="normalization_distance-92"><a href="#normalization_distance-92"><span class="linenos"> 92</span></a>
|
||||
</span><span id="normalization_distance-93"><a href="#normalization_distance-93"><span class="linenos"> 93</span></a><span class="sd"> This is used as an estimate of the cost of the conversion which is exponential in complexity.</span>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="normalization_distance-89"><a href="#normalization_distance-89"><span class="linenos"> 89</span></a><span class="k">def</span> <span class="nf">normalization_distance</span><span class="p">(</span>
|
||||
</span><span id="normalization_distance-90"><a href="#normalization_distance-90"><span class="linenos"> 90</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">dnf</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">max_</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="s2">"inf"</span><span class="p">)</span>
|
||||
</span><span id="normalization_distance-91"><a href="#normalization_distance-91"><span class="linenos"> 91</span></a><span class="p">)</span> <span class="o">-></span> <span class="nb">int</span><span class="p">:</span>
|
||||
</span><span id="normalization_distance-92"><a href="#normalization_distance-92"><span class="linenos"> 92</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="normalization_distance-93"><a href="#normalization_distance-93"><span class="linenos"> 93</span></a><span class="sd"> The difference in the number of predicates between a given expression and its normalized form.</span>
|
||||
</span><span id="normalization_distance-94"><a href="#normalization_distance-94"><span class="linenos"> 94</span></a>
|
||||
</span><span id="normalization_distance-95"><a href="#normalization_distance-95"><span class="linenos"> 95</span></a><span class="sd"> Example:</span>
|
||||
</span><span id="normalization_distance-96"><a href="#normalization_distance-96"><span class="linenos"> 96</span></a><span class="sd"> >>> import sqlglot</span>
|
||||
</span><span id="normalization_distance-97"><a href="#normalization_distance-97"><span class="linenos"> 97</span></a><span class="sd"> >>> expression = sqlglot.parse_one("(a AND b) OR (c AND d)")</span>
|
||||
</span><span id="normalization_distance-98"><a href="#normalization_distance-98"><span class="linenos"> 98</span></a><span class="sd"> >>> normalization_distance(expression)</span>
|
||||
</span><span id="normalization_distance-99"><a href="#normalization_distance-99"><span class="linenos"> 99</span></a><span class="sd"> 4</span>
|
||||
</span><span id="normalization_distance-100"><a href="#normalization_distance-100"><span class="linenos">100</span></a>
|
||||
</span><span id="normalization_distance-101"><a href="#normalization_distance-101"><span class="linenos">101</span></a><span class="sd"> Args:</span>
|
||||
</span><span id="normalization_distance-102"><a href="#normalization_distance-102"><span class="linenos">102</span></a><span class="sd"> expression: The expression to compute the normalization distance for.</span>
|
||||
</span><span id="normalization_distance-103"><a href="#normalization_distance-103"><span class="linenos">103</span></a><span class="sd"> dnf: Whether to check if the expression is in Disjunctive Normal Form (DNF).</span>
|
||||
</span><span id="normalization_distance-104"><a href="#normalization_distance-104"><span class="linenos">104</span></a><span class="sd"> Default: False, i.e. we check if it's in Conjunctive Normal Form (CNF).</span>
|
||||
</span><span id="normalization_distance-105"><a href="#normalization_distance-105"><span class="linenos">105</span></a>
|
||||
</span><span id="normalization_distance-106"><a href="#normalization_distance-106"><span class="linenos">106</span></a><span class="sd"> Returns:</span>
|
||||
</span><span id="normalization_distance-107"><a href="#normalization_distance-107"><span class="linenos">107</span></a><span class="sd"> The normalization distance.</span>
|
||||
</span><span id="normalization_distance-108"><a href="#normalization_distance-108"><span class="linenos">108</span></a><span class="sd"> """</span>
|
||||
</span><span id="normalization_distance-109"><a href="#normalization_distance-109"><span class="linenos">109</span></a> <span class="k">return</span> <span class="nb">sum</span><span class="p">(</span><span class="n">_predicate_lengths</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">dnf</span><span class="p">))</span> <span class="o">-</span> <span class="p">(</span>
|
||||
</span><span id="normalization_distance-110"><a href="#normalization_distance-110"><span class="linenos">110</span></a> <span class="nb">sum</span><span class="p">(</span><span class="mi">1</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">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">Connector</span><span class="p">))</span> <span class="o">+</span> <span class="mi">1</span>
|
||||
</span><span id="normalization_distance-111"><a href="#normalization_distance-111"><span class="linenos">111</span></a> <span class="p">)</span>
|
||||
</span><span id="normalization_distance-95"><a href="#normalization_distance-95"><span class="linenos"> 95</span></a><span class="sd"> This is used as an estimate of the cost of the conversion which is exponential in complexity.</span>
|
||||
</span><span id="normalization_distance-96"><a href="#normalization_distance-96"><span class="linenos"> 96</span></a>
|
||||
</span><span id="normalization_distance-97"><a href="#normalization_distance-97"><span class="linenos"> 97</span></a><span class="sd"> Example:</span>
|
||||
</span><span id="normalization_distance-98"><a href="#normalization_distance-98"><span class="linenos"> 98</span></a><span class="sd"> >>> import sqlglot</span>
|
||||
</span><span id="normalization_distance-99"><a href="#normalization_distance-99"><span class="linenos"> 99</span></a><span class="sd"> >>> expression = sqlglot.parse_one("(a AND b) OR (c AND d)")</span>
|
||||
</span><span id="normalization_distance-100"><a href="#normalization_distance-100"><span class="linenos">100</span></a><span class="sd"> >>> normalization_distance(expression)</span>
|
||||
</span><span id="normalization_distance-101"><a href="#normalization_distance-101"><span class="linenos">101</span></a><span class="sd"> 4</span>
|
||||
</span><span id="normalization_distance-102"><a href="#normalization_distance-102"><span class="linenos">102</span></a>
|
||||
</span><span id="normalization_distance-103"><a href="#normalization_distance-103"><span class="linenos">103</span></a><span class="sd"> Args:</span>
|
||||
</span><span id="normalization_distance-104"><a href="#normalization_distance-104"><span class="linenos">104</span></a><span class="sd"> expression: The expression to compute the normalization distance for.</span>
|
||||
</span><span id="normalization_distance-105"><a href="#normalization_distance-105"><span class="linenos">105</span></a><span class="sd"> dnf: Whether to check if the expression is in Disjunctive Normal Form (DNF).</span>
|
||||
</span><span id="normalization_distance-106"><a href="#normalization_distance-106"><span class="linenos">106</span></a><span class="sd"> Default: False, i.e. we check if it's in Conjunctive Normal Form (CNF).</span>
|
||||
</span><span id="normalization_distance-107"><a href="#normalization_distance-107"><span class="linenos">107</span></a><span class="sd"> max_: stop early if count exceeds this.</span>
|
||||
</span><span id="normalization_distance-108"><a href="#normalization_distance-108"><span class="linenos">108</span></a>
|
||||
</span><span id="normalization_distance-109"><a href="#normalization_distance-109"><span class="linenos">109</span></a><span class="sd"> Returns:</span>
|
||||
</span><span id="normalization_distance-110"><a href="#normalization_distance-110"><span class="linenos">110</span></a><span class="sd"> The normalization distance.</span>
|
||||
</span><span id="normalization_distance-111"><a href="#normalization_distance-111"><span class="linenos">111</span></a><span class="sd"> """</span>
|
||||
</span><span id="normalization_distance-112"><a href="#normalization_distance-112"><span class="linenos">112</span></a> <span class="n">total</span> <span class="o">=</span> <span class="o">-</span><span class="p">(</span><span class="nb">sum</span><span class="p">(</span><span class="mi">1</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">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">Connector</span><span class="p">))</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
|
||||
</span><span id="normalization_distance-113"><a href="#normalization_distance-113"><span class="linenos">113</span></a>
|
||||
</span><span id="normalization_distance-114"><a href="#normalization_distance-114"><span class="linenos">114</span></a> <span class="k">for</span> <span class="n">length</span> <span class="ow">in</span> <span class="n">_predicate_lengths</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">dnf</span><span class="p">,</span> <span class="n">max_</span><span class="p">):</span>
|
||||
</span><span id="normalization_distance-115"><a href="#normalization_distance-115"><span class="linenos">115</span></a> <span class="n">total</span> <span class="o">+=</span> <span class="n">length</span>
|
||||
</span><span id="normalization_distance-116"><a href="#normalization_distance-116"><span class="linenos">116</span></a> <span class="k">if</span> <span class="n">total</span> <span class="o">></span> <span class="n">max_</span><span class="p">:</span>
|
||||
</span><span id="normalization_distance-117"><a href="#normalization_distance-117"><span class="linenos">117</span></a> <span class="k">return</span> <span class="n">total</span>
|
||||
</span><span id="normalization_distance-118"><a href="#normalization_distance-118"><span class="linenos">118</span></a>
|
||||
</span><span id="normalization_distance-119"><a href="#normalization_distance-119"><span class="linenos">119</span></a> <span class="k">return</span> <span class="n">total</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -484,6 +508,7 @@ Default: False, i.e. we check if it's in Conjunctive Normal Form (CNF).</li>
|
|||
<li><strong>expression:</strong> The expression to compute the normalization distance for.</li>
|
||||
<li><strong>dnf:</strong> Whether to check if the expression is in Disjunctive Normal Form (DNF).
|
||||
Default: False, i.e. we check if it's in Conjunctive Normal Form (CNF).</li>
|
||||
<li><strong>max_:</strong> stop early if count exceeds this.</li>
|
||||
</ul>
|
||||
|
||||
<h6 id="returns">Returns:</h6>
|
||||
|
@ -506,38 +531,38 @@ Default: False, i.e. we check if it's in Conjunctive Normal Form (CNF).</li>
|
|||
|
||||
</div>
|
||||
<a class="headerlink" href="#distributive_law"></a>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="distributive_law-134"><a href="#distributive_law-134"><span class="linenos">134</span></a><span class="k">def</span> <span class="nf">distributive_law</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">dnf</span><span class="p">,</span> <span class="n">max_distance</span><span class="p">):</span>
|
||||
</span><span id="distributive_law-135"><a href="#distributive_law-135"><span class="linenos">135</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="distributive_law-136"><a href="#distributive_law-136"><span class="linenos">136</span></a><span class="sd"> x OR (y AND z) -> (x OR y) AND (x OR z)</span>
|
||||
</span><span id="distributive_law-137"><a href="#distributive_law-137"><span class="linenos">137</span></a><span class="sd"> (x AND y) OR (y AND z) -> (x OR y) AND (x OR z) AND (y OR y) AND (y OR z)</span>
|
||||
</span><span id="distributive_law-138"><a href="#distributive_law-138"><span class="linenos">138</span></a><span class="sd"> """</span>
|
||||
</span><span id="distributive_law-139"><a href="#distributive_law-139"><span class="linenos">139</span></a> <span class="k">if</span> <span class="n">normalized</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">dnf</span><span class="o">=</span><span class="n">dnf</span><span class="p">):</span>
|
||||
</span><span id="distributive_law-140"><a href="#distributive_law-140"><span class="linenos">140</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span><span id="distributive_law-141"><a href="#distributive_law-141"><span class="linenos">141</span></a>
|
||||
</span><span id="distributive_law-142"><a href="#distributive_law-142"><span class="linenos">142</span></a> <span class="n">distance</span> <span class="o">=</span> <span class="n">normalization_distance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">dnf</span><span class="o">=</span><span class="n">dnf</span><span class="p">)</span>
|
||||
</span><span id="distributive_law-143"><a href="#distributive_law-143"><span class="linenos">143</span></a>
|
||||
</span><span id="distributive_law-144"><a href="#distributive_law-144"><span class="linenos">144</span></a> <span class="k">if</span> <span class="n">distance</span> <span class="o">></span> <span class="n">max_distance</span><span class="p">:</span>
|
||||
</span><span id="distributive_law-145"><a href="#distributive_law-145"><span class="linenos">145</span></a> <span class="k">raise</span> <span class="n">OptimizeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Normalization distance </span><span class="si">{</span><span class="n">distance</span><span class="si">}</span><span class="s2"> exceeds max </span><span class="si">{</span><span class="n">max_distance</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
</span><span id="distributive_law-146"><a href="#distributive_law-146"><span class="linenos">146</span></a>
|
||||
</span><span id="distributive_law-147"><a href="#distributive_law-147"><span class="linenos">147</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">replace_children</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="k">lambda</span> <span class="n">e</span><span class="p">:</span> <span class="n">distributive_law</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">dnf</span><span class="p">,</span> <span class="n">max_distance</span><span class="p">))</span>
|
||||
</span><span id="distributive_law-148"><a href="#distributive_law-148"><span class="linenos">148</span></a> <span class="n">to_exp</span><span class="p">,</span> <span class="n">from_exp</span> <span class="o">=</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Or</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">if</span> <span class="n">dnf</span> <span class="k">else</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">exp</span><span class="o">.</span><span class="n">Or</span><span class="p">)</span>
|
||||
</span><span id="distributive_law-149"><a href="#distributive_law-149"><span class="linenos">149</span></a>
|
||||
</span><span id="distributive_law-150"><a href="#distributive_law-150"><span class="linenos">150</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">from_exp</span><span class="p">):</span>
|
||||
</span><span id="distributive_law-151"><a href="#distributive_law-151"><span class="linenos">151</span></a> <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">unnest_operands</span><span class="p">()</span>
|
||||
</span><span id="distributive_law-152"><a href="#distributive_law-152"><span class="linenos">152</span></a>
|
||||
</span><span id="distributive_law-153"><a href="#distributive_law-153"><span class="linenos">153</span></a> <span class="n">from_func</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span> <span class="k">if</span> <span class="n">from_exp</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">or_</span>
|
||||
</span><span id="distributive_law-154"><a href="#distributive_law-154"><span class="linenos">154</span></a> <span class="n">to_func</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span> <span class="k">if</span> <span class="n">to_exp</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">or_</span>
|
||||
</span><span id="distributive_law-155"><a href="#distributive_law-155"><span class="linenos">155</span></a>
|
||||
</span><span id="distributive_law-156"><a href="#distributive_law-156"><span class="linenos">156</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">to_exp</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">to_exp</span><span class="p">):</span>
|
||||
</span><span id="distributive_law-157"><a href="#distributive_law-157"><span class="linenos">157</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="nb">tuple</span><span class="p">(</span><span class="n">a</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">Connector</span><span class="p">)))</span> <span class="o">></span> <span class="nb">len</span><span class="p">(</span><span class="nb">tuple</span><span class="p">(</span><span class="n">b</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">Connector</span><span class="p">))):</span>
|
||||
</span><span id="distributive_law-158"><a href="#distributive_law-158"><span class="linenos">158</span></a> <span class="k">return</span> <span class="n">_distribute</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">from_func</span><span class="p">,</span> <span class="n">to_func</span><span class="p">)</span>
|
||||
</span><span id="distributive_law-159"><a href="#distributive_law-159"><span class="linenos">159</span></a> <span class="k">return</span> <span class="n">_distribute</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">from_func</span><span class="p">,</span> <span class="n">to_func</span><span class="p">)</span>
|
||||
</span><span id="distributive_law-160"><a href="#distributive_law-160"><span class="linenos">160</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">to_exp</span><span class="p">):</span>
|
||||
</span><span id="distributive_law-161"><a href="#distributive_law-161"><span class="linenos">161</span></a> <span class="k">return</span> <span class="n">_distribute</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">from_func</span><span class="p">,</span> <span class="n">to_func</span><span class="p">)</span>
|
||||
</span><span id="distributive_law-162"><a href="#distributive_law-162"><span class="linenos">162</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">to_exp</span><span class="p">):</span>
|
||||
</span><span id="distributive_law-163"><a href="#distributive_law-163"><span class="linenos">163</span></a> <span class="k">return</span> <span class="n">_distribute</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">from_func</span><span class="p">,</span> <span class="n">to_func</span><span class="p">)</span>
|
||||
</span><span id="distributive_law-164"><a href="#distributive_law-164"><span class="linenos">164</span></a>
|
||||
</span><span id="distributive_law-165"><a href="#distributive_law-165"><span class="linenos">165</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="distributive_law-150"><a href="#distributive_law-150"><span class="linenos">150</span></a><span class="k">def</span> <span class="nf">distributive_law</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">dnf</span><span class="p">,</span> <span class="n">max_distance</span><span class="p">):</span>
|
||||
</span><span id="distributive_law-151"><a href="#distributive_law-151"><span class="linenos">151</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="distributive_law-152"><a href="#distributive_law-152"><span class="linenos">152</span></a><span class="sd"> x OR (y AND z) -> (x OR y) AND (x OR z)</span>
|
||||
</span><span id="distributive_law-153"><a href="#distributive_law-153"><span class="linenos">153</span></a><span class="sd"> (x AND y) OR (y AND z) -> (x OR y) AND (x OR z) AND (y OR y) AND (y OR z)</span>
|
||||
</span><span id="distributive_law-154"><a href="#distributive_law-154"><span class="linenos">154</span></a><span class="sd"> """</span>
|
||||
</span><span id="distributive_law-155"><a href="#distributive_law-155"><span class="linenos">155</span></a> <span class="k">if</span> <span class="n">normalized</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">dnf</span><span class="o">=</span><span class="n">dnf</span><span class="p">):</span>
|
||||
</span><span id="distributive_law-156"><a href="#distributive_law-156"><span class="linenos">156</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span><span id="distributive_law-157"><a href="#distributive_law-157"><span class="linenos">157</span></a>
|
||||
</span><span id="distributive_law-158"><a href="#distributive_law-158"><span class="linenos">158</span></a> <span class="n">distance</span> <span class="o">=</span> <span class="n">normalization_distance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">dnf</span><span class="o">=</span><span class="n">dnf</span><span class="p">,</span> <span class="n">max_</span><span class="o">=</span><span class="n">max_distance</span><span class="p">)</span>
|
||||
</span><span id="distributive_law-159"><a href="#distributive_law-159"><span class="linenos">159</span></a>
|
||||
</span><span id="distributive_law-160"><a href="#distributive_law-160"><span class="linenos">160</span></a> <span class="k">if</span> <span class="n">distance</span> <span class="o">></span> <span class="n">max_distance</span><span class="p">:</span>
|
||||
</span><span id="distributive_law-161"><a href="#distributive_law-161"><span class="linenos">161</span></a> <span class="k">raise</span> <span class="n">OptimizeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Normalization distance </span><span class="si">{</span><span class="n">distance</span><span class="si">}</span><span class="s2"> exceeds max </span><span class="si">{</span><span class="n">max_distance</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
</span><span id="distributive_law-162"><a href="#distributive_law-162"><span class="linenos">162</span></a>
|
||||
</span><span id="distributive_law-163"><a href="#distributive_law-163"><span class="linenos">163</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">replace_children</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="k">lambda</span> <span class="n">e</span><span class="p">:</span> <span class="n">distributive_law</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">dnf</span><span class="p">,</span> <span class="n">max_distance</span><span class="p">))</span>
|
||||
</span><span id="distributive_law-164"><a href="#distributive_law-164"><span class="linenos">164</span></a> <span class="n">to_exp</span><span class="p">,</span> <span class="n">from_exp</span> <span class="o">=</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Or</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">if</span> <span class="n">dnf</span> <span class="k">else</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">exp</span><span class="o">.</span><span class="n">Or</span><span class="p">)</span>
|
||||
</span><span id="distributive_law-165"><a href="#distributive_law-165"><span class="linenos">165</span></a>
|
||||
</span><span id="distributive_law-166"><a href="#distributive_law-166"><span class="linenos">166</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">from_exp</span><span class="p">):</span>
|
||||
</span><span id="distributive_law-167"><a href="#distributive_law-167"><span class="linenos">167</span></a> <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">unnest_operands</span><span class="p">()</span>
|
||||
</span><span id="distributive_law-168"><a href="#distributive_law-168"><span class="linenos">168</span></a>
|
||||
</span><span id="distributive_law-169"><a href="#distributive_law-169"><span class="linenos">169</span></a> <span class="n">from_func</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span> <span class="k">if</span> <span class="n">from_exp</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">or_</span>
|
||||
</span><span id="distributive_law-170"><a href="#distributive_law-170"><span class="linenos">170</span></a> <span class="n">to_func</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span> <span class="k">if</span> <span class="n">to_exp</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">or_</span>
|
||||
</span><span id="distributive_law-171"><a href="#distributive_law-171"><span class="linenos">171</span></a>
|
||||
</span><span id="distributive_law-172"><a href="#distributive_law-172"><span class="linenos">172</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">to_exp</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">to_exp</span><span class="p">):</span>
|
||||
</span><span id="distributive_law-173"><a href="#distributive_law-173"><span class="linenos">173</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="nb">tuple</span><span class="p">(</span><span class="n">a</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">Connector</span><span class="p">)))</span> <span class="o">></span> <span class="nb">len</span><span class="p">(</span><span class="nb">tuple</span><span class="p">(</span><span class="n">b</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">Connector</span><span class="p">))):</span>
|
||||
</span><span id="distributive_law-174"><a href="#distributive_law-174"><span class="linenos">174</span></a> <span class="k">return</span> <span class="n">_distribute</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">from_func</span><span class="p">,</span> <span class="n">to_func</span><span class="p">)</span>
|
||||
</span><span id="distributive_law-175"><a href="#distributive_law-175"><span class="linenos">175</span></a> <span class="k">return</span> <span class="n">_distribute</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">from_func</span><span class="p">,</span> <span class="n">to_func</span><span class="p">)</span>
|
||||
</span><span id="distributive_law-176"><a href="#distributive_law-176"><span class="linenos">176</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">to_exp</span><span class="p">):</span>
|
||||
</span><span id="distributive_law-177"><a href="#distributive_law-177"><span class="linenos">177</span></a> <span class="k">return</span> <span class="n">_distribute</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">from_func</span><span class="p">,</span> <span class="n">to_func</span><span class="p">)</span>
|
||||
</span><span id="distributive_law-178"><a href="#distributive_law-178"><span class="linenos">178</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">to_exp</span><span class="p">):</span>
|
||||
</span><span id="distributive_law-179"><a href="#distributive_law-179"><span class="linenos">179</span></a> <span class="k">return</span> <span class="n">_distribute</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">from_func</span><span class="p">,</span> <span class="n">to_func</span><span class="p">)</span>
|
||||
</span><span id="distributive_law-180"><a href="#distributive_law-180"><span class="linenos">180</span></a>
|
||||
</span><span id="distributive_law-181"><a href="#distributive_law-181"><span class="linenos">181</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
|
|
@ -64,96 +64,95 @@
|
|||
</span><span id="L-3"><a href="#L-3"><span class="linenos"> 3</span></a><span class="kn">import</span> <span class="nn">inspect</span>
|
||||
</span><span id="L-4"><a href="#L-4"><span class="linenos"> 4</span></a><span class="kn">import</span> <span class="nn">typing</span> <span class="k">as</span> <span class="nn">t</span>
|
||||
</span><span id="L-5"><a href="#L-5"><span class="linenos"> 5</span></a>
|
||||
</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a><span class="kn">import</span> <span class="nn">sqlglot</span>
|
||||
</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a><span class="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">Schema</span><span class="p">,</span> <span class="n">exp</span>
|
||||
</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.dialect</span> <span class="kn">import</span> <span class="n">DialectType</span>
|
||||
</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.annotate_types</span> <span class="kn">import</span> <span class="n">annotate_types</span>
|
||||
</span><span id="L-10"><a href="#L-10"><span class="linenos">10</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.canonicalize</span> <span class="kn">import</span> <span class="n">canonicalize</span>
|
||||
</span><span id="L-11"><a href="#L-11"><span class="linenos">11</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.eliminate_ctes</span> <span class="kn">import</span> <span class="n">eliminate_ctes</span>
|
||||
</span><span id="L-12"><a href="#L-12"><span class="linenos">12</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.eliminate_joins</span> <span class="kn">import</span> <span class="n">eliminate_joins</span>
|
||||
</span><span id="L-13"><a href="#L-13"><span class="linenos">13</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.eliminate_subqueries</span> <span class="kn">import</span> <span class="n">eliminate_subqueries</span>
|
||||
</span><span id="L-14"><a href="#L-14"><span class="linenos">14</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.merge_subqueries</span> <span class="kn">import</span> <span class="n">merge_subqueries</span>
|
||||
</span><span id="L-15"><a href="#L-15"><span class="linenos">15</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.normalize</span> <span class="kn">import</span> <span class="n">normalize</span>
|
||||
</span><span id="L-16"><a href="#L-16"><span class="linenos">16</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.optimize_joins</span> <span class="kn">import</span> <span class="n">optimize_joins</span>
|
||||
</span><span id="L-17"><a href="#L-17"><span class="linenos">17</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.pushdown_predicates</span> <span class="kn">import</span> <span class="n">pushdown_predicates</span>
|
||||
</span><span id="L-18"><a href="#L-18"><span class="linenos">18</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.pushdown_projections</span> <span class="kn">import</span> <span class="n">pushdown_projections</span>
|
||||
</span><span id="L-19"><a href="#L-19"><span class="linenos">19</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.qualify</span> <span class="kn">import</span> <span class="n">qualify</span>
|
||||
</span><span id="L-20"><a href="#L-20"><span class="linenos">20</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.qualify_columns</span> <span class="kn">import</span> <span class="n">quote_identifiers</span>
|
||||
</span><span id="L-21"><a href="#L-21"><span class="linenos">21</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.simplify</span> <span class="kn">import</span> <span class="n">simplify</span>
|
||||
</span><span id="L-22"><a href="#L-22"><span class="linenos">22</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.unnest_subqueries</span> <span class="kn">import</span> <span class="n">unnest_subqueries</span>
|
||||
</span><span id="L-23"><a href="#L-23"><span class="linenos">23</span></a><span class="kn">from</span> <span class="nn">sqlglot.schema</span> <span class="kn">import</span> <span class="n">ensure_schema</span>
|
||||
</span><span id="L-24"><a href="#L-24"><span class="linenos">24</span></a>
|
||||
</span><span id="L-25"><a href="#L-25"><span class="linenos">25</span></a><span class="n">RULES</span> <span class="o">=</span> <span class="p">(</span>
|
||||
</span><span id="L-26"><a href="#L-26"><span class="linenos">26</span></a> <span class="n">qualify</span><span class="p">,</span>
|
||||
</span><span id="L-27"><a href="#L-27"><span class="linenos">27</span></a> <span class="n">pushdown_projections</span><span class="p">,</span>
|
||||
</span><span id="L-28"><a href="#L-28"><span class="linenos">28</span></a> <span class="n">normalize</span><span class="p">,</span>
|
||||
</span><span id="L-29"><a href="#L-29"><span class="linenos">29</span></a> <span class="n">unnest_subqueries</span><span class="p">,</span>
|
||||
</span><span id="L-30"><a href="#L-30"><span class="linenos">30</span></a> <span class="n">pushdown_predicates</span><span class="p">,</span>
|
||||
</span><span id="L-31"><a href="#L-31"><span class="linenos">31</span></a> <span class="n">optimize_joins</span><span class="p">,</span>
|
||||
</span><span id="L-32"><a href="#L-32"><span class="linenos">32</span></a> <span class="n">eliminate_subqueries</span><span class="p">,</span>
|
||||
</span><span id="L-33"><a href="#L-33"><span class="linenos">33</span></a> <span class="n">merge_subqueries</span><span class="p">,</span>
|
||||
</span><span id="L-34"><a href="#L-34"><span class="linenos">34</span></a> <span class="n">eliminate_joins</span><span class="p">,</span>
|
||||
</span><span id="L-35"><a href="#L-35"><span class="linenos">35</span></a> <span class="n">eliminate_ctes</span><span class="p">,</span>
|
||||
</span><span id="L-36"><a href="#L-36"><span class="linenos">36</span></a> <span class="n">quote_identifiers</span><span class="p">,</span>
|
||||
</span><span id="L-37"><a href="#L-37"><span class="linenos">37</span></a> <span class="n">annotate_types</span><span class="p">,</span>
|
||||
</span><span id="L-38"><a href="#L-38"><span class="linenos">38</span></a> <span class="n">canonicalize</span><span class="p">,</span>
|
||||
</span><span id="L-39"><a href="#L-39"><span class="linenos">39</span></a> <span class="n">simplify</span><span class="p">,</span>
|
||||
</span><span id="L-40"><a href="#L-40"><span class="linenos">40</span></a><span class="p">)</span>
|
||||
</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a><span class="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">Schema</span><span class="p">,</span> <span class="n">exp</span>
|
||||
</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.dialect</span> <span class="kn">import</span> <span class="n">DialectType</span>
|
||||
</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.annotate_types</span> <span class="kn">import</span> <span class="n">annotate_types</span>
|
||||
</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.canonicalize</span> <span class="kn">import</span> <span class="n">canonicalize</span>
|
||||
</span><span id="L-10"><a href="#L-10"><span class="linenos">10</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.eliminate_ctes</span> <span class="kn">import</span> <span class="n">eliminate_ctes</span>
|
||||
</span><span id="L-11"><a href="#L-11"><span class="linenos">11</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.eliminate_joins</span> <span class="kn">import</span> <span class="n">eliminate_joins</span>
|
||||
</span><span id="L-12"><a href="#L-12"><span class="linenos">12</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.eliminate_subqueries</span> <span class="kn">import</span> <span class="n">eliminate_subqueries</span>
|
||||
</span><span id="L-13"><a href="#L-13"><span class="linenos">13</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.merge_subqueries</span> <span class="kn">import</span> <span class="n">merge_subqueries</span>
|
||||
</span><span id="L-14"><a href="#L-14"><span class="linenos">14</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.normalize</span> <span class="kn">import</span> <span class="n">normalize</span>
|
||||
</span><span id="L-15"><a href="#L-15"><span class="linenos">15</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.optimize_joins</span> <span class="kn">import</span> <span class="n">optimize_joins</span>
|
||||
</span><span id="L-16"><a href="#L-16"><span class="linenos">16</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.pushdown_predicates</span> <span class="kn">import</span> <span class="n">pushdown_predicates</span>
|
||||
</span><span id="L-17"><a href="#L-17"><span class="linenos">17</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.pushdown_projections</span> <span class="kn">import</span> <span class="n">pushdown_projections</span>
|
||||
</span><span id="L-18"><a href="#L-18"><span class="linenos">18</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.qualify</span> <span class="kn">import</span> <span class="n">qualify</span>
|
||||
</span><span id="L-19"><a href="#L-19"><span class="linenos">19</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.qualify_columns</span> <span class="kn">import</span> <span class="n">quote_identifiers</span>
|
||||
</span><span id="L-20"><a href="#L-20"><span class="linenos">20</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.simplify</span> <span class="kn">import</span> <span class="n">simplify</span>
|
||||
</span><span id="L-21"><a href="#L-21"><span class="linenos">21</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.unnest_subqueries</span> <span class="kn">import</span> <span class="n">unnest_subqueries</span>
|
||||
</span><span id="L-22"><a href="#L-22"><span class="linenos">22</span></a><span class="kn">from</span> <span class="nn">sqlglot.schema</span> <span class="kn">import</span> <span class="n">ensure_schema</span>
|
||||
</span><span id="L-23"><a href="#L-23"><span class="linenos">23</span></a>
|
||||
</span><span id="L-24"><a href="#L-24"><span class="linenos">24</span></a><span class="n">RULES</span> <span class="o">=</span> <span class="p">(</span>
|
||||
</span><span id="L-25"><a href="#L-25"><span class="linenos">25</span></a> <span class="n">qualify</span><span class="p">,</span>
|
||||
</span><span id="L-26"><a href="#L-26"><span class="linenos">26</span></a> <span class="n">pushdown_projections</span><span class="p">,</span>
|
||||
</span><span id="L-27"><a href="#L-27"><span class="linenos">27</span></a> <span class="n">normalize</span><span class="p">,</span>
|
||||
</span><span id="L-28"><a href="#L-28"><span class="linenos">28</span></a> <span class="n">unnest_subqueries</span><span class="p">,</span>
|
||||
</span><span id="L-29"><a href="#L-29"><span class="linenos">29</span></a> <span class="n">pushdown_predicates</span><span class="p">,</span>
|
||||
</span><span id="L-30"><a href="#L-30"><span class="linenos">30</span></a> <span class="n">optimize_joins</span><span class="p">,</span>
|
||||
</span><span id="L-31"><a href="#L-31"><span class="linenos">31</span></a> <span class="n">eliminate_subqueries</span><span class="p">,</span>
|
||||
</span><span id="L-32"><a href="#L-32"><span class="linenos">32</span></a> <span class="n">merge_subqueries</span><span class="p">,</span>
|
||||
</span><span id="L-33"><a href="#L-33"><span class="linenos">33</span></a> <span class="n">eliminate_joins</span><span class="p">,</span>
|
||||
</span><span id="L-34"><a href="#L-34"><span class="linenos">34</span></a> <span class="n">eliminate_ctes</span><span class="p">,</span>
|
||||
</span><span id="L-35"><a href="#L-35"><span class="linenos">35</span></a> <span class="n">quote_identifiers</span><span class="p">,</span>
|
||||
</span><span id="L-36"><a href="#L-36"><span class="linenos">36</span></a> <span class="n">annotate_types</span><span class="p">,</span>
|
||||
</span><span id="L-37"><a href="#L-37"><span class="linenos">37</span></a> <span class="n">canonicalize</span><span class="p">,</span>
|
||||
</span><span id="L-38"><a href="#L-38"><span class="linenos">38</span></a> <span class="n">simplify</span><span class="p">,</span>
|
||||
</span><span id="L-39"><a href="#L-39"><span class="linenos">39</span></a><span class="p">)</span>
|
||||
</span><span id="L-40"><a href="#L-40"><span class="linenos">40</span></a>
|
||||
</span><span id="L-41"><a href="#L-41"><span class="linenos">41</span></a>
|
||||
</span><span id="L-42"><a href="#L-42"><span class="linenos">42</span></a>
|
||||
</span><span id="L-43"><a href="#L-43"><span class="linenos">43</span></a><span class="k">def</span> <span class="nf">optimize</span><span class="p">(</span>
|
||||
</span><span id="L-44"><a href="#L-44"><span class="linenos">44</span></a> <span class="n">expression</span><span class="p">:</span> <span class="nb">str</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-45"><a href="#L-45"><span class="linenos">45</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">dict</span> <span class="o">|</span> <span class="n">Schema</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="L-46"><a href="#L-46"><span class="linenos">46</span></a> <span class="n">db</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="L-47"><a href="#L-47"><span class="linenos">47</span></a> <span class="n">catalog</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="L-48"><a href="#L-48"><span class="linenos">48</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="L-49"><a href="#L-49"><span class="linenos">49</span></a> <span class="n">rules</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="n">RULES</span><span class="p">,</span>
|
||||
</span><span id="L-50"><a href="#L-50"><span class="linenos">50</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
|
||||
</span><span id="L-51"><a href="#L-51"><span class="linenos">51</span></a><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-52"><a href="#L-52"><span class="linenos">52</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="L-53"><a href="#L-53"><span class="linenos">53</span></a><span class="sd"> Rewrite a sqlglot AST into an optimized form.</span>
|
||||
</span><span id="L-54"><a href="#L-54"><span class="linenos">54</span></a>
|
||||
</span><span id="L-55"><a href="#L-55"><span class="linenos">55</span></a><span class="sd"> Args:</span>
|
||||
</span><span id="L-56"><a href="#L-56"><span class="linenos">56</span></a><span class="sd"> expression: expression to optimize</span>
|
||||
</span><span id="L-57"><a href="#L-57"><span class="linenos">57</span></a><span class="sd"> schema: database schema.</span>
|
||||
</span><span id="L-58"><a href="#L-58"><span class="linenos">58</span></a><span class="sd"> This can either be an instance of `sqlglot.optimizer.Schema` or a mapping in one of</span>
|
||||
</span><span id="L-59"><a href="#L-59"><span class="linenos">59</span></a><span class="sd"> the following forms:</span>
|
||||
</span><span id="L-60"><a href="#L-60"><span class="linenos">60</span></a><span class="sd"> 1. {table: {col: type}}</span>
|
||||
</span><span id="L-61"><a href="#L-61"><span class="linenos">61</span></a><span class="sd"> 2. {db: {table: {col: type}}}</span>
|
||||
</span><span id="L-62"><a href="#L-62"><span class="linenos">62</span></a><span class="sd"> 3. {catalog: {db: {table: {col: type}}}}</span>
|
||||
</span><span id="L-63"><a href="#L-63"><span class="linenos">63</span></a><span class="sd"> If no schema is provided then the default schema defined at `sqlgot.schema` will be used</span>
|
||||
</span><span id="L-64"><a href="#L-64"><span class="linenos">64</span></a><span class="sd"> db: specify the default database, as might be set by a `USE DATABASE db` statement</span>
|
||||
</span><span id="L-65"><a href="#L-65"><span class="linenos">65</span></a><span class="sd"> catalog: specify the default catalog, as might be set by a `USE CATALOG c` statement</span>
|
||||
</span><span id="L-66"><a href="#L-66"><span class="linenos">66</span></a><span class="sd"> dialect: The dialect to parse the sql string.</span>
|
||||
</span><span id="L-67"><a href="#L-67"><span class="linenos">67</span></a><span class="sd"> rules: sequence of optimizer rules to use.</span>
|
||||
</span><span id="L-68"><a href="#L-68"><span class="linenos">68</span></a><span class="sd"> Many of the rules require tables and columns to be qualified.</span>
|
||||
</span><span id="L-69"><a href="#L-69"><span class="linenos">69</span></a><span class="sd"> Do not remove `qualify` from the sequence of rules unless you know what you're doing!</span>
|
||||
</span><span id="L-70"><a href="#L-70"><span class="linenos">70</span></a><span class="sd"> **kwargs: If a rule has a keyword argument with a same name in **kwargs, it will be passed in.</span>
|
||||
</span><span id="L-71"><a href="#L-71"><span class="linenos">71</span></a>
|
||||
</span><span id="L-72"><a href="#L-72"><span class="linenos">72</span></a><span class="sd"> Returns:</span>
|
||||
</span><span id="L-73"><a href="#L-73"><span class="linenos">73</span></a><span class="sd"> The optimized expression.</span>
|
||||
</span><span id="L-74"><a href="#L-74"><span class="linenos">74</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-75"><a href="#L-75"><span class="linenos">75</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">ensure_schema</span><span class="p">(</span><span class="n">schema</span> <span class="ow">or</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">schema</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span>
|
||||
</span><span id="L-76"><a href="#L-76"><span class="linenos">76</span></a> <span class="n">possible_kwargs</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="L-77"><a href="#L-77"><span class="linenos">77</span></a> <span class="s2">"db"</span><span class="p">:</span> <span class="n">db</span><span class="p">,</span>
|
||||
</span><span id="L-78"><a href="#L-78"><span class="linenos">78</span></a> <span class="s2">"catalog"</span><span class="p">:</span> <span class="n">catalog</span><span class="p">,</span>
|
||||
</span><span id="L-79"><a href="#L-79"><span class="linenos">79</span></a> <span class="s2">"schema"</span><span class="p">:</span> <span class="n">schema</span><span class="p">,</span>
|
||||
</span><span id="L-80"><a href="#L-80"><span class="linenos">80</span></a> <span class="s2">"dialect"</span><span class="p">:</span> <span class="n">dialect</span><span class="p">,</span>
|
||||
</span><span id="L-81"><a href="#L-81"><span class="linenos">81</span></a> <span class="s2">"isolate_tables"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="c1"># needed for other optimizations to perform well</span>
|
||||
</span><span id="L-82"><a href="#L-82"><span class="linenos">82</span></a> <span class="s2">"quote_identifiers"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
||||
</span><span id="L-83"><a href="#L-83"><span class="linenos">83</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
|
||||
</span><span id="L-84"><a href="#L-84"><span class="linenos">84</span></a> <span class="p">}</span>
|
||||
</span><span id="L-85"><a href="#L-85"><span class="linenos">85</span></a>
|
||||
</span><span id="L-86"><a href="#L-86"><span class="linenos">86</span></a> <span class="n">optimized</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">maybe_parse</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
</span><span id="L-87"><a href="#L-87"><span class="linenos">87</span></a> <span class="k">for</span> <span class="n">rule</span> <span class="ow">in</span> <span class="n">rules</span><span class="p">:</span>
|
||||
</span><span id="L-88"><a href="#L-88"><span class="linenos">88</span></a> <span class="c1"># Find any additional rule parameters, beyond `expression`</span>
|
||||
</span><span id="L-89"><a href="#L-89"><span class="linenos">89</span></a> <span class="n">rule_params</span> <span class="o">=</span> <span class="n">inspect</span><span class="o">.</span><span class="n">getfullargspec</span><span class="p">(</span><span class="n">rule</span><span class="p">)</span><span class="o">.</span><span class="n">args</span>
|
||||
</span><span id="L-90"><a href="#L-90"><span class="linenos">90</span></a> <span class="n">rule_kwargs</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="L-91"><a href="#L-91"><span class="linenos">91</span></a> <span class="n">param</span><span class="p">:</span> <span class="n">possible_kwargs</span><span class="p">[</span><span class="n">param</span><span class="p">]</span> <span class="k">for</span> <span class="n">param</span> <span class="ow">in</span> <span class="n">rule_params</span> <span class="k">if</span> <span class="n">param</span> <span class="ow">in</span> <span class="n">possible_kwargs</span>
|
||||
</span><span id="L-92"><a href="#L-92"><span class="linenos">92</span></a> <span class="p">}</span>
|
||||
</span><span id="L-93"><a href="#L-93"><span class="linenos">93</span></a> <span class="n">optimized</span> <span class="o">=</span> <span class="n">rule</span><span class="p">(</span><span class="n">optimized</span><span class="p">,</span> <span class="o">**</span><span class="n">rule_kwargs</span><span class="p">)</span>
|
||||
</span><span id="L-94"><a href="#L-94"><span class="linenos">94</span></a>
|
||||
</span><span id="L-95"><a href="#L-95"><span class="linenos">95</span></a> <span class="k">return</span> <span class="n">optimized</span>
|
||||
</span><span id="L-42"><a href="#L-42"><span class="linenos">42</span></a><span class="k">def</span> <span class="nf">optimize</span><span class="p">(</span>
|
||||
</span><span id="L-43"><a href="#L-43"><span class="linenos">43</span></a> <span class="n">expression</span><span class="p">:</span> <span class="nb">str</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-44"><a href="#L-44"><span class="linenos">44</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">dict</span> <span class="o">|</span> <span class="n">Schema</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="L-45"><a href="#L-45"><span class="linenos">45</span></a> <span class="n">db</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="L-46"><a href="#L-46"><span class="linenos">46</span></a> <span class="n">catalog</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="L-47"><a href="#L-47"><span class="linenos">47</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="L-48"><a href="#L-48"><span class="linenos">48</span></a> <span class="n">rules</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="n">RULES</span><span class="p">,</span>
|
||||
</span><span id="L-49"><a href="#L-49"><span class="linenos">49</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
|
||||
</span><span id="L-50"><a href="#L-50"><span class="linenos">50</span></a><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-51"><a href="#L-51"><span class="linenos">51</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="L-52"><a href="#L-52"><span class="linenos">52</span></a><span class="sd"> Rewrite a sqlglot AST into an optimized form.</span>
|
||||
</span><span id="L-53"><a href="#L-53"><span class="linenos">53</span></a>
|
||||
</span><span id="L-54"><a href="#L-54"><span class="linenos">54</span></a><span class="sd"> Args:</span>
|
||||
</span><span id="L-55"><a href="#L-55"><span class="linenos">55</span></a><span class="sd"> expression: expression to optimize</span>
|
||||
</span><span id="L-56"><a href="#L-56"><span class="linenos">56</span></a><span class="sd"> schema: database schema.</span>
|
||||
</span><span id="L-57"><a href="#L-57"><span class="linenos">57</span></a><span class="sd"> This can either be an instance of `sqlglot.optimizer.Schema` or a mapping in one of</span>
|
||||
</span><span id="L-58"><a href="#L-58"><span class="linenos">58</span></a><span class="sd"> the following forms:</span>
|
||||
</span><span id="L-59"><a href="#L-59"><span class="linenos">59</span></a><span class="sd"> 1. {table: {col: type}}</span>
|
||||
</span><span id="L-60"><a href="#L-60"><span class="linenos">60</span></a><span class="sd"> 2. {db: {table: {col: type}}}</span>
|
||||
</span><span id="L-61"><a href="#L-61"><span class="linenos">61</span></a><span class="sd"> 3. {catalog: {db: {table: {col: type}}}}</span>
|
||||
</span><span id="L-62"><a href="#L-62"><span class="linenos">62</span></a><span class="sd"> If no schema is provided then the default schema defined at `sqlgot.schema` will be used</span>
|
||||
</span><span id="L-63"><a href="#L-63"><span class="linenos">63</span></a><span class="sd"> db: specify the default database, as might be set by a `USE DATABASE db` statement</span>
|
||||
</span><span id="L-64"><a href="#L-64"><span class="linenos">64</span></a><span class="sd"> catalog: specify the default catalog, as might be set by a `USE CATALOG c` statement</span>
|
||||
</span><span id="L-65"><a href="#L-65"><span class="linenos">65</span></a><span class="sd"> dialect: The dialect to parse the sql string.</span>
|
||||
</span><span id="L-66"><a href="#L-66"><span class="linenos">66</span></a><span class="sd"> rules: sequence of optimizer rules to use.</span>
|
||||
</span><span id="L-67"><a href="#L-67"><span class="linenos">67</span></a><span class="sd"> Many of the rules require tables and columns to be qualified.</span>
|
||||
</span><span id="L-68"><a href="#L-68"><span class="linenos">68</span></a><span class="sd"> Do not remove `qualify` from the sequence of rules unless you know what you're doing!</span>
|
||||
</span><span id="L-69"><a href="#L-69"><span class="linenos">69</span></a><span class="sd"> **kwargs: If a rule has a keyword argument with a same name in **kwargs, it will be passed in.</span>
|
||||
</span><span id="L-70"><a href="#L-70"><span class="linenos">70</span></a>
|
||||
</span><span id="L-71"><a href="#L-71"><span class="linenos">71</span></a><span class="sd"> Returns:</span>
|
||||
</span><span id="L-72"><a href="#L-72"><span class="linenos">72</span></a><span class="sd"> The optimized expression.</span>
|
||||
</span><span id="L-73"><a href="#L-73"><span class="linenos">73</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-74"><a href="#L-74"><span class="linenos">74</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">ensure_schema</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span>
|
||||
</span><span id="L-75"><a href="#L-75"><span class="linenos">75</span></a> <span class="n">possible_kwargs</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="L-76"><a href="#L-76"><span class="linenos">76</span></a> <span class="s2">"db"</span><span class="p">:</span> <span class="n">db</span><span class="p">,</span>
|
||||
</span><span id="L-77"><a href="#L-77"><span class="linenos">77</span></a> <span class="s2">"catalog"</span><span class="p">:</span> <span class="n">catalog</span><span class="p">,</span>
|
||||
</span><span id="L-78"><a href="#L-78"><span class="linenos">78</span></a> <span class="s2">"schema"</span><span class="p">:</span> <span class="n">schema</span><span class="p">,</span>
|
||||
</span><span id="L-79"><a href="#L-79"><span class="linenos">79</span></a> <span class="s2">"dialect"</span><span class="p">:</span> <span class="n">dialect</span><span class="p">,</span>
|
||||
</span><span id="L-80"><a href="#L-80"><span class="linenos">80</span></a> <span class="s2">"isolate_tables"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="c1"># needed for other optimizations to perform well</span>
|
||||
</span><span id="L-81"><a href="#L-81"><span class="linenos">81</span></a> <span class="s2">"quote_identifiers"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
||||
</span><span id="L-82"><a href="#L-82"><span class="linenos">82</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
|
||||
</span><span id="L-83"><a href="#L-83"><span class="linenos">83</span></a> <span class="p">}</span>
|
||||
</span><span id="L-84"><a href="#L-84"><span class="linenos">84</span></a>
|
||||
</span><span id="L-85"><a href="#L-85"><span class="linenos">85</span></a> <span class="n">optimized</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">maybe_parse</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
</span><span id="L-86"><a href="#L-86"><span class="linenos">86</span></a> <span class="k">for</span> <span class="n">rule</span> <span class="ow">in</span> <span class="n">rules</span><span class="p">:</span>
|
||||
</span><span id="L-87"><a href="#L-87"><span class="linenos">87</span></a> <span class="c1"># Find any additional rule parameters, beyond `expression`</span>
|
||||
</span><span id="L-88"><a href="#L-88"><span class="linenos">88</span></a> <span class="n">rule_params</span> <span class="o">=</span> <span class="n">inspect</span><span class="o">.</span><span class="n">getfullargspec</span><span class="p">(</span><span class="n">rule</span><span class="p">)</span><span class="o">.</span><span class="n">args</span>
|
||||
</span><span id="L-89"><a href="#L-89"><span class="linenos">89</span></a> <span class="n">rule_kwargs</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="L-90"><a href="#L-90"><span class="linenos">90</span></a> <span class="n">param</span><span class="p">:</span> <span class="n">possible_kwargs</span><span class="p">[</span><span class="n">param</span><span class="p">]</span> <span class="k">for</span> <span class="n">param</span> <span class="ow">in</span> <span class="n">rule_params</span> <span class="k">if</span> <span class="n">param</span> <span class="ow">in</span> <span class="n">possible_kwargs</span>
|
||||
</span><span id="L-91"><a href="#L-91"><span class="linenos">91</span></a> <span class="p">}</span>
|
||||
</span><span id="L-92"><a href="#L-92"><span class="linenos">92</span></a> <span class="n">optimized</span> <span class="o">=</span> <span class="n">rule</span><span class="p">(</span><span class="n">optimized</span><span class="p">,</span> <span class="o">**</span><span class="n">rule_kwargs</span><span class="p">)</span>
|
||||
</span><span id="L-93"><a href="#L-93"><span class="linenos">93</span></a>
|
||||
</span><span id="L-94"><a href="#L-94"><span class="linenos">94</span></a> <span class="k">return</span> <span class="n">optimized</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -182,59 +181,59 @@
|
|||
|
||||
</div>
|
||||
<a class="headerlink" href="#optimize"></a>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="optimize-44"><a href="#optimize-44"><span class="linenos">44</span></a><span class="k">def</span> <span class="nf">optimize</span><span class="p">(</span>
|
||||
</span><span id="optimize-45"><a href="#optimize-45"><span class="linenos">45</span></a> <span class="n">expression</span><span class="p">:</span> <span class="nb">str</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="optimize-46"><a href="#optimize-46"><span class="linenos">46</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">dict</span> <span class="o">|</span> <span class="n">Schema</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="optimize-47"><a href="#optimize-47"><span class="linenos">47</span></a> <span class="n">db</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="optimize-48"><a href="#optimize-48"><span class="linenos">48</span></a> <span class="n">catalog</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="optimize-49"><a href="#optimize-49"><span class="linenos">49</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="optimize-50"><a href="#optimize-50"><span class="linenos">50</span></a> <span class="n">rules</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="n">RULES</span><span class="p">,</span>
|
||||
</span><span id="optimize-51"><a href="#optimize-51"><span class="linenos">51</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
|
||||
</span><span id="optimize-52"><a href="#optimize-52"><span class="linenos">52</span></a><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="optimize-53"><a href="#optimize-53"><span class="linenos">53</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="optimize-54"><a href="#optimize-54"><span class="linenos">54</span></a><span class="sd"> Rewrite a sqlglot AST into an optimized form.</span>
|
||||
</span><span id="optimize-55"><a href="#optimize-55"><span class="linenos">55</span></a>
|
||||
</span><span id="optimize-56"><a href="#optimize-56"><span class="linenos">56</span></a><span class="sd"> Args:</span>
|
||||
</span><span id="optimize-57"><a href="#optimize-57"><span class="linenos">57</span></a><span class="sd"> expression: expression to optimize</span>
|
||||
</span><span id="optimize-58"><a href="#optimize-58"><span class="linenos">58</span></a><span class="sd"> schema: database schema.</span>
|
||||
</span><span id="optimize-59"><a href="#optimize-59"><span class="linenos">59</span></a><span class="sd"> This can either be an instance of `sqlglot.optimizer.Schema` or a mapping in one of</span>
|
||||
</span><span id="optimize-60"><a href="#optimize-60"><span class="linenos">60</span></a><span class="sd"> the following forms:</span>
|
||||
</span><span id="optimize-61"><a href="#optimize-61"><span class="linenos">61</span></a><span class="sd"> 1. {table: {col: type}}</span>
|
||||
</span><span id="optimize-62"><a href="#optimize-62"><span class="linenos">62</span></a><span class="sd"> 2. {db: {table: {col: type}}}</span>
|
||||
</span><span id="optimize-63"><a href="#optimize-63"><span class="linenos">63</span></a><span class="sd"> 3. {catalog: {db: {table: {col: type}}}}</span>
|
||||
</span><span id="optimize-64"><a href="#optimize-64"><span class="linenos">64</span></a><span class="sd"> If no schema is provided then the default schema defined at `sqlgot.schema` will be used</span>
|
||||
</span><span id="optimize-65"><a href="#optimize-65"><span class="linenos">65</span></a><span class="sd"> db: specify the default database, as might be set by a `USE DATABASE db` statement</span>
|
||||
</span><span id="optimize-66"><a href="#optimize-66"><span class="linenos">66</span></a><span class="sd"> catalog: specify the default catalog, as might be set by a `USE CATALOG c` statement</span>
|
||||
</span><span id="optimize-67"><a href="#optimize-67"><span class="linenos">67</span></a><span class="sd"> dialect: The dialect to parse the sql string.</span>
|
||||
</span><span id="optimize-68"><a href="#optimize-68"><span class="linenos">68</span></a><span class="sd"> rules: sequence of optimizer rules to use.</span>
|
||||
</span><span id="optimize-69"><a href="#optimize-69"><span class="linenos">69</span></a><span class="sd"> Many of the rules require tables and columns to be qualified.</span>
|
||||
</span><span id="optimize-70"><a href="#optimize-70"><span class="linenos">70</span></a><span class="sd"> Do not remove `qualify` from the sequence of rules unless you know what you're doing!</span>
|
||||
</span><span id="optimize-71"><a href="#optimize-71"><span class="linenos">71</span></a><span class="sd"> **kwargs: If a rule has a keyword argument with a same name in **kwargs, it will be passed in.</span>
|
||||
</span><span id="optimize-72"><a href="#optimize-72"><span class="linenos">72</span></a>
|
||||
</span><span id="optimize-73"><a href="#optimize-73"><span class="linenos">73</span></a><span class="sd"> Returns:</span>
|
||||
</span><span id="optimize-74"><a href="#optimize-74"><span class="linenos">74</span></a><span class="sd"> The optimized expression.</span>
|
||||
</span><span id="optimize-75"><a href="#optimize-75"><span class="linenos">75</span></a><span class="sd"> """</span>
|
||||
</span><span id="optimize-76"><a href="#optimize-76"><span class="linenos">76</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">ensure_schema</span><span class="p">(</span><span class="n">schema</span> <span class="ow">or</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">schema</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span>
|
||||
</span><span id="optimize-77"><a href="#optimize-77"><span class="linenos">77</span></a> <span class="n">possible_kwargs</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="optimize-78"><a href="#optimize-78"><span class="linenos">78</span></a> <span class="s2">"db"</span><span class="p">:</span> <span class="n">db</span><span class="p">,</span>
|
||||
</span><span id="optimize-79"><a href="#optimize-79"><span class="linenos">79</span></a> <span class="s2">"catalog"</span><span class="p">:</span> <span class="n">catalog</span><span class="p">,</span>
|
||||
</span><span id="optimize-80"><a href="#optimize-80"><span class="linenos">80</span></a> <span class="s2">"schema"</span><span class="p">:</span> <span class="n">schema</span><span class="p">,</span>
|
||||
</span><span id="optimize-81"><a href="#optimize-81"><span class="linenos">81</span></a> <span class="s2">"dialect"</span><span class="p">:</span> <span class="n">dialect</span><span class="p">,</span>
|
||||
</span><span id="optimize-82"><a href="#optimize-82"><span class="linenos">82</span></a> <span class="s2">"isolate_tables"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="c1"># needed for other optimizations to perform well</span>
|
||||
</span><span id="optimize-83"><a href="#optimize-83"><span class="linenos">83</span></a> <span class="s2">"quote_identifiers"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
||||
</span><span id="optimize-84"><a href="#optimize-84"><span class="linenos">84</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
|
||||
</span><span id="optimize-85"><a href="#optimize-85"><span class="linenos">85</span></a> <span class="p">}</span>
|
||||
</span><span id="optimize-86"><a href="#optimize-86"><span class="linenos">86</span></a>
|
||||
</span><span id="optimize-87"><a href="#optimize-87"><span class="linenos">87</span></a> <span class="n">optimized</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">maybe_parse</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
</span><span id="optimize-88"><a href="#optimize-88"><span class="linenos">88</span></a> <span class="k">for</span> <span class="n">rule</span> <span class="ow">in</span> <span class="n">rules</span><span class="p">:</span>
|
||||
</span><span id="optimize-89"><a href="#optimize-89"><span class="linenos">89</span></a> <span class="c1"># Find any additional rule parameters, beyond `expression`</span>
|
||||
</span><span id="optimize-90"><a href="#optimize-90"><span class="linenos">90</span></a> <span class="n">rule_params</span> <span class="o">=</span> <span class="n">inspect</span><span class="o">.</span><span class="n">getfullargspec</span><span class="p">(</span><span class="n">rule</span><span class="p">)</span><span class="o">.</span><span class="n">args</span>
|
||||
</span><span id="optimize-91"><a href="#optimize-91"><span class="linenos">91</span></a> <span class="n">rule_kwargs</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="optimize-92"><a href="#optimize-92"><span class="linenos">92</span></a> <span class="n">param</span><span class="p">:</span> <span class="n">possible_kwargs</span><span class="p">[</span><span class="n">param</span><span class="p">]</span> <span class="k">for</span> <span class="n">param</span> <span class="ow">in</span> <span class="n">rule_params</span> <span class="k">if</span> <span class="n">param</span> <span class="ow">in</span> <span class="n">possible_kwargs</span>
|
||||
</span><span id="optimize-93"><a href="#optimize-93"><span class="linenos">93</span></a> <span class="p">}</span>
|
||||
</span><span id="optimize-94"><a href="#optimize-94"><span class="linenos">94</span></a> <span class="n">optimized</span> <span class="o">=</span> <span class="n">rule</span><span class="p">(</span><span class="n">optimized</span><span class="p">,</span> <span class="o">**</span><span class="n">rule_kwargs</span><span class="p">)</span>
|
||||
</span><span id="optimize-95"><a href="#optimize-95"><span class="linenos">95</span></a>
|
||||
</span><span id="optimize-96"><a href="#optimize-96"><span class="linenos">96</span></a> <span class="k">return</span> <span class="n">optimized</span>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="optimize-43"><a href="#optimize-43"><span class="linenos">43</span></a><span class="k">def</span> <span class="nf">optimize</span><span class="p">(</span>
|
||||
</span><span id="optimize-44"><a href="#optimize-44"><span class="linenos">44</span></a> <span class="n">expression</span><span class="p">:</span> <span class="nb">str</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="optimize-45"><a href="#optimize-45"><span class="linenos">45</span></a> <span class="n">schema</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">dict</span> <span class="o">|</span> <span class="n">Schema</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="optimize-46"><a href="#optimize-46"><span class="linenos">46</span></a> <span class="n">db</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="optimize-47"><a href="#optimize-47"><span class="linenos">47</span></a> <span class="n">catalog</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="optimize-48"><a href="#optimize-48"><span class="linenos">48</span></a> <span class="n">dialect</span><span class="p">:</span> <span class="n">DialectType</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
</span><span id="optimize-49"><a href="#optimize-49"><span class="linenos">49</span></a> <span class="n">rules</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="n">RULES</span><span class="p">,</span>
|
||||
</span><span id="optimize-50"><a href="#optimize-50"><span class="linenos">50</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
|
||||
</span><span id="optimize-51"><a href="#optimize-51"><span class="linenos">51</span></a><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="optimize-52"><a href="#optimize-52"><span class="linenos">52</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="optimize-53"><a href="#optimize-53"><span class="linenos">53</span></a><span class="sd"> Rewrite a sqlglot AST into an optimized form.</span>
|
||||
</span><span id="optimize-54"><a href="#optimize-54"><span class="linenos">54</span></a>
|
||||
</span><span id="optimize-55"><a href="#optimize-55"><span class="linenos">55</span></a><span class="sd"> Args:</span>
|
||||
</span><span id="optimize-56"><a href="#optimize-56"><span class="linenos">56</span></a><span class="sd"> expression: expression to optimize</span>
|
||||
</span><span id="optimize-57"><a href="#optimize-57"><span class="linenos">57</span></a><span class="sd"> schema: database schema.</span>
|
||||
</span><span id="optimize-58"><a href="#optimize-58"><span class="linenos">58</span></a><span class="sd"> This can either be an instance of `sqlglot.optimizer.Schema` or a mapping in one of</span>
|
||||
</span><span id="optimize-59"><a href="#optimize-59"><span class="linenos">59</span></a><span class="sd"> the following forms:</span>
|
||||
</span><span id="optimize-60"><a href="#optimize-60"><span class="linenos">60</span></a><span class="sd"> 1. {table: {col: type}}</span>
|
||||
</span><span id="optimize-61"><a href="#optimize-61"><span class="linenos">61</span></a><span class="sd"> 2. {db: {table: {col: type}}}</span>
|
||||
</span><span id="optimize-62"><a href="#optimize-62"><span class="linenos">62</span></a><span class="sd"> 3. {catalog: {db: {table: {col: type}}}}</span>
|
||||
</span><span id="optimize-63"><a href="#optimize-63"><span class="linenos">63</span></a><span class="sd"> If no schema is provided then the default schema defined at `sqlgot.schema` will be used</span>
|
||||
</span><span id="optimize-64"><a href="#optimize-64"><span class="linenos">64</span></a><span class="sd"> db: specify the default database, as might be set by a `USE DATABASE db` statement</span>
|
||||
</span><span id="optimize-65"><a href="#optimize-65"><span class="linenos">65</span></a><span class="sd"> catalog: specify the default catalog, as might be set by a `USE CATALOG c` statement</span>
|
||||
</span><span id="optimize-66"><a href="#optimize-66"><span class="linenos">66</span></a><span class="sd"> dialect: The dialect to parse the sql string.</span>
|
||||
</span><span id="optimize-67"><a href="#optimize-67"><span class="linenos">67</span></a><span class="sd"> rules: sequence of optimizer rules to use.</span>
|
||||
</span><span id="optimize-68"><a href="#optimize-68"><span class="linenos">68</span></a><span class="sd"> Many of the rules require tables and columns to be qualified.</span>
|
||||
</span><span id="optimize-69"><a href="#optimize-69"><span class="linenos">69</span></a><span class="sd"> Do not remove `qualify` from the sequence of rules unless you know what you're doing!</span>
|
||||
</span><span id="optimize-70"><a href="#optimize-70"><span class="linenos">70</span></a><span class="sd"> **kwargs: If a rule has a keyword argument with a same name in **kwargs, it will be passed in.</span>
|
||||
</span><span id="optimize-71"><a href="#optimize-71"><span class="linenos">71</span></a>
|
||||
</span><span id="optimize-72"><a href="#optimize-72"><span class="linenos">72</span></a><span class="sd"> Returns:</span>
|
||||
</span><span id="optimize-73"><a href="#optimize-73"><span class="linenos">73</span></a><span class="sd"> The optimized expression.</span>
|
||||
</span><span id="optimize-74"><a href="#optimize-74"><span class="linenos">74</span></a><span class="sd"> """</span>
|
||||
</span><span id="optimize-75"><a href="#optimize-75"><span class="linenos">75</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">ensure_schema</span><span class="p">(</span><span class="n">schema</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">)</span>
|
||||
</span><span id="optimize-76"><a href="#optimize-76"><span class="linenos">76</span></a> <span class="n">possible_kwargs</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="optimize-77"><a href="#optimize-77"><span class="linenos">77</span></a> <span class="s2">"db"</span><span class="p">:</span> <span class="n">db</span><span class="p">,</span>
|
||||
</span><span id="optimize-78"><a href="#optimize-78"><span class="linenos">78</span></a> <span class="s2">"catalog"</span><span class="p">:</span> <span class="n">catalog</span><span class="p">,</span>
|
||||
</span><span id="optimize-79"><a href="#optimize-79"><span class="linenos">79</span></a> <span class="s2">"schema"</span><span class="p">:</span> <span class="n">schema</span><span class="p">,</span>
|
||||
</span><span id="optimize-80"><a href="#optimize-80"><span class="linenos">80</span></a> <span class="s2">"dialect"</span><span class="p">:</span> <span class="n">dialect</span><span class="p">,</span>
|
||||
</span><span id="optimize-81"><a href="#optimize-81"><span class="linenos">81</span></a> <span class="s2">"isolate_tables"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="c1"># needed for other optimizations to perform well</span>
|
||||
</span><span id="optimize-82"><a href="#optimize-82"><span class="linenos">82</span></a> <span class="s2">"quote_identifiers"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
||||
</span><span id="optimize-83"><a href="#optimize-83"><span class="linenos">83</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
|
||||
</span><span id="optimize-84"><a href="#optimize-84"><span class="linenos">84</span></a> <span class="p">}</span>
|
||||
</span><span id="optimize-85"><a href="#optimize-85"><span class="linenos">85</span></a>
|
||||
</span><span id="optimize-86"><a href="#optimize-86"><span class="linenos">86</span></a> <span class="n">optimized</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">maybe_parse</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
</span><span id="optimize-87"><a href="#optimize-87"><span class="linenos">87</span></a> <span class="k">for</span> <span class="n">rule</span> <span class="ow">in</span> <span class="n">rules</span><span class="p">:</span>
|
||||
</span><span id="optimize-88"><a href="#optimize-88"><span class="linenos">88</span></a> <span class="c1"># Find any additional rule parameters, beyond `expression`</span>
|
||||
</span><span id="optimize-89"><a href="#optimize-89"><span class="linenos">89</span></a> <span class="n">rule_params</span> <span class="o">=</span> <span class="n">inspect</span><span class="o">.</span><span class="n">getfullargspec</span><span class="p">(</span><span class="n">rule</span><span class="p">)</span><span class="o">.</span><span class="n">args</span>
|
||||
</span><span id="optimize-90"><a href="#optimize-90"><span class="linenos">90</span></a> <span class="n">rule_kwargs</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="optimize-91"><a href="#optimize-91"><span class="linenos">91</span></a> <span class="n">param</span><span class="p">:</span> <span class="n">possible_kwargs</span><span class="p">[</span><span class="n">param</span><span class="p">]</span> <span class="k">for</span> <span class="n">param</span> <span class="ow">in</span> <span class="n">rule_params</span> <span class="k">if</span> <span class="n">param</span> <span class="ow">in</span> <span class="n">possible_kwargs</span>
|
||||
</span><span id="optimize-92"><a href="#optimize-92"><span class="linenos">92</span></a> <span class="p">}</span>
|
||||
</span><span id="optimize-93"><a href="#optimize-93"><span class="linenos">93</span></a> <span class="n">optimized</span> <span class="o">=</span> <span class="n">rule</span><span class="p">(</span><span class="n">optimized</span><span class="p">,</span> <span class="o">**</span><span class="n">rule_kwargs</span><span class="p">)</span>
|
||||
</span><span id="optimize-94"><a href="#optimize-94"><span class="linenos">94</span></a>
|
||||
</span><span id="optimize-95"><a href="#optimize-95"><span class="linenos">95</span></a> <span class="k">return</span> <span class="n">optimized</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
24378
docs/sqlglot/parser.html
24378
docs/sqlglot/parser.html
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -8664,7 +8664,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.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.FETCH">TokenType.FETCH</a>: 'FETCH'>, <<a href="#TokenType.COMMAND">TokenType.COMMAND</a>: 'COMMAND'>, <<a href="#TokenType.EXECUTE">TokenType.EXECUTE</a>: 'EXECUTE'>, <<a href="#TokenType.SHOW">TokenType.SHOW</a>: 'SHOW'>}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
|
@ -70,12 +70,14 @@ from sqlglot.dialects.doris import Doris
|
|||
from sqlglot.dialects.drill import Drill
|
||||
from sqlglot.dialects.duckdb import DuckDB
|
||||
from sqlglot.dialects.hive import Hive
|
||||
from sqlglot.dialects.materialize import Materialize
|
||||
from sqlglot.dialects.mysql import MySQL
|
||||
from sqlglot.dialects.oracle import Oracle
|
||||
from sqlglot.dialects.postgres import Postgres
|
||||
from sqlglot.dialects.presto import Presto
|
||||
from sqlglot.dialects.prql import PRQL
|
||||
from sqlglot.dialects.redshift import Redshift
|
||||
from sqlglot.dialects.risingwave import RisingWave
|
||||
from sqlglot.dialects.snowflake import Snowflake
|
||||
from sqlglot.dialects.spark import Spark
|
||||
from sqlglot.dialects.spark2 import Spark2
|
||||
|
|
|
@ -705,7 +705,6 @@ class BigQuery(Dialect):
|
|||
|
||||
# from: https://cloud.google.com/bigquery/docs/reference/standard-sql/lexical#reserved_keywords
|
||||
RESERVED_KEYWORDS = {
|
||||
*generator.Generator.RESERVED_KEYWORDS,
|
||||
"all",
|
||||
"and",
|
||||
"any",
|
||||
|
|
|
@ -367,7 +367,7 @@ class ClickHouse(Dialect):
|
|||
**parser.Parser.QUERY_MODIFIER_PARSERS,
|
||||
TokenType.SETTINGS: lambda self: (
|
||||
"settings",
|
||||
self._advance() or self._parse_csv(self._parse_conjunction),
|
||||
self._advance() or self._parse_csv(self._parse_assignment),
|
||||
),
|
||||
TokenType.FORMAT: lambda self: ("format", self._advance() or self._parse_id_var()),
|
||||
}
|
||||
|
@ -388,15 +388,15 @@ class ClickHouse(Dialect):
|
|||
"INDEX",
|
||||
}
|
||||
|
||||
def _parse_conjunction(self) -> t.Optional[exp.Expression]:
|
||||
this = super()._parse_conjunction()
|
||||
def _parse_assignment(self) -> t.Optional[exp.Expression]:
|
||||
this = super()._parse_assignment()
|
||||
|
||||
if self._match(TokenType.PLACEHOLDER):
|
||||
return self.expression(
|
||||
exp.If,
|
||||
this=this,
|
||||
true=self._parse_conjunction(),
|
||||
false=self._match(TokenType.COLON) and self._parse_conjunction(),
|
||||
true=self._parse_assignment(),
|
||||
false=self._match(TokenType.COLON) and self._parse_assignment(),
|
||||
)
|
||||
|
||||
return this
|
||||
|
@ -461,7 +461,7 @@ class ClickHouse(Dialect):
|
|||
# WITH <expression> AS <identifier>
|
||||
cte = self.expression(
|
||||
exp.CTE,
|
||||
this=self._parse_conjunction(),
|
||||
this=self._parse_assignment(),
|
||||
alias=self._parse_table_alias(),
|
||||
scalar=True,
|
||||
)
|
||||
|
@ -592,7 +592,7 @@ class ClickHouse(Dialect):
|
|||
) -> exp.IndexColumnConstraint:
|
||||
# INDEX name1 expr TYPE type1(args) GRANULARITY value
|
||||
this = self._parse_id_var()
|
||||
expression = self._parse_conjunction()
|
||||
expression = self._parse_assignment()
|
||||
|
||||
index_type = self._match_text_seq("TYPE") and (
|
||||
self._parse_function() or self._parse_var()
|
||||
|
|
|
@ -50,12 +50,14 @@ class Dialects(str, Enum):
|
|||
DRILL = "drill"
|
||||
DUCKDB = "duckdb"
|
||||
HIVE = "hive"
|
||||
MATERIALIZE = "materialize"
|
||||
MYSQL = "mysql"
|
||||
ORACLE = "oracle"
|
||||
POSTGRES = "postgres"
|
||||
PRESTO = "presto"
|
||||
PRQL = "prql"
|
||||
REDSHIFT = "redshift"
|
||||
RISINGWAVE = "risingwave"
|
||||
SNOWFLAKE = "snowflake"
|
||||
SPARK = "spark"
|
||||
SPARK2 = "spark2"
|
||||
|
@ -593,7 +595,9 @@ def inline_array_unless_query(self: Generator, expression: exp.Array) -> str:
|
|||
|
||||
def no_ilike_sql(self: Generator, expression: exp.ILike) -> str:
|
||||
return self.like_sql(
|
||||
exp.Like(this=exp.Lower(this=expression.this), expression=expression.expression)
|
||||
exp.Like(
|
||||
this=exp.Lower(this=expression.this), expression=exp.Lower(this=expression.expression)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
|
|
|
@ -26,6 +26,9 @@ class Doris(MySQL):
|
|||
"TO_DATE": exp.TsOrDsToDate.from_arg_list,
|
||||
}
|
||||
|
||||
FUNCTION_PARSERS = MySQL.Parser.FUNCTION_PARSERS.copy()
|
||||
FUNCTION_PARSERS.pop("GROUP_CONCAT")
|
||||
|
||||
class Generator(MySQL.Generator):
|
||||
LAST_DAY_SUPPORTS_DATE_PART = False
|
||||
|
||||
|
@ -49,6 +52,9 @@ class Doris(MySQL):
|
|||
exp.ArrayUniqueAgg: rename_func("COLLECT_SET"),
|
||||
exp.CurrentTimestamp: lambda self, _: self.func("NOW"),
|
||||
exp.DateTrunc: lambda self, e: self.func("DATE_TRUNC", e.this, unit_to_str(e)),
|
||||
exp.GroupConcat: lambda self, e: self.func(
|
||||
"GROUP_CONCAT", e.this, e.args.get("separator") or exp.Literal.string(",")
|
||||
),
|
||||
exp.JSONExtractScalar: lambda self, e: self.func("JSON_EXTRACT", e.this, e.expression),
|
||||
exp.Map: rename_func("ARRAY_MAP"),
|
||||
exp.RegexpLike: rename_func("REGEXP"),
|
||||
|
|
|
@ -341,7 +341,7 @@ class DuckDB(Dialect):
|
|||
if self._match(TokenType.L_BRACE, advance=False):
|
||||
return self.expression(exp.ToMap, this=self._parse_bracket())
|
||||
|
||||
args = self._parse_wrapped_csv(self._parse_conjunction)
|
||||
args = self._parse_wrapped_csv(self._parse_assignment)
|
||||
return self.expression(exp.Map, keys=seq_get(args, 0), values=seq_get(args, 1))
|
||||
|
||||
def _parse_struct_types(self, type_required: bool = False) -> t.Optional[exp.Expression]:
|
||||
|
@ -503,11 +503,93 @@ class DuckDB(Dialect):
|
|||
exp.DataType.Type.VARBINARY: "BLOB",
|
||||
exp.DataType.Type.ROWVERSION: "BLOB",
|
||||
exp.DataType.Type.VARCHAR: "TEXT",
|
||||
exp.DataType.Type.TIMESTAMPNTZ: "TIMESTAMP",
|
||||
exp.DataType.Type.TIMESTAMP_S: "TIMESTAMP_S",
|
||||
exp.DataType.Type.TIMESTAMP_MS: "TIMESTAMP_MS",
|
||||
exp.DataType.Type.TIMESTAMP_NS: "TIMESTAMP_NS",
|
||||
}
|
||||
|
||||
# https://github.com/duckdb/duckdb/blob/ff7f24fd8e3128d94371827523dae85ebaf58713/third_party/libpg_query/grammar/keywords/reserved_keywords.list#L1-L77
|
||||
RESERVED_KEYWORDS = {
|
||||
"array",
|
||||
"analyse",
|
||||
"union",
|
||||
"all",
|
||||
"when",
|
||||
"in_p",
|
||||
"default",
|
||||
"create_p",
|
||||
"window",
|
||||
"asymmetric",
|
||||
"to",
|
||||
"else",
|
||||
"localtime",
|
||||
"from",
|
||||
"end_p",
|
||||
"select",
|
||||
"current_date",
|
||||
"foreign",
|
||||
"with",
|
||||
"grant",
|
||||
"session_user",
|
||||
"or",
|
||||
"except",
|
||||
"references",
|
||||
"fetch",
|
||||
"limit",
|
||||
"group_p",
|
||||
"leading",
|
||||
"into",
|
||||
"collate",
|
||||
"offset",
|
||||
"do",
|
||||
"then",
|
||||
"localtimestamp",
|
||||
"check_p",
|
||||
"lateral_p",
|
||||
"current_role",
|
||||
"where",
|
||||
"asc_p",
|
||||
"placing",
|
||||
"desc_p",
|
||||
"user",
|
||||
"unique",
|
||||
"initially",
|
||||
"column",
|
||||
"both",
|
||||
"some",
|
||||
"as",
|
||||
"any",
|
||||
"only",
|
||||
"deferrable",
|
||||
"null_p",
|
||||
"current_time",
|
||||
"true_p",
|
||||
"table",
|
||||
"case",
|
||||
"trailing",
|
||||
"variadic",
|
||||
"for",
|
||||
"on",
|
||||
"distinct",
|
||||
"false_p",
|
||||
"not",
|
||||
"constraint",
|
||||
"current_timestamp",
|
||||
"returning",
|
||||
"primary",
|
||||
"intersect",
|
||||
"having",
|
||||
"analyze",
|
||||
"current_user",
|
||||
"and",
|
||||
"cast",
|
||||
"symmetric",
|
||||
"using",
|
||||
"order",
|
||||
"current_catalog",
|
||||
}
|
||||
|
||||
UNWRAPPED_INTERVAL_VALUES = (exp.Literal, exp.Paren)
|
||||
|
||||
# DuckDB doesn't generally support CREATE TABLE .. properties
|
||||
|
|
|
@ -29,6 +29,7 @@ from sqlglot.dialects.dialect import (
|
|||
struct_extract_sql,
|
||||
time_format,
|
||||
timestrtotime_sql,
|
||||
unit_to_str,
|
||||
var_map_sql,
|
||||
)
|
||||
from sqlglot.transforms import (
|
||||
|
@ -318,6 +319,7 @@ class Hive(Dialect):
|
|||
),
|
||||
"TO_DATE": build_formatted_time(exp.TsOrDsToDate, "hive"),
|
||||
"TO_JSON": exp.JSONFormat.from_arg_list,
|
||||
"TRUNC": exp.TimestampTrunc.from_arg_list,
|
||||
"UNBASE64": exp.FromBase64.from_arg_list,
|
||||
"UNIX_TIMESTAMP": lambda args: build_formatted_time(exp.StrToUnix, "hive", True)(
|
||||
args or [exp.CurrentTimestamp()]
|
||||
|
@ -415,7 +417,7 @@ class Hive(Dialect):
|
|||
) -> t.Tuple[t.List[exp.Expression], t.Optional[exp.Expression]]:
|
||||
return (
|
||||
(
|
||||
self._parse_csv(self._parse_conjunction)
|
||||
self._parse_csv(self._parse_assignment)
|
||||
if self._match_set({TokenType.PARTITION_BY, TokenType.DISTRIBUTE_BY})
|
||||
else []
|
||||
),
|
||||
|
@ -548,6 +550,7 @@ class Hive(Dialect):
|
|||
exp.TimeStrToDate: rename_func("TO_DATE"),
|
||||
exp.TimeStrToTime: timestrtotime_sql,
|
||||
exp.TimeStrToUnix: rename_func("UNIX_TIMESTAMP"),
|
||||
exp.TimestampTrunc: lambda self, e: self.func("TRUNC", e.this, unit_to_str(e)),
|
||||
exp.TimeToStr: lambda self, e: self.func("DATE_FORMAT", e.this, self.format_time(e)),
|
||||
exp.TimeToUnix: rename_func("UNIX_TIMESTAMP"),
|
||||
exp.ToBase64: rename_func("BASE64"),
|
||||
|
|
94
sqlglot/dialects/materialize.py
Normal file
94
sqlglot/dialects/materialize.py
Normal file
|
@ -0,0 +1,94 @@
|
|||
from __future__ import annotations
|
||||
|
||||
from sqlglot import exp
|
||||
from sqlglot.helper import seq_get
|
||||
from sqlglot.dialects.postgres import Postgres
|
||||
|
||||
from sqlglot.tokens import TokenType
|
||||
from sqlglot.transforms import (
|
||||
remove_unique_constraints,
|
||||
ctas_with_tmp_tables_to_create_tmp_view,
|
||||
preprocess,
|
||||
)
|
||||
import typing as t
|
||||
|
||||
|
||||
class Materialize(Postgres):
|
||||
class Parser(Postgres.Parser):
|
||||
NO_PAREN_FUNCTION_PARSERS = {
|
||||
**Postgres.Parser.NO_PAREN_FUNCTION_PARSERS,
|
||||
"MAP": lambda self: self._parse_map(),
|
||||
}
|
||||
|
||||
LAMBDAS = {
|
||||
**Postgres.Parser.LAMBDAS,
|
||||
TokenType.FARROW: lambda self, expressions: self.expression(
|
||||
exp.Kwarg, this=seq_get(expressions, 0), expression=self._parse_assignment()
|
||||
),
|
||||
}
|
||||
|
||||
def _parse_lambda_arg(self) -> t.Optional[exp.Expression]:
|
||||
return self._parse_field()
|
||||
|
||||
def _parse_map(self) -> exp.ToMap:
|
||||
if self._match(TokenType.L_PAREN):
|
||||
to_map = self.expression(exp.ToMap, this=self._parse_select())
|
||||
self._match_r_paren()
|
||||
return to_map
|
||||
|
||||
if not self._match(TokenType.L_BRACKET):
|
||||
self.raise_error("Expecting [")
|
||||
|
||||
entries = [
|
||||
exp.PropertyEQ(this=e.this, expression=e.expression)
|
||||
for e in self._parse_csv(self._parse_lambda)
|
||||
]
|
||||
|
||||
if not self._match(TokenType.R_BRACKET):
|
||||
self.raise_error("Expecting ]")
|
||||
|
||||
return self.expression(exp.ToMap, this=self.expression(exp.Struct, expressions=entries))
|
||||
|
||||
class Generator(Postgres.Generator):
|
||||
SUPPORTS_CREATE_TABLE_LIKE = False
|
||||
|
||||
TRANSFORMS = {
|
||||
**Postgres.Generator.TRANSFORMS,
|
||||
exp.AutoIncrementColumnConstraint: lambda self, e: "",
|
||||
exp.Create: preprocess(
|
||||
[
|
||||
remove_unique_constraints,
|
||||
ctas_with_tmp_tables_to_create_tmp_view,
|
||||
]
|
||||
),
|
||||
exp.GeneratedAsIdentityColumnConstraint: lambda self, e: "",
|
||||
exp.OnConflict: lambda self, e: "",
|
||||
exp.PrimaryKeyColumnConstraint: lambda self, e: "",
|
||||
}
|
||||
TRANSFORMS.pop(exp.ToMap)
|
||||
|
||||
def propertyeq_sql(self, expression: exp.PropertyEQ) -> str:
|
||||
return self.binary(expression, "=>")
|
||||
|
||||
def datatype_sql(self, expression: exp.DataType) -> str:
|
||||
if expression.is_type(exp.DataType.Type.LIST):
|
||||
if expression.expressions:
|
||||
return f"{self.expressions(expression, flat=True)} LIST"
|
||||
return "LIST"
|
||||
|
||||
if expression.is_type(exp.DataType.Type.MAP) and len(expression.expressions) == 2:
|
||||
key, value = expression.expressions
|
||||
return f"MAP[{self.sql(key)} => {self.sql(value)}]"
|
||||
|
||||
return super().datatype_sql(expression)
|
||||
|
||||
def list_sql(self, expression: exp.List) -> str:
|
||||
if isinstance(seq_get(expression.expressions, 0), exp.Select):
|
||||
return self.func("LIST", seq_get(expression.expressions, 0))
|
||||
|
||||
return f"{self.normalize_func('LIST')}[{self.expressions(expression, flat=True)}]"
|
||||
|
||||
def tomap_sql(self, expression: exp.ToMap) -> str:
|
||||
if isinstance(expression.this, exp.Select):
|
||||
return self.func("MAP", expression.this)
|
||||
return f"{self.normalize_func('MAP')}[{self.expressions(expression.this)}]"
|
|
@ -279,6 +279,10 @@ class MySQL(Dialect):
|
|||
**parser.Parser.CONJUNCTION,
|
||||
TokenType.DAMP: exp.And,
|
||||
TokenType.XOR: exp.Xor,
|
||||
}
|
||||
|
||||
DISJUNCTION = {
|
||||
**parser.Parser.DISJUNCTION,
|
||||
TokenType.DPIPE: exp.Or,
|
||||
}
|
||||
|
||||
|
@ -625,7 +629,7 @@ class MySQL(Dialect):
|
|||
)
|
||||
|
||||
def _parse_chr(self) -> t.Optional[exp.Expression]:
|
||||
expressions = self._parse_csv(self._parse_conjunction)
|
||||
expressions = self._parse_csv(self._parse_assignment)
|
||||
kwargs: t.Dict[str, t.Any] = {"this": seq_get(expressions, 0)}
|
||||
|
||||
if len(expressions) > 1:
|
||||
|
|
|
@ -114,15 +114,6 @@ def _string_agg_sql(self: Postgres.Generator, expression: exp.GroupConcat) -> st
|
|||
return f"STRING_AGG({self.format_args(this, separator)}{order})"
|
||||
|
||||
|
||||
def _datatype_sql(self: Postgres.Generator, expression: exp.DataType) -> str:
|
||||
if expression.is_type("array"):
|
||||
if expression.expressions:
|
||||
values = self.expressions(expression, key="values", flat=True)
|
||||
return f"{self.expressions(expression, flat=True)}[{values}]"
|
||||
return "ARRAY"
|
||||
return self.datatype_sql(expression)
|
||||
|
||||
|
||||
def _auto_increment_to_serial(expression: exp.Expression) -> exp.Expression:
|
||||
auto = expression.find(exp.AutoIncrementColumnConstraint)
|
||||
|
||||
|
@ -500,7 +491,6 @@ class Postgres(Dialect):
|
|||
exp.DateAdd: _date_add_sql("+"),
|
||||
exp.DateDiff: _date_diff_sql,
|
||||
exp.DateStrToDate: datestrtodate_sql,
|
||||
exp.DataType: _datatype_sql,
|
||||
exp.DateSub: _date_add_sql("-"),
|
||||
exp.Explode: rename_func("UNNEST"),
|
||||
exp.GroupConcat: _string_agg_sql,
|
||||
|
@ -623,3 +613,11 @@ class Postgres(Dialect):
|
|||
option = self.sql(expression, "option")
|
||||
|
||||
return f"SET {exprs}{access_method}{tablespace}{option}"
|
||||
|
||||
def datatype_sql(self, expression: exp.DataType) -> str:
|
||||
if expression.is_type(exp.DataType.Type.ARRAY):
|
||||
if expression.expressions:
|
||||
values = self.expressions(expression, key="values", flat=True)
|
||||
return f"{self.expressions(expression, flat=True)}[{values}]"
|
||||
return "ARRAY"
|
||||
return super().datatype_sql(expression)
|
||||
|
|
|
@ -36,6 +36,10 @@ class PRQL(Dialect):
|
|||
CONJUNCTION = {
|
||||
**parser.Parser.CONJUNCTION,
|
||||
TokenType.DAMP: exp.And,
|
||||
}
|
||||
|
||||
DISJUNCTION = {
|
||||
**parser.Parser.DISJUNCTION,
|
||||
TokenType.DPIPE: exp.Or,
|
||||
}
|
||||
|
||||
|
@ -43,7 +47,7 @@ class PRQL(Dialect):
|
|||
"DERIVE": lambda self, query: self._parse_selection(query),
|
||||
"SELECT": lambda self, query: self._parse_selection(query, append=False),
|
||||
"TAKE": lambda self, query: self._parse_take(query),
|
||||
"FILTER": lambda self, query: query.where(self._parse_conjunction()),
|
||||
"FILTER": lambda self, query: query.where(self._parse_assignment()),
|
||||
"APPEND": lambda self, query: query.union(
|
||||
_select_all(self._parse_table()), distinct=False, copy=False
|
||||
),
|
||||
|
@ -174,8 +178,8 @@ class PRQL(Dialect):
|
|||
if self._next and self._next.token_type == TokenType.ALIAS:
|
||||
alias = self._parse_id_var(True)
|
||||
self._match(TokenType.ALIAS)
|
||||
return self.expression(exp.Alias, this=self._parse_conjunction(), alias=alias)
|
||||
return self._parse_conjunction()
|
||||
return self.expression(exp.Alias, this=self._parse_assignment(), alias=alias)
|
||||
return self._parse_assignment()
|
||||
|
||||
def _parse_table(
|
||||
self,
|
||||
|
|
6
sqlglot/dialects/risingwave.py
Normal file
6
sqlglot/dialects/risingwave.py
Normal file
|
@ -0,0 +1,6 @@
|
|||
from sqlglot.dialects.postgres import Postgres
|
||||
|
||||
|
||||
class RisingWave(Postgres):
|
||||
class Generator(Postgres.Generator):
|
||||
LOCKING_READS_SUPPORTED = False
|
|
@ -498,7 +498,7 @@ class Snowflake(Dialect):
|
|||
TokenType.ARROW: lambda self, expressions: self.expression(
|
||||
exp.Lambda,
|
||||
this=self._replace_lambda(
|
||||
self._parse_conjunction(),
|
||||
self._parse_assignment(),
|
||||
expressions,
|
||||
),
|
||||
expressions=[e.this if isinstance(e, exp.Cast) else e for e in expressions],
|
||||
|
@ -576,7 +576,7 @@ class Snowflake(Dialect):
|
|||
# - https://docs.snowflake.com/en/sql-reference/functions/object_construct
|
||||
return self._parse_slice(self._parse_string())
|
||||
|
||||
return self._parse_slice(self._parse_alias(self._parse_conjunction(), explicit=True))
|
||||
return self._parse_slice(self._parse_alias(self._parse_assignment(), explicit=True))
|
||||
|
||||
def _parse_lateral(self) -> t.Optional[exp.Lateral]:
|
||||
lateral = super()._parse_lateral()
|
||||
|
@ -714,7 +714,7 @@ class Snowflake(Dialect):
|
|||
def _parse_file_location(self) -> t.Optional[exp.Expression]:
|
||||
# Parse either a subquery or a staged file
|
||||
return (
|
||||
self._parse_select(table=True)
|
||||
self._parse_select(table=True, parse_subquery_alias=False)
|
||||
if self._match(TokenType.L_PAREN, advance=False)
|
||||
else self._parse_table_parts()
|
||||
)
|
||||
|
|
|
@ -164,7 +164,7 @@ class Teradata(Dialect):
|
|||
}
|
||||
|
||||
def _parse_translate(self, strict: bool) -> exp.Expression:
|
||||
this = self._parse_conjunction()
|
||||
this = self._parse_assignment()
|
||||
|
||||
if not self._match(TokenType.USING):
|
||||
self.raise_error("Expected USING in TRANSLATE")
|
||||
|
@ -195,8 +195,8 @@ class Teradata(Dialect):
|
|||
this = self._parse_id_var()
|
||||
self._match(TokenType.BETWEEN)
|
||||
|
||||
expressions = self._parse_csv(self._parse_conjunction)
|
||||
each = self._match_text_seq("EACH") and self._parse_conjunction()
|
||||
expressions = self._parse_csv(self._parse_assignment)
|
||||
each = self._match_text_seq("EACH") and self._parse_assignment()
|
||||
|
||||
return self.expression(exp.RangeN, this=this, expressions=expressions, each=each)
|
||||
|
||||
|
|
|
@ -625,7 +625,7 @@ class TSQL(Dialect):
|
|||
) -> t.Optional[exp.Expression]:
|
||||
this = self._parse_types()
|
||||
self._match(TokenType.COMMA)
|
||||
args = [this, *self._parse_csv(self._parse_conjunction)]
|
||||
args = [this, *self._parse_csv(self._parse_assignment)]
|
||||
convert = exp.Convert.from_arg_list(args)
|
||||
convert.set("safe", safe)
|
||||
convert.set("strict", strict)
|
||||
|
|
|
@ -3977,6 +3977,7 @@ class DataType(Expression):
|
|||
IPV6 = auto()
|
||||
JSON = auto()
|
||||
JSONB = auto()
|
||||
LIST = auto()
|
||||
LONGBLOB = auto()
|
||||
LONGTEXT = auto()
|
||||
LOWCARDINALITY = auto()
|
||||
|
@ -4768,6 +4769,12 @@ class ToArray(Func):
|
|||
pass
|
||||
|
||||
|
||||
# https://materialize.com/docs/sql/types/list/
|
||||
class List(Func):
|
||||
arg_types = {"expressions": False}
|
||||
is_var_len_args = True
|
||||
|
||||
|
||||
# https://docs.snowflake.com/en/sql-reference/functions/to_char
|
||||
# https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/TO_CHAR-number.html
|
||||
class ToChar(Func):
|
||||
|
@ -5245,6 +5252,18 @@ class ToBase64(Func):
|
|||
pass
|
||||
|
||||
|
||||
class GapFill(Func):
|
||||
arg_types = {
|
||||
"this": True,
|
||||
"ts_column": True,
|
||||
"bucket_width": True,
|
||||
"partitioning_columns": False,
|
||||
"value_columns": False,
|
||||
"origin": False,
|
||||
"ignore_nulls": False,
|
||||
}
|
||||
|
||||
|
||||
class GenerateDateArray(Func):
|
||||
arg_types = {"start": True, "end": True, "interval": False}
|
||||
|
||||
|
@ -6175,6 +6194,8 @@ def _apply_child_list_builder(
|
|||
):
|
||||
instance = maybe_copy(instance, copy)
|
||||
parsed = []
|
||||
properties = {} if properties is None else properties
|
||||
|
||||
for expression in expressions:
|
||||
if expression is not None:
|
||||
if _is_wrong_expression(expression, into):
|
||||
|
@ -6187,14 +6208,18 @@ def _apply_child_list_builder(
|
|||
prefix=prefix,
|
||||
**opts,
|
||||
)
|
||||
parsed.extend(expression.expressions)
|
||||
for k, v in expression.args.items():
|
||||
if k == "expressions":
|
||||
parsed.extend(v)
|
||||
else:
|
||||
properties[k] = v
|
||||
|
||||
existing = instance.args.get(arg)
|
||||
if append and existing:
|
||||
parsed = existing.expressions + parsed
|
||||
|
||||
child = into(expressions=parsed)
|
||||
for k, v in (properties or {}).items():
|
||||
for k, v in properties.items():
|
||||
child.set(k, v)
|
||||
instance.set(arg, child)
|
||||
|
||||
|
|
|
@ -3955,3 +3955,8 @@ class Generator(metaclass=_Generator):
|
|||
expressions = self.expressions(expression, flat=True)
|
||||
expressions = f" USING ({expressions})" if expressions else ""
|
||||
return f"MASKING POLICY {this}{expressions}"
|
||||
|
||||
def gapfill_sql(self, expression: exp.GapFill) -> str:
|
||||
this = self.sql(expression, "this")
|
||||
this = f"TABLE {this}"
|
||||
return self.func("GAP_FILL", this, *[v for k, v in expression.args.items() if k != "this"])
|
||||
|
|
|
@ -36,7 +36,7 @@ def normalize(expression: exp.Expression, dnf: bool = False, max_distance: int =
|
|||
original = node.copy()
|
||||
|
||||
node.transform(rewrite_between, copy=False)
|
||||
distance = normalization_distance(node, dnf=dnf)
|
||||
distance = normalization_distance(node, dnf=dnf, max_=max_distance)
|
||||
|
||||
if distance > max_distance:
|
||||
logger.info(
|
||||
|
@ -85,7 +85,9 @@ def normalized(expression: exp.Expression, dnf: bool = False) -> bool:
|
|||
)
|
||||
|
||||
|
||||
def normalization_distance(expression: exp.Expression, dnf: bool = False) -> int:
|
||||
def normalization_distance(
|
||||
expression: exp.Expression, dnf: bool = False, max_: float = float("inf")
|
||||
) -> int:
|
||||
"""
|
||||
The difference in the number of predicates between a given expression and its normalized form.
|
||||
|
||||
|
@ -101,33 +103,47 @@ def normalization_distance(expression: exp.Expression, dnf: bool = False) -> int
|
|||
expression: The expression to compute the normalization distance for.
|
||||
dnf: Whether to check if the expression is in Disjunctive Normal Form (DNF).
|
||||
Default: False, i.e. we check if it's in Conjunctive Normal Form (CNF).
|
||||
max_: stop early if count exceeds this.
|
||||
|
||||
Returns:
|
||||
The normalization distance.
|
||||
"""
|
||||
return sum(_predicate_lengths(expression, dnf)) - (
|
||||
sum(1 for _ in expression.find_all(exp.Connector)) + 1
|
||||
)
|
||||
total = -(sum(1 for _ in expression.find_all(exp.Connector)) + 1)
|
||||
|
||||
for length in _predicate_lengths(expression, dnf, max_):
|
||||
total += length
|
||||
if total > max_:
|
||||
return total
|
||||
|
||||
return total
|
||||
|
||||
|
||||
def _predicate_lengths(expression, dnf):
|
||||
def _predicate_lengths(expression, dnf, max_=float("inf"), depth=0):
|
||||
"""
|
||||
Returns a list of predicate lengths when expanded to normalized form.
|
||||
|
||||
(A AND B) OR C -> [2, 2] because len(A OR C), len(B OR C).
|
||||
"""
|
||||
if depth > max_:
|
||||
yield depth
|
||||
return
|
||||
|
||||
expression = expression.unnest()
|
||||
|
||||
if not isinstance(expression, exp.Connector):
|
||||
return (1,)
|
||||
yield 1
|
||||
return
|
||||
|
||||
depth += 1
|
||||
left, right = expression.args.values()
|
||||
|
||||
if isinstance(expression, exp.And if dnf else exp.Or):
|
||||
return tuple(
|
||||
a + b for a in _predicate_lengths(left, dnf) for b in _predicate_lengths(right, dnf)
|
||||
)
|
||||
return _predicate_lengths(left, dnf) + _predicate_lengths(right, dnf)
|
||||
for a in _predicate_lengths(left, dnf, max_, depth):
|
||||
for b in _predicate_lengths(right, dnf, max_, depth):
|
||||
yield a + b
|
||||
else:
|
||||
yield from _predicate_lengths(left, dnf, max_, depth)
|
||||
yield from _predicate_lengths(right, dnf, max_, depth)
|
||||
|
||||
|
||||
def distributive_law(expression, dnf, max_distance):
|
||||
|
@ -138,7 +154,7 @@ def distributive_law(expression, dnf, max_distance):
|
|||
if normalized(expression, dnf=dnf):
|
||||
return expression
|
||||
|
||||
distance = normalization_distance(expression, dnf=dnf)
|
||||
distance = normalization_distance(expression, dnf=dnf, max_=max_distance)
|
||||
|
||||
if distance > max_distance:
|
||||
raise OptimizeError(f"Normalization distance {distance} exceeds max {max_distance}")
|
||||
|
|
|
@ -80,7 +80,7 @@ def qualify_columns(
|
|||
)
|
||||
qualify_outputs(scope)
|
||||
|
||||
_expand_group_by(scope)
|
||||
_expand_group_by(scope, dialect)
|
||||
_expand_order_by(scope, resolver)
|
||||
|
||||
if dialect == "bigquery":
|
||||
|
@ -266,13 +266,13 @@ def _expand_alias_refs(scope: Scope, resolver: Resolver) -> None:
|
|||
scope.clear_cache()
|
||||
|
||||
|
||||
def _expand_group_by(scope: Scope) -> None:
|
||||
def _expand_group_by(scope: Scope, dialect: DialectType) -> None:
|
||||
expression = scope.expression
|
||||
group = expression.args.get("group")
|
||||
if not group:
|
||||
return
|
||||
|
||||
group.set("expressions", _expand_positional_references(scope, group.expressions))
|
||||
group.set("expressions", _expand_positional_references(scope, group.expressions, dialect))
|
||||
expression.set("group", group)
|
||||
|
||||
|
||||
|
@ -284,7 +284,9 @@ def _expand_order_by(scope: Scope, resolver: Resolver) -> None:
|
|||
ordereds = order.expressions
|
||||
for ordered, new_expression in zip(
|
||||
ordereds,
|
||||
_expand_positional_references(scope, (o.this for o in ordereds), alias=True),
|
||||
_expand_positional_references(
|
||||
scope, (o.this for o in ordereds), resolver.schema.dialect, alias=True
|
||||
),
|
||||
):
|
||||
for agg in ordered.find_all(exp.AggFunc):
|
||||
for col in agg.find_all(exp.Column):
|
||||
|
@ -307,9 +309,11 @@ def _expand_order_by(scope: Scope, resolver: Resolver) -> None:
|
|||
|
||||
|
||||
def _expand_positional_references(
|
||||
scope: Scope, expressions: t.Iterable[exp.Expression], alias: bool = False
|
||||
scope: Scope, expressions: t.Iterable[exp.Expression], dialect: DialectType, alias: bool = False
|
||||
) -> t.List[exp.Expression]:
|
||||
new_nodes: t.List[exp.Expression] = []
|
||||
ambiguous_projections = None
|
||||
|
||||
for node in expressions:
|
||||
if node.is_int:
|
||||
select = _select_by_pos(scope, t.cast(exp.Literal, node))
|
||||
|
@ -319,7 +323,28 @@ def _expand_positional_references(
|
|||
else:
|
||||
select = select.this
|
||||
|
||||
if isinstance(select, exp.CONSTANTS) or select.find(exp.Explode, exp.Unnest):
|
||||
if dialect == "bigquery":
|
||||
if ambiguous_projections is None:
|
||||
# When a projection name is also a source name and it is referenced in the
|
||||
# GROUP BY clause, BQ can't understand what the identifier corresponds to
|
||||
ambiguous_projections = {
|
||||
s.alias_or_name
|
||||
for s in scope.expression.selects
|
||||
if s.alias_or_name in scope.selected_sources
|
||||
}
|
||||
|
||||
ambiguous = any(
|
||||
column.parts[0].name in ambiguous_projections
|
||||
for column in select.find_all(exp.Column)
|
||||
)
|
||||
else:
|
||||
ambiguous = False
|
||||
|
||||
if (
|
||||
isinstance(select, exp.CONSTANTS)
|
||||
or select.find(exp.Explode, exp.Unnest)
|
||||
or ambiguous
|
||||
):
|
||||
new_nodes.append(node)
|
||||
else:
|
||||
new_nodes.append(select.copy())
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
from __future__ import annotations
|
||||
|
||||
import datetime
|
||||
import logging
|
||||
import functools
|
||||
import itertools
|
||||
import typing as t
|
||||
from collections import deque
|
||||
from collections import deque, defaultdict
|
||||
from decimal import Decimal
|
||||
from functools import reduce
|
||||
|
||||
|
@ -20,6 +21,8 @@ if t.TYPE_CHECKING:
|
|||
[exp.Expression, datetime.date, str, Dialect, exp.DataType], t.Optional[exp.Expression]
|
||||
]
|
||||
|
||||
logger = logging.getLogger("sqlglot")
|
||||
|
||||
# Final means that an expression should not be simplified
|
||||
FINAL = "final"
|
||||
|
||||
|
@ -35,7 +38,10 @@ class UnsupportedUnit(Exception):
|
|||
|
||||
|
||||
def simplify(
|
||||
expression: exp.Expression, constant_propagation: bool = False, dialect: DialectType = None
|
||||
expression: exp.Expression,
|
||||
constant_propagation: bool = False,
|
||||
dialect: DialectType = None,
|
||||
max_depth: t.Optional[int] = None,
|
||||
):
|
||||
"""
|
||||
Rewrite sqlglot AST to simplify expressions.
|
||||
|
@ -47,9 +53,9 @@ def simplify(
|
|||
'TRUE'
|
||||
|
||||
Args:
|
||||
expression (sqlglot.Expression): expression to simplify
|
||||
expression: expression to simplify
|
||||
constant_propagation: whether the constant propagation rule should be used
|
||||
|
||||
max_depth: Chains of Connectors (AND, OR, etc) exceeding `max_depth` will be skipped
|
||||
Returns:
|
||||
sqlglot.Expression: simplified expression
|
||||
"""
|
||||
|
@ -57,6 +63,18 @@ def simplify(
|
|||
dialect = Dialect.get_or_raise(dialect)
|
||||
|
||||
def _simplify(expression, root=True):
|
||||
if (
|
||||
max_depth
|
||||
and isinstance(expression, exp.Connector)
|
||||
and not isinstance(expression.parent, exp.Connector)
|
||||
):
|
||||
depth = connector_depth(expression)
|
||||
if depth > max_depth:
|
||||
logger.info(
|
||||
f"Skipping simplification because connector depth {depth} exceeds max {max_depth}"
|
||||
)
|
||||
return expression
|
||||
|
||||
if expression.meta.get(FINAL):
|
||||
return expression
|
||||
|
||||
|
@ -118,6 +136,33 @@ def simplify(
|
|||
return expression
|
||||
|
||||
|
||||
def connector_depth(expression: exp.Expression) -> int:
|
||||
"""
|
||||
Determine the maximum depth of a tree of Connectors.
|
||||
|
||||
For example:
|
||||
>>> from sqlglot import parse_one
|
||||
>>> connector_depth(parse_one("a AND b AND c AND d"))
|
||||
3
|
||||
"""
|
||||
stack = deque([(expression, 0)])
|
||||
max_depth = 0
|
||||
|
||||
while stack:
|
||||
expression, depth = stack.pop()
|
||||
|
||||
if not isinstance(expression, exp.Connector):
|
||||
continue
|
||||
|
||||
depth += 1
|
||||
max_depth = max(depth, max_depth)
|
||||
|
||||
stack.append((expression.left, depth))
|
||||
stack.append((expression.right, depth))
|
||||
|
||||
return max_depth
|
||||
|
||||
|
||||
def catch(*exceptions):
|
||||
"""Decorator that ignores a simplification function if any of `exceptions` are raised"""
|
||||
|
||||
|
@ -280,6 +325,7 @@ INVERSE_COMPARISONS: t.Dict[t.Type[exp.Expression], t.Type[exp.Expression]] = {
|
|||
}
|
||||
|
||||
NONDETERMINISTIC = (exp.Rand, exp.Randn)
|
||||
AND_OR = (exp.And, exp.Or)
|
||||
|
||||
|
||||
def _simplify_comparison(expression, left, right, or_=False):
|
||||
|
@ -351,12 +397,12 @@ def remove_complements(expression, root=True):
|
|||
A AND NOT A -> FALSE
|
||||
A OR NOT A -> TRUE
|
||||
"""
|
||||
if isinstance(expression, exp.Connector) and (root or not expression.same_parent):
|
||||
complement = exp.false() if isinstance(expression, exp.And) else exp.true()
|
||||
if isinstance(expression, AND_OR) and (root or not expression.same_parent):
|
||||
ops = set(expression.flatten())
|
||||
for op in ops:
|
||||
if isinstance(op, exp.Not) and op.this in ops:
|
||||
return exp.false() if isinstance(expression, exp.And) else exp.true()
|
||||
|
||||
for a, b in itertools.permutations(expression.flatten(), 2):
|
||||
if is_complement(a, b):
|
||||
return complement
|
||||
return expression
|
||||
|
||||
|
||||
|
@ -404,31 +450,63 @@ def absorb_and_eliminate(expression, root=True):
|
|||
(A AND B) OR (A AND NOT B) -> A
|
||||
(A OR B) AND (A OR NOT B) -> A
|
||||
"""
|
||||
if isinstance(expression, exp.Connector) and (root or not expression.same_parent):
|
||||
if isinstance(expression, AND_OR) and (root or not expression.same_parent):
|
||||
kind = exp.Or if isinstance(expression, exp.And) else exp.And
|
||||
|
||||
for a, b in itertools.permutations(expression.flatten(), 2):
|
||||
if isinstance(a, kind):
|
||||
aa, ab = a.unnest_operands()
|
||||
ops = tuple(expression.flatten())
|
||||
|
||||
# absorb
|
||||
if is_complement(b, aa):
|
||||
aa.replace(exp.true() if kind == exp.And else exp.false())
|
||||
elif is_complement(b, ab):
|
||||
ab.replace(exp.true() if kind == exp.And else exp.false())
|
||||
elif (set(b.flatten()) if isinstance(b, kind) else {b}) < set(a.flatten()):
|
||||
a.replace(exp.false() if kind == exp.And else exp.true())
|
||||
elif isinstance(b, kind):
|
||||
# eliminate
|
||||
rhs = b.unnest_operands()
|
||||
ba, bb = rhs
|
||||
# Initialize lookup tables:
|
||||
# Set of all operands, used to find complements for absorption.
|
||||
op_set = set()
|
||||
# Sub-operands, used to find subsets for absorption.
|
||||
subops = defaultdict(list)
|
||||
# Pairs of complements, used for elimination.
|
||||
pairs = defaultdict(list)
|
||||
|
||||
if aa in rhs and (is_complement(ab, ba) or is_complement(ab, bb)):
|
||||
a.replace(aa)
|
||||
b.replace(aa)
|
||||
elif ab in rhs and (is_complement(aa, ba) or is_complement(aa, bb)):
|
||||
a.replace(ab)
|
||||
b.replace(ab)
|
||||
# Populate the lookup tables
|
||||
for op in ops:
|
||||
op_set.add(op)
|
||||
|
||||
if not isinstance(op, kind):
|
||||
# In cases like: A OR (A AND B)
|
||||
# Subop will be: ^
|
||||
subops[op].append({op})
|
||||
continue
|
||||
|
||||
# In cases like: (A AND B) OR (A AND B AND C)
|
||||
# Subops will be: ^ ^
|
||||
subset = set(op.flatten())
|
||||
for i in subset:
|
||||
subops[i].append(subset)
|
||||
|
||||
a, b = op.unnest_operands()
|
||||
if isinstance(a, exp.Not):
|
||||
pairs[frozenset((a.this, b))].append((op, b))
|
||||
if isinstance(b, exp.Not):
|
||||
pairs[frozenset((a, b.this))].append((op, a))
|
||||
|
||||
for op in ops:
|
||||
if not isinstance(op, kind):
|
||||
continue
|
||||
|
||||
a, b = op.unnest_operands()
|
||||
|
||||
# Absorb
|
||||
if isinstance(a, exp.Not) and a.this in op_set:
|
||||
a.replace(exp.true() if kind == exp.And else exp.false())
|
||||
continue
|
||||
if isinstance(b, exp.Not) and b.this in op_set:
|
||||
b.replace(exp.true() if kind == exp.And else exp.false())
|
||||
continue
|
||||
superset = set(op.flatten())
|
||||
if any(any(subset < superset for subset in subops[i]) for i in superset):
|
||||
op.replace(exp.false() if kind == exp.And else exp.true())
|
||||
continue
|
||||
|
||||
# Eliminate
|
||||
for other, complement in pairs[frozenset((a, b))]:
|
||||
op.replace(complement)
|
||||
other.replace(complement)
|
||||
|
||||
return expression
|
||||
|
||||
|
|
|
@ -193,6 +193,7 @@ class Parser(metaclass=_Parser):
|
|||
|
||||
NESTED_TYPE_TOKENS = {
|
||||
TokenType.ARRAY,
|
||||
TokenType.LIST,
|
||||
TokenType.LOWCARDINALITY,
|
||||
TokenType.MAP,
|
||||
TokenType.NULLABLE,
|
||||
|
@ -456,6 +457,11 @@ class Parser(metaclass=_Parser):
|
|||
|
||||
ALIAS_TOKENS = ID_VAR_TOKENS
|
||||
|
||||
ARRAY_CONSTRUCTORS = {
|
||||
"ARRAY": exp.Array,
|
||||
"LIST": exp.List,
|
||||
}
|
||||
|
||||
COMMENT_TABLE_ALIAS_TOKENS = TABLE_ALIAS_TOKENS - {TokenType.IS}
|
||||
|
||||
UPDATE_ALIAS_TOKENS = TABLE_ALIAS_TOKENS - {TokenType.SET}
|
||||
|
@ -504,8 +510,15 @@ class Parser(metaclass=_Parser):
|
|||
*SUBQUERY_PREDICATES,
|
||||
}
|
||||
|
||||
CONJUNCTION = {
|
||||
CONJUNCTION: t.Dict[TokenType, t.Type[exp.Expression]] = {
|
||||
TokenType.AND: exp.And,
|
||||
}
|
||||
|
||||
ASSIGNMENT: t.Dict[TokenType, t.Type[exp.Expression]] = {
|
||||
TokenType.COLON_EQ: exp.PropertyEQ,
|
||||
}
|
||||
|
||||
DISJUNCTION: t.Dict[TokenType, t.Type[exp.Expression]] = {
|
||||
TokenType.OR: exp.Or,
|
||||
}
|
||||
|
||||
|
@ -588,7 +601,7 @@ class Parser(metaclass=_Parser):
|
|||
TokenType.ARROW: lambda self, expressions: self.expression(
|
||||
exp.Lambda,
|
||||
this=self._replace_lambda(
|
||||
self._parse_conjunction(),
|
||||
self._parse_assignment(),
|
||||
expressions,
|
||||
),
|
||||
expressions=expressions,
|
||||
|
@ -596,7 +609,7 @@ class Parser(metaclass=_Parser):
|
|||
TokenType.FARROW: lambda self, expressions: self.expression(
|
||||
exp.Kwarg,
|
||||
this=exp.var(expressions[0].name),
|
||||
expression=self._parse_conjunction(),
|
||||
expression=self._parse_assignment(),
|
||||
),
|
||||
}
|
||||
|
||||
|
@ -639,7 +652,7 @@ class Parser(metaclass=_Parser):
|
|||
EXPRESSION_PARSERS = {
|
||||
exp.Cluster: lambda self: self._parse_sort(exp.Cluster, TokenType.CLUSTER_BY),
|
||||
exp.Column: lambda self: self._parse_column(),
|
||||
exp.Condition: lambda self: self._parse_conjunction(),
|
||||
exp.Condition: lambda self: self._parse_assignment(),
|
||||
exp.DataType: lambda self: self._parse_types(allow_identifiers=False),
|
||||
exp.Expression: lambda self: self._parse_expression(),
|
||||
exp.From: lambda self: self._parse_from(joins=True),
|
||||
|
@ -890,11 +903,11 @@ class Parser(metaclass=_Parser):
|
|||
),
|
||||
"CHECK": lambda self: self.expression(
|
||||
exp.CheckColumnConstraint,
|
||||
this=self._parse_wrapped(self._parse_conjunction),
|
||||
this=self._parse_wrapped(self._parse_assignment),
|
||||
enforced=self._match_text_seq("ENFORCED"),
|
||||
),
|
||||
"COLLATE": lambda self: self.expression(
|
||||
exp.CollateColumnConstraint, this=self._parse_var()
|
||||
exp.CollateColumnConstraint, this=self._parse_var(any_token=True)
|
||||
),
|
||||
"COMMENT": lambda self: self.expression(
|
||||
exp.CommentColumnConstraint, this=self._parse_string()
|
||||
|
@ -994,6 +1007,7 @@ class Parser(metaclass=_Parser):
|
|||
"CONVERT": lambda self: self._parse_convert(self.STRICT_CAST),
|
||||
"DECODE": lambda self: self._parse_decode(),
|
||||
"EXTRACT": lambda self: self._parse_extract(),
|
||||
"GAP_FILL": lambda self: self._parse_gap_fill(),
|
||||
"JSON_OBJECT": lambda self: self._parse_json_object(),
|
||||
"JSON_OBJECTAGG": lambda self: self._parse_json_object(agg=True),
|
||||
"JSON_TABLE": lambda self: self._parse_json_table(),
|
||||
|
@ -2191,7 +2205,7 @@ class Parser(metaclass=_Parser):
|
|||
|
||||
def _parse_partition_by(self) -> t.List[exp.Expression]:
|
||||
if self._match(TokenType.PARTITION_BY):
|
||||
return self._parse_csv(self._parse_conjunction)
|
||||
return self._parse_csv(self._parse_assignment)
|
||||
return []
|
||||
|
||||
def _parse_partition_bound_spec(self) -> exp.PartitionBoundSpec:
|
||||
|
@ -2408,8 +2422,7 @@ class Parser(metaclass=_Parser):
|
|||
stored=self._match_text_seq("STORED") and self._parse_stored(),
|
||||
by_name=self._match_text_seq("BY", "NAME"),
|
||||
exists=self._parse_exists(),
|
||||
where=self._match_pair(TokenType.REPLACE, TokenType.WHERE)
|
||||
and self._parse_conjunction(),
|
||||
where=self._match_pair(TokenType.REPLACE, TokenType.WHERE) and self._parse_assignment(),
|
||||
expression=self._parse_derived_table_values() or self._parse_ddl_select(),
|
||||
conflict=self._parse_on_conflict(),
|
||||
returning=returning or self._parse_returning(),
|
||||
|
@ -2619,7 +2632,7 @@ class Parser(metaclass=_Parser):
|
|||
return None
|
||||
|
||||
return self.expression(
|
||||
exp.Partition, expressions=self._parse_wrapped_csv(self._parse_conjunction)
|
||||
exp.Partition, expressions=self._parse_wrapped_csv(self._parse_assignment)
|
||||
)
|
||||
|
||||
def _parse_value(self) -> t.Optional[exp.Tuple]:
|
||||
|
@ -3115,7 +3128,7 @@ class Parser(metaclass=_Parser):
|
|||
kwargs["match_condition"] = self._parse_wrapped(self._parse_comparison)
|
||||
|
||||
if self._match(TokenType.ON):
|
||||
kwargs["on"] = self._parse_conjunction()
|
||||
kwargs["on"] = self._parse_assignment()
|
||||
elif self._match(TokenType.USING):
|
||||
kwargs["using"] = self._parse_wrapped_id_vars()
|
||||
elif not isinstance(kwargs["this"], exp.Unnest) and not (
|
||||
|
@ -3125,7 +3138,7 @@ class Parser(metaclass=_Parser):
|
|||
joins: t.Optional[list] = list(self._parse_joins())
|
||||
|
||||
if joins and self._match(TokenType.ON):
|
||||
kwargs["on"] = self._parse_conjunction()
|
||||
kwargs["on"] = self._parse_assignment()
|
||||
elif joins and self._match(TokenType.USING):
|
||||
kwargs["using"] = self._parse_wrapped_id_vars()
|
||||
else:
|
||||
|
@ -3138,7 +3151,7 @@ class Parser(metaclass=_Parser):
|
|||
return self.expression(exp.Join, comments=comments, **kwargs)
|
||||
|
||||
def _parse_opclass(self) -> t.Optional[exp.Expression]:
|
||||
this = self._parse_conjunction()
|
||||
this = self._parse_assignment()
|
||||
|
||||
if self._match_texts(self.OPCLASS_FOLLOW_KEYWORDS, advance=False):
|
||||
return this
|
||||
|
@ -3554,7 +3567,7 @@ class Parser(metaclass=_Parser):
|
|||
|
||||
def _parse_pivot_in(self) -> exp.In:
|
||||
def _parse_aliased_expression() -> t.Optional[exp.Expression]:
|
||||
this = self._parse_conjunction()
|
||||
this = self._parse_assignment()
|
||||
|
||||
self._match(TokenType.ALIAS)
|
||||
alias = self._parse_field()
|
||||
|
@ -3648,7 +3661,7 @@ class Parser(metaclass=_Parser):
|
|||
return None
|
||||
|
||||
return self.expression(
|
||||
exp.PreWhere, comments=self._prev_comments, this=self._parse_conjunction()
|
||||
exp.PreWhere, comments=self._prev_comments, this=self._parse_assignment()
|
||||
)
|
||||
|
||||
def _parse_where(self, skip_where_token: bool = False) -> t.Optional[exp.Where]:
|
||||
|
@ -3656,7 +3669,7 @@ class Parser(metaclass=_Parser):
|
|||
return None
|
||||
|
||||
return self.expression(
|
||||
exp.Where, comments=self._prev_comments, this=self._parse_conjunction()
|
||||
exp.Where, comments=self._prev_comments, this=self._parse_assignment()
|
||||
)
|
||||
|
||||
def _parse_group(self, skip_group_by_token: bool = False) -> t.Optional[exp.Group]:
|
||||
|
@ -3674,7 +3687,7 @@ class Parser(metaclass=_Parser):
|
|||
expressions = self._parse_csv(
|
||||
lambda: None
|
||||
if self._match(TokenType.ROLLUP, advance=False)
|
||||
else self._parse_conjunction()
|
||||
else self._parse_assignment()
|
||||
)
|
||||
if expressions:
|
||||
elements["expressions"].extend(expressions)
|
||||
|
@ -3725,18 +3738,18 @@ class Parser(metaclass=_Parser):
|
|||
def _parse_having(self, skip_having_token: bool = False) -> t.Optional[exp.Having]:
|
||||
if not skip_having_token and not self._match(TokenType.HAVING):
|
||||
return None
|
||||
return self.expression(exp.Having, this=self._parse_conjunction())
|
||||
return self.expression(exp.Having, this=self._parse_assignment())
|
||||
|
||||
def _parse_qualify(self) -> t.Optional[exp.Qualify]:
|
||||
if not self._match(TokenType.QUALIFY):
|
||||
return None
|
||||
return self.expression(exp.Qualify, this=self._parse_conjunction())
|
||||
return self.expression(exp.Qualify, this=self._parse_assignment())
|
||||
|
||||
def _parse_connect(self, skip_start_token: bool = False) -> t.Optional[exp.Connect]:
|
||||
if skip_start_token:
|
||||
start = None
|
||||
elif self._match(TokenType.START_WITH):
|
||||
start = self._parse_conjunction()
|
||||
start = self._parse_assignment()
|
||||
else:
|
||||
return None
|
||||
|
||||
|
@ -3745,11 +3758,11 @@ class Parser(metaclass=_Parser):
|
|||
self.NO_PAREN_FUNCTION_PARSERS["PRIOR"] = lambda self: self.expression(
|
||||
exp.Prior, this=self._parse_bitwise()
|
||||
)
|
||||
connect = self._parse_conjunction()
|
||||
connect = self._parse_assignment()
|
||||
self.NO_PAREN_FUNCTION_PARSERS.pop("PRIOR")
|
||||
|
||||
if not start and self._match(TokenType.START_WITH):
|
||||
start = self._parse_conjunction()
|
||||
start = self._parse_assignment()
|
||||
|
||||
return self.expression(exp.Connect, start=start, connect=connect, nocycle=nocycle)
|
||||
|
||||
|
@ -3757,7 +3770,7 @@ class Parser(metaclass=_Parser):
|
|||
return self.expression(
|
||||
exp.Alias,
|
||||
alias=self._parse_id_var(any_token=True),
|
||||
this=self._match(TokenType.ALIAS) and self._parse_conjunction(),
|
||||
this=self._match(TokenType.ALIAS) and self._parse_assignment(),
|
||||
)
|
||||
|
||||
def _parse_interpolate(self) -> t.Optional[t.List[exp.Expression]]:
|
||||
|
@ -3791,7 +3804,7 @@ class Parser(metaclass=_Parser):
|
|||
def _parse_ordered(
|
||||
self, parse_method: t.Optional[t.Callable] = None
|
||||
) -> t.Optional[exp.Ordered]:
|
||||
this = parse_method() if parse_method else self._parse_conjunction()
|
||||
this = parse_method() if parse_method else self._parse_assignment()
|
||||
if not this:
|
||||
return None
|
||||
|
||||
|
@ -3970,27 +3983,26 @@ class Parser(metaclass=_Parser):
|
|||
return this
|
||||
|
||||
def _parse_expression(self) -> t.Optional[exp.Expression]:
|
||||
return self._parse_alias(self._parse_conjunction())
|
||||
return self._parse_alias(self._parse_assignment())
|
||||
|
||||
def _parse_assignment(self) -> t.Optional[exp.Expression]:
|
||||
this = self._parse_disjunction()
|
||||
|
||||
while self._match_set(self.ASSIGNMENT):
|
||||
this = self.expression(
|
||||
self.ASSIGNMENT[self._prev.token_type],
|
||||
this=this,
|
||||
comments=self._prev_comments,
|
||||
expression=self._parse_assignment(),
|
||||
)
|
||||
|
||||
return this
|
||||
|
||||
def _parse_disjunction(self) -> t.Optional[exp.Expression]:
|
||||
return self._parse_tokens(self._parse_conjunction, self.DISJUNCTION)
|
||||
|
||||
def _parse_conjunction(self) -> t.Optional[exp.Expression]:
|
||||
this = self._parse_equality()
|
||||
|
||||
if self._match(TokenType.COLON_EQ):
|
||||
this = self.expression(
|
||||
exp.PropertyEQ,
|
||||
this=this,
|
||||
comments=self._prev_comments,
|
||||
expression=self._parse_conjunction(),
|
||||
)
|
||||
|
||||
while self._match_set(self.CONJUNCTION):
|
||||
this = self.expression(
|
||||
self.CONJUNCTION[self._prev.token_type],
|
||||
this=this,
|
||||
comments=self._prev_comments,
|
||||
expression=self._parse_equality(),
|
||||
)
|
||||
return this
|
||||
return self._parse_tokens(self._parse_equality, self.CONJUNCTION)
|
||||
|
||||
def _parse_equality(self) -> t.Optional[exp.Expression]:
|
||||
return self._parse_tokens(self._parse_comparison, self.EQUALITY)
|
||||
|
@ -4172,12 +4184,16 @@ class Parser(metaclass=_Parser):
|
|||
this = parse_method()
|
||||
|
||||
while self._match_set(self.FACTOR):
|
||||
this = self.expression(
|
||||
self.FACTOR[self._prev.token_type],
|
||||
this=this,
|
||||
comments=self._prev_comments,
|
||||
expression=parse_method(),
|
||||
)
|
||||
klass = self.FACTOR[self._prev.token_type]
|
||||
comments = self._prev_comments
|
||||
expression = parse_method()
|
||||
|
||||
if not expression and klass is exp.IntDiv and self._prev.text.isalpha():
|
||||
self._retreat(self._index - 1)
|
||||
return this
|
||||
|
||||
this = self.expression(klass, this=this, comments=comments, expression=expression)
|
||||
|
||||
if isinstance(this, exp.Div):
|
||||
this.args["typed"] = self.dialect.TYPED_DIVISION
|
||||
this.args["safe"] = self.dialect.SAFE_DIVISION
|
||||
|
@ -4291,6 +4307,29 @@ class Parser(metaclass=_Parser):
|
|||
if type_token == TokenType.OBJECT_IDENTIFIER:
|
||||
return self.expression(exp.ObjectIdentifier, this=self._prev.text.upper())
|
||||
|
||||
# https://materialize.com/docs/sql/types/map/
|
||||
if type_token == TokenType.MAP and self._match(TokenType.L_BRACKET):
|
||||
key_type = self._parse_types(
|
||||
check_func=check_func, schema=schema, allow_identifiers=allow_identifiers
|
||||
)
|
||||
if not self._match(TokenType.FARROW):
|
||||
self._retreat(index)
|
||||
return None
|
||||
|
||||
value_type = self._parse_types(
|
||||
check_func=check_func, schema=schema, allow_identifiers=allow_identifiers
|
||||
)
|
||||
if not self._match(TokenType.R_BRACKET):
|
||||
self._retreat(index)
|
||||
return None
|
||||
|
||||
return exp.DataType(
|
||||
this=exp.DataType.Type.MAP,
|
||||
expressions=[key_type, value_type],
|
||||
nested=True,
|
||||
prefix=prefix,
|
||||
)
|
||||
|
||||
nested = type_token in self.NESTED_TYPE_TOKENS
|
||||
is_struct = type_token in self.STRUCT_TYPE_TOKENS
|
||||
is_aggregate = type_token in self.AGGREGATE_TYPE_TOKENS
|
||||
|
@ -4345,7 +4384,7 @@ class Parser(metaclass=_Parser):
|
|||
self.raise_error("Expecting >")
|
||||
|
||||
if self._match_set((TokenType.L_BRACKET, TokenType.L_PAREN)):
|
||||
values = self._parse_csv(self._parse_conjunction)
|
||||
values = self._parse_csv(self._parse_assignment)
|
||||
self._match_set((TokenType.R_BRACKET, TokenType.R_PAREN))
|
||||
|
||||
if type_token in self.TIMESTAMPS:
|
||||
|
@ -4400,6 +4439,10 @@ class Parser(metaclass=_Parser):
|
|||
elif expressions:
|
||||
this.set("expressions", expressions)
|
||||
|
||||
# https://materialize.com/docs/sql/types/list/#type-name
|
||||
while self._match(TokenType.LIST):
|
||||
this = exp.DataType(this=exp.DataType.Type.LIST, expressions=[this], nested=True)
|
||||
|
||||
index = self._index
|
||||
|
||||
# Postgres supports the INT ARRAY[3] syntax as a synonym for INT[3]
|
||||
|
@ -4411,7 +4454,7 @@ class Parser(metaclass=_Parser):
|
|||
break
|
||||
|
||||
matched_array = False
|
||||
values = self._parse_csv(self._parse_conjunction) or None
|
||||
values = self._parse_csv(self._parse_assignment) or None
|
||||
if values and not schema:
|
||||
self._retreat(index)
|
||||
break
|
||||
|
@ -4818,7 +4861,7 @@ class Parser(metaclass=_Parser):
|
|||
|
||||
if self._match(TokenType.DISTINCT):
|
||||
this = self.expression(
|
||||
exp.Distinct, expressions=self._parse_csv(self._parse_conjunction)
|
||||
exp.Distinct, expressions=self._parse_csv(self._parse_assignment)
|
||||
)
|
||||
else:
|
||||
this = self._parse_select_or_expression(alias=alias)
|
||||
|
@ -4863,7 +4906,7 @@ class Parser(metaclass=_Parser):
|
|||
constraints.append(
|
||||
self.expression(
|
||||
exp.ComputedColumnConstraint,
|
||||
this=self._parse_conjunction(),
|
||||
this=self._parse_assignment(),
|
||||
persisted=persisted or self._match_text_seq("PERSISTED"),
|
||||
not_null=self._match_pair(TokenType.NOT, TokenType.NULL),
|
||||
)
|
||||
|
@ -5153,7 +5196,7 @@ class Parser(metaclass=_Parser):
|
|||
return self.expression(exp.PrimaryKey, expressions=expressions, options=options)
|
||||
|
||||
def _parse_bracket_key_value(self, is_map: bool = False) -> t.Optional[exp.Expression]:
|
||||
return self._parse_slice(self._parse_alias(self._parse_conjunction(), explicit=True))
|
||||
return self._parse_slice(self._parse_alias(self._parse_assignment(), explicit=True))
|
||||
|
||||
def _parse_bracket(self, this: t.Optional[exp.Expression] = None) -> t.Optional[exp.Expression]:
|
||||
if not self._match_set((TokenType.L_BRACKET, TokenType.L_BRACE)):
|
||||
|
@ -5172,9 +5215,13 @@ class Parser(metaclass=_Parser):
|
|||
# https://duckdb.org/docs/sql/data_types/struct.html#creating-structs
|
||||
if bracket_kind == TokenType.L_BRACE:
|
||||
this = self.expression(exp.Struct, expressions=self._kv_to_prop_eq(expressions))
|
||||
elif not this or this.name.upper() == "ARRAY":
|
||||
elif not this:
|
||||
this = self.expression(exp.Array, expressions=expressions)
|
||||
else:
|
||||
constructor_type = self.ARRAY_CONSTRUCTORS.get(this.name.upper())
|
||||
if constructor_type:
|
||||
return self.expression(constructor_type, expressions=expressions)
|
||||
|
||||
expressions = apply_index_offset(this, expressions, -self.dialect.INDEX_OFFSET)
|
||||
this = self.expression(exp.Bracket, this=this, expressions=expressions)
|
||||
|
||||
|
@ -5183,7 +5230,7 @@ class Parser(metaclass=_Parser):
|
|||
|
||||
def _parse_slice(self, this: t.Optional[exp.Expression]) -> t.Optional[exp.Expression]:
|
||||
if self._match(TokenType.COLON):
|
||||
return self.expression(exp.Slice, this=this, expression=self._parse_conjunction())
|
||||
return self.expression(exp.Slice, this=this, expression=self._parse_assignment())
|
||||
return this
|
||||
|
||||
def _parse_case(self) -> t.Optional[exp.Expression]:
|
||||
|
@ -5191,16 +5238,16 @@ class Parser(metaclass=_Parser):
|
|||
default = None
|
||||
|
||||
comments = self._prev_comments
|
||||
expression = self._parse_conjunction()
|
||||
expression = self._parse_assignment()
|
||||
|
||||
while self._match(TokenType.WHEN):
|
||||
this = self._parse_conjunction()
|
||||
this = self._parse_assignment()
|
||||
self._match(TokenType.THEN)
|
||||
then = self._parse_conjunction()
|
||||
then = self._parse_assignment()
|
||||
ifs.append(self.expression(exp.If, this=this, true=then))
|
||||
|
||||
if self._match(TokenType.ELSE):
|
||||
default = self._parse_conjunction()
|
||||
default = self._parse_assignment()
|
||||
|
||||
if not self._match(TokenType.END):
|
||||
if isinstance(default, exp.Interval) and default.this.sql().upper() == "END":
|
||||
|
@ -5214,7 +5261,7 @@ class Parser(metaclass=_Parser):
|
|||
|
||||
def _parse_if(self) -> t.Optional[exp.Expression]:
|
||||
if self._match(TokenType.L_PAREN):
|
||||
args = self._parse_csv(self._parse_conjunction)
|
||||
args = self._parse_csv(self._parse_assignment)
|
||||
this = self.validate_expression(exp.If.from_arg_list(args), args)
|
||||
self._match_r_paren()
|
||||
else:
|
||||
|
@ -5223,15 +5270,15 @@ class Parser(metaclass=_Parser):
|
|||
if self.NO_PAREN_IF_COMMANDS and index == 0:
|
||||
return self._parse_as_command(self._prev)
|
||||
|
||||
condition = self._parse_conjunction()
|
||||
condition = self._parse_assignment()
|
||||
|
||||
if not condition:
|
||||
self._retreat(index)
|
||||
return None
|
||||
|
||||
self._match(TokenType.THEN)
|
||||
true = self._parse_conjunction()
|
||||
false = self._parse_conjunction() if self._match(TokenType.ELSE) else None
|
||||
true = self._parse_assignment()
|
||||
false = self._parse_assignment() if self._match(TokenType.ELSE) else None
|
||||
self._match(TokenType.END)
|
||||
this = self.expression(exp.If, this=condition, true=true, false=false)
|
||||
|
||||
|
@ -5259,8 +5306,18 @@ class Parser(metaclass=_Parser):
|
|||
|
||||
return self.expression(exp.Extract, this=this, expression=self._parse_bitwise())
|
||||
|
||||
def _parse_gap_fill(self) -> exp.GapFill:
|
||||
self._match(TokenType.TABLE)
|
||||
this = self._parse_table()
|
||||
|
||||
self._match(TokenType.COMMA)
|
||||
args = [this, *self._parse_csv(self._parse_lambda)]
|
||||
|
||||
gap_fill = exp.GapFill.from_arg_list(args)
|
||||
return self.validate_expression(gap_fill, args)
|
||||
|
||||
def _parse_cast(self, strict: bool, safe: t.Optional[bool] = None) -> exp.Expression:
|
||||
this = self._parse_conjunction()
|
||||
this = self._parse_assignment()
|
||||
|
||||
if not self._match(TokenType.ALIAS):
|
||||
if self._match(TokenType.COMMA):
|
||||
|
@ -5313,12 +5370,12 @@ class Parser(metaclass=_Parser):
|
|||
def _parse_string_agg(self) -> exp.Expression:
|
||||
if self._match(TokenType.DISTINCT):
|
||||
args: t.List[t.Optional[exp.Expression]] = [
|
||||
self.expression(exp.Distinct, expressions=[self._parse_conjunction()])
|
||||
self.expression(exp.Distinct, expressions=[self._parse_assignment()])
|
||||
]
|
||||
if self._match(TokenType.COMMA):
|
||||
args.extend(self._parse_csv(self._parse_conjunction))
|
||||
args.extend(self._parse_csv(self._parse_assignment))
|
||||
else:
|
||||
args = self._parse_csv(self._parse_conjunction) # type: ignore
|
||||
args = self._parse_csv(self._parse_assignment) # type: ignore
|
||||
|
||||
index = self._index
|
||||
if not self._match(TokenType.R_PAREN) and args:
|
||||
|
@ -5365,7 +5422,7 @@ class Parser(metaclass=_Parser):
|
|||
needs special treatment, since we need to explicitly check for it with `IS NULL`,
|
||||
instead of relying on pattern matching.
|
||||
"""
|
||||
args = self._parse_csv(self._parse_conjunction)
|
||||
args = self._parse_csv(self._parse_assignment)
|
||||
|
||||
if len(args) < 3:
|
||||
return self.expression(exp.Decode, this=seq_get(args, 0), charset=seq_get(args, 1))
|
||||
|
@ -5965,7 +6022,7 @@ class Parser(metaclass=_Parser):
|
|||
|
||||
def _parse_select_or_expression(self, alias: bool = False) -> t.Optional[exp.Expression]:
|
||||
return self._parse_select() or self._parse_set_operations(
|
||||
self._parse_expression() if alias else self._parse_conjunction()
|
||||
self._parse_expression() if alias else self._parse_assignment()
|
||||
)
|
||||
|
||||
def _parse_ddl_select(self) -> t.Optional[exp.Expression]:
|
||||
|
@ -6077,7 +6134,7 @@ class Parser(metaclass=_Parser):
|
|||
if self._match_pair(TokenType.DROP, TokenType.DEFAULT):
|
||||
return self.expression(exp.AlterColumn, this=column, drop=True)
|
||||
if self._match_pair(TokenType.SET, TokenType.DEFAULT):
|
||||
return self.expression(exp.AlterColumn, this=column, default=self._parse_conjunction())
|
||||
return self.expression(exp.AlterColumn, this=column, default=self._parse_assignment())
|
||||
if self._match(TokenType.COMMENT):
|
||||
return self.expression(exp.AlterColumn, this=column, comment=self._parse_string())
|
||||
if self._match_text_seq("DROP", "NOT", "NULL"):
|
||||
|
@ -6100,7 +6157,7 @@ class Parser(metaclass=_Parser):
|
|||
this=column,
|
||||
dtype=self._parse_types(),
|
||||
collate=self._match(TokenType.COLLATE) and self._parse_term(),
|
||||
using=self._match(TokenType.USING) and self._parse_conjunction(),
|
||||
using=self._match(TokenType.USING) and self._parse_assignment(),
|
||||
)
|
||||
|
||||
def _parse_alter_diststyle(self) -> exp.AlterDistStyle:
|
||||
|
@ -6155,9 +6212,9 @@ class Parser(metaclass=_Parser):
|
|||
if self._match(TokenType.L_PAREN, advance=False) or self._match_text_seq(
|
||||
"TABLE", "PROPERTIES"
|
||||
):
|
||||
alter_set.set("expressions", self._parse_wrapped_csv(self._parse_conjunction))
|
||||
alter_set.set("expressions", self._parse_wrapped_csv(self._parse_assignment))
|
||||
elif self._match_text_seq("FILESTREAM_ON", advance=False):
|
||||
alter_set.set("expressions", [self._parse_conjunction()])
|
||||
alter_set.set("expressions", [self._parse_assignment()])
|
||||
elif self._match_texts(("LOGGED", "UNLOGGED")):
|
||||
alter_set.set("option", exp.var(self._prev.text.upper()))
|
||||
elif self._match_text_seq("WITHOUT") and self._match_texts(("CLUSTER", "OIDS")):
|
||||
|
@ -6175,7 +6232,7 @@ class Parser(metaclass=_Parser):
|
|||
elif self._match_text_seq("STAGE_COPY_OPTIONS"):
|
||||
alter_set.set("copy_options", self._parse_wrapped_options())
|
||||
elif self._match_text_seq("TAG") or self._match_text_seq("TAGS"):
|
||||
alter_set.set("tag", self._parse_csv(self._parse_conjunction))
|
||||
alter_set.set("tag", self._parse_csv(self._parse_assignment))
|
||||
else:
|
||||
if self._match_text_seq("SERDE"):
|
||||
alter_set.set("serde", self._parse_field())
|
||||
|
@ -6227,7 +6284,7 @@ class Parser(metaclass=_Parser):
|
|||
using = self._parse_table()
|
||||
|
||||
self._match(TokenType.ON)
|
||||
on = self._parse_conjunction()
|
||||
on = self._parse_assignment()
|
||||
|
||||
return self.expression(
|
||||
exp.Merge,
|
||||
|
@ -6248,7 +6305,7 @@ class Parser(metaclass=_Parser):
|
|||
if self._match_text_seq("BY", "TARGET")
|
||||
else self._match_text_seq("BY", "SOURCE")
|
||||
)
|
||||
condition = self._parse_conjunction() if self._match(TokenType.AND) else None
|
||||
condition = self._parse_assignment() if self._match(TokenType.AND) else None
|
||||
|
||||
self._match(TokenType.THEN)
|
||||
|
||||
|
@ -6428,7 +6485,7 @@ class Parser(metaclass=_Parser):
|
|||
self._retreat(index - 1)
|
||||
return None
|
||||
iterator = self._parse_column()
|
||||
condition = self._parse_conjunction() if self._match_text_seq("IF") else None
|
||||
condition = self._parse_assignment() if self._match_text_seq("IF") else None
|
||||
return self.expression(
|
||||
exp.Comprehension,
|
||||
this=this,
|
||||
|
|
|
@ -294,6 +294,7 @@ class TokenType(AutoName):
|
|||
LIKE = auto()
|
||||
LIKE_ANY = auto()
|
||||
LIMIT = auto()
|
||||
LIST = auto()
|
||||
LOAD = auto()
|
||||
LOCK = auto()
|
||||
MAP = auto()
|
||||
|
@ -813,6 +814,7 @@ class Tokenizer(metaclass=_Tokenizer):
|
|||
"DECIMAL": TokenType.DECIMAL,
|
||||
"BIGDECIMAL": TokenType.BIGDECIMAL,
|
||||
"BIGNUMERIC": TokenType.BIGDECIMAL,
|
||||
"LIST": TokenType.LIST,
|
||||
"MAP": TokenType.MAP,
|
||||
"NULLABLE": TokenType.NULLABLE,
|
||||
"NUMBER": TokenType.DECIMAL,
|
||||
|
|
|
@ -1269,7 +1269,7 @@ LANGUAGE js AS
|
|||
"SELECT REGEXP_EXTRACT(abc, 'pattern(group)') FROM table",
|
||||
write={
|
||||
"bigquery": "SELECT REGEXP_EXTRACT(abc, 'pattern(group)') FROM table",
|
||||
"duckdb": "SELECT REGEXP_EXTRACT(abc, 'pattern(group)', 1) FROM table",
|
||||
"duckdb": '''SELECT REGEXP_EXTRACT(abc, 'pattern(group)', 1) FROM "table"''',
|
||||
},
|
||||
)
|
||||
self.validate_all(
|
||||
|
@ -1524,6 +1524,26 @@ WHERE
|
|||
"SELECT cola FROM (SELECT CAST('1' AS STRING) AS cola UNION ALL SELECT CAST('2' AS STRING) AS cola)",
|
||||
)
|
||||
|
||||
def test_gap_fill(self):
|
||||
self.validate_identity(
|
||||
"SELECT * FROM GAP_FILL(TABLE device_data, ts_column => 'time', bucket_width => INTERVAL '1' MINUTE, value_columns => [('signal', 'locf')]) ORDER BY time"
|
||||
)
|
||||
self.validate_identity(
|
||||
"SELECT a, b, c, d, e FROM GAP_FILL(TABLE foo, ts_column => 'b', partitioning_columns => ['a'], value_columns => [('c', 'bar'), ('d', 'baz'), ('e', 'bla')], bucket_width => INTERVAL '1' DAY)"
|
||||
)
|
||||
self.validate_identity(
|
||||
"SELECT * FROM GAP_FILL(TABLE device_data, ts_column => 'time', bucket_width => INTERVAL '1' MINUTE, value_columns => [('signal', 'linear')], ignore_null_values => FALSE) ORDER BY time"
|
||||
)
|
||||
self.validate_identity(
|
||||
"SELECT * FROM GAP_FILL(TABLE device_data, ts_column => 'time', bucket_width => INTERVAL '1' MINUTE) ORDER BY time"
|
||||
)
|
||||
self.validate_identity(
|
||||
"SELECT * FROM GAP_FILL(TABLE device_data, ts_column => 'time', bucket_width => INTERVAL '1' MINUTE, value_columns => [('signal', 'null')], origin => CAST('2023-11-01 09:30:01' AS DATETIME)) ORDER BY time"
|
||||
)
|
||||
self.validate_identity(
|
||||
"SELECT * FROM GAP_FILL(TABLE (SELECT * FROM UNNEST(ARRAY<STRUCT<device_id INT64, time DATETIME, signal INT64, state STRING>>[STRUCT(1, CAST('2023-11-01 09:34:01' AS DATETIME), 74, 'INACTIVE'), STRUCT(2, CAST('2023-11-01 09:36:00' AS DATETIME), 77, 'ACTIVE'), STRUCT(3, CAST('2023-11-01 09:37:00' AS DATETIME), 78, 'ACTIVE'), STRUCT(4, CAST('2023-11-01 09:38:01' AS DATETIME), 80, 'ACTIVE')])), ts_column => 'time', bucket_width => INTERVAL '1' MINUTE, value_columns => [('signal', 'linear')]) ORDER BY time"
|
||||
)
|
||||
|
||||
def test_models(self):
|
||||
self.validate_identity(
|
||||
"SELECT * FROM ML.PREDICT(MODEL mydataset.mymodel, (SELECT label, column1, column2 FROM mydataset.mytable))"
|
||||
|
|
|
@ -155,6 +155,7 @@ class TestDialect(Validator):
|
|||
"clickhouse": "CAST(a AS String)",
|
||||
"drill": "CAST(a AS VARCHAR)",
|
||||
"duckdb": "CAST(a AS TEXT)",
|
||||
"materialize": "CAST(a AS TEXT)",
|
||||
"mysql": "CAST(a AS CHAR)",
|
||||
"hive": "CAST(a AS STRING)",
|
||||
"oracle": "CAST(a AS CLOB)",
|
||||
|
@ -175,6 +176,7 @@ class TestDialect(Validator):
|
|||
"clickhouse": "CAST(a AS BINARY(4))",
|
||||
"drill": "CAST(a AS VARBINARY(4))",
|
||||
"duckdb": "CAST(a AS BLOB(4))",
|
||||
"materialize": "CAST(a AS BYTEA(4))",
|
||||
"mysql": "CAST(a AS BINARY(4))",
|
||||
"hive": "CAST(a AS BINARY(4))",
|
||||
"oracle": "CAST(a AS BLOB(4))",
|
||||
|
@ -193,6 +195,7 @@ class TestDialect(Validator):
|
|||
"bigquery": "CAST(a AS BYTES)",
|
||||
"clickhouse": "CAST(a AS String)",
|
||||
"duckdb": "CAST(a AS BLOB(4))",
|
||||
"materialize": "CAST(a AS BYTEA(4))",
|
||||
"mysql": "CAST(a AS VARBINARY(4))",
|
||||
"hive": "CAST(a AS BINARY(4))",
|
||||
"oracle": "CAST(a AS BLOB(4))",
|
||||
|
@ -236,6 +239,7 @@ class TestDialect(Validator):
|
|||
"bigquery": "CAST(a AS STRING)",
|
||||
"drill": "CAST(a AS VARCHAR)",
|
||||
"duckdb": "CAST(a AS TEXT)",
|
||||
"materialize": "CAST(a AS TEXT)",
|
||||
"mysql": "CAST(a AS CHAR)",
|
||||
"hive": "CAST(a AS STRING)",
|
||||
"oracle": "CAST(a AS CLOB)",
|
||||
|
@ -255,6 +259,7 @@ class TestDialect(Validator):
|
|||
"bigquery": "CAST(a AS STRING)",
|
||||
"drill": "CAST(a AS VARCHAR)",
|
||||
"duckdb": "CAST(a AS TEXT)",
|
||||
"materialize": "CAST(a AS VARCHAR)",
|
||||
"mysql": "CAST(a AS CHAR)",
|
||||
"hive": "CAST(a AS STRING)",
|
||||
"oracle": "CAST(a AS VARCHAR2)",
|
||||
|
@ -274,6 +279,7 @@ class TestDialect(Validator):
|
|||
"bigquery": "CAST(a AS STRING)",
|
||||
"drill": "CAST(a AS VARCHAR(3))",
|
||||
"duckdb": "CAST(a AS TEXT(3))",
|
||||
"materialize": "CAST(a AS VARCHAR(3))",
|
||||
"mysql": "CAST(a AS CHAR(3))",
|
||||
"hive": "CAST(a AS VARCHAR(3))",
|
||||
"oracle": "CAST(a AS VARCHAR2(3))",
|
||||
|
@ -293,6 +299,7 @@ class TestDialect(Validator):
|
|||
"bigquery": "CAST(a AS INT64)",
|
||||
"drill": "CAST(a AS INTEGER)",
|
||||
"duckdb": "CAST(a AS SMALLINT)",
|
||||
"materialize": "CAST(a AS SMALLINT)",
|
||||
"mysql": "CAST(a AS SIGNED)",
|
||||
"hive": "CAST(a AS SMALLINT)",
|
||||
"oracle": "CAST(a AS NUMBER)",
|
||||
|
@ -328,6 +335,7 @@ class TestDialect(Validator):
|
|||
"clickhouse": "CAST(a AS Float64)",
|
||||
"drill": "CAST(a AS DOUBLE)",
|
||||
"duckdb": "CAST(a AS DOUBLE)",
|
||||
"materialize": "CAST(a AS DOUBLE PRECISION)",
|
||||
"mysql": "CAST(a AS DOUBLE)",
|
||||
"hive": "CAST(a AS DOUBLE)",
|
||||
"oracle": "CAST(a AS DOUBLE PRECISION)",
|
||||
|
@ -599,6 +607,7 @@ class TestDialect(Validator):
|
|||
"drill": "TO_TIMESTAMP(x, 'yy')",
|
||||
"duckdb": "STRPTIME(x, '%y')",
|
||||
"hive": "CAST(FROM_UNIXTIME(UNIX_TIMESTAMP(x, 'yy')) AS TIMESTAMP)",
|
||||
"materialize": "TO_TIMESTAMP(x, 'YY')",
|
||||
"presto": "DATE_PARSE(x, '%y')",
|
||||
"oracle": "TO_TIMESTAMP(x, 'YY')",
|
||||
"postgres": "TO_TIMESTAMP(x, 'YY')",
|
||||
|
@ -655,6 +664,7 @@ class TestDialect(Validator):
|
|||
"drill": "TO_CHAR(x, 'yyyy-MM-dd')",
|
||||
"duckdb": "STRFTIME(x, '%Y-%m-%d')",
|
||||
"hive": "DATE_FORMAT(x, 'yyyy-MM-dd')",
|
||||
"materialize": "TO_CHAR(x, 'YYYY-MM-DD')",
|
||||
"oracle": "TO_CHAR(x, 'YYYY-MM-DD')",
|
||||
"postgres": "TO_CHAR(x, 'YYYY-MM-DD')",
|
||||
"presto": "DATE_FORMAT(x, '%Y-%m-%d')",
|
||||
|
@ -698,6 +708,7 @@ class TestDialect(Validator):
|
|||
"bigquery": "CAST(x AS DATE)",
|
||||
"duckdb": "CAST(x AS DATE)",
|
||||
"hive": "TO_DATE(x)",
|
||||
"materialize": "CAST(x AS DATE)",
|
||||
"postgres": "CAST(x AS DATE)",
|
||||
"presto": "CAST(CAST(x AS TIMESTAMP) AS DATE)",
|
||||
"snowflake": "TO_DATE(x)",
|
||||
|
@ -730,6 +741,7 @@ class TestDialect(Validator):
|
|||
"duckdb": "TO_TIMESTAMP(x)",
|
||||
"hive": "FROM_UNIXTIME(x)",
|
||||
"oracle": "TO_DATE('1970-01-01', 'YYYY-MM-DD') + (x / 86400)",
|
||||
"materialize": "TO_TIMESTAMP(x)",
|
||||
"postgres": "TO_TIMESTAMP(x)",
|
||||
"presto": "FROM_UNIXTIME(x)",
|
||||
"starrocks": "FROM_UNIXTIME(x)",
|
||||
|
@ -790,6 +802,7 @@ class TestDialect(Validator):
|
|||
"drill": "DATE_ADD(x, INTERVAL 1 DAY)",
|
||||
"duckdb": "x + INTERVAL 1 DAY",
|
||||
"hive": "DATE_ADD(x, 1)",
|
||||
"materialize": "x + INTERVAL '1 DAY'",
|
||||
"mysql": "DATE_ADD(x, INTERVAL 1 DAY)",
|
||||
"postgres": "x + INTERVAL '1 DAY'",
|
||||
"presto": "DATE_ADD('DAY', 1, x)",
|
||||
|
@ -826,6 +839,7 @@ class TestDialect(Validator):
|
|||
"duckdb": "DATE_TRUNC('DAY', x)",
|
||||
"mysql": "DATE(x)",
|
||||
"presto": "DATE_TRUNC('DAY', x)",
|
||||
"materialize": "DATE_TRUNC('DAY', x)",
|
||||
"postgres": "DATE_TRUNC('DAY', x)",
|
||||
"snowflake": "DATE_TRUNC('DAY', x)",
|
||||
"starrocks": "DATE_TRUNC('DAY', x)",
|
||||
|
@ -838,6 +852,7 @@ class TestDialect(Validator):
|
|||
read={
|
||||
"bigquery": "TIMESTAMP_TRUNC(x, day)",
|
||||
"duckdb": "DATE_TRUNC('day', x)",
|
||||
"materialize": "DATE_TRUNC('day', x)",
|
||||
"presto": "DATE_TRUNC('day', x)",
|
||||
"postgres": "DATE_TRUNC('day', x)",
|
||||
"snowflake": "DATE_TRUNC('day', x)",
|
||||
|
@ -899,6 +914,7 @@ class TestDialect(Validator):
|
|||
},
|
||||
write={
|
||||
"bigquery": "DATE_TRUNC(x, YEAR)",
|
||||
"materialize": "DATE_TRUNC('YEAR', x)",
|
||||
"mysql": "STR_TO_DATE(CONCAT(YEAR(x), ' 1 1'), '%Y %c %e')",
|
||||
"postgres": "DATE_TRUNC('YEAR', x)",
|
||||
"snowflake": "DATE_TRUNC('YEAR', x)",
|
||||
|
@ -911,6 +927,7 @@ class TestDialect(Validator):
|
|||
"TIMESTAMP_TRUNC(x, YEAR)",
|
||||
read={
|
||||
"bigquery": "TIMESTAMP_TRUNC(x, year)",
|
||||
"materialize": "DATE_TRUNC('YEAR', x)",
|
||||
"postgres": "DATE_TRUNC(year, x)",
|
||||
"spark": "DATE_TRUNC('year', x)",
|
||||
"snowflake": "DATE_TRUNC(year, x)",
|
||||
|
@ -1024,6 +1041,7 @@ class TestDialect(Validator):
|
|||
write={
|
||||
"": "TIMESTAMP_TRUNC(x, DAY, 'UTC')",
|
||||
"duckdb": "DATE_TRUNC('DAY', x)",
|
||||
"materialize": "DATE_TRUNC('DAY', x, 'UTC')",
|
||||
"presto": "DATE_TRUNC('DAY', x)",
|
||||
"postgres": "DATE_TRUNC('DAY', x, 'UTC')",
|
||||
"snowflake": "DATE_TRUNC('DAY', x)",
|
||||
|
@ -1485,21 +1503,21 @@ class TestDialect(Validator):
|
|||
"snowflake": "x ILIKE '%y'",
|
||||
},
|
||||
write={
|
||||
"bigquery": "LOWER(x) LIKE '%y'",
|
||||
"bigquery": "LOWER(x) LIKE LOWER('%y')",
|
||||
"clickhouse": "x ILIKE '%y'",
|
||||
"drill": "x `ILIKE` '%y'",
|
||||
"duckdb": "x ILIKE '%y'",
|
||||
"hive": "LOWER(x) LIKE '%y'",
|
||||
"mysql": "LOWER(x) LIKE '%y'",
|
||||
"oracle": "LOWER(x) LIKE '%y'",
|
||||
"hive": "LOWER(x) LIKE LOWER('%y')",
|
||||
"mysql": "LOWER(x) LIKE LOWER('%y')",
|
||||
"oracle": "LOWER(x) LIKE LOWER('%y')",
|
||||
"postgres": "x ILIKE '%y'",
|
||||
"presto": "LOWER(x) LIKE '%y'",
|
||||
"presto": "LOWER(x) LIKE LOWER('%y')",
|
||||
"snowflake": "x ILIKE '%y'",
|
||||
"spark": "x ILIKE '%y'",
|
||||
"sqlite": "LOWER(x) LIKE '%y'",
|
||||
"starrocks": "LOWER(x) LIKE '%y'",
|
||||
"trino": "LOWER(x) LIKE '%y'",
|
||||
"doris": "LOWER(x) LIKE '%y'",
|
||||
"sqlite": "LOWER(x) LIKE LOWER('%y')",
|
||||
"starrocks": "LOWER(x) LIKE LOWER('%y')",
|
||||
"trino": "LOWER(x) LIKE LOWER('%y')",
|
||||
"doris": "LOWER(x) LIKE LOWER('%y')",
|
||||
},
|
||||
)
|
||||
self.validate_all(
|
||||
|
@ -2530,7 +2548,7 @@ FROM subquery2""",
|
|||
def test_reserved_keywords(self):
|
||||
order = exp.select("*").from_("order")
|
||||
|
||||
for dialect in ("presto", "redshift"):
|
||||
for dialect in ("duckdb", "presto", "redshift"):
|
||||
dialect = Dialect.get_or_raise(dialect)
|
||||
self.assertEqual(
|
||||
order.sql(dialect=dialect),
|
||||
|
|
|
@ -48,6 +48,14 @@ class TestDoris(Validator):
|
|||
"postgres": """SELECT JSON_EXTRACT_PATH(CAST('{"key": 1}' AS JSONB), 'key')""",
|
||||
},
|
||||
)
|
||||
self.validate_all(
|
||||
"SELECT GROUP_CONCAT('aa', ',')",
|
||||
read={
|
||||
"doris": "SELECT GROUP_CONCAT('aa', ',')",
|
||||
"mysql": "SELECT GROUP_CONCAT('aa' SEPARATOR ',')",
|
||||
"postgres": "SELECT STRING_AGG('aa', ',')",
|
||||
},
|
||||
)
|
||||
|
||||
def test_identity(self):
|
||||
self.validate_identity("COALECSE(a, b, c, d)")
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
from sqlglot import ErrorLevel, UnsupportedError, exp, parse_one, transpile
|
||||
from sqlglot import ErrorLevel, ParseError, UnsupportedError, exp, parse_one, transpile
|
||||
from sqlglot.helper import logger as helper_logger
|
||||
from sqlglot.optimizer.annotate_types import annotate_types
|
||||
from tests.dialects.test_dialect import Validator
|
||||
|
@ -8,6 +8,9 @@ class TestDuckDB(Validator):
|
|||
dialect = "duckdb"
|
||||
|
||||
def test_duckdb(self):
|
||||
with self.assertRaises(ParseError):
|
||||
parse_one("1 //", read="duckdb")
|
||||
|
||||
query = "WITH _data AS (SELECT [{'a': 1, 'b': 2}, {'a': 2, 'b': 3}] AS col) SELECT t.col['b'] FROM _data, UNNEST(_data.col) AS t(col) WHERE t.col['a'] = 1"
|
||||
expr = annotate_types(self.validate_identity(query))
|
||||
self.assertEqual(
|
||||
|
@ -15,6 +18,13 @@ class TestDuckDB(Validator):
|
|||
"WITH _data AS (SELECT [STRUCT(1 AS a, 2 AS b), STRUCT(2 AS a, 3 AS b)] AS col) SELECT col.b FROM _data, UNNEST(_data.col) AS col WHERE col.a = 1",
|
||||
)
|
||||
|
||||
self.validate_all(
|
||||
"SELECT CAST('2020-01-01 12:05:01' AS TIMESTAMP)",
|
||||
read={
|
||||
"duckdb": "SELECT CAST('2020-01-01 12:05:01' AS TIMESTAMP)",
|
||||
"snowflake": "SELECT CAST('2020-01-01 12:05:01' AS TIMESTAMPNTZ)",
|
||||
},
|
||||
)
|
||||
self.validate_all(
|
||||
"SELECT CAST('2020-01-01' AS DATE) + INTERVAL (day_offset) DAY FROM t",
|
||||
read={
|
||||
|
@ -247,7 +257,7 @@ class TestDuckDB(Validator):
|
|||
self.validate_identity("SELECT EPOCH_MS(10) AS t")
|
||||
self.validate_identity("SELECT MAKE_TIMESTAMP(10) AS t")
|
||||
self.validate_identity("SELECT TO_TIMESTAMP(10) AS t")
|
||||
self.validate_identity("SELECT UNNEST(column, recursive := TRUE) FROM table")
|
||||
self.validate_identity("SELECT UNNEST(col, recursive := TRUE) FROM t")
|
||||
self.validate_identity("VAR_POP(a)")
|
||||
self.validate_identity("SELECT * FROM foo ASOF LEFT JOIN bar ON a = b")
|
||||
self.validate_identity("PIVOT Cities ON Year USING SUM(Population)")
|
||||
|
@ -271,6 +281,10 @@ class TestDuckDB(Validator):
|
|||
self.validate_identity(
|
||||
"SELECT * FROM x LEFT JOIN UNNEST(y)", "SELECT * FROM x LEFT JOIN UNNEST(y) ON TRUE"
|
||||
)
|
||||
self.validate_identity(
|
||||
"SELECT a, LOGICAL_OR(b) FROM foo GROUP BY a",
|
||||
"SELECT a, BOOL_OR(b) FROM foo GROUP BY a",
|
||||
)
|
||||
self.validate_identity(
|
||||
"SELECT JSON_EXTRACT_STRING(c, '$.k1') = 'v1'",
|
||||
"SELECT (c ->> '$.k1') = 'v1'",
|
||||
|
@ -424,15 +438,15 @@ class TestDuckDB(Validator):
|
|||
write={"duckdb": 'WITH "x" AS (SELECT 1) SELECT * FROM x'},
|
||||
)
|
||||
self.validate_all(
|
||||
"CREATE TABLE IF NOT EXISTS table (cola INT, colb STRING) USING ICEBERG PARTITIONED BY (colb)",
|
||||
"CREATE TABLE IF NOT EXISTS t (cola INT, colb STRING) USING ICEBERG PARTITIONED BY (colb)",
|
||||
write={
|
||||
"duckdb": "CREATE TABLE IF NOT EXISTS table (cola INT, colb TEXT)",
|
||||
"duckdb": "CREATE TABLE IF NOT EXISTS t (cola INT, colb TEXT)",
|
||||
},
|
||||
)
|
||||
self.validate_all(
|
||||
"CREATE TABLE IF NOT EXISTS table (cola INT COMMENT 'cola', colb STRING) USING ICEBERG PARTITIONED BY (colb)",
|
||||
"CREATE TABLE IF NOT EXISTS t (cola INT COMMENT 'cola', colb STRING) USING ICEBERG PARTITIONED BY (colb)",
|
||||
write={
|
||||
"duckdb": "CREATE TABLE IF NOT EXISTS table (cola INT, colb TEXT)",
|
||||
"duckdb": "CREATE TABLE IF NOT EXISTS t (cola INT, colb TEXT)",
|
||||
},
|
||||
)
|
||||
self.validate_all(
|
||||
|
@ -1086,12 +1100,6 @@ class TestDuckDB(Validator):
|
|||
},
|
||||
)
|
||||
|
||||
def test_bool_or(self):
|
||||
self.validate_all(
|
||||
"SELECT a, LOGICAL_OR(b) FROM table GROUP BY a",
|
||||
write={"duckdb": "SELECT a, BOOL_OR(b) FROM table GROUP BY a"},
|
||||
)
|
||||
|
||||
def test_encode_decode(self):
|
||||
self.validate_all(
|
||||
"ENCODE(x)",
|
||||
|
|
|
@ -744,6 +744,16 @@ class TestHive(Validator):
|
|||
"hive": "SELECT a, SUM(c) FROM t GROUP BY a, DATE_FORMAT(CAST(b AS TIMESTAMP), 'yyyy'), GROUPING SETS ((a, DATE_FORMAT(CAST(b AS TIMESTAMP), 'yyyy')), a)",
|
||||
},
|
||||
)
|
||||
self.validate_all(
|
||||
"SELECT TRUNC(CAST(ds AS TIMESTAMP), 'MONTH') AS mm FROM tbl WHERE ds BETWEEN '2023-10-01' AND '2024-02-29'",
|
||||
read={
|
||||
"hive": "SELECT TRUNC(CAST(ds AS TIMESTAMP), 'MONTH') AS mm FROM tbl WHERE ds BETWEEN '2023-10-01' AND '2024-02-29'",
|
||||
"presto": "SELECT DATE_TRUNC('MONTH', CAST(ds AS TIMESTAMP)) AS mm FROM tbl WHERE ds BETWEEN '2023-10-01' AND '2024-02-29'",
|
||||
},
|
||||
write={
|
||||
"presto": "SELECT DATE_TRUNC('MONTH', TRY_CAST(ds AS TIMESTAMP)) AS mm FROM tbl WHERE ds BETWEEN '2023-10-01' AND '2024-02-29'",
|
||||
},
|
||||
)
|
||||
|
||||
def test_escapes(self) -> None:
|
||||
self.validate_identity("'\n'", "'\\n'")
|
||||
|
|
77
tests/dialects/test_materialize.py
Normal file
77
tests/dialects/test_materialize.py
Normal file
|
@ -0,0 +1,77 @@
|
|||
from tests.dialects.test_dialect import Validator
|
||||
|
||||
|
||||
class TestMaterialize(Validator):
|
||||
dialect = "materialize"
|
||||
|
||||
def test_materialize(self):
|
||||
self.validate_all(
|
||||
"CREATE TABLE example (id INT PRIMARY KEY, name TEXT)",
|
||||
write={
|
||||
"materialize": "CREATE TABLE example (id INT, name TEXT)",
|
||||
"postgres": "CREATE TABLE example (id INT PRIMARY KEY, name TEXT)",
|
||||
},
|
||||
)
|
||||
self.validate_all(
|
||||
"INSERT INTO example (id, name) VALUES (1, 'Alice') ON CONFLICT(id) DO NOTHING",
|
||||
write={
|
||||
"materialize": "INSERT INTO example (id, name) VALUES (1, 'Alice')",
|
||||
"postgres": "INSERT INTO example (id, name) VALUES (1, 'Alice') ON CONFLICT(id) DO NOTHING",
|
||||
},
|
||||
)
|
||||
self.validate_all(
|
||||
"CREATE TABLE example (id SERIAL, name TEXT)",
|
||||
write={
|
||||
"materialize": "CREATE TABLE example (id INT NOT NULL, name TEXT)",
|
||||
"postgres": "CREATE TABLE example (id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL, name TEXT)",
|
||||
},
|
||||
)
|
||||
self.validate_all(
|
||||
"CREATE TABLE example (id INT AUTO_INCREMENT, name TEXT)",
|
||||
write={
|
||||
"materialize": "CREATE TABLE example (id INT NOT NULL, name TEXT)",
|
||||
"postgres": "CREATE TABLE example (id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL, name TEXT)",
|
||||
},
|
||||
)
|
||||
self.validate_all(
|
||||
'SELECT JSON_EXTRACT_PATH_TEXT(\'{ "farm": {"barn": { "color": "red", "feed stocked": true }}}\', \'farm\', \'barn\', \'color\')',
|
||||
write={
|
||||
"materialize": 'SELECT JSON_EXTRACT_PATH_TEXT(\'{ "farm": {"barn": { "color": "red", "feed stocked": true }}}\', \'farm\', \'barn\', \'color\')',
|
||||
"postgres": 'SELECT JSON_EXTRACT_PATH_TEXT(\'{ "farm": {"barn": { "color": "red", "feed stocked": true }}}\', \'farm\', \'barn\', \'color\')',
|
||||
},
|
||||
)
|
||||
self.validate_all(
|
||||
"SELECT MAP['a' => 1]",
|
||||
write={
|
||||
"duckdb": "SELECT MAP {'a': 1}",
|
||||
"materialize": "SELECT MAP['a' => 1]",
|
||||
},
|
||||
)
|
||||
|
||||
# Test now functions.
|
||||
self.validate_identity("CURRENT_TIMESTAMP")
|
||||
self.validate_identity("NOW()", write_sql="CURRENT_TIMESTAMP")
|
||||
self.validate_identity("MZ_NOW()")
|
||||
|
||||
# Test custom timestamp type.
|
||||
self.validate_identity("SELECT CAST(1 AS mz_timestamp)")
|
||||
|
||||
# Test DDL.
|
||||
self.validate_identity("CREATE TABLE example (id INT, name LIST)")
|
||||
|
||||
# Test list types.
|
||||
self.validate_identity("SELECT LIST[]")
|
||||
self.validate_identity("SELECT LIST[1, 2, 3]")
|
||||
self.validate_identity("SELECT LIST[LIST[1], LIST[2], NULL]")
|
||||
self.validate_identity("SELECT CAST(LIST[1, 2, 3] AS INT LIST)")
|
||||
self.validate_identity("SELECT CAST(NULL AS INT LIST)")
|
||||
self.validate_identity("SELECT CAST(NULL AS INT LIST LIST LIST)")
|
||||
self.validate_identity("SELECT LIST(SELECT 1)")
|
||||
|
||||
# Test map types.
|
||||
self.validate_identity("SELECT MAP[]")
|
||||
self.validate_identity("SELECT MAP['a' => MAP['b' => 'c']]")
|
||||
self.validate_identity("SELECT CAST(MAP['a' => 1] AS MAP[TEXT => INT])")
|
||||
self.validate_identity("SELECT CAST(NULL AS MAP[TEXT => INT])")
|
||||
self.validate_identity("SELECT CAST(NULL AS MAP[TEXT => MAP[TEXT => INT]])")
|
||||
self.validate_identity("SELECT MAP(SELECT 'a', 1)")
|
|
@ -222,6 +222,9 @@ class TestMySQL(Validator):
|
|||
self.validate_identity("CHAR(77, 121, 83, 81, '76')")
|
||||
self.validate_identity("CHAR(77, 77.3, '77.3' USING utf8mb4)")
|
||||
self.validate_identity("SELECT * FROM t1 PARTITION(p0)")
|
||||
self.validate_identity("SELECT @var1 := 1, @var2")
|
||||
self.validate_identity("SELECT @var1, @var2 := @var1")
|
||||
self.validate_identity("SELECT @var1 := COUNT(*) FROM t1")
|
||||
|
||||
def test_types(self):
|
||||
for char_type in MySQL.Generator.CHAR_CAST_MAPPING:
|
||||
|
|
|
@ -8,6 +8,9 @@ class TestPostgres(Validator):
|
|||
dialect = "postgres"
|
||||
|
||||
def test_postgres(self):
|
||||
self.validate_identity(
|
||||
'CREATE TABLE x (a TEXT COLLATE "de_DE")', "CREATE TABLE x (a TEXT COLLATE de_DE)"
|
||||
)
|
||||
self.validate_identity("1.x", "1. AS x")
|
||||
self.validate_identity("|/ x", "SQRT(x)")
|
||||
self.validate_identity("||/ x", "CBRT(x)")
|
||||
|
|
|
@ -6,6 +6,7 @@ class TestRedshift(Validator):
|
|||
dialect = "redshift"
|
||||
|
||||
def test_redshift(self):
|
||||
self.validate_identity("1 div", "1 AS div")
|
||||
self.validate_all(
|
||||
"SELECT SPLIT_TO_ARRAY('12,345,6789')",
|
||||
write={
|
||||
|
|
14
tests/dialects/test_risingwave.py
Normal file
14
tests/dialects/test_risingwave.py
Normal file
|
@ -0,0 +1,14 @@
|
|||
from tests.dialects.test_dialect import Validator
|
||||
|
||||
|
||||
class TestRisingWave(Validator):
|
||||
dialect = "risingwave"
|
||||
maxDiff = None
|
||||
|
||||
def test_risingwave(self):
|
||||
self.validate_all(
|
||||
"SELECT a FROM tbl",
|
||||
read={
|
||||
"": "SELECT a FROM tbl FOR UPDATE",
|
||||
},
|
||||
)
|
|
@ -1934,6 +1934,9 @@ STORAGE_ALLOWED_LOCATIONS=('s3://mybucket1/path1/', 's3://mybucket2/path2/')""",
|
|||
self.validate_identity(
|
||||
"""COPY INTO mytable (col1, col2) FROM 's3://mybucket/data/files' STORAGE_INTEGRATION = "storage" ENCRYPTION = (TYPE='NONE' MASTER_KEY='key') FILES = ('file1', 'file2') PATTERN = 'pattern' FILE_FORMAT = (FORMAT_NAME=my_csv_format NULL_IF=('')) PARSE_HEADER = TRUE"""
|
||||
)
|
||||
self.validate_identity(
|
||||
"""COPY INTO @my_stage/result/data FROM (SELECT * FROM orderstiny) FILE_FORMAT = (TYPE='csv')"""
|
||||
)
|
||||
self.validate_all(
|
||||
"""COPY INTO 's3://example/data.csv'
|
||||
FROM EXTRA.EXAMPLE.TABLE
|
||||
|
|
4
tests/fixtures/optimizer/qualify_columns.sql
vendored
4
tests/fixtures/optimizer/qualify_columns.sql
vendored
|
@ -131,6 +131,10 @@ SELECT DATE(x.a) AS _col_0, DATE(x.b) AS c FROM x AS x GROUP BY DATE(x.a), DATE(
|
|||
SELECT (SELECT MIN(a) FROM UNNEST([1, 2])) AS f FROM x GROUP BY 1;
|
||||
SELECT (SELECT MIN(_q_0.a) AS _col_0 FROM UNNEST(ARRAY(1, 2)) AS _q_0) AS f FROM x AS x GROUP BY 1;
|
||||
|
||||
# dialect: bigquery
|
||||
WITH x AS (select 'a' as a, 1 as b) SELECT x.a AS c, y.a as d, SUM(x.b) AS y, FROM x join x as y on x.a = y.a group by 1, 2;
|
||||
WITH x AS (SELECT 'a' AS a, 1 AS b) SELECT x.a AS c, y.a AS d, SUM(x.b) AS y FROM x AS x JOIN x AS y ON x.a = y.a GROUP BY x.a, 2;
|
||||
|
||||
SELECT SUM(x.a) AS c FROM x JOIN y ON x.b = y.b GROUP BY c;
|
||||
SELECT SUM(x.a) AS c FROM x AS x JOIN y AS y ON x.b = y.b GROUP BY y.c;
|
||||
|
||||
|
|
18
tests/fixtures/optimizer/simplify.sql
vendored
18
tests/fixtures/optimizer/simplify.sql
vendored
|
@ -113,6 +113,9 @@ a AND b;
|
|||
A XOR A;
|
||||
FALSE;
|
||||
|
||||
TRUE AND TRUE OR TRUE AND FALSE;
|
||||
TRUE;
|
||||
|
||||
--------------------------------------
|
||||
-- Absorption
|
||||
--------------------------------------
|
||||
|
@ -158,6 +161,12 @@ A OR C;
|
|||
A AND (B AND C) AND (D AND E);
|
||||
A AND B AND C AND D AND E;
|
||||
|
||||
A AND (A OR B) AND (A OR B OR C);
|
||||
A;
|
||||
|
||||
(A OR B) AND (A OR C) AND (A OR B OR C);
|
||||
(A OR B) AND (A OR C);
|
||||
|
||||
--------------------------------------
|
||||
-- Elimination
|
||||
--------------------------------------
|
||||
|
@ -194,6 +203,15 @@ NOT A;
|
|||
E OR (A AND B) OR C OR D OR (A AND NOT B);
|
||||
A OR C OR D OR E;
|
||||
|
||||
(A AND B) OR (A AND NOT B) OR (A AND NOT B);
|
||||
A;
|
||||
|
||||
(A AND B) OR (A AND B) OR (A AND NOT B);
|
||||
A;
|
||||
|
||||
(A AND B) OR (A AND NOT B) OR (A AND B) OR (A AND NOT B);
|
||||
A;
|
||||
|
||||
--------------------------------------
|
||||
-- Associativity
|
||||
--------------------------------------
|
||||
|
|
|
@ -160,6 +160,10 @@ class TestBuild(unittest.TestCase):
|
|||
lambda: select("x", "y", "z", "a").from_("tbl").group_by("x, y", "z").group_by("a"),
|
||||
"SELECT x, y, z, a FROM tbl GROUP BY x, y, z, a",
|
||||
),
|
||||
(
|
||||
lambda: select(1).from_("tbl").group_by("x with cube"),
|
||||
"SELECT 1 FROM tbl GROUP BY x WITH CUBE",
|
||||
),
|
||||
(
|
||||
lambda: select("x").distinct("a", "b").from_("tbl"),
|
||||
"SELECT DISTINCT ON (a, b) x FROM tbl",
|
||||
|
|
|
@ -10,6 +10,7 @@ import sqlglot
|
|||
from sqlglot import exp, optimizer, parse_one
|
||||
from sqlglot.errors import OptimizeError, SchemaError
|
||||
from sqlglot.optimizer.annotate_types import annotate_types
|
||||
from sqlglot.optimizer.normalize import normalization_distance
|
||||
from sqlglot.optimizer.scope import build_scope, traverse_scope, walk_in_scope
|
||||
from sqlglot.schema import MappingSchema
|
||||
from tests.helpers import (
|
||||
|
@ -1214,3 +1215,11 @@ FROM READ_CSV('tests/fixtures/optimizer/tpc-h/nation.csv.gz', 'delimiter', '|')
|
|||
query = parse_one("select a.b:c from d", read="snowflake")
|
||||
qualified = optimizer.qualify.qualify(query)
|
||||
self.assertEqual(qualified.expressions[0].alias, "c")
|
||||
|
||||
def test_normalization_distance(self):
|
||||
def gen_expr(depth: int) -> exp.Expression:
|
||||
return parse_one(" OR ".join("a AND b" for _ in range(depth)))
|
||||
|
||||
self.assertEqual(4, normalization_distance(gen_expr(2), max_=100))
|
||||
self.assertEqual(18, normalization_distance(gen_expr(3), max_=100))
|
||||
self.assertEqual(110, normalization_distance(gen_expr(10), max_=100))
|
||||
|
|
Loading…
Add table
Reference in a new issue