sqlglot 27.11.0__py3-none-any.whl → 27.13.0__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 +80 -32
- sqlglot/dialects/clickhouse.py +4 -0
- sqlglot/dialects/databricks.py +1 -0
- sqlglot/dialects/dialect.py +13 -1
- sqlglot/dialects/doris.py +2 -0
- sqlglot/dialects/dremio.py +4 -0
- sqlglot/dialects/duckdb.py +4 -1
- sqlglot/dialects/hive.py +11 -5
- sqlglot/dialects/mysql.py +11 -1
- sqlglot/dialects/oracle.py +4 -0
- sqlglot/dialects/postgres.py +1 -2
- sqlglot/dialects/singlestore.py +137 -2
- sqlglot/dialects/snowflake.py +34 -4
- sqlglot/dialects/spark.py +14 -0
- sqlglot/expressions.py +111 -7
- sqlglot/generator.py +36 -4
- sqlglot/optimizer/qualify_columns.py +18 -3
- sqlglot/parser.py +56 -22
- sqlglot/tokens.py +5 -0
- {sqlglot-27.11.0.dist-info → sqlglot-27.13.0.dist-info}/METADATA +1 -1
- {sqlglot-27.11.0.dist-info → sqlglot-27.13.0.dist-info}/RECORD +25 -25
- {sqlglot-27.11.0.dist-info → sqlglot-27.13.0.dist-info}/WHEEL +0 -0
- {sqlglot-27.11.0.dist-info → sqlglot-27.13.0.dist-info}/licenses/LICENSE +0 -0
- {sqlglot-27.11.0.dist-info → sqlglot-27.13.0.dist-info}/top_level.txt +0 -0
|
@@ -279,6 +279,7 @@ def _expand_alias_refs(
|
|
|
279
279
|
|
|
280
280
|
alias_to_expression: t.Dict[str, t.Tuple[exp.Expression, int]] = {}
|
|
281
281
|
projections = {s.alias_or_name for s in expression.selects}
|
|
282
|
+
is_bigquery = dialect == "bigquery"
|
|
282
283
|
|
|
283
284
|
def replace_columns(
|
|
284
285
|
node: t.Optional[exp.Expression], resolve_table: bool = False, literal_index: bool = False
|
|
@@ -312,17 +313,30 @@ def _expand_alias_refs(
|
|
|
312
313
|
|
|
313
314
|
# BigQuery's having clause gets confused if an alias matches a source.
|
|
314
315
|
# SELECT x.a, max(x.b) as x FROM x GROUP BY 1 HAVING x > 1;
|
|
315
|
-
# If HAVING x is expanded to max(x.b),
|
|
316
|
-
|
|
316
|
+
# If "HAVING x" is expanded to "HAVING max(x.b)", BQ would blindly replace the "x" reference with the projection MAX(x.b)
|
|
317
|
+
# i.e HAVING MAX(MAX(x.b).b), resulting in the error: "Aggregations of aggregations are not allowed"
|
|
318
|
+
if is_having and is_bigquery:
|
|
317
319
|
skip_replace = skip_replace or any(
|
|
318
320
|
node.parts[0].name in projections
|
|
319
321
|
for node in alias_expr.find_all(exp.Column)
|
|
320
322
|
)
|
|
323
|
+
elif is_bigquery and (is_group_by or is_having):
|
|
324
|
+
column_table = table.name if table else column.table
|
|
325
|
+
if column_table in projections:
|
|
326
|
+
# BigQuery's GROUP BY and HAVING clauses get confused if the column name
|
|
327
|
+
# matches a source name and a projection. For instance:
|
|
328
|
+
# SELECT id, ARRAY_AGG(col) AS custom_fields FROM custom_fields GROUP BY id HAVING id >= 1
|
|
329
|
+
# We should not qualify "id" with "custom_fields" in either clause, since the aggregation shadows the actual table
|
|
330
|
+
# and we'd get the error: "Column custom_fields contains an aggregation function, which is not allowed in GROUP BY clause"
|
|
331
|
+
column.replace(exp.to_identifier(column.name))
|
|
332
|
+
return
|
|
321
333
|
|
|
322
334
|
if table and (not alias_expr or skip_replace):
|
|
323
335
|
column.set("table", table)
|
|
324
336
|
elif not column.table and alias_expr and not skip_replace:
|
|
325
|
-
if isinstance(alias_expr, exp.Literal) and (
|
|
337
|
+
if (isinstance(alias_expr, exp.Literal) or alias_expr.is_number) and (
|
|
338
|
+
literal_index or resolve_table
|
|
339
|
+
):
|
|
326
340
|
if literal_index:
|
|
327
341
|
column.replace(exp.Literal.number(i))
|
|
328
342
|
else:
|
|
@@ -442,6 +456,7 @@ def _expand_positional_references(
|
|
|
442
456
|
|
|
443
457
|
if (
|
|
444
458
|
isinstance(select, exp.CONSTANTS)
|
|
459
|
+
or select.is_number
|
|
445
460
|
or select.find(exp.Explode, exp.Unnest)
|
|
446
461
|
or ambiguous
|
|
447
462
|
):
|
sqlglot/parser.py
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import itertools
|
|
3
4
|
import logging
|
|
4
5
|
import re
|
|
5
6
|
import typing as t
|
|
6
|
-
import itertools
|
|
7
7
|
from collections import defaultdict
|
|
8
8
|
|
|
9
9
|
from sqlglot import exp
|
|
10
|
-
from sqlglot.errors import ErrorLevel, ParseError, concat_messages, merge_errors
|
|
10
|
+
from sqlglot.errors import ErrorLevel, ParseError, TokenError, concat_messages, merge_errors
|
|
11
11
|
from sqlglot.helper import apply_index_offset, ensure_list, seq_get
|
|
12
12
|
from sqlglot.time import format_time
|
|
13
13
|
from sqlglot.tokens import Token, Tokenizer, TokenType
|
|
@@ -479,6 +479,7 @@ class Parser(metaclass=_Parser):
|
|
|
479
479
|
TokenType.INDEX,
|
|
480
480
|
TokenType.TABLE,
|
|
481
481
|
TokenType.VIEW,
|
|
482
|
+
TokenType.SESSION,
|
|
482
483
|
}
|
|
483
484
|
|
|
484
485
|
# Tokens that can represent identifiers
|
|
@@ -641,6 +642,9 @@ class Parser(metaclass=_Parser):
|
|
|
641
642
|
TokenType.TIMESTAMP,
|
|
642
643
|
TokenType.TIMESTAMPTZ,
|
|
643
644
|
TokenType.TRUNCATE,
|
|
645
|
+
TokenType.UTC_DATE,
|
|
646
|
+
TokenType.UTC_TIME,
|
|
647
|
+
TokenType.UTC_TIMESTAMP,
|
|
644
648
|
TokenType.WINDOW,
|
|
645
649
|
TokenType.XOR,
|
|
646
650
|
*TYPE_TOKENS,
|
|
@@ -5295,18 +5299,21 @@ class Parser(metaclass=_Parser):
|
|
|
5295
5299
|
this: t.Optional[exp.Expression] = None
|
|
5296
5300
|
prefix = self._match_text_seq("SYSUDTLIB", ".")
|
|
5297
5301
|
|
|
5298
|
-
if
|
|
5302
|
+
if self._match_set(self.TYPE_TOKENS):
|
|
5303
|
+
type_token = self._prev.token_type
|
|
5304
|
+
else:
|
|
5305
|
+
type_token = None
|
|
5299
5306
|
identifier = allow_identifiers and self._parse_id_var(
|
|
5300
5307
|
any_token=False, tokens=(TokenType.VAR,)
|
|
5301
5308
|
)
|
|
5302
5309
|
if isinstance(identifier, exp.Identifier):
|
|
5303
|
-
|
|
5310
|
+
try:
|
|
5311
|
+
tokens = self.dialect.tokenize(identifier.name)
|
|
5312
|
+
except TokenError:
|
|
5313
|
+
tokens = None
|
|
5304
5314
|
|
|
5305
|
-
if len(tokens)
|
|
5306
|
-
|
|
5307
|
-
|
|
5308
|
-
if tokens[0].token_type in self.TYPE_TOKENS:
|
|
5309
|
-
self._prev = tokens[0]
|
|
5315
|
+
if tokens and len(tokens) == 1 and tokens[0].token_type in self.TYPE_TOKENS:
|
|
5316
|
+
type_token = tokens[0].token_type
|
|
5310
5317
|
elif self.dialect.SUPPORTS_USER_DEFINED_TYPES:
|
|
5311
5318
|
this = self._parse_user_defined_type(identifier)
|
|
5312
5319
|
else:
|
|
@@ -5315,8 +5322,6 @@ class Parser(metaclass=_Parser):
|
|
|
5315
5322
|
else:
|
|
5316
5323
|
return None
|
|
5317
5324
|
|
|
5318
|
-
type_token = self._prev.token_type
|
|
5319
|
-
|
|
5320
5325
|
if type_token == TokenType.PSEUDO_TYPE:
|
|
5321
5326
|
return self.expression(exp.PseudoType, this=self._prev.text.upper())
|
|
5322
5327
|
|
|
@@ -6859,7 +6864,15 @@ class Parser(metaclass=_Parser):
|
|
|
6859
6864
|
)
|
|
6860
6865
|
|
|
6861
6866
|
def _parse_match_against(self) -> exp.MatchAgainst:
|
|
6862
|
-
|
|
6867
|
+
if self._match_text_seq("TABLE"):
|
|
6868
|
+
# parse SingleStore MATCH(TABLE ...) syntax
|
|
6869
|
+
# https://docs.singlestore.com/cloud/reference/sql-reference/full-text-search-functions/match/
|
|
6870
|
+
expressions = []
|
|
6871
|
+
table = self._parse_table()
|
|
6872
|
+
if table:
|
|
6873
|
+
expressions = [table]
|
|
6874
|
+
else:
|
|
6875
|
+
expressions = self._parse_csv(self._parse_column)
|
|
6863
6876
|
|
|
6864
6877
|
self._match_text_seq(")", "AGAINST", "(")
|
|
6865
6878
|
|
|
@@ -7316,10 +7329,13 @@ class Parser(metaclass=_Parser):
|
|
|
7316
7329
|
return self._parse_csv(self._parse_expression)
|
|
7317
7330
|
|
|
7318
7331
|
def _parse_select_or_expression(self, alias: bool = False) -> t.Optional[exp.Expression]:
|
|
7319
|
-
return
|
|
7320
|
-
self.
|
|
7321
|
-
|
|
7322
|
-
|
|
7332
|
+
return (
|
|
7333
|
+
self._parse_set_operations(
|
|
7334
|
+
self._parse_alias(self._parse_assignment(), explicit=True)
|
|
7335
|
+
if alias
|
|
7336
|
+
else self._parse_assignment()
|
|
7337
|
+
)
|
|
7338
|
+
or self._parse_select()
|
|
7323
7339
|
)
|
|
7324
7340
|
|
|
7325
7341
|
def _parse_ddl_select(self) -> t.Optional[exp.Expression]:
|
|
@@ -7337,7 +7353,7 @@ class Parser(metaclass=_Parser):
|
|
|
7337
7353
|
modes = []
|
|
7338
7354
|
while True:
|
|
7339
7355
|
mode = []
|
|
7340
|
-
while self._match(TokenType.VAR):
|
|
7356
|
+
while self._match(TokenType.VAR) or self._match(TokenType.NOT):
|
|
7341
7357
|
mode.append(self._prev.text)
|
|
7342
7358
|
|
|
7343
7359
|
if mode:
|
|
@@ -7580,6 +7596,18 @@ class Parser(metaclass=_Parser):
|
|
|
7580
7596
|
|
|
7581
7597
|
return alter_set
|
|
7582
7598
|
|
|
7599
|
+
def _parse_alter_session(self) -> exp.AlterSession:
|
|
7600
|
+
"""Parse ALTER SESSION SET/UNSET statements."""
|
|
7601
|
+
if self._match(TokenType.SET):
|
|
7602
|
+
expressions = self._parse_csv(lambda: self._parse_set_item_assignment())
|
|
7603
|
+
return self.expression(exp.AlterSession, expressions=expressions, unset=False)
|
|
7604
|
+
|
|
7605
|
+
self._match_text_seq("UNSET")
|
|
7606
|
+
expressions = self._parse_csv(
|
|
7607
|
+
lambda: self.expression(exp.SetItem, this=self._parse_id_var(any_token=True))
|
|
7608
|
+
)
|
|
7609
|
+
return self.expression(exp.AlterSession, expressions=expressions, unset=True)
|
|
7610
|
+
|
|
7583
7611
|
def _parse_alter(self) -> exp.Alter | exp.Command:
|
|
7584
7612
|
start = self._prev
|
|
7585
7613
|
|
|
@@ -7589,12 +7617,18 @@ class Parser(metaclass=_Parser):
|
|
|
7589
7617
|
|
|
7590
7618
|
exists = self._parse_exists()
|
|
7591
7619
|
only = self._match_text_seq("ONLY")
|
|
7592
|
-
this = self._parse_table(schema=True)
|
|
7593
|
-
check = self._match_text_seq("WITH", "CHECK")
|
|
7594
|
-
cluster = self._parse_on_property() if self._match(TokenType.ON) else None
|
|
7595
7620
|
|
|
7596
|
-
if
|
|
7597
|
-
|
|
7621
|
+
if alter_token.token_type == TokenType.SESSION:
|
|
7622
|
+
this = None
|
|
7623
|
+
check = None
|
|
7624
|
+
cluster = None
|
|
7625
|
+
else:
|
|
7626
|
+
this = self._parse_table(schema=True)
|
|
7627
|
+
check = self._match_text_seq("WITH", "CHECK")
|
|
7628
|
+
cluster = self._parse_on_property() if self._match(TokenType.ON) else None
|
|
7629
|
+
|
|
7630
|
+
if self._next:
|
|
7631
|
+
self._advance()
|
|
7598
7632
|
|
|
7599
7633
|
parser = self.ALTER_PARSERS.get(self._prev.text.upper()) if self._prev else None
|
|
7600
7634
|
if parser:
|
sqlglot/tokens.py
CHANGED
|
@@ -80,6 +80,7 @@ class TokenType(AutoName):
|
|
|
80
80
|
AT_GT = auto()
|
|
81
81
|
DOLLAR = auto()
|
|
82
82
|
PARAMETER = auto()
|
|
83
|
+
SESSION = auto()
|
|
83
84
|
SESSION_PARAMETER = auto()
|
|
84
85
|
DAMP = auto()
|
|
85
86
|
XOR = auto()
|
|
@@ -423,6 +424,9 @@ class TokenType(AutoName):
|
|
|
423
424
|
WINDOW = auto()
|
|
424
425
|
WITH = auto()
|
|
425
426
|
UNIQUE = auto()
|
|
427
|
+
UTC_DATE = auto()
|
|
428
|
+
UTC_TIME = auto()
|
|
429
|
+
UTC_TIMESTAMP = auto()
|
|
426
430
|
VERSION_SNAPSHOT = auto()
|
|
427
431
|
TIMESTAMP_SNAPSHOT = auto()
|
|
428
432
|
OPTION = auto()
|
|
@@ -835,6 +839,7 @@ class Tokenizer(metaclass=_Tokenizer):
|
|
|
835
839
|
"SCHEMA": TokenType.SCHEMA,
|
|
836
840
|
"SELECT": TokenType.SELECT,
|
|
837
841
|
"SEMI": TokenType.SEMI,
|
|
842
|
+
"SESSION": TokenType.SESSION,
|
|
838
843
|
"SET": TokenType.SET,
|
|
839
844
|
"SETTINGS": TokenType.SETTINGS,
|
|
840
845
|
"SHOW": TokenType.SHOW,
|
|
@@ -1,49 +1,49 @@
|
|
|
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=rluv89UD57hyJpJketKgm-v1FgO0kt8reB1Qn-G8n-E,708
|
|
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=oestq-dQt-OC2XLgG0B-I3cDgg7DptuXmcUW7_uP6aQ,253755
|
|
8
|
+
sqlglot/generator.py,sha256=jYYVwMaqFWEuBWCmjdA-cd2m5_3QzePcKv1U_s0wogE,224655
|
|
9
9
|
sqlglot/helper.py,sha256=9nZjFVRBtMKFC3EdzpDQ6jkazFO19po6BF8xHiNGZIo,15111
|
|
10
10
|
sqlglot/jsonpath.py,sha256=SQgaxzaEYBN7At9dkTK4N1Spk6xHxvHL6QtCIP6iM30,7905
|
|
11
11
|
sqlglot/lineage.py,sha256=Qj5ykuDNcATppb9vOjoIKBqRVLbu3OMPiZk9f3iyv40,15312
|
|
12
|
-
sqlglot/parser.py,sha256=
|
|
12
|
+
sqlglot/parser.py,sha256=1FYhCQb6V_Oytucf671GJ6eD_gANaHrFkLlIbCP8t4w,333060
|
|
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
|
|
16
16
|
sqlglot/serde.py,sha256=DQVJ95WrIvhYfe02Ytb4NQug2aMwDCEwpMBW1LKDqzE,2031
|
|
17
17
|
sqlglot/time.py,sha256=Q62gv6kL40OiRBF6BMESxKJcMVn7ZLNw7sv8H34z5FI,18400
|
|
18
|
-
sqlglot/tokens.py,sha256=
|
|
18
|
+
sqlglot/tokens.py,sha256=446Hfn6SDnma1WYz2O3snM2vKFn1y4MXIKbAs-rAh3s,49132
|
|
19
19
|
sqlglot/transforms.py,sha256=utNDsCBsA7hPUK3-aby3DDgiY_XVMAKQqeoLm1EyihI,41218
|
|
20
20
|
sqlglot/trie.py,sha256=v27uXMrHfqrXlJ6GmeTSMovsB_3o0ctnlKhdNt7W6fI,2245
|
|
21
21
|
sqlglot/dialects/__init__.py,sha256=e3K2NHrZO7oXfBzEpRsvgWAgJ_UCEyg7SlUCRqvnPj4,3799
|
|
22
22
|
sqlglot/dialects/athena.py,sha256=ofArmayYLev4qZQ15GM8mevG04qqR5WGFb2ZcuYm6x4,10966
|
|
23
|
-
sqlglot/dialects/bigquery.py,sha256=
|
|
24
|
-
sqlglot/dialects/clickhouse.py,sha256=
|
|
25
|
-
sqlglot/dialects/databricks.py,sha256=
|
|
26
|
-
sqlglot/dialects/dialect.py,sha256=
|
|
27
|
-
sqlglot/dialects/doris.py,sha256=
|
|
28
|
-
sqlglot/dialects/dremio.py,sha256=
|
|
23
|
+
sqlglot/dialects/bigquery.py,sha256=IO5u1sdT0wzl76_z3FVm8FgtVnnMBrFPab-HhxuxROs,72078
|
|
24
|
+
sqlglot/dialects/clickhouse.py,sha256=YLY8s7oCfdCoD0X2iOIltivXXjtT_nJdb3931P0TDeU,58553
|
|
25
|
+
sqlglot/dialects/databricks.py,sha256=H4QTq7gg6tJylKc_YWsGp6049KydoI_wlQUHM7iCJtI,4753
|
|
26
|
+
sqlglot/dialects/dialect.py,sha256=MFP2WHesP-wf2HXub8s0_XyeUnjXCk8QNcqn5AIhARw,73361
|
|
27
|
+
sqlglot/dialects/doris.py,sha256=CFnF955Oav3IjZWA80ickOI8tPpCjxk7BN5R4Z6pA1U,25263
|
|
28
|
+
sqlglot/dialects/dremio.py,sha256=nOMxu_4xVKSOmMGNSwdxXSPc243cNbbpb-xXzYdgdeg,8460
|
|
29
29
|
sqlglot/dialects/drill.py,sha256=FOh7_KjPx_77pv0DiHKZog0CcmzqeF9_PEmGnJ1ESSM,5825
|
|
30
30
|
sqlglot/dialects/druid.py,sha256=kh3snZtneehNOWqs3XcPjsrhNaRbkCQ8E4hHbWJ1fHM,690
|
|
31
|
-
sqlglot/dialects/duckdb.py,sha256=
|
|
31
|
+
sqlglot/dialects/duckdb.py,sha256=ANzn5L5KS5pe9hn81Ta_4h5ngdPxMS1k_LdMuYGiff8,52470
|
|
32
32
|
sqlglot/dialects/dune.py,sha256=gALut-fFfN2qMsr8LvZ1NQK3F3W9z2f4PwMvTMXVVVg,375
|
|
33
33
|
sqlglot/dialects/exasol.py,sha256=ay3g_VyT5WvHTgNyJuCQu0nBt4bpllLZ9IdMBizEgYM,15761
|
|
34
34
|
sqlglot/dialects/fabric.py,sha256=4Sng2ZhQSaf6eK3ituR9DqDZERaVwYS_UfdpusjsISg,10220
|
|
35
|
-
sqlglot/dialects/hive.py,sha256=
|
|
35
|
+
sqlglot/dialects/hive.py,sha256=zFr6WmNZXw5C0m3nFc9ynrbzk8Wtb5gyzmJ0tPlMge8,32014
|
|
36
36
|
sqlglot/dialects/materialize.py,sha256=LD2q1kTRrCwkIu1BfoBvnjTGbupDtoQ8JQMDCIYAXHg,3533
|
|
37
|
-
sqlglot/dialects/mysql.py,sha256=
|
|
38
|
-
sqlglot/dialects/oracle.py,sha256=
|
|
39
|
-
sqlglot/dialects/postgres.py,sha256=
|
|
37
|
+
sqlglot/dialects/mysql.py,sha256=pAIWuwvirUrFbJE06UiST9iyiA4-IkA1sGiMgkeo1DY,47884
|
|
38
|
+
sqlglot/dialects/oracle.py,sha256=zWPCpzGiTlgCJ5E6FjfX3Rszjcw4SnHg6xeVboMYIyo,15972
|
|
39
|
+
sqlglot/dialects/postgres.py,sha256=NsaNBKUrqzb3bjVi16IBlYi8FPJnHRTl46lQX1GDNzw,33849
|
|
40
40
|
sqlglot/dialects/presto.py,sha256=XVeYr2NP86x5enlRqI7MYR6le85_ucYg_BBRocGN3jM,33413
|
|
41
41
|
sqlglot/dialects/prql.py,sha256=fwN-SPEGx-drwf1K0U2MByN-PkW3C_rOgQ3xeJeychg,7908
|
|
42
42
|
sqlglot/dialects/redshift.py,sha256=_sQTom4CGozFDZXW9y6bHQcZ-KiQ7QJjjQqM5rVagSc,15889
|
|
43
43
|
sqlglot/dialects/risingwave.py,sha256=BqWwW1iT_OIVMwfRamaww79snnBwIgCfr22Go-ggO68,3289
|
|
44
|
-
sqlglot/dialects/singlestore.py,sha256=
|
|
45
|
-
sqlglot/dialects/snowflake.py,sha256=
|
|
46
|
-
sqlglot/dialects/spark.py,sha256=
|
|
44
|
+
sqlglot/dialects/singlestore.py,sha256=_42yJP-YYbHswIBCKO5qxP5Z_AVksLh3bMX394iivwQ,55764
|
|
45
|
+
sqlglot/dialects/snowflake.py,sha256=xIftl1twnug9C-MW-jUncKskKVOwds3jpBvCDFmp5kM,72084
|
|
46
|
+
sqlglot/dialects/spark.py,sha256=PzyhkelDzbCMgJ3RVHD6yyzLIFp9NdZfwVas5IymowM,10147
|
|
47
47
|
sqlglot/dialects/spark2.py,sha256=qz36FT9k4iuiqboRpyG4VpKGkPR0P2fifmqgZ9gNUEU,14851
|
|
48
48
|
sqlglot/dialects/sqlite.py,sha256=UIQ66shIt2bQoLd7tYG4NVzh4HwCfERgAaLyukz8HjE,13231
|
|
49
49
|
sqlglot/dialects/starrocks.py,sha256=2gav0PSNgRdAGXzawdznZliBpglJoQ0wBxPI7ZIMsRw,11314
|
|
@@ -71,13 +71,13 @@ sqlglot/optimizer/optimizer.py,sha256=vXEXDWHvbO-vJmSI7UqJuydM2WrD1xko7rETq2EtVJ
|
|
|
71
71
|
sqlglot/optimizer/pushdown_predicates.py,sha256=HGjs3Z4V3-X2d1VTfWhyByY3aL5SmKnVvt3aDXiiBM0,8414
|
|
72
72
|
sqlglot/optimizer/pushdown_projections.py,sha256=7NoK5NAUVYVhs0YnYyo6WuXfaO-BShSwS6lA8Y-ATQ4,6668
|
|
73
73
|
sqlglot/optimizer/qualify.py,sha256=oAPfwub7dEkrlCrsptcJWpLya4BgKhN6M5SwIs_86LY,4002
|
|
74
|
-
sqlglot/optimizer/qualify_columns.py,sha256=
|
|
74
|
+
sqlglot/optimizer/qualify_columns.py,sha256=LUlHSSyKshgWIhn4es2PzR1iAvMoSkwHY2t8h07Y32I,45037
|
|
75
75
|
sqlglot/optimizer/qualify_tables.py,sha256=dA4ZazL7ShQh2JgBwpHuG-4c5lBw1TNzCnuN7m0iVTA,6645
|
|
76
76
|
sqlglot/optimizer/scope.py,sha256=UOTrbwqcTc5iRQf0WStgYWXpE24w6riZy-tJYA18yTw,31229
|
|
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.13.0.dist-info/licenses/LICENSE,sha256=p1Yk0B4oa0l8Rh-_dYyy75d8spjPd_vTloXfz4FWxys,1065
|
|
80
|
+
sqlglot-27.13.0.dist-info/METADATA,sha256=4SxxpIW6OjBvvVK7v-l1ZTZkrygK-UJ4K6YEh7qEe_Y,20682
|
|
81
|
+
sqlglot-27.13.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
82
|
+
sqlglot-27.13.0.dist-info/top_level.txt,sha256=5kRskCGA_gVADF9rSfSzPdLHXqvfMusDYeHePfNY2nQ,8
|
|
83
|
+
sqlglot-27.13.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|