sqlglot 27.3.1__py3-none-any.whl → 27.4.1__py3-none-any.whl
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.
- sqlglot/_version.py +2 -2
- sqlglot/dialects/bigquery.py +28 -0
- sqlglot/dialects/exasol.py +24 -0
- sqlglot/dialects/snowflake.py +14 -0
- sqlglot/dialects/sqlite.py +22 -1
- sqlglot/expressions.py +1 -1
- sqlglot/generator.py +3 -1
- sqlglot/optimizer/annotate_types.py +8 -3
- sqlglot/optimizer/optimize_joins.py +2 -1
- sqlglot/parser.py +5 -1
- {sqlglot-27.3.1.dist-info → sqlglot-27.4.1.dist-info}/METADATA +1 -1
- {sqlglot-27.3.1.dist-info → sqlglot-27.4.1.dist-info}/RECORD +15 -15
- {sqlglot-27.3.1.dist-info → sqlglot-27.4.1.dist-info}/WHEEL +0 -0
- {sqlglot-27.3.1.dist-info → sqlglot-27.4.1.dist-info}/licenses/LICENSE +0 -0
- {sqlglot-27.3.1.dist-info → sqlglot-27.4.1.dist-info}/top_level.txt +0 -0
sqlglot/_version.py
CHANGED
sqlglot/dialects/bigquery.py
CHANGED
|
@@ -365,6 +365,33 @@ def _annotate_concat(self: TypeAnnotator, expression: exp.Concat) -> exp.Concat:
|
|
|
365
365
|
return annotated
|
|
366
366
|
|
|
367
367
|
|
|
368
|
+
def _annotate_array(self: TypeAnnotator, expression: exp.Array) -> exp.Array:
|
|
369
|
+
array_args = expression.expressions
|
|
370
|
+
|
|
371
|
+
# BigQuery behaves as follows:
|
|
372
|
+
#
|
|
373
|
+
# SELECT t, TYPEOF(t) FROM (SELECT 'foo') AS t -- foo, STRUCT<STRING>
|
|
374
|
+
# SELECT ARRAY(SELECT 'foo'), TYPEOF(ARRAY(SELECT 'foo')) -- foo, ARRAY<STRING>
|
|
375
|
+
if (
|
|
376
|
+
len(array_args) == 1
|
|
377
|
+
and isinstance(select := array_args[0].unnest(), exp.Select)
|
|
378
|
+
and (query_type := select.meta.get("query_type")) is not None
|
|
379
|
+
and query_type.is_type(exp.DataType.Type.STRUCT)
|
|
380
|
+
and len(query_type.expressions) == 1
|
|
381
|
+
and isinstance(col_def := query_type.expressions[0], exp.ColumnDef)
|
|
382
|
+
and (projection_type := col_def.kind) is not None
|
|
383
|
+
and not projection_type.is_type(exp.DataType.Type.UNKNOWN)
|
|
384
|
+
):
|
|
385
|
+
array_type = exp.DataType(
|
|
386
|
+
this=exp.DataType.Type.ARRAY,
|
|
387
|
+
expressions=[projection_type.copy()],
|
|
388
|
+
nested=True,
|
|
389
|
+
)
|
|
390
|
+
return self._annotate_with_type(expression, array_type)
|
|
391
|
+
|
|
392
|
+
return self._annotate_by_args(expression, "expressions", array=True)
|
|
393
|
+
|
|
394
|
+
|
|
368
395
|
class BigQuery(Dialect):
|
|
369
396
|
WEEK_OFFSET = -1
|
|
370
397
|
UNNEST_COLUMN_ONLY = True
|
|
@@ -445,6 +472,7 @@ class BigQuery(Dialect):
|
|
|
445
472
|
exp.Substring,
|
|
446
473
|
)
|
|
447
474
|
},
|
|
475
|
+
exp.Array: _annotate_array,
|
|
448
476
|
exp.ArrayConcat: lambda self, e: self._annotate_by_args(e, "this", "expressions"),
|
|
449
477
|
exp.Ascii: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.BIGINT),
|
|
450
478
|
exp.BitwiseAndAgg: lambda self, e: self._annotate_with_type(e, exp.DataType.Type.BIGINT),
|
sqlglot/dialects/exasol.py
CHANGED
|
@@ -13,6 +13,12 @@ from sqlglot.generator import unsupported_args
|
|
|
13
13
|
from sqlglot.tokens import TokenType
|
|
14
14
|
|
|
15
15
|
|
|
16
|
+
def _sha2_sql(self: Exasol.Generator, expression: exp.SHA2) -> str:
|
|
17
|
+
length = expression.text("length")
|
|
18
|
+
func_name = "HASH_SHA256" if length == "256" else "HASH_SHA512"
|
|
19
|
+
return self.func(func_name, expression.this)
|
|
20
|
+
|
|
21
|
+
|
|
16
22
|
class Exasol(Dialect):
|
|
17
23
|
TIME_MAPPING = {
|
|
18
24
|
"yyyy": "%Y",
|
|
@@ -59,6 +65,10 @@ class Exasol(Dialect):
|
|
|
59
65
|
"BIT_RSHIFT": binary_from_function(exp.BitwiseRightShift),
|
|
60
66
|
"EVERY": lambda args: exp.All(this=seq_get(args, 0)),
|
|
61
67
|
"EDIT_DISTANCE": exp.Levenshtein.from_arg_list,
|
|
68
|
+
"HASH_SHA": exp.SHA.from_arg_list,
|
|
69
|
+
"HASH_SHA1": exp.SHA.from_arg_list,
|
|
70
|
+
"HASH_MD5": exp.MD5.from_arg_list,
|
|
71
|
+
"HASHTYPE_MD5": exp.MD5Digest.from_arg_list,
|
|
62
72
|
"REGEXP_REPLACE": lambda args: exp.RegexpReplace(
|
|
63
73
|
this=seq_get(args, 0),
|
|
64
74
|
expression=seq_get(args, 1),
|
|
@@ -66,6 +76,12 @@ class Exasol(Dialect):
|
|
|
66
76
|
position=seq_get(args, 3),
|
|
67
77
|
occurrence=seq_get(args, 4),
|
|
68
78
|
),
|
|
79
|
+
"HASH_SHA256": lambda args: exp.SHA2(
|
|
80
|
+
this=seq_get(args, 0), length=exp.Literal.number(256)
|
|
81
|
+
),
|
|
82
|
+
"HASH_SHA512": lambda args: exp.SHA2(
|
|
83
|
+
this=seq_get(args, 0), length=exp.Literal.number(512)
|
|
84
|
+
),
|
|
69
85
|
"VAR_POP": exp.VariancePop.from_arg_list,
|
|
70
86
|
"APPROXIMATE_COUNT_DISTINCT": exp.ApproxDistinct.from_arg_list,
|
|
71
87
|
"TO_CHAR": build_formatted_time(exp.ToChar, "exasol"),
|
|
@@ -173,6 +189,14 @@ class Exasol(Dialect):
|
|
|
173
189
|
self, e, func_name="INSTR", supports_position=True, supports_occurrence=True
|
|
174
190
|
)
|
|
175
191
|
),
|
|
192
|
+
# https://docs.exasol.com/db/latest/sql_references/functions/alphabeticallistfunctions/hash_sha%5B1%5D.htm#HASH_SHA%5B1%5D
|
|
193
|
+
exp.SHA: rename_func("HASH_SHA"),
|
|
194
|
+
# https://docs.exasol.com/db/latest/sql_references/functions/alphabeticallistfunctions/hash_sha256.htm
|
|
195
|
+
# https://docs.exasol.com/db/latest/sql_references/functions/alphabeticallistfunctions/hash_sha512.htm
|
|
196
|
+
exp.SHA2: _sha2_sql,
|
|
197
|
+
exp.MD5: rename_func("HASH_MD5"),
|
|
198
|
+
# https://docs.exasol.com/db/latest/sql_references/functions/alphabeticallistfunctions/hashtype_md5.htm
|
|
199
|
+
exp.MD5Digest: rename_func("HASHTYPE_MD5"),
|
|
176
200
|
# https://docs.exasol.com/db/latest/sql/create_view.htm
|
|
177
201
|
exp.CommentColumnConstraint: lambda self, e: f"COMMENT IS {self.sql(e, 'this')}",
|
|
178
202
|
}
|
sqlglot/dialects/snowflake.py
CHANGED
|
@@ -1673,3 +1673,17 @@ class Snowflake(Dialect):
|
|
|
1673
1673
|
to=exp.DataType(this=exp.DataType.Type.DATE),
|
|
1674
1674
|
)
|
|
1675
1675
|
return self.sql(expr)
|
|
1676
|
+
|
|
1677
|
+
def dot_sql(self, expression: exp.Dot) -> str:
|
|
1678
|
+
this = expression.this
|
|
1679
|
+
|
|
1680
|
+
if not this.type:
|
|
1681
|
+
from sqlglot.optimizer.annotate_types import annotate_types
|
|
1682
|
+
|
|
1683
|
+
this = annotate_types(this, dialect=self.dialect)
|
|
1684
|
+
|
|
1685
|
+
if not isinstance(this, exp.Dot) and this.is_type(exp.DataType.Type.STRUCT):
|
|
1686
|
+
# Generate colon notation for the top level STRUCT
|
|
1687
|
+
return f"{self.sql(this)}:{self.sql(expression, 'expression')}"
|
|
1688
|
+
|
|
1689
|
+
return super().dot_sql(expression)
|
sqlglot/dialects/sqlite.py
CHANGED
|
@@ -96,7 +96,12 @@ class SQLite(Dialect):
|
|
|
96
96
|
|
|
97
97
|
NESTED_COMMENTS = False
|
|
98
98
|
|
|
99
|
-
KEYWORDS =
|
|
99
|
+
KEYWORDS = {
|
|
100
|
+
**tokens.Tokenizer.KEYWORDS,
|
|
101
|
+
"ATTACH": TokenType.ATTACH,
|
|
102
|
+
"DETACH": TokenType.DETACH,
|
|
103
|
+
}
|
|
104
|
+
|
|
100
105
|
KEYWORDS.pop("/*+")
|
|
101
106
|
|
|
102
107
|
COMMANDS = {*tokens.Tokenizer.COMMANDS, TokenType.REPLACE}
|
|
@@ -114,6 +119,12 @@ class SQLite(Dialect):
|
|
|
114
119
|
"TIME": lambda args: exp.Anonymous(this="TIME", expressions=args),
|
|
115
120
|
}
|
|
116
121
|
|
|
122
|
+
STATEMENT_PARSERS = {
|
|
123
|
+
**parser.Parser.STATEMENT_PARSERS,
|
|
124
|
+
TokenType.ATTACH: lambda self: self._parse_attach_detach(),
|
|
125
|
+
TokenType.DETACH: lambda self: self._parse_attach_detach(is_attach=False),
|
|
126
|
+
}
|
|
127
|
+
|
|
117
128
|
def _parse_unique(self) -> exp.UniqueColumnConstraint:
|
|
118
129
|
# Do not consume more tokens if UNIQUE is used as a standalone constraint, e.g:
|
|
119
130
|
# CREATE TABLE foo (bar TEXT UNIQUE REFERENCES baz ...)
|
|
@@ -122,6 +133,16 @@ class SQLite(Dialect):
|
|
|
122
133
|
|
|
123
134
|
return super()._parse_unique()
|
|
124
135
|
|
|
136
|
+
def _parse_attach_detach(self, is_attach=True) -> exp.Attach | exp.Detach:
|
|
137
|
+
self._match(TokenType.DATABASE)
|
|
138
|
+
this = self._parse_expression()
|
|
139
|
+
|
|
140
|
+
return (
|
|
141
|
+
self.expression(exp.Attach, this=this)
|
|
142
|
+
if is_attach
|
|
143
|
+
else self.expression(exp.Detach, this=this)
|
|
144
|
+
)
|
|
145
|
+
|
|
125
146
|
class Generator(generator.Generator):
|
|
126
147
|
JOIN_HINTS = False
|
|
127
148
|
TABLE_HINTS = False
|
sqlglot/expressions.py
CHANGED
sqlglot/generator.py
CHANGED
|
@@ -3549,7 +3549,9 @@ class Generator(metaclass=_Generator):
|
|
|
3549
3549
|
|
|
3550
3550
|
def addpartition_sql(self, expression: exp.AddPartition) -> str:
|
|
3551
3551
|
exists = "IF NOT EXISTS " if expression.args.get("exists") else ""
|
|
3552
|
-
|
|
3552
|
+
location = self.sql(expression, "location")
|
|
3553
|
+
location = f" {location}" if location else ""
|
|
3554
|
+
return f"ADD {exists}{self.sql(expression.this)}{location}"
|
|
3553
3555
|
|
|
3554
3556
|
def distinct_sql(self, expression: exp.Distinct) -> str:
|
|
3555
3557
|
this = self.expressions(expression, flat=True)
|
|
@@ -313,9 +313,11 @@ class TypeAnnotator(metaclass=_TypeAnnotator):
|
|
|
313
313
|
elif (
|
|
314
314
|
isinstance(source, Scope)
|
|
315
315
|
and isinstance(source.expression, exp.Query)
|
|
316
|
-
and
|
|
316
|
+
and (
|
|
317
|
+
source.expression.meta.get("query_type") or exp.DataType.build("UNKNOWN")
|
|
318
|
+
).is_type(exp.DataType.Type.STRUCT)
|
|
317
319
|
):
|
|
318
|
-
self._set_type(table_column, source.expression.
|
|
320
|
+
self._set_type(table_column, source.expression.meta["query_type"])
|
|
319
321
|
|
|
320
322
|
# Then (possibly) annotate the remaining expressions in the scope
|
|
321
323
|
self._maybe_annotate(scope.expression)
|
|
@@ -335,7 +337,10 @@ class TypeAnnotator(metaclass=_TypeAnnotator):
|
|
|
335
337
|
for cd in struct_type.expressions
|
|
336
338
|
if cd.kind
|
|
337
339
|
):
|
|
338
|
-
|
|
340
|
+
# We don't use `_set_type` on purpose here. If we annotated the query directly, then
|
|
341
|
+
# using it in other contexts (e.g., ARRAY(<query>)) could result in incorrect type
|
|
342
|
+
# annotations, i.e., it shouldn't be interpreted as a STRUCT value.
|
|
343
|
+
scope.expression.meta["query_type"] = struct_type
|
|
339
344
|
|
|
340
345
|
def _maybe_annotate(self, expression: E) -> E:
|
|
341
346
|
if id(expression) in self._visited:
|
|
@@ -79,7 +79,8 @@ def normalize(expression):
|
|
|
79
79
|
if join.kind == "CROSS":
|
|
80
80
|
join.set("on", None)
|
|
81
81
|
else:
|
|
82
|
-
join.
|
|
82
|
+
if join.kind in ("INNER", "OUTER"):
|
|
83
|
+
join.set("kind", None)
|
|
83
84
|
|
|
84
85
|
if not join.args.get("on") and not join.args.get("using"):
|
|
85
86
|
join.set("on", exp.true())
|
sqlglot/parser.py
CHANGED
|
@@ -7394,7 +7394,11 @@ class Parser(metaclass=_Parser):
|
|
|
7394
7394
|
exists = self._parse_exists(not_=True)
|
|
7395
7395
|
if self._match_pair(TokenType.PARTITION, TokenType.L_PAREN, advance=False):
|
|
7396
7396
|
return self.expression(
|
|
7397
|
-
exp.AddPartition,
|
|
7397
|
+
exp.AddPartition,
|
|
7398
|
+
exists=exists,
|
|
7399
|
+
this=self._parse_field(any_token=True),
|
|
7400
|
+
location=self._match_text_seq("LOCATION", advance=False)
|
|
7401
|
+
and self._parse_property(),
|
|
7398
7402
|
)
|
|
7399
7403
|
|
|
7400
7404
|
return None
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
sqlglot/__init__.py,sha256=za08rtdPh2v7dOpGdNomttlIVGgTrKja7rPd6sQwaTg,5391
|
|
2
2
|
sqlglot/__main__.py,sha256=022c173KqxsiABWTEpUIq_tJUxuNiW7a7ABsxBXqvu8,2069
|
|
3
3
|
sqlglot/_typing.py,sha256=-1HPyr3w5COlSJWqlgt8jhFk2dyMvBuvVBqIX1wyVCM,642
|
|
4
|
-
sqlglot/_version.py,sha256=
|
|
4
|
+
sqlglot/_version.py,sha256=jOZXO_b65dIa3g-RaYPPvo31yJxPamFz_P4zbdxLZ2o,513
|
|
5
5
|
sqlglot/diff.py,sha256=PtOllQMQa1Sw1-V2Y8eypmDqGujXYPaTOp_WLsWkAWk,17314
|
|
6
6
|
sqlglot/errors.py,sha256=QNKMr-pzLUDR-tuMmn_GK6iMHUIVdb_YSJ_BhGEvuso,2126
|
|
7
|
-
sqlglot/expressions.py,sha256=
|
|
8
|
-
sqlglot/generator.py,sha256=
|
|
7
|
+
sqlglot/expressions.py,sha256=Q52dXK5i-R4jtqHd2-Tj533GiOHxATrPxot68oV7Vfc,246122
|
|
8
|
+
sqlglot/generator.py,sha256=6SXy3-2Lnn1UGPTe6aMKzeNJxU7mZwJaQcrBLHCVL_c,216858
|
|
9
9
|
sqlglot/helper.py,sha256=9nZjFVRBtMKFC3EdzpDQ6jkazFO19po6BF8xHiNGZIo,15111
|
|
10
10
|
sqlglot/jsonpath.py,sha256=jneO-A57n4ojVT2drCn2HBlx_Ka8wLcGpemW1JgvbjA,7666
|
|
11
11
|
sqlglot/lineage.py,sha256=Qj5ykuDNcATppb9vOjoIKBqRVLbu3OMPiZk9f3iyv40,15312
|
|
12
|
-
sqlglot/parser.py,sha256=
|
|
12
|
+
sqlglot/parser.py,sha256=LpUn9mCDkYfJPjzNRx9vHKl0tfYzhWSbCn_76yybbvY,326921
|
|
13
13
|
sqlglot/planner.py,sha256=ql7Li-bWJRcyXzNaZy_n6bQ6B2ZfunEIB8Ztv2xaxq4,14634
|
|
14
14
|
sqlglot/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
15
15
|
sqlglot/schema.py,sha256=13H2qKQs27EKdTpDLOvcNnSTDAUbYNKjWtJs4aQCSOA,20509
|
|
@@ -20,7 +20,7 @@ sqlglot/transforms.py,sha256=s96QMtR7rJbcLAU1I_IF1xLNxno6yvEbhERgbS5xmJ4,41164
|
|
|
20
20
|
sqlglot/trie.py,sha256=v27uXMrHfqrXlJ6GmeTSMovsB_3o0ctnlKhdNt7W6fI,2245
|
|
21
21
|
sqlglot/dialects/__init__.py,sha256=BQUv9EuMmvhP_wVitGLo0PlCi15atvfXgvREpsTsxeQ,3799
|
|
22
22
|
sqlglot/dialects/athena.py,sha256=ofArmayYLev4qZQ15GM8mevG04qqR5WGFb2ZcuYm6x4,10966
|
|
23
|
-
sqlglot/dialects/bigquery.py,sha256=
|
|
23
|
+
sqlglot/dialects/bigquery.py,sha256=iNadAdOITTTaOcEwhL735BRNPoxtGG207L9fX7CR6zY,56446
|
|
24
24
|
sqlglot/dialects/clickhouse.py,sha256=UY1hFC83RMO2bum1UFfGBey_wmKPBKlsWD5nxbrqeyg,57000
|
|
25
25
|
sqlglot/dialects/databricks.py,sha256=mJN2lFpqgH95x3mtry3qWbuRf4q7NV5jbRAOspqclzY,4548
|
|
26
26
|
sqlglot/dialects/dialect.py,sha256=O8fYmv1iFEfmXa1mUwEZ7GgPsfG51_VuHSv8E_zOw0k,71039
|
|
@@ -30,7 +30,7 @@ sqlglot/dialects/drill.py,sha256=FOh7_KjPx_77pv0DiHKZog0CcmzqeF9_PEmGnJ1ESSM,582
|
|
|
30
30
|
sqlglot/dialects/druid.py,sha256=kh3snZtneehNOWqs3XcPjsrhNaRbkCQ8E4hHbWJ1fHM,690
|
|
31
31
|
sqlglot/dialects/duckdb.py,sha256=MUGm1cqpWHBrQBefwPXq2F96G-Tthshcp97hGhVt4Bs,51376
|
|
32
32
|
sqlglot/dialects/dune.py,sha256=gALut-fFfN2qMsr8LvZ1NQK3F3W9z2f4PwMvTMXVVVg,375
|
|
33
|
-
sqlglot/dialects/exasol.py,sha256=
|
|
33
|
+
sqlglot/dialects/exasol.py,sha256=imRzqWpgcQK0E5WrBTSy3JvTYs9zgkD3TC5Qbe4Hb7Y,10127
|
|
34
34
|
sqlglot/dialects/fabric.py,sha256=4Sng2ZhQSaf6eK3ituR9DqDZERaVwYS_UfdpusjsISg,10220
|
|
35
35
|
sqlglot/dialects/hive.py,sha256=bAZz0qnaOH9f5FyIMkqBu3XB2Cj7y-xnCPbxPsk8U9I,31959
|
|
36
36
|
sqlglot/dialects/materialize.py,sha256=_DPLPt8YrdQIIXNrGJw1IMcGOoAEJ9NO9X9pDfy4hxs,3494
|
|
@@ -42,10 +42,10 @@ sqlglot/dialects/prql.py,sha256=fwN-SPEGx-drwf1K0U2MByN-PkW3C_rOgQ3xeJeychg,7908
|
|
|
42
42
|
sqlglot/dialects/redshift.py,sha256=PAet4ka9JWyZImRl_b4qucgDGMrMlUt_pqry3XxZc1w,15783
|
|
43
43
|
sqlglot/dialects/risingwave.py,sha256=fEB3ySAcF2N1UjwD_JjcOkRu3F6DQ852XBrwava-CjY,3250
|
|
44
44
|
sqlglot/dialects/singlestore.py,sha256=S_NRGnHrzyDh5J8_NUs5fKACB7BL7t5SnkZ_0l0Cf0E,102
|
|
45
|
-
sqlglot/dialects/snowflake.py,sha256=
|
|
45
|
+
sqlglot/dialects/snowflake.py,sha256=PuAvhs6dhDg3Dwnygi6OBy9cxp7My2ZUH0j27eWnM8E,70805
|
|
46
46
|
sqlglot/dialects/spark.py,sha256=hTumyd46Cc3HEl9KvlTla2eq_NKBI3w5Jis3FeMt_R8,8886
|
|
47
47
|
sqlglot/dialects/spark2.py,sha256=aCwPqLduLRSUSPtbI1VtBjydK6haKgEy3iahmueGRo4,14742
|
|
48
|
-
sqlglot/dialects/sqlite.py,sha256=
|
|
48
|
+
sqlglot/dialects/sqlite.py,sha256=XIDmiNTswWcrDwlFm8gOODCrJ_rPmXQKkm9U_-YAlVs,13183
|
|
49
49
|
sqlglot/dialects/starrocks.py,sha256=2gav0PSNgRdAGXzawdznZliBpglJoQ0wBxPI7ZIMsRw,11314
|
|
50
50
|
sqlglot/dialects/tableau.py,sha256=oIawDzUITxGCWaEMB8OaNMPWhbC3U-2y09pYPm4eazc,2190
|
|
51
51
|
sqlglot/dialects/teradata.py,sha256=qdV3wqh5NOOjGph5rj5qBXBSNDvCm4ByP0sonmurklc,15873
|
|
@@ -57,7 +57,7 @@ sqlglot/executor/env.py,sha256=tQhU5PpTBMcxgZIFddFqxWMNPtHN0vOOz72voncY3KY,8276
|
|
|
57
57
|
sqlglot/executor/python.py,sha256=09GYRzrPn3lZGfDJY9pbONOvmYxsRyeSWjUiqkSRHGo,16661
|
|
58
58
|
sqlglot/executor/table.py,sha256=xkuJlgLVNYUXsSUaX0zTcnFekldXLLU8LqDyjR5K9wY,4419
|
|
59
59
|
sqlglot/optimizer/__init__.py,sha256=FdAvVz6rQLLkiiH21-SD4RxB5zS3WDeU-s03PZkJ-F4,343
|
|
60
|
-
sqlglot/optimizer/annotate_types.py,sha256=
|
|
60
|
+
sqlglot/optimizer/annotate_types.py,sha256=mEhUmD6CBZ1HIgYJMvfMTIivoB-6nKHiDAvoktobocM,25025
|
|
61
61
|
sqlglot/optimizer/canonicalize.py,sha256=RJpUbWDudjknRMtO_Kf8MGZ5Hv1twpPWac2u5kpV4Vw,7719
|
|
62
62
|
sqlglot/optimizer/eliminate_ctes.py,sha256=fUBM0RUnPrm2sYptEWBux98B7fcx7W-BM1zVqfgDz9c,1448
|
|
63
63
|
sqlglot/optimizer/eliminate_joins.py,sha256=5Whliegc7U8BnS6tlrl9wkeAgyP1NpgCCAPxChHzFfw,5874
|
|
@@ -66,7 +66,7 @@ sqlglot/optimizer/isolate_table_selects.py,sha256=_8rIKVMoL7eY3rrJsmgIdTRvfmBSLU
|
|
|
66
66
|
sqlglot/optimizer/merge_subqueries.py,sha256=lg6Is78nUM2MbqbRjE6xapgErIO-5pteBE74Qh3z4Zk,15211
|
|
67
67
|
sqlglot/optimizer/normalize.py,sha256=wu3GeKY36PLyAb9f534jDDfzDwvZJpZ8g_H5QH6acZQ,6667
|
|
68
68
|
sqlglot/optimizer/normalize_identifiers.py,sha256=uD4xICJAgj0X7EFc2LYcDWxAW2aTHANO2wy7kfn9gfY,2098
|
|
69
|
-
sqlglot/optimizer/optimize_joins.py,sha256=
|
|
69
|
+
sqlglot/optimizer/optimize_joins.py,sha256=tfEnTqBofveBXNKJ30GIvm2lyagAuD24bMNfu3iQi_k,3043
|
|
70
70
|
sqlglot/optimizer/optimizer.py,sha256=vXEXDWHvbO-vJmSI7UqJuydM2WrD1xko7rETq2EtVJo,3533
|
|
71
71
|
sqlglot/optimizer/pushdown_predicates.py,sha256=HGjs3Z4V3-X2d1VTfWhyByY3aL5SmKnVvt3aDXiiBM0,8414
|
|
72
72
|
sqlglot/optimizer/pushdown_projections.py,sha256=7NoK5NAUVYVhs0YnYyo6WuXfaO-BShSwS6lA8Y-ATQ4,6668
|
|
@@ -76,8 +76,8 @@ sqlglot/optimizer/qualify_tables.py,sha256=rRo0rXMMDAloG_ut7nGPtIO3e__ooM2PqShxW
|
|
|
76
76
|
sqlglot/optimizer/scope.py,sha256=HI3TZ4VWTgM6_x8k5ClA0lA0xidaKv4xgn8iGERJRjk,30824
|
|
77
77
|
sqlglot/optimizer/simplify.py,sha256=-_yus42OYwqjQ9a2TSGhtG2G0pSkInUry1z7hEMz2pY,51062
|
|
78
78
|
sqlglot/optimizer/unnest_subqueries.py,sha256=kzWUVDlxs8z9nmRx-8U-pHXPtVZhEIwkKqmKhr2QLvc,10908
|
|
79
|
-
sqlglot-27.
|
|
80
|
-
sqlglot-27.
|
|
81
|
-
sqlglot-27.
|
|
82
|
-
sqlglot-27.
|
|
83
|
-
sqlglot-27.
|
|
79
|
+
sqlglot-27.4.1.dist-info/licenses/LICENSE,sha256=AI3__mHZfOtzY3EluR_pIYBm3_pE7TbVx7qaHxoZ114,1065
|
|
80
|
+
sqlglot-27.4.1.dist-info/METADATA,sha256=QgRU7ePRB-jDv1RMJMz1ey_5cK8TZqrmeJ5XKosvD7o,20731
|
|
81
|
+
sqlglot-27.4.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
82
|
+
sqlglot-27.4.1.dist-info/top_level.txt,sha256=5kRskCGA_gVADF9rSfSzPdLHXqvfMusDYeHePfNY2nQ,8
|
|
83
|
+
sqlglot-27.4.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|