sqlglot 26.30.0__py3-none-any.whl → 26.32.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/__init__.py +2 -0
- sqlglot/dialects/athena.py +237 -116
- sqlglot/dialects/bigquery.py +9 -4
- sqlglot/dialects/clickhouse.py +5 -0
- sqlglot/dialects/databricks.py +2 -0
- sqlglot/dialects/dialect.py +39 -19
- sqlglot/dialects/dremio.py +53 -0
- sqlglot/dialects/duckdb.py +45 -0
- sqlglot/dialects/exasol.py +89 -0
- sqlglot/dialects/fabric.py +60 -33
- sqlglot/dialects/presto.py +6 -0
- sqlglot/dialects/redshift.py +10 -2
- sqlglot/dialects/snowflake.py +3 -1
- sqlglot/dialects/spark2.py +2 -0
- sqlglot/dialects/tsql.py +7 -5
- sqlglot/expressions.py +44 -2
- sqlglot/generator.py +3 -3
- sqlglot/jsonpath.py +1 -1
- sqlglot/optimizer/annotate_types.py +13 -0
- sqlglot/optimizer/pushdown_predicates.py +2 -1
- sqlglot/optimizer/scope.py +13 -3
- sqlglot/parser.py +4 -3
- sqlglot/tokens.py +7 -1
- sqlglot/transforms.py +15 -1
- {sqlglot-26.30.0.dist-info → sqlglot-26.32.0.dist-info}/METADATA +2 -2
- {sqlglot-26.30.0.dist-info → sqlglot-26.32.0.dist-info}/RECORD +30 -28
- {sqlglot-26.30.0.dist-info → sqlglot-26.32.0.dist-info}/WHEEL +0 -0
- {sqlglot-26.30.0.dist-info → sqlglot-26.32.0.dist-info}/licenses/LICENSE +0 -0
- {sqlglot-26.30.0.dist-info → sqlglot-26.32.0.dist-info}/top_level.txt +0 -0
sqlglot/tokens.py
CHANGED
@@ -427,6 +427,9 @@ class TokenType(AutoName):
|
|
427
427
|
NAMESPACE = auto()
|
428
428
|
EXPORT = auto()
|
429
429
|
|
430
|
+
# sentinel
|
431
|
+
HIVE_TOKEN_STREAM = auto()
|
432
|
+
|
430
433
|
|
431
434
|
_ALL_TOKEN_TYPES = list(TokenType)
|
432
435
|
_TOKEN_TYPE_TO_INDEX = {token_type: i for i, token_type in enumerate(_ALL_TOKEN_TYPES)}
|
@@ -1014,7 +1017,10 @@ class Tokenizer(metaclass=_Tokenizer):
|
|
1014
1017
|
)
|
1015
1018
|
|
1016
1019
|
def __init__(
|
1017
|
-
self,
|
1020
|
+
self,
|
1021
|
+
dialect: DialectType = None,
|
1022
|
+
use_rs_tokenizer: t.Optional[bool] = None,
|
1023
|
+
**opts: t.Any,
|
1018
1024
|
) -> None:
|
1019
1025
|
from sqlglot.dialects import Dialect
|
1020
1026
|
|
sqlglot/transforms.py
CHANGED
@@ -352,13 +352,20 @@ def unnest_to_explode(
|
|
352
352
|
has_multi_expr = len(exprs) > 1
|
353
353
|
this, *expressions = _unnest_zip_exprs(unnest, exprs, has_multi_expr)
|
354
354
|
|
355
|
+
columns = alias.columns if alias else []
|
356
|
+
offset = unnest.args.get("offset")
|
357
|
+
if offset:
|
358
|
+
columns.insert(
|
359
|
+
0, offset if isinstance(offset, exp.Identifier) else exp.to_identifier("pos")
|
360
|
+
)
|
361
|
+
|
355
362
|
unnest.replace(
|
356
363
|
exp.Table(
|
357
364
|
this=_udtf_type(unnest, has_multi_expr)(
|
358
365
|
this=this,
|
359
366
|
expressions=expressions,
|
360
367
|
),
|
361
|
-
alias=exp.TableAlias(this=alias.this, columns=
|
368
|
+
alias=exp.TableAlias(this=alias.this, columns=columns) if alias else None,
|
362
369
|
)
|
363
370
|
)
|
364
371
|
|
@@ -393,6 +400,13 @@ def unnest_to_explode(
|
|
393
400
|
"CROSS JOIN UNNEST to LATERAL VIEW EXPLODE transformation requires explicit column aliases"
|
394
401
|
)
|
395
402
|
|
403
|
+
offset = unnest.args.get("offset")
|
404
|
+
if offset:
|
405
|
+
alias_cols.insert(
|
406
|
+
0,
|
407
|
+
offset if isinstance(offset, exp.Identifier) else exp.to_identifier("pos"),
|
408
|
+
)
|
409
|
+
|
396
410
|
for e, column in zip(exprs, alias_cols):
|
397
411
|
expression.append(
|
398
412
|
"laterals",
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: sqlglot
|
3
|
-
Version: 26.
|
3
|
+
Version: 26.32.0
|
4
4
|
Summary: An easily customizable SQL parser and transpiler
|
5
5
|
Author-email: Toby Mao <toby.mao@gmail.com>
|
6
6
|
License: MIT License
|
@@ -61,7 +61,7 @@ Dynamic: provides-extra
|
|
61
61
|
|
62
62
|

|
63
63
|
|
64
|
-
SQLGlot is a no-dependency SQL parser, transpiler, optimizer, and engine. It can be used to format SQL or translate between [
|
64
|
+
SQLGlot is a no-dependency SQL parser, transpiler, optimizer, and engine. It can be used to format SQL or translate between [29 different dialects](https://github.com/tobymao/sqlglot/blob/main/sqlglot/dialects/__init__.py) like [DuckDB](https://duckdb.org/), [Presto](https://prestodb.io/) / [Trino](https://trino.io/), [Spark](https://spark.apache.org/) / [Databricks](https://www.databricks.com/), [Snowflake](https://www.snowflake.com/en/), and [BigQuery](https://cloud.google.com/bigquery/). It aims to read a wide variety of SQL inputs and output syntactically and semantically correct SQL in the targeted dialects.
|
65
65
|
|
66
66
|
It is a very comprehensive generic SQL parser with a robust [test suite](https://github.com/tobymao/sqlglot/blob/main/tests/). It is also quite [performant](#benchmarks), while being written purely in Python.
|
67
67
|
|
@@ -1,60 +1,62 @@
|
|
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=a_It9JwWrgyjKVWp4-1klpG0OQem5zJtgb83vsDFdkQ,515
|
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=4ucsMtJKzFpFm_SLb5YylQGsAjIbrwYprwk2QEKUKK4,244025
|
8
|
+
sqlglot/generator.py,sha256=Od0aBsKJph1wG_YhrknJAcAcVvuVIN823iyxA3KPi0Y,213383
|
9
9
|
sqlglot/helper.py,sha256=9nZjFVRBtMKFC3EdzpDQ6jkazFO19po6BF8xHiNGZIo,15111
|
10
|
-
sqlglot/jsonpath.py,sha256=
|
10
|
+
sqlglot/jsonpath.py,sha256=jneO-A57n4ojVT2drCn2HBlx_Ka8wLcGpemW1JgvbjA,7666
|
11
11
|
sqlglot/lineage.py,sha256=kXBDSErmZZluZx_kkrMj4MPEOAbkvcbX1tbOW7Bpl-U,15303
|
12
|
-
sqlglot/parser.py,sha256=
|
12
|
+
sqlglot/parser.py,sha256=uoqObZn91ixqajoTUvHYiZXylaMbsuL2c4bdSyOCSFU,324616
|
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=
|
19
|
-
sqlglot/transforms.py,sha256=
|
18
|
+
sqlglot/tokens.py,sha256=QciEA4QXiUmoVLWbd67Uf90BQvGaAvnYiZm9plqIpC8,48829
|
19
|
+
sqlglot/transforms.py,sha256=s96QMtR7rJbcLAU1I_IF1xLNxno6yvEbhERgbS5xmJ4,41164
|
20
20
|
sqlglot/trie.py,sha256=v27uXMrHfqrXlJ6GmeTSMovsB_3o0ctnlKhdNt7W6fI,2245
|
21
|
-
sqlglot/dialects/__init__.py,sha256=
|
22
|
-
sqlglot/dialects/athena.py,sha256=
|
23
|
-
sqlglot/dialects/bigquery.py,sha256=
|
24
|
-
sqlglot/dialects/clickhouse.py,sha256=
|
25
|
-
sqlglot/dialects/databricks.py,sha256=
|
26
|
-
sqlglot/dialects/dialect.py,sha256
|
21
|
+
sqlglot/dialects/__init__.py,sha256=uxgw-b-QoqVFGbj1zW0p61f1mhV9oF0qscuBB0e7bkI,3541
|
22
|
+
sqlglot/dialects/athena.py,sha256=ofArmayYLev4qZQ15GM8mevG04qqR5WGFb2ZcuYm6x4,10966
|
23
|
+
sqlglot/dialects/bigquery.py,sha256=0HyMete6v-x1Thp9FVCppVjQoAcgenqg7Zl7wGPh3dA,53002
|
24
|
+
sqlglot/dialects/clickhouse.py,sha256=U_s6fRQbj3eFEaNw7N7UWC8EzYnFVYI-KKIsk-IU1I4,56936
|
25
|
+
sqlglot/dialects/databricks.py,sha256=mJN2lFpqgH95x3mtry3qWbuRf4q7NV5jbRAOspqclzY,4548
|
26
|
+
sqlglot/dialects/dialect.py,sha256=ef933149Zk4tvoNmEAu7W6bteRbMkxnoBValfIVDOso,69667
|
27
27
|
sqlglot/dialects/doris.py,sha256=eC7Ct-iz7p4Usz659NkelUFhm-GmVolIZy5uaBvgjaA,14397
|
28
|
+
sqlglot/dialects/dremio.py,sha256=qTKZnVBGw6Tfco9MmsfIhKKYqJ4_TXaEhDCbEKNU9Uw,1866
|
28
29
|
sqlglot/dialects/drill.py,sha256=FOh7_KjPx_77pv0DiHKZog0CcmzqeF9_PEmGnJ1ESSM,5825
|
29
30
|
sqlglot/dialects/druid.py,sha256=kh3snZtneehNOWqs3XcPjsrhNaRbkCQ8E4hHbWJ1fHM,690
|
30
|
-
sqlglot/dialects/duckdb.py,sha256=
|
31
|
+
sqlglot/dialects/duckdb.py,sha256=L1pNYEQjiH2dYJurMXXYihgRalN9gZhmd5LoqCr_wvg,50015
|
31
32
|
sqlglot/dialects/dune.py,sha256=gALut-fFfN2qMsr8LvZ1NQK3F3W9z2f4PwMvTMXVVVg,375
|
32
|
-
sqlglot/dialects/
|
33
|
+
sqlglot/dialects/exasol.py,sha256=SbLg6l_BgI_hyZvLnnMh6m3WnBSqB3ZavLbLqE_vfjI,4726
|
34
|
+
sqlglot/dialects/fabric.py,sha256=IU7aMh2yEuG8eVBAYzXO5pObZBZ4rZSd5UgvkwbCI-E,5277
|
33
35
|
sqlglot/dialects/hive.py,sha256=yKCsVN4R8pIB2Lmx1YGiSR9b8Me3li6rsGuZrKjHTo4,31771
|
34
36
|
sqlglot/dialects/materialize.py,sha256=_DPLPt8YrdQIIXNrGJw1IMcGOoAEJ9NO9X9pDfy4hxs,3494
|
35
37
|
sqlglot/dialects/mysql.py,sha256=prZecn3zeoifZX7l54UuLG64ar7I-or_z9lF-rT8bds,49233
|
36
38
|
sqlglot/dialects/oracle.py,sha256=o6On1cYWFt6TpQYKuzo4kCz5vKb8jQr8WSwc619h3Lg,15967
|
37
39
|
sqlglot/dialects/postgres.py,sha256=KUyMoLkm1_sZKUbdjn6bjXx9xz7sbEMKa-fl5Mzfrsk,31025
|
38
|
-
sqlglot/dialects/presto.py,sha256=
|
40
|
+
sqlglot/dialects/presto.py,sha256=Tm3Bx9AJilT1xlgunTpF0wUhIZBOPS-rB5Iwitnygxc,33462
|
39
41
|
sqlglot/dialects/prql.py,sha256=fwN-SPEGx-drwf1K0U2MByN-PkW3C_rOgQ3xeJeychg,7908
|
40
|
-
sqlglot/dialects/redshift.py,sha256=
|
42
|
+
sqlglot/dialects/redshift.py,sha256=sHhibn2g6_hVRd1XEe8HSQd_ofWkEpzld0odsNQ6X2g,15747
|
41
43
|
sqlglot/dialects/risingwave.py,sha256=hwEOPjMw0ZM_3fjQcBUE00oy6I8V6mzYOOYmcwwS8mw,2898
|
42
|
-
sqlglot/dialects/snowflake.py,sha256=
|
44
|
+
sqlglot/dialects/snowflake.py,sha256=68I7OjdWXSVnDxJ-ItmXnJd-A1nlND1T6aKNv0nkJlQ,63518
|
43
45
|
sqlglot/dialects/spark.py,sha256=bOUSXUoWtLfWaQ9fIjWaw4zLBJY6N7vxajdMbAxLdOk,8307
|
44
|
-
sqlglot/dialects/spark2.py,sha256=
|
46
|
+
sqlglot/dialects/spark2.py,sha256=EsuPGf0WQQzLy16D_uzVF0zKPyiiyxqfEQmsTegZ_IQ,14359
|
45
47
|
sqlglot/dialects/sqlite.py,sha256=fwqmopeuoupD_2dh2q6rT3UFxWtFHkskZ1OXAYnPT9Q,12483
|
46
48
|
sqlglot/dialects/starrocks.py,sha256=fHNgvq5Nz7dI4QUWCTOO5VDOYjasBxRRlcg9TbY0UZE,11235
|
47
49
|
sqlglot/dialects/tableau.py,sha256=oIawDzUITxGCWaEMB8OaNMPWhbC3U-2y09pYPm4eazc,2190
|
48
50
|
sqlglot/dialects/teradata.py,sha256=xWa-9kSTsT-eM1NePi_oIM1dPHmXW89GLU5Uda3_6Ao,14036
|
49
51
|
sqlglot/dialects/trino.py,sha256=wgLsiX1NQvjGny_rgrU1e2r6kK1LD0KgaSdIDrYmjD0,4285
|
50
|
-
sqlglot/dialects/tsql.py,sha256=
|
52
|
+
sqlglot/dialects/tsql.py,sha256=dKlGmOmRFDx2MO5YebAAIK3FHorLZfzR0iqtK6xiiX4,54540
|
51
53
|
sqlglot/executor/__init__.py,sha256=FslewzYQtQdDNg_0Ju2UaiP4vo4IMUgkfkmFsYUhcN0,2958
|
52
54
|
sqlglot/executor/context.py,sha256=WJHJdYQCOeVXwLw0uSSrWSc25eBMn5Ix108RCvdsKRQ,3386
|
53
55
|
sqlglot/executor/env.py,sha256=tQhU5PpTBMcxgZIFddFqxWMNPtHN0vOOz72voncY3KY,8276
|
54
56
|
sqlglot/executor/python.py,sha256=09GYRzrPn3lZGfDJY9pbONOvmYxsRyeSWjUiqkSRHGo,16661
|
55
57
|
sqlglot/executor/table.py,sha256=xkuJlgLVNYUXsSUaX0zTcnFekldXLLU8LqDyjR5K9wY,4419
|
56
58
|
sqlglot/optimizer/__init__.py,sha256=FdAvVz6rQLLkiiH21-SD4RxB5zS3WDeU-s03PZkJ-F4,343
|
57
|
-
sqlglot/optimizer/annotate_types.py,sha256
|
59
|
+
sqlglot/optimizer/annotate_types.py,sha256=Ndfdvc0OO07DCCFuryK1tHkX9ydS-dMxKPgaZU0knWY,24619
|
58
60
|
sqlglot/optimizer/canonicalize.py,sha256=RJpUbWDudjknRMtO_Kf8MGZ5Hv1twpPWac2u5kpV4Vw,7719
|
59
61
|
sqlglot/optimizer/eliminate_ctes.py,sha256=fUBM0RUnPrm2sYptEWBux98B7fcx7W-BM1zVqfgDz9c,1448
|
60
62
|
sqlglot/optimizer/eliminate_joins.py,sha256=5Whliegc7U8BnS6tlrl9wkeAgyP1NpgCCAPxChHzFfw,5874
|
@@ -65,16 +67,16 @@ sqlglot/optimizer/normalize.py,sha256=wu3GeKY36PLyAb9f534jDDfzDwvZJpZ8g_H5QH6acZ
|
|
65
67
|
sqlglot/optimizer/normalize_identifiers.py,sha256=uD4xICJAgj0X7EFc2LYcDWxAW2aTHANO2wy7kfn9gfY,2098
|
66
68
|
sqlglot/optimizer/optimize_joins.py,sha256=LLBH6Zk0Uegsff48soJgJqhpGXkQx5VstGEt40vsjrg,2991
|
67
69
|
sqlglot/optimizer/optimizer.py,sha256=vXEXDWHvbO-vJmSI7UqJuydM2WrD1xko7rETq2EtVJo,3533
|
68
|
-
sqlglot/optimizer/pushdown_predicates.py,sha256=
|
70
|
+
sqlglot/optimizer/pushdown_predicates.py,sha256=HGjs3Z4V3-X2d1VTfWhyByY3aL5SmKnVvt3aDXiiBM0,8414
|
69
71
|
sqlglot/optimizer/pushdown_projections.py,sha256=7NoK5NAUVYVhs0YnYyo6WuXfaO-BShSwS6lA8Y-ATQ4,6668
|
70
72
|
sqlglot/optimizer/qualify.py,sha256=oAPfwub7dEkrlCrsptcJWpLya4BgKhN6M5SwIs_86LY,4002
|
71
73
|
sqlglot/optimizer/qualify_columns.py,sha256=77aScPakXYaiagnoCWk2qwMxlKuRGsFTAK9sOQuR2vY,40872
|
72
74
|
sqlglot/optimizer/qualify_tables.py,sha256=5f5enBAh-bpNB9ewF97W9fx9h1TGXj1Ih5fncvH42sY,6486
|
73
|
-
sqlglot/optimizer/scope.py,sha256=
|
75
|
+
sqlglot/optimizer/scope.py,sha256=HI3TZ4VWTgM6_x8k5ClA0lA0xidaKv4xgn8iGERJRjk,30824
|
74
76
|
sqlglot/optimizer/simplify.py,sha256=S0Blqg5Mq2KRRWhWz-Eivch9sBjBhg9fRJA6EdBzj2g,50704
|
75
77
|
sqlglot/optimizer/unnest_subqueries.py,sha256=kzWUVDlxs8z9nmRx-8U-pHXPtVZhEIwkKqmKhr2QLvc,10908
|
76
|
-
sqlglot-26.
|
77
|
-
sqlglot-26.
|
78
|
-
sqlglot-26.
|
79
|
-
sqlglot-26.
|
80
|
-
sqlglot-26.
|
78
|
+
sqlglot-26.32.0.dist-info/licenses/LICENSE,sha256=AI3__mHZfOtzY3EluR_pIYBm3_pE7TbVx7qaHxoZ114,1065
|
79
|
+
sqlglot-26.32.0.dist-info/METADATA,sha256=SeIGypJ6sJWF3j-g1zmBeptAwZOPUn61UyUJyp7qF5k,20732
|
80
|
+
sqlglot-26.32.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
81
|
+
sqlglot-26.32.0.dist-info/top_level.txt,sha256=5kRskCGA_gVADF9rSfSzPdLHXqvfMusDYeHePfNY2nQ,8
|
82
|
+
sqlglot-26.32.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|