sqlglot 27.28.1__py3-none-any.whl → 27.29.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/__init__.py +1 -0
- sqlglot/_version.py +2 -2
- sqlglot/dialects/bigquery.py +1 -0
- sqlglot/dialects/dialect.py +45 -7
- sqlglot/dialects/duckdb.py +17 -3
- sqlglot/dialects/mysql.py +1 -0
- sqlglot/dialects/postgres.py +14 -2
- sqlglot/dialects/snowflake.py +55 -18
- sqlglot/dialects/spark.py +3 -0
- sqlglot/dialects/sqlite.py +1 -0
- sqlglot/executor/__init__.py +5 -10
- sqlglot/executor/python.py +1 -29
- sqlglot/expressions.py +102 -12
- sqlglot/generator.py +16 -2
- sqlglot/helper.py +0 -42
- sqlglot/lineage.py +1 -1
- sqlglot/optimizer/qualify.py +5 -5
- sqlglot/optimizer/qualify_columns.py +89 -9
- sqlglot/optimizer/qualify_tables.py +33 -23
- sqlglot/optimizer/simplify.py +12 -7
- sqlglot/parser.py +16 -8
- {sqlglot-27.28.1.dist-info → sqlglot-27.29.0.dist-info}/METADATA +1 -1
- {sqlglot-27.28.1.dist-info → sqlglot-27.29.0.dist-info}/RECORD +26 -26
- {sqlglot-27.28.1.dist-info → sqlglot-27.29.0.dist-info}/WHEEL +0 -0
- {sqlglot-27.28.1.dist-info → sqlglot-27.29.0.dist-info}/licenses/LICENSE +0 -0
- {sqlglot-27.28.1.dist-info → sqlglot-27.29.0.dist-info}/top_level.txt +0 -0
sqlglot/parser.py
CHANGED
|
@@ -4786,8 +4786,13 @@ class Parser(metaclass=_Parser):
|
|
|
4786
4786
|
# Parsing LIMIT x% (i.e x PERCENT) as a term leads to an error, since
|
|
4787
4787
|
# we try to build an exp.Mod expr. For that matter, we backtrack and instead
|
|
4788
4788
|
# consume the factor plus parse the percentage separately
|
|
4789
|
-
|
|
4790
|
-
|
|
4789
|
+
index = self._index
|
|
4790
|
+
expression = self._try_parse(self._parse_term)
|
|
4791
|
+
if isinstance(expression, exp.Mod):
|
|
4792
|
+
self._retreat(index)
|
|
4793
|
+
expression = self._parse_factor()
|
|
4794
|
+
elif not expression:
|
|
4795
|
+
expression = self._parse_factor()
|
|
4791
4796
|
limit_options = self._parse_limit_options()
|
|
4792
4797
|
|
|
4793
4798
|
if self._match(TokenType.COMMA):
|
|
@@ -5115,7 +5120,9 @@ class Parser(metaclass=_Parser):
|
|
|
5115
5120
|
def _parse_escape(self, this: t.Optional[exp.Expression]) -> t.Optional[exp.Expression]:
|
|
5116
5121
|
if not self._match(TokenType.ESCAPE):
|
|
5117
5122
|
return this
|
|
5118
|
-
return self.expression(
|
|
5123
|
+
return self.expression(
|
|
5124
|
+
exp.Escape, this=this, expression=self._parse_string() or self._parse_null()
|
|
5125
|
+
)
|
|
5119
5126
|
|
|
5120
5127
|
def _parse_interval(self, match_interval: bool = True) -> t.Optional[exp.Add | exp.Interval]:
|
|
5121
5128
|
index = self._index
|
|
@@ -7962,14 +7969,12 @@ class Parser(metaclass=_Parser):
|
|
|
7962
7969
|
self._match(TokenType.USING)
|
|
7963
7970
|
using = self._parse_table()
|
|
7964
7971
|
|
|
7965
|
-
self._match(TokenType.ON)
|
|
7966
|
-
on = self._parse_assignment()
|
|
7967
|
-
|
|
7968
7972
|
return self.expression(
|
|
7969
7973
|
exp.Merge,
|
|
7970
7974
|
this=target,
|
|
7971
7975
|
using=using,
|
|
7972
|
-
on=
|
|
7976
|
+
on=self._match(TokenType.ON) and self._parse_assignment(),
|
|
7977
|
+
using_cond=self._match(TokenType.USING) and self._parse_using_identifiers(),
|
|
7973
7978
|
whens=self._parse_when_matched(),
|
|
7974
7979
|
returning=self._parse_returning(),
|
|
7975
7980
|
)
|
|
@@ -8162,6 +8167,8 @@ class Parser(metaclass=_Parser):
|
|
|
8162
8167
|
) -> t.Optional[exp.Comprehension]:
|
|
8163
8168
|
index = self._index
|
|
8164
8169
|
expression = self._parse_column()
|
|
8170
|
+
position = self._match(TokenType.COMMA) and self._parse_column()
|
|
8171
|
+
|
|
8165
8172
|
if not self._match(TokenType.IN):
|
|
8166
8173
|
self._retreat(index - 1)
|
|
8167
8174
|
return None
|
|
@@ -8171,6 +8178,7 @@ class Parser(metaclass=_Parser):
|
|
|
8171
8178
|
exp.Comprehension,
|
|
8172
8179
|
this=this,
|
|
8173
8180
|
expression=expression,
|
|
8181
|
+
position=position,
|
|
8174
8182
|
iterator=iterator,
|
|
8175
8183
|
condition=condition,
|
|
8176
8184
|
)
|
|
@@ -8446,7 +8454,7 @@ class Parser(metaclass=_Parser):
|
|
|
8446
8454
|
# T-SQL's external file format case
|
|
8447
8455
|
param.set("expression", self._parse_field())
|
|
8448
8456
|
else:
|
|
8449
|
-
param.set("expression", self._parse_unquoted_field())
|
|
8457
|
+
param.set("expression", self._parse_unquoted_field() or self._parse_bracket())
|
|
8450
8458
|
|
|
8451
8459
|
options.append(param)
|
|
8452
8460
|
self._match(sep)
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
sqlglot/__init__.py,sha256=
|
|
1
|
+
sqlglot/__init__.py,sha256=XtHbbz93ughtCoKNYTbB8UftQvN5Bzt8fJZcD09ZcM8,5423
|
|
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=h9ZeQ1yOsgEUuiHW6osLXcdVGcsDFzhz_C0rPFXye68,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=
|
|
9
|
-
sqlglot/helper.py,sha256=
|
|
7
|
+
sqlglot/expressions.py,sha256=rzrndCpKPo1dWx4qLzXV7J3bVPSv8azQeBjiS5oeZCI,264458
|
|
8
|
+
sqlglot/generator.py,sha256=k83HtSt_gdXq1N4rLvoLnatB47LlVdyWUsPqCnsA_tI,227922
|
|
9
|
+
sqlglot/helper.py,sha256=ojeQFAT6N5fFzz8mEbXVFLst6FmdPVVWimqSXIWTs7U,13435
|
|
10
10
|
sqlglot/jsonpath.py,sha256=SQgaxzaEYBN7At9dkTK4N1Spk6xHxvHL6QtCIP6iM30,7905
|
|
11
|
-
sqlglot/lineage.py,sha256=
|
|
12
|
-
sqlglot/parser.py,sha256=
|
|
11
|
+
sqlglot/lineage.py,sha256=OsJXG4tsXCkG-0RhU-EQTaTUUBgLimzbKJ-YC4yScqQ,15489
|
|
12
|
+
sqlglot/parser.py,sha256=ILvEDrFHIFOVgIh4TABjttGzqwRyTrTfht_sbE-Q-IU,339253
|
|
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,42 +20,42 @@ sqlglot/transforms.py,sha256=14RbNbPBL3O4vOQPEbQlBTizK8L-Y85Lj47iguW8ucc,40165
|
|
|
20
20
|
sqlglot/trie.py,sha256=v27uXMrHfqrXlJ6GmeTSMovsB_3o0ctnlKhdNt7W6fI,2245
|
|
21
21
|
sqlglot/dialects/__init__.py,sha256=g3HRtyb32r3LooiHKTzuUNB0_rBO_RauuOegp42gB48,3811
|
|
22
22
|
sqlglot/dialects/athena.py,sha256=ofArmayYLev4qZQ15GM8mevG04qqR5WGFb2ZcuYm6x4,10966
|
|
23
|
-
sqlglot/dialects/bigquery.py,sha256=
|
|
23
|
+
sqlglot/dialects/bigquery.py,sha256=iq8YI0x8uRh1mrtJ7fvK0HMN6OaykLhFKRR2iVraD6s,68655
|
|
24
24
|
sqlglot/dialects/clickhouse.py,sha256=bV9wlcaKC020up7WYz2Me0eti_hYxHq4GzLbAdbyOYY,58750
|
|
25
25
|
sqlglot/dialects/databricks.py,sha256=H4QTq7gg6tJylKc_YWsGp6049KydoI_wlQUHM7iCJtI,4753
|
|
26
|
-
sqlglot/dialects/dialect.py,sha256=
|
|
26
|
+
sqlglot/dialects/dialect.py,sha256=mnBoH-U7tk_5qG1vECReQqQpilbCRuseAcu7dJpCcd8,75644
|
|
27
27
|
sqlglot/dialects/doris.py,sha256=CFnF955Oav3IjZWA80ickOI8tPpCjxk7BN5R4Z6pA1U,25263
|
|
28
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=dG5_9GMia_EkFfg7ufVyM5ljYQnVy_4gxRhVa8NtdFw,56463
|
|
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=BdkvzM8s-m5DIdBwdjEYskp32ub7aHCAex_xlhQn92I,10222
|
|
35
35
|
sqlglot/dialects/hive.py,sha256=Uw-7Y1LnYOdcv71jCIZXhMvJAWwU5AVcFlIuM-YArnY,34530
|
|
36
36
|
sqlglot/dialects/materialize.py,sha256=LD2q1kTRrCwkIu1BfoBvnjTGbupDtoQ8JQMDCIYAXHg,3533
|
|
37
|
-
sqlglot/dialects/mysql.py,sha256=
|
|
37
|
+
sqlglot/dialects/mysql.py,sha256=y1z2FBNQIxYf8FIpskmdLd-SWDT1KO_b06PvfV2R0jc,50089
|
|
38
38
|
sqlglot/dialects/oracle.py,sha256=qB6Ga0Si2-TpVNqU_2COvWESIUYNL32rYk_BC9aiujE,15898
|
|
39
|
-
sqlglot/dialects/postgres.py,sha256=
|
|
39
|
+
sqlglot/dialects/postgres.py,sha256=Gzf7PSdNoASxxfOo8ss0bI-io7hMCKsii8gzhFsFn0U,35313
|
|
40
40
|
sqlglot/dialects/presto.py,sha256=5C6I_aDC-9CDrLfY97EFsUWymaS3B7aW_-h-mHleWIQ,33339
|
|
41
41
|
sqlglot/dialects/prql.py,sha256=fwN-SPEGx-drwf1K0U2MByN-PkW3C_rOgQ3xeJeychg,7908
|
|
42
42
|
sqlglot/dialects/redshift.py,sha256=FIwtP3yEg-way9pa32kxCJc6IaFkHVIvgYKZA-Ilmi0,15919
|
|
43
43
|
sqlglot/dialects/risingwave.py,sha256=Wd-I_Hbwl-6Rgf_NM0I_axliInY418k2kaAWRCmaqyE,3791
|
|
44
44
|
sqlglot/dialects/singlestore.py,sha256=0QqNYOucNklPQuyeGcsisLI97qPGx_RfWKOFarJz2qw,61711
|
|
45
|
-
sqlglot/dialects/snowflake.py,sha256=
|
|
45
|
+
sqlglot/dialects/snowflake.py,sha256=emIbMz7kXbEsn9R3cwmcHDLq0aNLNV1D1Q7WFCgY-KQ,85617
|
|
46
46
|
sqlglot/dialects/solr.py,sha256=pydnl4ml-3M1Fc4ALm6cMVO9h-5EtqZxPZH_91Nz1Ss,617
|
|
47
|
-
sqlglot/dialects/spark.py,sha256=
|
|
47
|
+
sqlglot/dialects/spark.py,sha256=XBuw-CUCw0I-e7cx9lVAUkeFV-GYRp7fbcTVjXK1aCk,10552
|
|
48
48
|
sqlglot/dialects/spark2.py,sha256=s4RTOGunYT1_HJt4KbhBWK_eOgmtzlpBCQCl60KEPAQ,15621
|
|
49
|
-
sqlglot/dialects/sqlite.py,sha256=
|
|
49
|
+
sqlglot/dialects/sqlite.py,sha256=ghC8VaMSQj2h7M1TgWvhgza4ugjs-0dmtbStx1BrpbE,13638
|
|
50
50
|
sqlglot/dialects/starrocks.py,sha256=iTnVIKwjaInc_iOs21BFf7-5HEhjVodXBMmIOhMwVvo,11539
|
|
51
51
|
sqlglot/dialects/tableau.py,sha256=oIawDzUITxGCWaEMB8OaNMPWhbC3U-2y09pYPm4eazc,2190
|
|
52
52
|
sqlglot/dialects/teradata.py,sha256=7LxCcRwP0Idd_OnCzA57NCdheVjHcKC2aFAKG5N49IU,18202
|
|
53
53
|
sqlglot/dialects/trino.py,sha256=Z7prRhCxIBh0KCxIQpWmVOIGHCJM9Xl5oRlqySxln4Y,4350
|
|
54
54
|
sqlglot/dialects/tsql.py,sha256=P3G2P6UY77x4xakwCoppO4MD-GZIaxsqu8RhMotNdn4,55035
|
|
55
|
-
sqlglot/executor/__init__.py,sha256=
|
|
55
|
+
sqlglot/executor/__init__.py,sha256=OfjbXmfIbD7azL72X47suMjYaIp1qZfmAFzCyc1jSiY,2827
|
|
56
56
|
sqlglot/executor/context.py,sha256=WJHJdYQCOeVXwLw0uSSrWSc25eBMn5Ix108RCvdsKRQ,3386
|
|
57
57
|
sqlglot/executor/env.py,sha256=tQhU5PpTBMcxgZIFddFqxWMNPtHN0vOOz72voncY3KY,8276
|
|
58
|
-
sqlglot/executor/python.py,sha256=
|
|
58
|
+
sqlglot/executor/python.py,sha256=0A9rNH1jJEykTid4uA00Iq1VNA6KyV4L8U33Kq8x9U4,15549
|
|
59
59
|
sqlglot/executor/table.py,sha256=xkuJlgLVNYUXsSUaX0zTcnFekldXLLU8LqDyjR5K9wY,4419
|
|
60
60
|
sqlglot/optimizer/__init__.py,sha256=FdAvVz6rQLLkiiH21-SD4RxB5zS3WDeU-s03PZkJ-F4,343
|
|
61
61
|
sqlglot/optimizer/annotate_types.py,sha256=kCPwrbBXSiO0oJUlkw8NkdsoLgjJ4l5LOouCHPqOFlA,26728
|
|
@@ -71,14 +71,14 @@ sqlglot/optimizer/optimize_joins.py,sha256=nnfRpL03lpDQF1oBO1EgaABqnr6t2GP6uMWoS
|
|
|
71
71
|
sqlglot/optimizer/optimizer.py,sha256=vXEXDWHvbO-vJmSI7UqJuydM2WrD1xko7rETq2EtVJo,3533
|
|
72
72
|
sqlglot/optimizer/pushdown_predicates.py,sha256=HGjs3Z4V3-X2d1VTfWhyByY3aL5SmKnVvt3aDXiiBM0,8414
|
|
73
73
|
sqlglot/optimizer/pushdown_projections.py,sha256=7NoK5NAUVYVhs0YnYyo6WuXfaO-BShSwS6lA8Y-ATQ4,6668
|
|
74
|
-
sqlglot/optimizer/qualify.py,sha256=
|
|
75
|
-
sqlglot/optimizer/qualify_columns.py,sha256=
|
|
76
|
-
sqlglot/optimizer/qualify_tables.py,sha256=
|
|
74
|
+
sqlglot/optimizer/qualify.py,sha256=ltamcGvOy_9FGRL58MlT_4hCYaSjSqKWyOQmWtytrm4,3968
|
|
75
|
+
sqlglot/optimizer/qualify_columns.py,sha256=QyA9G6FKZsdnCsfEwk-W_HNiHQckCUrhv7Vq2yog1B0,49169
|
|
76
|
+
sqlglot/optimizer/qualify_tables.py,sha256=MJlPbn4okemhtPf8pUFEQTNMzUWL7Yb_W-qqH3ihzJ0,6924
|
|
77
77
|
sqlglot/optimizer/scope.py,sha256=UOTrbwqcTc5iRQf0WStgYWXpE24w6riZy-tJYA18yTw,31229
|
|
78
|
-
sqlglot/optimizer/simplify.py,sha256=
|
|
78
|
+
sqlglot/optimizer/simplify.py,sha256=j_mtvCGzflkoTGtIO1fvI1NIM5ATrTyBM0b_hZEp5Bk,51441
|
|
79
79
|
sqlglot/optimizer/unnest_subqueries.py,sha256=zt5UFYGAfDBTDPbJCpzm4HbXDDia5GlyKZd3SdBXYEk,10906
|
|
80
|
-
sqlglot-27.
|
|
81
|
-
sqlglot-27.
|
|
82
|
-
sqlglot-27.
|
|
83
|
-
sqlglot-27.
|
|
84
|
-
sqlglot-27.
|
|
80
|
+
sqlglot-27.29.0.dist-info/licenses/LICENSE,sha256=p1Yk0B4oa0l8Rh-_dYyy75d8spjPd_vTloXfz4FWxys,1065
|
|
81
|
+
sqlglot-27.29.0.dist-info/METADATA,sha256=9YrcFQc2z4TqG_sOk8WzijOpN7UkDr1JjV4CVFWN9XI,20825
|
|
82
|
+
sqlglot-27.29.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
83
|
+
sqlglot-27.29.0.dist-info/top_level.txt,sha256=5kRskCGA_gVADF9rSfSzPdLHXqvfMusDYeHePfNY2nQ,8
|
|
84
|
+
sqlglot-27.29.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|