pytrilogy 0.0.3.39__tar.gz → 0.0.3.40__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.3.39/pytrilogy.egg-info → pytrilogy-0.0.3.40}/PKG-INFO +1 -1
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40/pytrilogy.egg-info}/PKG-INFO +1 -1
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/tests/test_parsing.py +28 -1
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/__init__.py +1 -1
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/environment_helpers.py +5 -5
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/models/environment.py +2 -2
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/parsing/common.py +6 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/LICENSE.md +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/README.md +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/pyproject.toml +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/pytrilogy.egg-info/SOURCES.txt +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/pytrilogy.egg-info/dependency_links.txt +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/pytrilogy.egg-info/entry_points.txt +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/pytrilogy.egg-info/requires.txt +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/pytrilogy.egg-info/top_level.txt +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/setup.cfg +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/setup.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/tests/test_datatypes.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/tests/test_declarations.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/tests/test_derived_concepts.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/tests/test_discovery_nodes.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/tests/test_enums.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/tests/test_environment.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/tests/test_executor.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/tests/test_functions.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/tests/test_imports.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/tests/test_metadata.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/tests/test_models.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/tests/test_multi_join_assignments.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/tests/test_parse_engine.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/tests/test_partial_handling.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/tests/test_query_processing.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/tests/test_query_render.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/tests/test_select.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/tests/test_show.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/tests/test_statements.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/tests/test_typing.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/tests/test_undefined_concept.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/tests/test_user_functions.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/tests/test_where_clause.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/authoring/__init__.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/compiler.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/constants.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/__init__.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/constants.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/enums.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/env_processor.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/ergonomics.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/exceptions.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/functions.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/graph_models.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/internal.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/models/__init__.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/models/author.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/models/build.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/models/build_environment.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/models/core.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/models/datasource.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/models/execute.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/optimization.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/optimizations/__init__.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/optimizations/base_optimization.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/optimizations/inline_constant.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/optimizations/inline_datasource.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/optimizations/predicate_pushdown.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/__init__.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/concept_strategies_v3.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/graph_utils.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/node_generators/__init__.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/node_generators/basic_node.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/node_generators/common.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/node_generators/filter_node.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/node_generators/group_node.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/node_generators/group_to_node.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/node_generators/multiselect_node.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/node_generators/node_merge_node.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/node_generators/rowset_node.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/node_generators/select_helpers/__init__.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/node_generators/select_helpers/datasource_injection.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/node_generators/select_merge_node.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/node_generators/select_node.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/node_generators/synonym_node.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/node_generators/union_node.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/node_generators/unnest_node.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/node_generators/window_node.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/nodes/__init__.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/nodes/base_node.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/nodes/filter_node.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/nodes/group_node.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/nodes/merge_node.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/nodes/select_node_v2.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/nodes/union_node.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/nodes/unnest_node.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/nodes/window_node.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/utility.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/query_processor.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/statements/__init__.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/statements/author.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/statements/build.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/statements/common.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/statements/execute.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/dialect/__init__.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/dialect/base.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/dialect/bigquery.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/dialect/common.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/dialect/config.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/dialect/dataframe.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/dialect/duckdb.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/dialect/enums.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/dialect/postgres.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/dialect/presto.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/dialect/snowflake.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/dialect/sql_server.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/engine.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/executor.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/hooks/__init__.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/hooks/base_hook.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/hooks/graph_hook.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/hooks/query_debugger.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/metadata/__init__.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/parser.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/parsing/__init__.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/parsing/config.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/parsing/exceptions.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/parsing/helpers.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/parsing/parse_engine.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/parsing/render.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/parsing/trilogy.lark +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/py.typed +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/render.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/scripts/__init__.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/scripts/trilogy.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/std/__init__.py +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/std/date.preql +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/std/display.preql +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/std/geography.preql +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/std/money.preql +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/std/report.preql +0 -0
- {pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/utility.py +0 -0
|
@@ -3,6 +3,7 @@ from pytest import raises
|
|
|
3
3
|
from trilogy import Dialects
|
|
4
4
|
from trilogy.constants import MagicConstants, Parsing
|
|
5
5
|
from trilogy.core.enums import BooleanOperator, ComparisonOperator, Purpose
|
|
6
|
+
from trilogy.core.exceptions import InvalidSyntaxException
|
|
6
7
|
from trilogy.core.functions import argument_to_purpose, function_args_to_output_purpose
|
|
7
8
|
from trilogy.core.models.author import Comparison
|
|
8
9
|
from trilogy.core.models.core import (
|
|
@@ -730,10 +731,36 @@ select [5,6,7,8] as int_array, 4 as scalar
|
|
|
730
731
|
|
|
731
732
|
SELECT
|
|
732
733
|
int_array,
|
|
733
|
-
|
|
734
|
+
1+2->scalar
|
|
734
735
|
;
|
|
735
736
|
"""
|
|
736
737
|
with raises(ParseError):
|
|
737
738
|
env, parsed = parse_text(
|
|
738
739
|
x, parse_config=Parsing(strict_name_shadow_enforcement=True)
|
|
739
740
|
)
|
|
741
|
+
x = """
|
|
742
|
+
key scalar int;
|
|
743
|
+
property scalar.int_array list<int>;
|
|
744
|
+
|
|
745
|
+
key split <- unnest(int_array);
|
|
746
|
+
|
|
747
|
+
datasource avalues (
|
|
748
|
+
int_array: int_array,
|
|
749
|
+
scalar: scalar
|
|
750
|
+
)
|
|
751
|
+
grain (scalar)
|
|
752
|
+
query '''(
|
|
753
|
+
select [1,2,3,4] as int_array, 2 as scalar
|
|
754
|
+
union all
|
|
755
|
+
select [5,6,7,8] as int_array, 4 as scalar
|
|
756
|
+
)''';
|
|
757
|
+
|
|
758
|
+
SELECT
|
|
759
|
+
int_array,
|
|
760
|
+
sum(scalar)->scalar
|
|
761
|
+
;
|
|
762
|
+
"""
|
|
763
|
+
with raises(InvalidSyntaxException):
|
|
764
|
+
env, parsed = parse_text(
|
|
765
|
+
x, parse_config=Parsing(strict_name_shadow_enforcement=True)
|
|
766
|
+
)
|
|
@@ -67,7 +67,7 @@ def generate_date_concepts(concept: Concept, environment: Environment):
|
|
|
67
67
|
[concept.address],
|
|
68
68
|
),
|
|
69
69
|
metadata=Metadata(
|
|
70
|
-
description=f"Auto-derived from {base_description}. {FUNCTION_DESCRIPTION_MAPS.get(ftype, ftype.value)}
|
|
70
|
+
description=f"Auto-derived from {base_description}. {FUNCTION_DESCRIPTION_MAPS.get(ftype, ftype.value)}",
|
|
71
71
|
line_number=base_line_number,
|
|
72
72
|
concept_source=ConceptSource.AUTO_DERIVED,
|
|
73
73
|
),
|
|
@@ -89,7 +89,7 @@ def generate_date_concepts(concept: Concept, environment: Environment):
|
|
|
89
89
|
datatype=DataType.DATE,
|
|
90
90
|
purpose=Purpose.PROPERTY,
|
|
91
91
|
lineage=function,
|
|
92
|
-
grain=concept.grain,
|
|
92
|
+
grain=concept.grain.model_copy(),
|
|
93
93
|
namespace=concept.namespace,
|
|
94
94
|
keys=set(
|
|
95
95
|
[concept.address],
|
|
@@ -137,16 +137,16 @@ def generate_datetime_concepts(concept: Concept, environment: Environment):
|
|
|
137
137
|
)
|
|
138
138
|
new_concept = Concept.model_construct(
|
|
139
139
|
name=f"{concept.name}.{fname}",
|
|
140
|
-
datatype=
|
|
140
|
+
datatype=datatype,
|
|
141
141
|
purpose=default_type,
|
|
142
142
|
lineage=const_function,
|
|
143
|
-
grain=concept.grain,
|
|
143
|
+
grain=concept.grain.model_copy(),
|
|
144
144
|
namespace=concept.namespace,
|
|
145
145
|
keys=set(
|
|
146
146
|
[concept.address],
|
|
147
147
|
),
|
|
148
148
|
metadata=Metadata(
|
|
149
|
-
description=f"Auto-derived from {base_description}. {FUNCTION_DESCRIPTION_MAPS.get(ftype, ftype.value)}
|
|
149
|
+
description=f"Auto-derived from {base_description}. {FUNCTION_DESCRIPTION_MAPS.get(ftype, ftype.value)}",
|
|
150
150
|
line_number=base_line_number,
|
|
151
151
|
concept_source=ConceptSource.AUTO_DERIVED,
|
|
152
152
|
),
|
|
@@ -420,9 +420,9 @@ class Environment(BaseModel):
|
|
|
420
420
|
if INTERNAL_NAMESPACE in concept.address:
|
|
421
421
|
continue
|
|
422
422
|
if same_namespace:
|
|
423
|
-
new = self.add_concept(concept)
|
|
423
|
+
new = self.add_concept(concept, add_derived=False)
|
|
424
424
|
else:
|
|
425
|
-
new = self.add_concept(concept.with_namespace(alias))
|
|
425
|
+
new = self.add_concept(concept.with_namespace(alias), add_derived=False)
|
|
426
426
|
|
|
427
427
|
k = address_with_namespace(k, alias)
|
|
428
428
|
# set this explicitly, to handle aliasing
|
|
@@ -577,6 +577,7 @@ def agg_wrapper_to_concept(
|
|
|
577
577
|
# derivation = Concept.calculate_derivation(parent, Purpose.PROPERTY)
|
|
578
578
|
grain = Grain.from_concepts(parent.by, environment) if parent.by else Grain()
|
|
579
579
|
granularity = Concept.calculate_granularity(Derivation.AGGREGATE, grain, parent)
|
|
580
|
+
|
|
580
581
|
out = Concept(
|
|
581
582
|
name=name,
|
|
582
583
|
datatype=aggfunction.output_datatype,
|
|
@@ -590,6 +591,11 @@ def agg_wrapper_to_concept(
|
|
|
590
591
|
derivation=Derivation.AGGREGATE,
|
|
591
592
|
granularity=granularity,
|
|
592
593
|
)
|
|
594
|
+
for x in parent.function.concept_arguments:
|
|
595
|
+
if x.address == out.address:
|
|
596
|
+
raise InvalidSyntaxException(
|
|
597
|
+
f"Aggregate concept {out.address} cannot reference itself. If defining a new concept in a select, use a new name."
|
|
598
|
+
)
|
|
593
599
|
return out
|
|
594
600
|
|
|
595
601
|
|
|
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
|
|
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.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/node_generators/__init__.py
RENAMED
|
File without changes
|
{pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/node_generators/basic_node.py
RENAMED
|
File without changes
|
|
File without changes
|
{pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/node_generators/filter_node.py
RENAMED
|
File without changes
|
{pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/node_generators/group_node.py
RENAMED
|
File without changes
|
{pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/node_generators/group_to_node.py
RENAMED
|
File without changes
|
|
File without changes
|
{pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/node_generators/node_merge_node.py
RENAMED
|
File without changes
|
{pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/node_generators/rowset_node.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/node_generators/select_node.py
RENAMED
|
File without changes
|
{pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/node_generators/synonym_node.py
RENAMED
|
File without changes
|
{pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/node_generators/union_node.py
RENAMED
|
File without changes
|
{pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/trilogy/core/processing/node_generators/unnest_node.py
RENAMED
|
File without changes
|
{pytrilogy-0.0.3.39 → pytrilogy-0.0.3.40}/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
|
|
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
|