pytrilogy 0.0.3.13__py3-none-any.whl → 0.0.3.15__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.
Potentially problematic release.
This version of pytrilogy might be problematic. Click here for more details.
- {pytrilogy-0.0.3.13.dist-info → pytrilogy-0.0.3.15.dist-info}/METADATA +1 -1
- {pytrilogy-0.0.3.13.dist-info → pytrilogy-0.0.3.15.dist-info}/RECORD +12 -12
- trilogy/__init__.py +1 -1
- trilogy/core/models/execute.py +16 -8
- trilogy/dialect/base.py +3 -3
- trilogy/dialect/common.py +2 -0
- trilogy/dialect/duckdb.py +7 -4
- trilogy/parsing/trilogy.lark +1 -1
- {pytrilogy-0.0.3.13.dist-info → pytrilogy-0.0.3.15.dist-info}/LICENSE.md +0 -0
- {pytrilogy-0.0.3.13.dist-info → pytrilogy-0.0.3.15.dist-info}/WHEEL +0 -0
- {pytrilogy-0.0.3.13.dist-info → pytrilogy-0.0.3.15.dist-info}/entry_points.txt +0 -0
- {pytrilogy-0.0.3.13.dist-info → pytrilogy-0.0.3.15.dist-info}/top_level.txt +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
trilogy/__init__.py,sha256=
|
|
1
|
+
trilogy/__init__.py,sha256=dQLlzVN1-wRNC2tkPWtZ4fJdrTZb_EKNbbMzGQyRUP4,303
|
|
2
2
|
trilogy/compiler.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
3
|
trilogy/constants.py,sha256=qZ1d0hoKPPV2HHCoFwPYTVB7b6bXjpWvXd3lE-zEhy8,1494
|
|
4
4
|
trilogy/engine.py,sha256=OK2RuqCIUId6yZ5hfF8J1nxGP0AJqHRZiafcowmW0xc,1728
|
|
@@ -27,7 +27,7 @@ trilogy/core/models/build_environment.py,sha256=8UggvlPU708GZWYPJMc_ou2r7M3TY2g6
|
|
|
27
27
|
trilogy/core/models/core.py,sha256=00opIUXwgJy9OF-cwI883zQpArNeh6wkTpSqUszDU78,9909
|
|
28
28
|
trilogy/core/models/datasource.py,sha256=6RjJUd2u4nYmEwFBpJlM9LbHVYDv8iHJxqiBMZqUrwI,9422
|
|
29
29
|
trilogy/core/models/environment.py,sha256=WCVJNWUze37bxFSFWo_6Z7330OG5k0DDmb7a2Tz5gg4,26264
|
|
30
|
-
trilogy/core/models/execute.py,sha256=
|
|
30
|
+
trilogy/core/models/execute.py,sha256=kxkw14vgUudHHELXLo73AHiaMEpLfiv0qAvbxjJxn_k,33929
|
|
31
31
|
trilogy/core/optimizations/__init__.py,sha256=EBanqTXEzf1ZEYjAneIWoIcxtMDite5-n2dQ5xcfUtg,356
|
|
32
32
|
trilogy/core/optimizations/base_optimization.py,sha256=gzDOKImoFn36k7XBD3ysEYDnbnb6vdVIztUfFQZsGnM,513
|
|
33
33
|
trilogy/core/optimizations/inline_constant.py,sha256=lvNTIXaLNkw3HseJyXyDNk5R52doLU9sIg3pmU2_S08,1332
|
|
@@ -69,12 +69,12 @@ trilogy/core/statements/build.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
|
|
|
69
69
|
trilogy/core/statements/common.py,sha256=KxEmz2ySySyZ6CTPzn0fJl5NX2KOk1RPyuUSwWhnK1g,759
|
|
70
70
|
trilogy/core/statements/execute.py,sha256=cSlvpHFOqpiZ89pPZ5GDp9Hu6j6uj-5_h21FWm_L-KM,1248
|
|
71
71
|
trilogy/dialect/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
72
|
-
trilogy/dialect/base.py,sha256=
|
|
72
|
+
trilogy/dialect/base.py,sha256=Q2TyxZzMFx3FI044ts-hhHxlhUXj-qvUB7m8rWXdgJI,40339
|
|
73
73
|
trilogy/dialect/bigquery.py,sha256=PkjFcNGZHYOe655PmJhb8a0afdFULuovqP0qQVO8m0I,2953
|
|
74
|
-
trilogy/dialect/common.py,sha256=
|
|
74
|
+
trilogy/dialect/common.py,sha256=vYb-QPf_CnZ3mMLpOVjteWeLH1iaq2mn4WPx0XGoo20,4033
|
|
75
75
|
trilogy/dialect/config.py,sha256=EGYRQIbrkeMuud5Bkds7jSD5dCJR5hEYZUYcy-lYZl4,3308
|
|
76
76
|
trilogy/dialect/dataframe.py,sha256=RUbNgReEa9g3pL6H7fP9lPTrAij5pkqedpZ99D8_5AE,1522
|
|
77
|
-
trilogy/dialect/duckdb.py,sha256=
|
|
77
|
+
trilogy/dialect/duckdb.py,sha256=AXpvheZQ_hCzTgTRAM5cxBZwr1N4XFzEGwRC1CGPxt4,3705
|
|
78
78
|
trilogy/dialect/enums.py,sha256=QYIcVr5RgpYMA1Wl0nWeojVVxJxy0V2_sn8uqSFNx20,4615
|
|
79
79
|
trilogy/dialect/postgres.py,sha256=VH4EB4myjIeZTHeFU6vK00GxY9c53rCBjg2mLbdaCEE,3254
|
|
80
80
|
trilogy/dialect/presto.py,sha256=Mw7_F8h19mWfuZHkHQJizQWbpu1lIHe6t2PA0r88gsY,3392
|
|
@@ -92,12 +92,12 @@ trilogy/parsing/exceptions.py,sha256=92E5i2frv5hj9wxObJZsZqj5T6bglvPzvdvco_vW1Zk
|
|
|
92
92
|
trilogy/parsing/helpers.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
93
93
|
trilogy/parsing/parse_engine.py,sha256=YjYe4cAxek3CceewGI1It-XEO_ZygCxY9IQzcJw0Y0Y,57555
|
|
94
94
|
trilogy/parsing/render.py,sha256=o_XuQWhcwx1lD9eGVqkqZEwkmQK0HdmWWokGBtdeH4I,17837
|
|
95
|
-
trilogy/parsing/trilogy.lark,sha256=
|
|
95
|
+
trilogy/parsing/trilogy.lark,sha256=h7q1UBTBBhGbDTPWQ1COtf-Y41ZRHMP_B9iJ0WxLSfY,12831
|
|
96
96
|
trilogy/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
97
97
|
trilogy/scripts/trilogy.py,sha256=1L0XrH4mVHRt1C9T1HnaDv2_kYEfbWTb5_-cBBke79w,3774
|
|
98
|
-
pytrilogy-0.0.3.
|
|
99
|
-
pytrilogy-0.0.3.
|
|
100
|
-
pytrilogy-0.0.3.
|
|
101
|
-
pytrilogy-0.0.3.
|
|
102
|
-
pytrilogy-0.0.3.
|
|
103
|
-
pytrilogy-0.0.3.
|
|
98
|
+
pytrilogy-0.0.3.15.dist-info/LICENSE.md,sha256=5ZRvtTyCCFwz1THxDTjAu3Lidds9WjPvvzgVwPSYNDo,1042
|
|
99
|
+
pytrilogy-0.0.3.15.dist-info/METADATA,sha256=PHiUptd2dSTgkYE2bzHPOKM-fC0OwX0vBGXkefaXmNM,8984
|
|
100
|
+
pytrilogy-0.0.3.15.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
|
101
|
+
pytrilogy-0.0.3.15.dist-info/entry_points.txt,sha256=0petKryjvvtEfTlbZC1AuMFumH_WQ9v8A19LvoS6G6c,54
|
|
102
|
+
pytrilogy-0.0.3.15.dist-info/top_level.txt,sha256=cAy__NW_eMAa_yT9UnUNlZLFfxcg6eimUAZ184cdNiE,8
|
|
103
|
+
pytrilogy-0.0.3.15.dist-info/RECORD,,
|
trilogy/__init__.py
CHANGED
trilogy/core/models/execute.py
CHANGED
|
@@ -305,14 +305,17 @@ class CTE(BaseModel):
|
|
|
305
305
|
return self.source.name
|
|
306
306
|
|
|
307
307
|
@property
|
|
308
|
-
def quote_address(self) -> bool:
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
candidate.address
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
308
|
+
def quote_address(self) -> dict[str, bool]:
|
|
309
|
+
|
|
310
|
+
return {
|
|
311
|
+
candidate.safe_identifier: (
|
|
312
|
+
candidate.address.quoted and not candidate.address.is_query
|
|
313
|
+
if isinstance(candidate, BuildDatasource)
|
|
314
|
+
and isinstance(candidate.address, Address)
|
|
315
|
+
else False
|
|
316
|
+
)
|
|
317
|
+
for candidate in self.source.datasources
|
|
318
|
+
}
|
|
316
319
|
|
|
317
320
|
@property
|
|
318
321
|
def base_alias(self) -> str:
|
|
@@ -870,6 +873,7 @@ class Join(BaseModel):
|
|
|
870
873
|
left_cte: CTE | None = None
|
|
871
874
|
joinkey_pairs: List[CTEConceptPair] | None = None
|
|
872
875
|
inlined_ctes: set[str] = Field(default_factory=set)
|
|
876
|
+
quote: str | None = None
|
|
873
877
|
|
|
874
878
|
def inline_cte(self, cte: CTE):
|
|
875
879
|
self.inlined_ctes.add(cte.name)
|
|
@@ -887,6 +891,10 @@ class Join(BaseModel):
|
|
|
887
891
|
|
|
888
892
|
@property
|
|
889
893
|
def right_ref(self) -> str:
|
|
894
|
+
if self.quote:
|
|
895
|
+
if self.right_cte.identifier in self.inlined_ctes:
|
|
896
|
+
return f"{self.quote}{self.right_cte.source.datasources[0].safe_location}{self.quote} as {self.right_cte.source.datasources[0].safe_identifier}"
|
|
897
|
+
return self.right_cte.safe_identifier
|
|
890
898
|
if self.right_cte.identifier in self.inlined_ctes:
|
|
891
899
|
return f"{self.right_cte.source.datasources[0].safe_location} as {self.right_cte.source.datasources[0].safe_identifier}"
|
|
892
900
|
return self.right_cte.safe_identifier
|
trilogy/dialect/base.py
CHANGED
|
@@ -156,7 +156,7 @@ FUNCTION_MAP = {
|
|
|
156
156
|
FunctionType.PARENTHETICAL: lambda x: f"({x[0]})",
|
|
157
157
|
# Complex
|
|
158
158
|
FunctionType.INDEX_ACCESS: lambda x: f"{x[0]}[{x[1]}]",
|
|
159
|
-
FunctionType.MAP_ACCESS: lambda x: f"{x[0]}[{x[1]}]
|
|
159
|
+
FunctionType.MAP_ACCESS: lambda x: f"{x[0]}[{x[1]}]",
|
|
160
160
|
FunctionType.UNNEST: lambda x: f"unnest({x[0]})",
|
|
161
161
|
FunctionType.ATTR_ACCESS: lambda x: f"""{x[0]}.{x[1].replace("'", "")}""",
|
|
162
162
|
FunctionType.STRUCT: lambda x: f"{{{', '.join(struct_arg(x))}}}",
|
|
@@ -734,7 +734,7 @@ class BaseDialect:
|
|
|
734
734
|
else:
|
|
735
735
|
source = None
|
|
736
736
|
else:
|
|
737
|
-
if cte.quote_address:
|
|
737
|
+
if cte.quote_address.get(cte.source.datasources[0].safe_identifier, False):
|
|
738
738
|
source = f"{self.QUOTE_CHARACTER}{cte.base_name}{self.QUOTE_CHARACTER}"
|
|
739
739
|
else:
|
|
740
740
|
source = cte.base_name
|
|
@@ -769,8 +769,8 @@ class BaseDialect:
|
|
|
769
769
|
base=f"{source}" if source else None,
|
|
770
770
|
grain=cte.grain,
|
|
771
771
|
limit=cte.limit,
|
|
772
|
-
# some joins may not need to be rendered
|
|
773
772
|
comment=cte.comment if CONFIG.show_comments else None,
|
|
773
|
+
# some joins may not need to be rendered
|
|
774
774
|
joins=[
|
|
775
775
|
j
|
|
776
776
|
for j in [
|
trilogy/dialect/common.py
CHANGED
|
@@ -70,6 +70,8 @@ def render_join(
|
|
|
70
70
|
return f"FULL JOIN {render_unnest(unnest_mode, quote_character, join.concept_to_unnest, render_func, cte)}"
|
|
71
71
|
# left_name = join.left_name
|
|
72
72
|
right_name = join.right_name
|
|
73
|
+
if cte.quote_address.get(join.right_name, False):
|
|
74
|
+
join.quote = quote_character
|
|
73
75
|
right_base = join.right_ref
|
|
74
76
|
base_joinkeys = []
|
|
75
77
|
if join.joinkey_pairs:
|
trilogy/dialect/duckdb.py
CHANGED
|
@@ -55,11 +55,14 @@ DUCKDB_TEMPLATE = Template(
|
|
|
55
55
|
CREATE OR REPLACE TABLE {{ output.address.location }} AS
|
|
56
56
|
{% endif %}{%- if ctes %}
|
|
57
57
|
WITH {% for cte in ctes %}
|
|
58
|
-
{{cte.name}} as (
|
|
59
|
-
{
|
|
58
|
+
{{cte.name}} as (
|
|
59
|
+
{{cte.statement}}){% if not loop.last %},{% else %}
|
|
60
|
+
{% endif %}{% endfor %}{% endif %}
|
|
61
|
+
{%- if full_select -%}
|
|
62
|
+
{{full_select}}
|
|
60
63
|
{%- else -%}{%- if comment -%}
|
|
61
|
-
-- {{ comment }}
|
|
62
|
-
SELECT
|
|
64
|
+
-- {{ comment }}
|
|
65
|
+
{%- endif %}SELECT
|
|
63
66
|
{%- for select in select_columns %}
|
|
64
67
|
{{ select }}{% if not loop.last %},{% endif %}{% endfor %}
|
|
65
68
|
{% if base %}FROM
|
trilogy/parsing/trilogy.lark
CHANGED
|
@@ -308,7 +308,7 @@
|
|
|
308
308
|
IDENTIFIER: /[a-zA-Z\_][a-zA-Z0-9\_\.]*/
|
|
309
309
|
WILDCARD_IDENTIFIER: /[a-zA-Z\_][a-zA-Z0-9\_\-\.\*]*/
|
|
310
310
|
QUOTED_IDENTIFIER: /`[a-zA-Z\_][a-zA-Z0-9\_\.\-\*\:\s]*`/
|
|
311
|
-
QUOTED_ADDRESS: /`[a-zA-Z\_][a-zA-Z0-9\_
|
|
311
|
+
QUOTED_ADDRESS: /`'?[a-zA-Z\_\\\/][a-zA-Z0-9\_\.\\\/\-\*\:\s]*'?`/
|
|
312
312
|
ADDRESS: IDENTIFIER
|
|
313
313
|
|
|
314
314
|
MULTILINE_STRING: /\'{3}(.*?)\'{3}/s
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|