pytrilogy 0.0.3.72__py3-none-any.whl → 0.0.3.73__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.72.dist-info → pytrilogy-0.0.3.73.dist-info}/METADATA +1 -1
- {pytrilogy-0.0.3.72.dist-info → pytrilogy-0.0.3.73.dist-info}/RECORD +17 -17
- trilogy/__init__.py +1 -1
- trilogy/constants.py +1 -1
- trilogy/core/models/execute.py +0 -1
- trilogy/core/processing/node_generators/window_node.py +2 -0
- trilogy/core/processing/utility.py +18 -0
- trilogy/dialect/bigquery.py +2 -1
- trilogy/dialect/common.py +1 -0
- trilogy/dialect/postgres.py +2 -1
- trilogy/dialect/presto.py +2 -1
- trilogy/dialect/snowflake.py +2 -1
- trilogy/dialect/sql_server.py +2 -1
- {pytrilogy-0.0.3.72.dist-info → pytrilogy-0.0.3.73.dist-info}/WHEEL +0 -0
- {pytrilogy-0.0.3.72.dist-info → pytrilogy-0.0.3.73.dist-info}/entry_points.txt +0 -0
- {pytrilogy-0.0.3.72.dist-info → pytrilogy-0.0.3.73.dist-info}/licenses/LICENSE.md +0 -0
- {pytrilogy-0.0.3.72.dist-info → pytrilogy-0.0.3.73.dist-info}/top_level.txt +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
pytrilogy-0.0.3.
|
|
2
|
-
trilogy/__init__.py,sha256=
|
|
1
|
+
pytrilogy-0.0.3.73.dist-info/licenses/LICENSE.md,sha256=5ZRvtTyCCFwz1THxDTjAu3Lidds9WjPvvzgVwPSYNDo,1042
|
|
2
|
+
trilogy/__init__.py,sha256=QMg3__Goia6PP_-WfMP9ZmROmpZ0XzX4rCz9MvpBb_w,303
|
|
3
3
|
trilogy/compiler.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
-
trilogy/constants.py,sha256=
|
|
4
|
+
trilogy/constants.py,sha256=eKb_EJvSqjN9tGbdVEViwdtwwh8fZ3-jpOEDqL71y70,1691
|
|
5
5
|
trilogy/engine.py,sha256=OK2RuqCIUId6yZ5hfF8J1nxGP0AJqHRZiafcowmW0xc,1728
|
|
6
6
|
trilogy/executor.py,sha256=BolR6UwgDOdIcDG0gw_OSaB23rISgIn8Dzdll0kODmg,16506
|
|
7
7
|
trilogy/parser.py,sha256=o4cfk3j3yhUFoiDKq9ZX_GjBF3dKhDjXEwb63rcBkBM,293
|
|
@@ -29,7 +29,7 @@ trilogy/core/models/build_environment.py,sha256=s_C9xAHuD3yZ26T15pWVBvoqvlp2LdZ8
|
|
|
29
29
|
trilogy/core/models/core.py,sha256=EMAuWTngoNVGCdfNrAY7_k6g528iodNQLwPRVip-8DA,10980
|
|
30
30
|
trilogy/core/models/datasource.py,sha256=wogTevZ-9CyUW2a8gjzqMCieircxi-J5lkI7EOAZnck,9596
|
|
31
31
|
trilogy/core/models/environment.py,sha256=TBbPfsXHpJK49QKuqHwhgZD4PwHiSAYjXmTTTomRE7o,27861
|
|
32
|
-
trilogy/core/models/execute.py,sha256=
|
|
32
|
+
trilogy/core/models/execute.py,sha256=Erufst3yroU3PgNJMWF5lICm14AkH02laYeesSB01UU,41705
|
|
33
33
|
trilogy/core/optimizations/__init__.py,sha256=YH2-mGXZnVDnBcWVi8vTbrdw7Qs5TivG4h38rH3js_I,290
|
|
34
34
|
trilogy/core/optimizations/base_optimization.py,sha256=gzDOKImoFn36k7XBD3ysEYDnbnb6vdVIztUfFQZsGnM,513
|
|
35
35
|
trilogy/core/optimizations/inline_datasource.py,sha256=2sWNRpoRInnTgo9wExVT_r9RfLAQHI57reEV5cGHUcg,4329
|
|
@@ -41,7 +41,7 @@ trilogy/core/processing/discovery_node_factory.py,sha256=I3JJxoF-u8OVvqXXAOhvMg2
|
|
|
41
41
|
trilogy/core/processing/discovery_utility.py,sha256=3xdd1ypKappSDm0SJs7WtW5YegL80SlYhDQlkNePp4E,4549
|
|
42
42
|
trilogy/core/processing/discovery_validation.py,sha256=fGWJmKpgEd1f4RkK-fYOBUT1cwsJnahwXFAdRlou7MI,5365
|
|
43
43
|
trilogy/core/processing/graph_utils.py,sha256=8QUVrkE9j-9C1AyrCb1nQEh8daCe0u1HuXl-Te85lag,1205
|
|
44
|
-
trilogy/core/processing/utility.py,sha256=
|
|
44
|
+
trilogy/core/processing/utility.py,sha256=ChD1lP2iXtfsI1bS08OZsJ2o9t877OhNXrDvyEgYdmY,22581
|
|
45
45
|
trilogy/core/processing/node_generators/__init__.py,sha256=w8TQQgNhyAra6JQHdg1_Ags4BGyxjXYruu6UeC5yOkI,873
|
|
46
46
|
trilogy/core/processing/node_generators/basic_node.py,sha256=luN8LftafZepoFgDRv4gmvEGFlOI2j0icJ5fz4UT7uo,5165
|
|
47
47
|
trilogy/core/processing/node_generators/common.py,sha256=PdysdroW9DUADP7f5Wv_GKPUyCTROZV1g3L45fawxi8,9443
|
|
@@ -57,7 +57,7 @@ trilogy/core/processing/node_generators/select_node.py,sha256=Ta1G39V94gjX_AgyZD
|
|
|
57
57
|
trilogy/core/processing/node_generators/synonym_node.py,sha256=AnAsa_Wj50NJ_IK0HSgab_7klYmKVrv0WI1uUe-GvEY,3766
|
|
58
58
|
trilogy/core/processing/node_generators/union_node.py,sha256=VNo6Oey4p8etU9xrOh2oTT2lIOTvY6PULUPRvVa2uxU,2877
|
|
59
59
|
trilogy/core/processing/node_generators/unnest_node.py,sha256=ueOQtoTf2iJHO09RzWHDFQ5iKZq2fVhGf2KAF2U2kU8,2677
|
|
60
|
-
trilogy/core/processing/node_generators/window_node.py,sha256=
|
|
60
|
+
trilogy/core/processing/node_generators/window_node.py,sha256=A90linr4pkZtTNfn9k2YNLqrJ_SFII3lbHxB-BC6mI8,6688
|
|
61
61
|
trilogy/core/processing/node_generators/select_helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
62
62
|
trilogy/core/processing/node_generators/select_helpers/datasource_injection.py,sha256=mKCDHxr2eyrdozXEHq_HvuwtBgnb9JPlImJIx6JGX34,7834
|
|
63
63
|
trilogy/core/processing/nodes/__init__.py,sha256=zTge1EzwzEydlcMliIFO_TT7h7lS8l37lyZuQDir1h0,5487
|
|
@@ -77,16 +77,16 @@ trilogy/core/statements/common.py,sha256=KxEmz2ySySyZ6CTPzn0fJl5NX2KOk1RPyuUSwWh
|
|
|
77
77
|
trilogy/core/statements/execute.py,sha256=rqfuoMuXPcH7L7TmE1dSiZ_K_A1ohB8whVMfGimZBOk,1294
|
|
78
78
|
trilogy/dialect/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
79
79
|
trilogy/dialect/base.py,sha256=5FI4_XDdSavdHeC3VhSI8xrvQagFyRRq6Ttsh70ajo4,45241
|
|
80
|
-
trilogy/dialect/bigquery.py,sha256=
|
|
81
|
-
trilogy/dialect/common.py,sha256=
|
|
80
|
+
trilogy/dialect/bigquery.py,sha256=8xhEu0z_lKANjbvzvBbC7CeKrJf1iP8YyrHqNale-ug,4351
|
|
81
|
+
trilogy/dialect/common.py,sha256=tSthIZOXXRPQ4KeMKnDDsH7KlTmf2EVqigVtLyoc4zc,6071
|
|
82
82
|
trilogy/dialect/config.py,sha256=olnyeVU5W5T6b9-dMeNAnvxuPlyc2uefb7FRME094Ec,3834
|
|
83
83
|
trilogy/dialect/dataframe.py,sha256=RUbNgReEa9g3pL6H7fP9lPTrAij5pkqedpZ99D8_5AE,1522
|
|
84
84
|
trilogy/dialect/duckdb.py,sha256=gsXhPKX0D7ykJ9RFK9qx8uBTjLgtHu6PYv6GlBFtnJE,4448
|
|
85
85
|
trilogy/dialect/enums.py,sha256=FRNYQ5-w-B6-X0yXKNU5g9GowsMlERFogTC5u2nxL_s,4740
|
|
86
|
-
trilogy/dialect/postgres.py,sha256=
|
|
87
|
-
trilogy/dialect/presto.py,sha256=
|
|
88
|
-
trilogy/dialect/snowflake.py,sha256=
|
|
89
|
-
trilogy/dialect/sql_server.py,sha256=
|
|
86
|
+
trilogy/dialect/postgres.py,sha256=el2PKwfyvWGk5EZtLudqAH5ewLitY1sFHJiocBSyxyM,3393
|
|
87
|
+
trilogy/dialect/presto.py,sha256=yzSF8SZ6o1dizj1UueAa7S3lR0qNYJdSXbF78EHyhY0,3668
|
|
88
|
+
trilogy/dialect/snowflake.py,sha256=T6_mKfhpDazB1xQxqFLS2AJwzwzBcPYY6_qxRnAtFBs,3326
|
|
89
|
+
trilogy/dialect/sql_server.py,sha256=HnUEvb8Yjl6MnMWTITzpFPZgDajhGzfDPz5A8dDerak,3279
|
|
90
90
|
trilogy/hooks/__init__.py,sha256=T3SF3phuUDPLXKGRVE_Lf9mzuwoXWyaLolncR_1kY30,144
|
|
91
91
|
trilogy/hooks/base_hook.py,sha256=I_l-NBMNC7hKTDx1JgHZPVOOCvLQ36m2oIGaR5EUMXY,1180
|
|
92
92
|
trilogy/hooks/graph_hook.py,sha256=5BfR7Dt0bgEsCLgwjowgCsVkboGYfVJGOz8g9mqpnos,4756
|
|
@@ -110,8 +110,8 @@ trilogy/std/money.preql,sha256=XWwvAV3WxBsHX9zfptoYRnBigcfYwrYtBHXTME0xJuQ,2082
|
|
|
110
110
|
trilogy/std/net.preql,sha256=7l7MqIjs6TDCpO6dBAoNJU81Ex255jZRK36kBgE1GDs,158
|
|
111
111
|
trilogy/std/ranking.preql,sha256=LDoZrYyz4g3xsII9XwXfmstZD-_92i1Eox1UqkBIfi8,83
|
|
112
112
|
trilogy/std/report.preql,sha256=LbV-XlHdfw0jgnQ8pV7acG95xrd1-p65fVpiIc-S7W4,202
|
|
113
|
-
pytrilogy-0.0.3.
|
|
114
|
-
pytrilogy-0.0.3.
|
|
115
|
-
pytrilogy-0.0.3.
|
|
116
|
-
pytrilogy-0.0.3.
|
|
117
|
-
pytrilogy-0.0.3.
|
|
113
|
+
pytrilogy-0.0.3.73.dist-info/METADATA,sha256=hMwyLjCer0xl2zhn1XH4PijoJrNy7oXV9qKyHIDfUWA,9734
|
|
114
|
+
pytrilogy-0.0.3.73.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
115
|
+
pytrilogy-0.0.3.73.dist-info/entry_points.txt,sha256=ewBPU2vLnVexZVnB-NrVj-p3E-4vukg83Zk8A55Wp2w,56
|
|
116
|
+
pytrilogy-0.0.3.73.dist-info/top_level.txt,sha256=cAy__NW_eMAa_yT9UnUNlZLFfxcg6eimUAZ184cdNiE,8
|
|
117
|
+
pytrilogy-0.0.3.73.dist-info/RECORD,,
|
trilogy/__init__.py
CHANGED
trilogy/constants.py
CHANGED
trilogy/core/models/execute.py
CHANGED
|
@@ -501,7 +501,6 @@ class BaseJoin(BaseModel):
|
|
|
501
501
|
f"Cannot join a dataself to itself, joining {self.left_datasource} and"
|
|
502
502
|
f" {self.right_datasource}"
|
|
503
503
|
)
|
|
504
|
-
|
|
505
504
|
# Early returns maintained as in original code
|
|
506
505
|
if self.concept_pairs or self.concepts == []:
|
|
507
506
|
return self
|
|
@@ -13,6 +13,7 @@ from trilogy.core.enums import (
|
|
|
13
13
|
FunctionClass,
|
|
14
14
|
Granularity,
|
|
15
15
|
JoinType,
|
|
16
|
+
Modifier,
|
|
16
17
|
Purpose,
|
|
17
18
|
)
|
|
18
19
|
from trilogy.core.models.build import (
|
|
@@ -355,6 +356,20 @@ def reduce_concept_pairs(input: list[ConceptPair]) -> list[ConceptPair]:
|
|
|
355
356
|
return final
|
|
356
357
|
|
|
357
358
|
|
|
359
|
+
def get_modifiers(
|
|
360
|
+
concept: str,
|
|
361
|
+
join: JoinOrderOutput,
|
|
362
|
+
ds_node_map: dict[str, QueryDatasource | BuildDatasource],
|
|
363
|
+
):
|
|
364
|
+
base = []
|
|
365
|
+
|
|
366
|
+
if join.right and concept in ds_node_map[join.right].nullable_concepts:
|
|
367
|
+
base.append(Modifier.NULLABLE)
|
|
368
|
+
if join.left and concept in ds_node_map[join.left].nullable_concepts:
|
|
369
|
+
base.append(Modifier.NULLABLE)
|
|
370
|
+
return list(set(base))
|
|
371
|
+
|
|
372
|
+
|
|
358
373
|
def get_node_joins(
|
|
359
374
|
datasources: List[QueryDatasource | BuildDatasource],
|
|
360
375
|
environment: BuildEnvironment,
|
|
@@ -400,6 +415,9 @@ def get_node_joins(
|
|
|
400
415
|
concept_map[concept], ds_node_map[j.right]
|
|
401
416
|
),
|
|
402
417
|
existing_datasource=ds_node_map[k],
|
|
418
|
+
modifiers=get_modifiers(
|
|
419
|
+
concept_map[concept].address, j, ds_node_map
|
|
420
|
+
),
|
|
403
421
|
)
|
|
404
422
|
for k, v in j.keys.items()
|
|
405
423
|
for concept in v
|
trilogy/dialect/bigquery.py
CHANGED
|
@@ -43,7 +43,8 @@ FUNCTION_MAP = {
|
|
|
43
43
|
|
|
44
44
|
FUNCTION_GRAIN_MATCH_MAP = {
|
|
45
45
|
**FUNCTION_MAP,
|
|
46
|
-
FunctionType.
|
|
46
|
+
FunctionType.COUNT_DISTINCT: lambda args: f"CASE WHEN{args[0]} IS NOT NULL THEN 1 ELSE 0 END",
|
|
47
|
+
FunctionType.COUNT: lambda args: f"CASE WHEN {args[0]} IS NOT NULL THEN 1 ELSE 0 END",
|
|
47
48
|
FunctionType.SUM: lambda args: f"{args[0]}",
|
|
48
49
|
FunctionType.AVG: lambda args: f"{args[0]}",
|
|
49
50
|
}
|
trilogy/dialect/common.py
CHANGED
|
@@ -20,6 +20,7 @@ from trilogy.core.models.execute import (
|
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
def null_wrapper(lval: str, rval: str, modifiers: list[Modifier]) -> str:
|
|
23
|
+
|
|
23
24
|
if Modifier.NULLABLE in modifiers:
|
|
24
25
|
return f"({lval} = {rval} or ({lval} is null and {rval} is null))"
|
|
25
26
|
return f"{lval} = {rval}"
|
trilogy/dialect/postgres.py
CHANGED
|
@@ -37,7 +37,8 @@ FUNCTION_MAP = {
|
|
|
37
37
|
|
|
38
38
|
FUNCTION_GRAIN_MATCH_MAP = {
|
|
39
39
|
**FUNCTION_MAP,
|
|
40
|
-
FunctionType.
|
|
40
|
+
FunctionType.COUNT_DISTINCT: lambda args: f"CASE WHEN{args[0]} IS NOT NULL THEN 1 ELSE 0 END",
|
|
41
|
+
FunctionType.COUNT: lambda args: f"CASE WHEN {args[0]} IS NOT NULL THEN 1 ELSE 0 END",
|
|
41
42
|
FunctionType.SUM: lambda args: f"{args[0]}",
|
|
42
43
|
FunctionType.AVG: lambda args: f"{args[0]}",
|
|
43
44
|
}
|
trilogy/dialect/presto.py
CHANGED
|
@@ -39,7 +39,8 @@ FUNCTION_MAP = {
|
|
|
39
39
|
|
|
40
40
|
FUNCTION_GRAIN_MATCH_MAP = {
|
|
41
41
|
**FUNCTION_MAP,
|
|
42
|
-
FunctionType.
|
|
42
|
+
FunctionType.COUNT_DISTINCT: lambda args: f"CASE WHEN{args[0]} IS NOT NULL THEN 1 ELSE 0 END",
|
|
43
|
+
FunctionType.COUNT: lambda args: f"CASE WHEN {args[0]} IS NOT NULL THEN 1 ELSE 0 END",
|
|
43
44
|
FunctionType.SUM: lambda args: f"{args[0]}",
|
|
44
45
|
FunctionType.AVG: lambda args: f"{args[0]}",
|
|
45
46
|
}
|
trilogy/dialect/snowflake.py
CHANGED
|
@@ -36,7 +36,8 @@ FUNCTION_MAP = {
|
|
|
36
36
|
|
|
37
37
|
FUNCTION_GRAIN_MATCH_MAP = {
|
|
38
38
|
**FUNCTION_MAP,
|
|
39
|
-
FunctionType.
|
|
39
|
+
FunctionType.COUNT_DISTINCT: lambda args: f"CASE WHEN{args[0]} IS NOT NULL THEN 1 ELSE 0 END",
|
|
40
|
+
FunctionType.COUNT: lambda args: f"CASE WHEN {args[0]} IS NOT NULL THEN 1 ELSE 0 END",
|
|
40
41
|
FunctionType.SUM: lambda args: f"{args[0]}",
|
|
41
42
|
FunctionType.AVG: lambda args: f"{args[0]}",
|
|
42
43
|
}
|
trilogy/dialect/sql_server.py
CHANGED
|
@@ -31,7 +31,8 @@ FUNCTION_MAP = {
|
|
|
31
31
|
# we may return a static value
|
|
32
32
|
FUNCTION_GRAIN_MATCH_MAP = {
|
|
33
33
|
**FUNCTION_MAP,
|
|
34
|
-
FunctionType.
|
|
34
|
+
FunctionType.COUNT_DISTINCT: lambda args: f"CASE WHEN{args[0]} IS NOT NULL THEN 1 ELSE 0 END",
|
|
35
|
+
FunctionType.COUNT: lambda args: f"CASE WHEN {args[0]} IS NOT NULL THEN 1 ELSE 0 END",
|
|
35
36
|
FunctionType.SUM: lambda args: f"{args[0]}",
|
|
36
37
|
FunctionType.AVG: lambda args: f"{args[0]}",
|
|
37
38
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|