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/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
- expression = self._try_parse(self._parse_term) or self._parse_factor()
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(exp.Escape, this=this, expression=self._parse_string())
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=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,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlglot
3
- Version: 27.28.1
3
+ Version: 27.29.0
4
4
  Summary: An easily customizable SQL parser and transpiler
5
5
  Author-email: Toby Mao <toby.mao@gmail.com>
6
6
  License-Expression: MIT
@@ -1,15 +1,15 @@
1
- sqlglot/__init__.py,sha256=za08rtdPh2v7dOpGdNomttlIVGgTrKja7rPd6sQwaTg,5391
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=a2s3xivaD0dEK5-MT3OUAmpTCsjQgqde6-5KQyvtpi8,708
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=IzTuOpj16YU8hqkpa82JSfhcQ_05DR8ER9agQYexFT8,262590
8
- sqlglot/generator.py,sha256=R6AmMoZAOQZS5r1odOcMbulJHNGArSCEgFgE48AtaAo,227334
9
- sqlglot/helper.py,sha256=OOt5_Mbmnl4Uy6WO6v7DR1iLPcb3v6ITybpq6usf3jw,14471
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=f3yT6sZzY2Plbo49Il8pfmGWuzRgKpSiORaEO4wUXsI,15475
12
- sqlglot/parser.py,sha256=RwvK9nX5vVU2nz8cFTBSvJ56kap8JzJ7aX7zqupfls4,338762
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=7RCx2S9NBBCREE6crIa_zHMHtf4QoVRxe2KjJf5FvZE,68631
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=2ReSGrvsJvZF0SnpZp-NFkcHqaiEPsRQEK4IvAGLqCk,74022
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=Hg-j3_AXJQ9WgrDQGT0WDR31N7Yag2aDK3wtuG3wf44,55825
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=nDwO8xERj0FD33qZMZcesEot6hbaifYQCnCUEpo5T0w,50043
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=DBnVQKXs8ZEapDB_fcM9k73dZO01byOWmbcReAIPwAw,34851
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=Mag5lU0Rx4ffXkIMrcwgw3fh3HrXaKHOunRZ9x4dkU0,84070
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=j83lEzkAWbw8LTkk1vxXrYA3d5pmcg8Ze8Xws001g7s,10450
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=FuEDDyKZeeWVblknhFSMX7dNoS-ci5ktXpSXZeBK5xA,13592
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=FslewzYQtQdDNg_0Ju2UaiP4vo4IMUgkfkmFsYUhcN0,2958
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=09GYRzrPn3lZGfDJY9pbONOvmYxsRyeSWjUiqkSRHGo,16661
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=oAPfwub7dEkrlCrsptcJWpLya4BgKhN6M5SwIs_86LY,4002
75
- sqlglot/optimizer/qualify_columns.py,sha256=yTEZ4_GBt0ml3g0xQNGu759m_gR3meF2geKEENCP1mc,45474
76
- sqlglot/optimizer/qualify_tables.py,sha256=asv18k_PXAett6xhCyjCBH4EycZk4WYSnNFLqoFfVQw,6687
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=TzbIh0XK0M92ZnCLtI4GI6UUX2eXqB-wQHizqGmX84E,51114
78
+ sqlglot/optimizer/simplify.py,sha256=j_mtvCGzflkoTGtIO1fvI1NIM5ATrTyBM0b_hZEp5Bk,51441
79
79
  sqlglot/optimizer/unnest_subqueries.py,sha256=zt5UFYGAfDBTDPbJCpzm4HbXDDia5GlyKZd3SdBXYEk,10906
80
- sqlglot-27.28.1.dist-info/licenses/LICENSE,sha256=p1Yk0B4oa0l8Rh-_dYyy75d8spjPd_vTloXfz4FWxys,1065
81
- sqlglot-27.28.1.dist-info/METADATA,sha256=e2Z2QQhb-a4xkhBzGcaTVSd2CUIynP-OUv-UcazYFeg,20825
82
- sqlglot-27.28.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
83
- sqlglot-27.28.1.dist-info/top_level.txt,sha256=5kRskCGA_gVADF9rSfSzPdLHXqvfMusDYeHePfNY2nQ,8
84
- sqlglot-27.28.1.dist-info/RECORD,,
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,,