pytrilogy 0.0.1.117__tar.gz → 0.0.1.118__tar.gz
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.1.117/pytrilogy.egg-info → pytrilogy-0.0.1.118}/PKG-INFO +1 -1
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118/pytrilogy.egg-info}/PKG-INFO +1 -1
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/__init__.py +1 -1
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/functions.py +10 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/models.py +74 -3
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/executor.py +29 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/LICENSE.md +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/README.md +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/pyproject.toml +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/pytrilogy.egg-info/SOURCES.txt +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/pytrilogy.egg-info/dependency_links.txt +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/pytrilogy.egg-info/entry_points.txt +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/pytrilogy.egg-info/requires.txt +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/pytrilogy.egg-info/top_level.txt +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/setup.cfg +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/setup.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/tests/test_datatypes.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/tests/test_declarations.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/tests/test_derived_concepts.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/tests/test_discovery_nodes.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/tests/test_environment.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/tests/test_functions.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/tests/test_imports.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/tests/test_metadata.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/tests/test_models.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/tests/test_multi_join_assignments.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/tests/test_parsing.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/tests/test_partial_handling.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/tests/test_query_processing.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/tests/test_select.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/tests/test_statements.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/tests/test_undefined_concept.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/tests/test_where_clause.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/compiler.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/constants.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/__init__.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/constants.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/enums.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/env_processor.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/environment_helpers.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/ergonomics.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/exceptions.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/graph_models.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/internal.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/optimization.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/optimizations/__init__.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/optimizations/base_optimization.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/optimizations/inline_constant.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/optimizations/inline_datasource.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/optimizations/predicate_pushdown.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/__init__.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/concept_strategies_v3.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/graph_utils.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/node_generators/__init__.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/node_generators/basic_node.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/node_generators/common.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/node_generators/concept_merge_node.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/node_generators/filter_node.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/node_generators/group_node.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/node_generators/group_to_node.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/node_generators/multiselect_node.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/node_generators/node_merge_node.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/node_generators/rowset_node.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/node_generators/select_node.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/node_generators/unnest_node.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/node_generators/window_node.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/nodes/__init__.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/nodes/base_node.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/nodes/filter_node.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/nodes/group_node.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/nodes/merge_node.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/nodes/select_node_v2.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/nodes/unnest_node.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/nodes/window_node.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/utility.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/query_processor.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/dialect/__init__.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/dialect/base.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/dialect/bigquery.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/dialect/common.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/dialect/config.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/dialect/duckdb.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/dialect/enums.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/dialect/postgres.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/dialect/presto.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/dialect/snowflake.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/dialect/sql_server.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/engine.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/hooks/__init__.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/hooks/base_hook.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/hooks/graph_hook.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/hooks/query_debugger.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/metadata/__init__.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/parser.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/parsing/__init__.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/parsing/common.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/parsing/config.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/parsing/exceptions.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/parsing/helpers.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/parsing/parse_engine.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/parsing/render.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/parsing/trilogy.lark +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/py.typed +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/scripts/__init__.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/scripts/trilogy.py +0 -0
- {pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/utility.py +0 -0
|
@@ -52,12 +52,22 @@ def argument_to_purpose(arg) -> Purpose:
|
|
|
52
52
|
if isinstance(arg, Function):
|
|
53
53
|
return arg.output_purpose
|
|
54
54
|
elif isinstance(arg, AggregateWrapper):
|
|
55
|
+
base = arg.function.output_purpose
|
|
56
|
+
if arg.by and base == Purpose.METRIC:
|
|
57
|
+
return Purpose.PROPERTY
|
|
55
58
|
return arg.function.output_purpose
|
|
56
59
|
elif isinstance(arg, Parenthetical):
|
|
57
60
|
return argument_to_purpose(arg.content)
|
|
58
61
|
elif isinstance(arg, WindowItem):
|
|
59
62
|
return Purpose.PROPERTY
|
|
60
63
|
elif isinstance(arg, Concept):
|
|
64
|
+
base = arg.purpose
|
|
65
|
+
if (
|
|
66
|
+
isinstance(arg.lineage, AggregateWrapper)
|
|
67
|
+
and arg.lineage.by
|
|
68
|
+
and base == Purpose.METRIC
|
|
69
|
+
):
|
|
70
|
+
return Purpose.PROPERTY
|
|
61
71
|
return arg.purpose
|
|
62
72
|
elif isinstance(arg, (int, float, str, bool, list, NumericType, DataType)):
|
|
63
73
|
return Purpose.CONSTANT
|
|
@@ -149,6 +149,11 @@ class SelectGrain(ABC):
|
|
|
149
149
|
raise NotImplementedError
|
|
150
150
|
|
|
151
151
|
|
|
152
|
+
class ConstantInlineable(ABC):
|
|
153
|
+
def inline_concept(self, concept: Concept):
|
|
154
|
+
raise NotImplementedError
|
|
155
|
+
|
|
156
|
+
|
|
152
157
|
class DataType(Enum):
|
|
153
158
|
# PRIMITIVES
|
|
154
159
|
STRING = "string"
|
|
@@ -2075,6 +2080,9 @@ class CTE(BaseModel):
|
|
|
2075
2080
|
if concept.address in self.source_map:
|
|
2076
2081
|
removed = removed.union(self.source_map[concept.address])
|
|
2077
2082
|
del self.source_map[concept.address]
|
|
2083
|
+
|
|
2084
|
+
if self.condition:
|
|
2085
|
+
self.condition = self.condition.inline_constant(concept)
|
|
2078
2086
|
# if we've entirely removed the need to join to someplace to get the concept
|
|
2079
2087
|
# drop the join as well.
|
|
2080
2088
|
for removed_cte in removed:
|
|
@@ -2763,7 +2771,7 @@ class LazyEnvironment(Environment):
|
|
|
2763
2771
|
return super().__getattribute__(name)
|
|
2764
2772
|
|
|
2765
2773
|
|
|
2766
|
-
class Comparison(ConceptArgs, Namespaced, SelectGrain, BaseModel):
|
|
2774
|
+
class Comparison(ConceptArgs, Namespaced, ConstantInlineable, SelectGrain, BaseModel):
|
|
2767
2775
|
left: Union[
|
|
2768
2776
|
int,
|
|
2769
2777
|
str,
|
|
@@ -2825,6 +2833,32 @@ class Comparison(ConceptArgs, Namespaced, SelectGrain, BaseModel):
|
|
|
2825
2833
|
def __str__(self):
|
|
2826
2834
|
return self.__repr__()
|
|
2827
2835
|
|
|
2836
|
+
def inline_constant(self, constant: Concept) -> "Comparison":
|
|
2837
|
+
assert isinstance(constant.lineage, Function)
|
|
2838
|
+
new_val = constant.lineage.arguments[0]
|
|
2839
|
+
if isinstance(self.left, ConstantInlineable):
|
|
2840
|
+
new_left = self.left.inline_constant(constant)
|
|
2841
|
+
elif self.left == constant:
|
|
2842
|
+
new_left = new_val
|
|
2843
|
+
else:
|
|
2844
|
+
new_left = self.left
|
|
2845
|
+
|
|
2846
|
+
if isinstance(self.right, ConstantInlineable):
|
|
2847
|
+
new_right = self.right.inline_constant(constant)
|
|
2848
|
+
elif self.right == constant:
|
|
2849
|
+
new_right = new_val
|
|
2850
|
+
else:
|
|
2851
|
+
new_right = self.right
|
|
2852
|
+
|
|
2853
|
+
if self.right == constant:
|
|
2854
|
+
new_right = new_val
|
|
2855
|
+
|
|
2856
|
+
return Comparison(
|
|
2857
|
+
left=new_left,
|
|
2858
|
+
right=new_right,
|
|
2859
|
+
operator=self.operator,
|
|
2860
|
+
)
|
|
2861
|
+
|
|
2828
2862
|
def with_namespace(self, namespace: str):
|
|
2829
2863
|
return self.__class__(
|
|
2830
2864
|
left=(
|
|
@@ -3001,7 +3035,7 @@ class CaseElse(Namespaced, SelectGrain, BaseModel):
|
|
|
3001
3035
|
)
|
|
3002
3036
|
|
|
3003
3037
|
|
|
3004
|
-
class Conditional(ConceptArgs, Namespaced, SelectGrain, BaseModel):
|
|
3038
|
+
class Conditional(ConceptArgs, Namespaced, ConstantInlineable, SelectGrain, BaseModel):
|
|
3005
3039
|
left: Union[
|
|
3006
3040
|
int,
|
|
3007
3041
|
str,
|
|
@@ -3047,6 +3081,32 @@ class Conditional(ConceptArgs, Namespaced, SelectGrain, BaseModel):
|
|
|
3047
3081
|
def __repr__(self):
|
|
3048
3082
|
return f"{str(self.left)} {self.operator.value} {str(self.right)}"
|
|
3049
3083
|
|
|
3084
|
+
def inline_constant(self, constant: Concept) -> "Conditional":
|
|
3085
|
+
assert isinstance(constant.lineage, Function)
|
|
3086
|
+
new_val = constant.lineage.arguments[0]
|
|
3087
|
+
if isinstance(self.left, ConstantInlineable):
|
|
3088
|
+
new_left = self.left.inline_constant(constant)
|
|
3089
|
+
elif self.left == constant:
|
|
3090
|
+
new_left = new_val
|
|
3091
|
+
else:
|
|
3092
|
+
new_left = self.left
|
|
3093
|
+
|
|
3094
|
+
if isinstance(self.right, ConstantInlineable):
|
|
3095
|
+
new_right = self.right.inline_constant(constant)
|
|
3096
|
+
elif self.right == constant:
|
|
3097
|
+
new_right = new_val
|
|
3098
|
+
else:
|
|
3099
|
+
new_right = self.right
|
|
3100
|
+
|
|
3101
|
+
if self.right == constant:
|
|
3102
|
+
new_right = new_val
|
|
3103
|
+
|
|
3104
|
+
return Conditional(
|
|
3105
|
+
left=new_left,
|
|
3106
|
+
right=new_right,
|
|
3107
|
+
operator=self.operator,
|
|
3108
|
+
)
|
|
3109
|
+
|
|
3050
3110
|
def with_namespace(self, namespace: str):
|
|
3051
3111
|
return Conditional(
|
|
3052
3112
|
left=(
|
|
@@ -3386,7 +3446,9 @@ class RowsetItem(Namespaced, BaseModel):
|
|
|
3386
3446
|
return [self.content]
|
|
3387
3447
|
|
|
3388
3448
|
|
|
3389
|
-
class Parenthetical(
|
|
3449
|
+
class Parenthetical(
|
|
3450
|
+
ConceptArgs, Namespaced, ConstantInlineable, SelectGrain, BaseModel
|
|
3451
|
+
):
|
|
3390
3452
|
content: "Expr"
|
|
3391
3453
|
|
|
3392
3454
|
def __str__(self):
|
|
@@ -3420,6 +3482,15 @@ class Parenthetical(ConceptArgs, Namespaced, SelectGrain, BaseModel):
|
|
|
3420
3482
|
)
|
|
3421
3483
|
)
|
|
3422
3484
|
|
|
3485
|
+
def inline_constant(self, concept: Concept):
|
|
3486
|
+
return Parenthetical(
|
|
3487
|
+
content=(
|
|
3488
|
+
self.content.inline_constant(concept)
|
|
3489
|
+
if isinstance(self.content, ConstantInlineable)
|
|
3490
|
+
else self.content
|
|
3491
|
+
)
|
|
3492
|
+
)
|
|
3493
|
+
|
|
3423
3494
|
@property
|
|
3424
3495
|
def concept_arguments(self) -> List[Concept]:
|
|
3425
3496
|
base: List[Concept] = []
|
|
@@ -16,6 +16,8 @@ from trilogy.core.models import (
|
|
|
16
16
|
PersistStatement,
|
|
17
17
|
ShowStatement,
|
|
18
18
|
Concept,
|
|
19
|
+
ConceptDeclarationStatement,
|
|
20
|
+
Datasource,
|
|
19
21
|
)
|
|
20
22
|
from trilogy.dialect.base import BaseDialect
|
|
21
23
|
from trilogy.dialect.enums import Dialects
|
|
@@ -100,6 +102,33 @@ class Executor(object):
|
|
|
100
102
|
def execute_query(self, query) -> CursorResult:
|
|
101
103
|
raise NotImplementedError("Cannot execute type {}".format(type(query)))
|
|
102
104
|
|
|
105
|
+
@execute_query.register
|
|
106
|
+
def _(self, query: ConceptDeclarationStatement) -> CursorResult:
|
|
107
|
+
concept = query.concept
|
|
108
|
+
return MockResult(
|
|
109
|
+
[
|
|
110
|
+
{
|
|
111
|
+
"address": concept.address,
|
|
112
|
+
"type": concept.datatype.value,
|
|
113
|
+
"purpose": concept.purpose.value,
|
|
114
|
+
"derivation": concept.derivation.value,
|
|
115
|
+
}
|
|
116
|
+
],
|
|
117
|
+
["address", "type", "purpose", "derivation"],
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
@execute_query.register
|
|
121
|
+
def _(self, query: Datasource) -> CursorResult:
|
|
122
|
+
|
|
123
|
+
return MockResult(
|
|
124
|
+
[
|
|
125
|
+
{
|
|
126
|
+
"name": query.name,
|
|
127
|
+
}
|
|
128
|
+
],
|
|
129
|
+
["name"],
|
|
130
|
+
)
|
|
131
|
+
|
|
103
132
|
@execute_query.register
|
|
104
133
|
def _(self, query: SelectStatement) -> CursorResult:
|
|
105
134
|
sql = self.generator.generate_queries(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/optimizations/predicate_pushdown.py
RENAMED
|
File without changes
|
|
File without changes
|
{pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/concept_strategies_v3.py
RENAMED
|
File without changes
|
|
File without changes
|
{pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/node_generators/__init__.py
RENAMED
|
File without changes
|
{pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/node_generators/basic_node.py
RENAMED
|
File without changes
|
{pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/node_generators/common.py
RENAMED
|
File without changes
|
|
File without changes
|
{pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/node_generators/filter_node.py
RENAMED
|
File without changes
|
{pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/node_generators/group_node.py
RENAMED
|
File without changes
|
{pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/node_generators/group_to_node.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/node_generators/rowset_node.py
RENAMED
|
File without changes
|
{pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/node_generators/select_node.py
RENAMED
|
File without changes
|
{pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/node_generators/unnest_node.py
RENAMED
|
File without changes
|
{pytrilogy-0.0.1.117 → pytrilogy-0.0.1.118}/trilogy/core/processing/node_generators/window_node.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|