sqlglotc 30.21.0__tar.gz → 30.23.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sqlglotc-30.21.0/sqlglotc.egg-info → sqlglotc-30.23.0}/PKG-INFO +3 -3
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/pyproject.toml +2 -2
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/setup.py +0 -1
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/anonymize.py +1 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/expressions/array.py +15 -1
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/expressions/builders.py +55 -6
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/expressions/constraints.py +1 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/expressions/core.py +13 -3
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/expressions/ddl.py +3 -1
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/expressions/json.py +1 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/expressions/properties.py +20 -5
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/expressions/query.py +37 -3
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/expressions/string.py +4 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generator.py +127 -34
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/athena.py +5 -1
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/bigquery.py +4 -2
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/clickhouse.py +53 -1
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/doris.py +7 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/dremio.py +1 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/drill.py +7 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/duckdb.py +85 -11
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/hive.py +1 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/materialize.py +6 -1
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/mysql.py +25 -1
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/oracle.py +23 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/postgres.py +15 -1
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/presto.py +11 -1
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/redshift.py +8 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/risingwave.py +2 -1
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/singlestore.py +5 -1
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/snowflake.py +5 -48
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/spark2.py +2 -1
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/sqlite.py +2 -1
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/starrocks.py +29 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/teradata.py +19 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/trino.py +1 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/tsql.py +12 -4
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/lineage.py +19 -6
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/optimizer/qualify.py +0 -3
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/optimizer/qualify_columns.py +96 -25
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/optimizer/qualify_tables.py +36 -9
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/optimizer/resolver.py +29 -25
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/optimizer/scope.py +31 -13
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/optimizer/simplify.py +9 -2
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parser.py +275 -87
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/athena.py +8 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/clickhouse.py +19 -1
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/doris.py +43 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/duckdb.py +10 -2
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/mysql.py +43 -5
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/oracle.py +77 -2
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/postgres.py +4 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/snowflake.py +11 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/spark.py +4 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/spark2.py +13 -5
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/starrocks.py +75 -1
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/teradata.py +44 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/trino.py +25 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/tsql.py +72 -2
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/tokenizer_core.py +101 -20
- {sqlglotc-30.21.0 → sqlglotc-30.23.0/sqlglotc.egg-info}/PKG-INFO +3 -3
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglotc.egg-info/SOURCES.txt +0 -1
- sqlglotc-30.23.0/sqlglotc.egg-info/requires.txt +6 -0
- sqlglotc-30.23.0/sqlglotc.egg-info/scm_version.json +8 -0
- sqlglotc-30.21.0/sqlglot/schema.py +0 -813
- sqlglotc-30.21.0/sqlglotc.egg-info/requires.txt +0 -6
- sqlglotc-30.21.0/sqlglotc.egg-info/scm_version.json +0 -8
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/MANIFEST.in +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/setup.cfg +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/errors.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/executor/table.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/expressions/aggregate.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/expressions/datatypes.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/expressions/dml.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/expressions/functions.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/expressions/math.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/expressions/temporal.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/databricks.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/dax.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/druid.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/dune.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/exasol.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/fabric.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/prql.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/python.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/solr.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/spark.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/generators/tableau.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/helper.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/optimizer/annotate_types.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/optimizer/canonicalize_internal_names.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/optimizer/isolate_table_selects.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/optimizer/normalize_identifiers.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/base.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/bigquery.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/databricks.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/dax.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/dremio.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/drill.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/druid.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/dune.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/exasol.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/fabric.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/hive.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/materialize.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/presto.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/prql.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/redshift.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/risingwave.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/singlestore.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/solr.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/sqlite.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/parsers/tableau.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/serde.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/time.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglot/trie.py +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglotc.egg-info/dependency_links.txt +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglotc.egg-info/scm_file_list.json +0 -0
- {sqlglotc-30.21.0 → sqlglotc-30.23.0}/sqlglotc.egg-info/top_level.txt +0 -0
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sqlglotc
|
|
3
|
-
Version: 30.
|
|
3
|
+
Version: 30.23.0
|
|
4
4
|
Summary: mypyc-compiled extensions for sqlglot
|
|
5
5
|
Author-email: Toby Mao <toby.mao@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
7
7
|
Project-URL: Homepage, https://sqlglot.com/
|
|
8
8
|
Project-URL: Repository, https://github.com/tobymao/sqlglot
|
|
9
9
|
Requires-Python: >=3.10
|
|
10
|
-
Requires-Dist: sqlglot==30.
|
|
10
|
+
Requires-Dist: sqlglot==30.23.0
|
|
11
11
|
Provides-Extra: dev
|
|
12
12
|
Requires-Dist: setuptools>=61.0; extra == "dev"
|
|
13
13
|
Requires-Dist: setuptools_scm; extra == "dev"
|
|
14
|
-
Requires-Dist:
|
|
14
|
+
Requires-Dist: mypy>=2.4.0; extra == "dev"
|
|
15
15
|
Dynamic: requires-dist
|
|
@@ -7,7 +7,7 @@ license = "MIT"
|
|
|
7
7
|
requires-python = ">= 3.10"
|
|
8
8
|
|
|
9
9
|
[project.optional-dependencies]
|
|
10
|
-
dev = ["setuptools >= 61.0", "setuptools_scm", "
|
|
10
|
+
dev = ["setuptools >= 61.0", "setuptools_scm", "mypy >= 2.4.0"]
|
|
11
11
|
|
|
12
12
|
[project.urls]
|
|
13
13
|
Homepage = "https://sqlglot.com/"
|
|
@@ -17,7 +17,7 @@ Repository = "https://github.com/tobymao/sqlglot"
|
|
|
17
17
|
requires = [
|
|
18
18
|
"setuptools >= 61.0",
|
|
19
19
|
"setuptools_scm",
|
|
20
|
-
"
|
|
20
|
+
"mypy >= 2.4.0",
|
|
21
21
|
"types-python-dateutil",
|
|
22
22
|
"sqlglot",
|
|
23
23
|
]
|
|
@@ -23,6 +23,7 @@ class Array(Expression, Func):
|
|
|
23
23
|
"expressions": False,
|
|
24
24
|
"bracket_notation": False,
|
|
25
25
|
"struct_name_inheritance": False,
|
|
26
|
+
"value_constructor": False,
|
|
26
27
|
}
|
|
27
28
|
is_var_len_args = True
|
|
28
29
|
|
|
@@ -84,7 +85,16 @@ class ArrayReverse(Expression, Func):
|
|
|
84
85
|
|
|
85
86
|
|
|
86
87
|
class ArraySlice(Expression, Func):
|
|
87
|
-
|
|
88
|
+
"""Slice by end index, or by length when is_length is set."""
|
|
89
|
+
|
|
90
|
+
arg_types = {
|
|
91
|
+
"this": True,
|
|
92
|
+
"start": True,
|
|
93
|
+
"end": False,
|
|
94
|
+
"step": False,
|
|
95
|
+
"zero_based": False,
|
|
96
|
+
"is_length": False,
|
|
97
|
+
}
|
|
88
98
|
|
|
89
99
|
|
|
90
100
|
class ArraySort(Expression, Func):
|
|
@@ -244,6 +254,10 @@ class Inline(Expression, Func, UDTF):
|
|
|
244
254
|
pass
|
|
245
255
|
|
|
246
256
|
|
|
257
|
+
class SplitToTable(Expression, Func, UDTF):
|
|
258
|
+
arg_types = {"this": True, "expression": True}
|
|
259
|
+
|
|
260
|
+
|
|
247
261
|
class Stack(Expression, Func, UDTF):
|
|
248
262
|
arg_types = {"this": True, "expressions": True}
|
|
249
263
|
is_var_len_args = True
|
|
@@ -10,14 +10,25 @@ from sqlglot.errors import ParseError, TokenError
|
|
|
10
10
|
from sqlglot.expressions.core import (
|
|
11
11
|
Alias,
|
|
12
12
|
Anonymous,
|
|
13
|
+
AtTimeZone,
|
|
14
|
+
Between,
|
|
15
|
+
Binary,
|
|
16
|
+
BitwiseNot,
|
|
13
17
|
Boolean,
|
|
18
|
+
Bracket,
|
|
14
19
|
Column,
|
|
15
20
|
Condition,
|
|
21
|
+
Dot,
|
|
16
22
|
EQ,
|
|
17
23
|
Expr,
|
|
24
|
+
Func,
|
|
18
25
|
Identifier,
|
|
26
|
+
In,
|
|
19
27
|
Literal,
|
|
28
|
+
Neg,
|
|
29
|
+
Not,
|
|
20
30
|
Null,
|
|
31
|
+
Paren,
|
|
21
32
|
Placeholder,
|
|
22
33
|
TABLE_PARTS,
|
|
23
34
|
Var,
|
|
@@ -36,6 +47,8 @@ from sqlglot.expressions.query import (
|
|
|
36
47
|
From,
|
|
37
48
|
Schema,
|
|
38
49
|
Select,
|
|
50
|
+
SetOperation,
|
|
51
|
+
Subquery,
|
|
39
52
|
Table,
|
|
40
53
|
TableAlias,
|
|
41
54
|
Tuple,
|
|
@@ -44,7 +57,7 @@ from sqlglot.expressions.query import (
|
|
|
44
57
|
With,
|
|
45
58
|
Query,
|
|
46
59
|
)
|
|
47
|
-
from sqlglot.expressions.ddl import Alter, AlterRename, RenameColumn
|
|
60
|
+
from sqlglot.expressions.ddl import Alter, AlterRename, Create, RenameColumn
|
|
48
61
|
from sqlglot.expressions.dml import Delete, Insert, Merge, Update, When, Whens
|
|
49
62
|
from sqlglot.expressions.functions import Case, Cast
|
|
50
63
|
from sqlglot.expressions.array import Array
|
|
@@ -53,11 +66,10 @@ from sqlglot.expressions.array import Array
|
|
|
53
66
|
if t.TYPE_CHECKING:
|
|
54
67
|
from collections.abc import Sequence, Iterable, Iterator
|
|
55
68
|
from sqlglot.dialects.dialect import DialectType
|
|
56
|
-
from sqlglot.expressions.core import ExpOrStr
|
|
69
|
+
from sqlglot.expressions.core import ExpOrStr
|
|
57
70
|
from sqlglot.expressions.datatypes import DATA_TYPE
|
|
58
71
|
from sqlglot._typing import ParserArgs, ParserNoDialectArgs, E, P
|
|
59
72
|
from typing_extensions import Unpack, Concatenate
|
|
60
|
-
from sqlglot.expressions.core import Dot
|
|
61
73
|
|
|
62
74
|
|
|
63
75
|
def select(
|
|
@@ -516,7 +528,7 @@ def cast(
|
|
|
516
528
|
|
|
517
529
|
|
|
518
530
|
def table_(
|
|
519
|
-
table: Identifier | str,
|
|
531
|
+
table: Identifier | str | None,
|
|
520
532
|
db: Identifier | str | None = None,
|
|
521
533
|
catalog: Identifier | str | None = None,
|
|
522
534
|
quoted: bool | None = None,
|
|
@@ -849,6 +861,43 @@ def replace_tables(
|
|
|
849
861
|
return expression.transform(_replace_tables, copy=copy) # type: ignore
|
|
850
862
|
|
|
851
863
|
|
|
864
|
+
OPERATORS = (AtTimeZone, Between, Binary, BitwiseNot, In, Neg, Not)
|
|
865
|
+
|
|
866
|
+
|
|
867
|
+
def _is_operand(placeholder: Placeholder) -> bool:
|
|
868
|
+
parent = placeholder.parent
|
|
869
|
+
if isinstance(parent, (Bracket, In)):
|
|
870
|
+
return placeholder.arg_key == "this"
|
|
871
|
+
return isinstance(parent, OPERATORS)
|
|
872
|
+
|
|
873
|
+
|
|
874
|
+
def _takes_query(placeholder: Placeholder) -> bool:
|
|
875
|
+
parent = placeholder.parent
|
|
876
|
+
if isinstance(parent, In):
|
|
877
|
+
return placeholder.arg_key == "expressions" and len(parent.expressions) == 1
|
|
878
|
+
if isinstance(parent, Func):
|
|
879
|
+
return len(list(parent.iter_expressions())) == 1
|
|
880
|
+
if isinstance(parent, Table):
|
|
881
|
+
return isinstance(parent.parent, (Create, Subquery))
|
|
882
|
+
return not parent or isinstance(parent, (CTE, Paren, SetOperation))
|
|
883
|
+
|
|
884
|
+
|
|
885
|
+
def _replace_placeholder(placeholder: Placeholder, expression: Expr) -> Expr:
|
|
886
|
+
if (
|
|
887
|
+
isinstance(expression, Query)
|
|
888
|
+
and not isinstance(expression, Subquery)
|
|
889
|
+
and not _takes_query(placeholder)
|
|
890
|
+
):
|
|
891
|
+
return expression.subquery(copy=False)
|
|
892
|
+
if (
|
|
893
|
+
_is_operand(placeholder)
|
|
894
|
+
and isinstance(expression, OPERATORS)
|
|
895
|
+
and not isinstance(expression, Dot)
|
|
896
|
+
):
|
|
897
|
+
return Paren(this=expression)
|
|
898
|
+
return expression
|
|
899
|
+
|
|
900
|
+
|
|
852
901
|
def replace_placeholders(expression: Expr, *args: object, **kwargs: t.Any) -> Expr:
|
|
853
902
|
"""Replace placeholders in an expression.
|
|
854
903
|
|
|
@@ -874,10 +923,10 @@ def replace_placeholders(expression: Expr, *args: object, **kwargs: t.Any) -> Ex
|
|
|
874
923
|
if node.this:
|
|
875
924
|
new_name = kwargs.get(node.this)
|
|
876
925
|
if new_name is not None:
|
|
877
|
-
return convert(new_name)
|
|
926
|
+
return _replace_placeholder(node, convert(new_name))
|
|
878
927
|
else:
|
|
879
928
|
try:
|
|
880
|
-
return convert(next(args))
|
|
929
|
+
return _replace_placeholder(node, convert(next(args)))
|
|
881
930
|
except StopIteration:
|
|
882
931
|
pass
|
|
883
932
|
return node
|
|
@@ -867,7 +867,7 @@ class Expression(Expr):
|
|
|
867
867
|
for k in sorted(node.args):
|
|
868
868
|
v = node.args[k]
|
|
869
869
|
if v:
|
|
870
|
-
hash_ = hash((hash_, k, v))
|
|
870
|
+
hash_ = hash((hash_, k, tuple(v) if type(v) is list else v))
|
|
871
871
|
else:
|
|
872
872
|
for k in sorted(node.args):
|
|
873
873
|
v = node.args[k]
|
|
@@ -1595,7 +1595,14 @@ class Uncache(Expression):
|
|
|
1595
1595
|
|
|
1596
1596
|
|
|
1597
1597
|
class Refresh(Expression):
|
|
1598
|
-
arg_types = {
|
|
1598
|
+
arg_types = {
|
|
1599
|
+
"this": True,
|
|
1600
|
+
"kind": True,
|
|
1601
|
+
"partition_start": False,
|
|
1602
|
+
"partition_end": False,
|
|
1603
|
+
"force": False,
|
|
1604
|
+
"mode": False,
|
|
1605
|
+
}
|
|
1599
1606
|
|
|
1600
1607
|
|
|
1601
1608
|
class LockingStatement(Expression):
|
|
@@ -1859,6 +1866,7 @@ class SessionParameter(Expression, Condition):
|
|
|
1859
1866
|
|
|
1860
1867
|
class Placeholder(Expression, Condition):
|
|
1861
1868
|
arg_types = {"this": False, "kind": False, "widget": False, "jdbc": False}
|
|
1869
|
+
_hash_raw_args = True
|
|
1862
1870
|
|
|
1863
1871
|
@property
|
|
1864
1872
|
def name(self) -> str:
|
|
@@ -1994,6 +2002,7 @@ class Typeof(Expression, Func):
|
|
|
1994
2002
|
|
|
1995
2003
|
class ParameterizedAgg(Expression, AggFunc):
|
|
1996
2004
|
arg_types = {"this": True, "expressions": True, "params": True}
|
|
2005
|
+
_hash_raw_args = True
|
|
1997
2006
|
|
|
1998
2007
|
|
|
1999
2008
|
class Anonymous(Expression, Func):
|
|
@@ -2008,6 +2017,7 @@ class Anonymous(Expression, Func):
|
|
|
2008
2017
|
class AnonymousAggFunc(Expression, AggFunc):
|
|
2009
2018
|
arg_types = {"this": True, "expressions": False}
|
|
2010
2019
|
is_var_len_args = True
|
|
2020
|
+
_hash_raw_args = True
|
|
2011
2021
|
|
|
2012
2022
|
|
|
2013
2023
|
class CombinedAggFunc(AnonymousAggFunc):
|
|
@@ -2211,7 +2221,7 @@ class Like(Expression, Binary, Predicate):
|
|
|
2211
2221
|
|
|
2212
2222
|
|
|
2213
2223
|
class Match(Expression, Binary, Predicate):
|
|
2214
|
-
|
|
2224
|
+
arg_types = {"this": True, "expression": True, "kind": False, "analyzer": False}
|
|
2215
2225
|
|
|
2216
2226
|
|
|
2217
2227
|
class LT(Expression, Binary, Predicate):
|
|
@@ -176,6 +176,7 @@ class Set(Expression):
|
|
|
176
176
|
|
|
177
177
|
class Heredoc(Expression):
|
|
178
178
|
arg_types = {"this": True, "tag": False}
|
|
179
|
+
_hash_raw_args = True
|
|
179
180
|
|
|
180
181
|
|
|
181
182
|
class SetItem(Expression):
|
|
@@ -382,6 +383,7 @@ class Undrop(Expression):
|
|
|
382
383
|
|
|
383
384
|
class Command(Expression):
|
|
384
385
|
arg_types = {"this": True, "expression": False}
|
|
386
|
+
_hash_raw_args = True
|
|
385
387
|
|
|
386
388
|
|
|
387
389
|
class Transaction(Expression):
|
|
@@ -400,7 +402,7 @@ class Alter(Expression):
|
|
|
400
402
|
arg_types = {
|
|
401
403
|
"this": False,
|
|
402
404
|
"kind": True,
|
|
403
|
-
"actions":
|
|
405
|
+
"actions": False,
|
|
404
406
|
"exists": False,
|
|
405
407
|
"only": False,
|
|
406
408
|
"options": False,
|
|
@@ -25,6 +25,10 @@ class AllowedValuesProperty(Expression):
|
|
|
25
25
|
arg_types = {"expressions": True}
|
|
26
26
|
|
|
27
27
|
|
|
28
|
+
class AggregateKeyProperty(Property):
|
|
29
|
+
arg_types = {"expressions": True}
|
|
30
|
+
|
|
31
|
+
|
|
28
32
|
class AlgorithmProperty(Property):
|
|
29
33
|
arg_types = {"this": True}
|
|
30
34
|
|
|
@@ -123,6 +127,7 @@ class DatabaseProperty(Property):
|
|
|
123
127
|
|
|
124
128
|
class DefinerProperty(Property):
|
|
125
129
|
arg_types = {"this": True}
|
|
130
|
+
_hash_raw_args = True
|
|
126
131
|
|
|
127
132
|
|
|
128
133
|
class DistKeyProperty(Property):
|
|
@@ -390,6 +395,10 @@ class PartitionedOfProperty(Property):
|
|
|
390
395
|
arg_types = {"this": True, "expression": True}
|
|
391
396
|
|
|
392
397
|
|
|
398
|
+
class PhysicalProperty(Property):
|
|
399
|
+
arg_types = {"this": True, "value": False}
|
|
400
|
+
|
|
401
|
+
|
|
393
402
|
class StreamingTableProperty(Property):
|
|
394
403
|
arg_types = {}
|
|
395
404
|
|
|
@@ -497,6 +506,10 @@ class StorageHandlerProperty(Property):
|
|
|
497
506
|
arg_types = {"this": True}
|
|
498
507
|
|
|
499
508
|
|
|
509
|
+
class StorageProperty(Property):
|
|
510
|
+
arg_types = {"expressions": True}
|
|
511
|
+
|
|
512
|
+
|
|
500
513
|
class UsingProperty(Property):
|
|
501
514
|
# kind: JAR, FILE, or ARCHIVE; this: the resource path (string literal)
|
|
502
515
|
arg_types = {"this": True, "kind": True}
|
|
@@ -522,6 +535,10 @@ class Tags(Property, ColumnConstraintKind):
|
|
|
522
535
|
arg_types = {"expressions": True}
|
|
523
536
|
|
|
524
537
|
|
|
538
|
+
class TableSpaceProperty(Property):
|
|
539
|
+
arg_types = {"this": True}
|
|
540
|
+
|
|
541
|
+
|
|
525
542
|
class PropertiesLocation(AutoName):
|
|
526
543
|
POST_CREATE = auto()
|
|
527
544
|
POST_NAME = auto()
|
|
@@ -624,7 +641,9 @@ class Properties(Expression):
|
|
|
624
641
|
"INCLUDE": IncludeProperty,
|
|
625
642
|
}
|
|
626
643
|
|
|
627
|
-
PROPERTY_TO_NAME: t.ClassVar[dict[type[Property], str]] = {
|
|
644
|
+
PROPERTY_TO_NAME: t.ClassVar[dict[type[Property], str]] = {
|
|
645
|
+
v: k for k, v in NAME_TO_PROPERTY.items()
|
|
646
|
+
}
|
|
628
647
|
|
|
629
648
|
# CREATE property locations
|
|
630
649
|
# Form: schema specified
|
|
@@ -652,7 +671,3 @@ class Properties(Expression):
|
|
|
652
671
|
expressions.append(Property(this=Literal.string(key), value=convert(value)))
|
|
653
672
|
|
|
654
673
|
return cls(expressions=expressions)
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
# TODO (mypyc)
|
|
658
|
-
Properties.PROPERTY_TO_NAME = {v: k for k, v in Properties.NAME_TO_PROPERTY.items()}
|
|
@@ -19,6 +19,7 @@ from sqlglot.expressions.core import (
|
|
|
19
19
|
Hint,
|
|
20
20
|
Identifier,
|
|
21
21
|
In,
|
|
22
|
+
Var,
|
|
22
23
|
_apply_builder,
|
|
23
24
|
_apply_child_list_builder,
|
|
24
25
|
_apply_list_builder,
|
|
@@ -441,11 +442,24 @@ class QueryBand(Expression):
|
|
|
441
442
|
|
|
442
443
|
|
|
443
444
|
class RecursiveWithSearch(Expression):
|
|
444
|
-
arg_types = {
|
|
445
|
+
arg_types = {
|
|
446
|
+
"kind": True,
|
|
447
|
+
"this": True,
|
|
448
|
+
"expression": True,
|
|
449
|
+
"to": False,
|
|
450
|
+
"default": False,
|
|
451
|
+
"using": False,
|
|
452
|
+
}
|
|
445
453
|
|
|
446
454
|
|
|
447
455
|
class With(Expression):
|
|
448
|
-
arg_types = {
|
|
456
|
+
arg_types = {
|
|
457
|
+
"expressions": False,
|
|
458
|
+
"recursive": False,
|
|
459
|
+
"search": False,
|
|
460
|
+
"cycle": False,
|
|
461
|
+
"udfs": False,
|
|
462
|
+
}
|
|
449
463
|
|
|
450
464
|
@property
|
|
451
465
|
def recursive(self) -> bool:
|
|
@@ -486,14 +500,17 @@ class HexString(Expression, Condition):
|
|
|
486
500
|
class ByteString(Expression, Condition):
|
|
487
501
|
arg_types = {"this": True, "is_bytes": False}
|
|
488
502
|
is_primitive = True
|
|
503
|
+
_hash_raw_args = True
|
|
489
504
|
|
|
490
505
|
|
|
491
506
|
class RawString(Expression, Condition):
|
|
492
507
|
is_primitive = True
|
|
508
|
+
_hash_raw_args = True
|
|
493
509
|
|
|
494
510
|
|
|
495
511
|
class UnicodeString(Expression, Condition):
|
|
496
512
|
arg_types = {"this": True, "escape": False}
|
|
513
|
+
_hash_raw_args = True
|
|
497
514
|
|
|
498
515
|
|
|
499
516
|
class ColumnPosition(Expression):
|
|
@@ -572,7 +589,7 @@ class ConditionalInsert(Expression):
|
|
|
572
589
|
|
|
573
590
|
|
|
574
591
|
class MultitableInserts(Expression):
|
|
575
|
-
arg_types = {"expressions": True, "kind":
|
|
592
|
+
arg_types = {"with_": False, "expressions": True, "kind": False, "source": True}
|
|
576
593
|
|
|
577
594
|
|
|
578
595
|
class OnCondition(Expression):
|
|
@@ -585,6 +602,7 @@ class Introducer(Expression):
|
|
|
585
602
|
|
|
586
603
|
class National(Expression):
|
|
587
604
|
is_primitive = True
|
|
605
|
+
_hash_raw_args = True
|
|
588
606
|
|
|
589
607
|
|
|
590
608
|
class Partition(Expression):
|
|
@@ -657,6 +675,11 @@ class Limit(Expression):
|
|
|
657
675
|
"expressions": False,
|
|
658
676
|
}
|
|
659
677
|
|
|
678
|
+
@property
|
|
679
|
+
def is_limit_all(self) -> bool:
|
|
680
|
+
limit_expression = self.args.get("expression")
|
|
681
|
+
return isinstance(limit_expression, Var) and limit_expression.name.upper() == "ALL"
|
|
682
|
+
|
|
660
683
|
|
|
661
684
|
class LimitOptions(Expression):
|
|
662
685
|
arg_types = {
|
|
@@ -954,6 +977,12 @@ class Get(Expression):
|
|
|
954
977
|
arg_types = {"this": True, "target": True, "properties": False}
|
|
955
978
|
|
|
956
979
|
|
|
980
|
+
class ListStage(Expression):
|
|
981
|
+
"""Lists files in a Snowflake stage or Git repository clone."""
|
|
982
|
+
|
|
983
|
+
arg_types = {"this": True, "pattern": False}
|
|
984
|
+
|
|
985
|
+
|
|
957
986
|
class Table(Expression, Selectable):
|
|
958
987
|
arg_types = {
|
|
959
988
|
"this": False,
|
|
@@ -2022,14 +2051,17 @@ class JSONPathPart(Expression):
|
|
|
2022
2051
|
|
|
2023
2052
|
class JSONPathFilter(JSONPathPart):
|
|
2024
2053
|
arg_types = {"this": True}
|
|
2054
|
+
_hash_raw_args = True
|
|
2025
2055
|
|
|
2026
2056
|
|
|
2027
2057
|
class JSONPathKey(JSONPathPart):
|
|
2028
2058
|
arg_types = {"this": True, "quoted": False}
|
|
2059
|
+
_hash_raw_args = True
|
|
2029
2060
|
|
|
2030
2061
|
|
|
2031
2062
|
class JSONPathRecursive(JSONPathPart):
|
|
2032
2063
|
arg_types = {"this": False}
|
|
2064
|
+
_hash_raw_args = True
|
|
2033
2065
|
|
|
2034
2066
|
|
|
2035
2067
|
class JSONPathRoot(JSONPathPart):
|
|
@@ -2038,6 +2070,7 @@ class JSONPathRoot(JSONPathPart):
|
|
|
2038
2070
|
|
|
2039
2071
|
class JSONPathScript(JSONPathPart):
|
|
2040
2072
|
arg_types = {"this": True}
|
|
2073
|
+
_hash_raw_args = True
|
|
2041
2074
|
|
|
2042
2075
|
|
|
2043
2076
|
class JSONPathSlice(JSONPathPart):
|
|
@@ -2054,6 +2087,7 @@ class JSONPathSubscript(JSONPathPart):
|
|
|
2054
2087
|
|
|
2055
2088
|
class JSONPathUnion(JSONPathPart):
|
|
2056
2089
|
arg_types = {"expressions": True}
|
|
2090
|
+
_hash_raw_args = True
|
|
2057
2091
|
|
|
2058
2092
|
|
|
2059
2093
|
class JSONPathWildcard(JSONPathPart):
|