pytrilogy 0.0.3.104__tar.gz → 0.0.3.105__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.

Files changed (160) hide show
  1. {pytrilogy-0.0.3.104/pytrilogy.egg-info → pytrilogy-0.0.3.105}/PKG-INFO +1 -1
  2. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105/pytrilogy.egg-info}/PKG-INFO +1 -1
  3. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/__init__.py +1 -1
  4. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/discovery_utility.py +25 -3
  5. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/node_generators/filter_node.py +4 -5
  6. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/node_generators/unnest_node.py +0 -5
  7. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/LICENSE.md +0 -0
  8. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/README.md +0 -0
  9. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/pyproject.toml +0 -0
  10. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/pytrilogy.egg-info/SOURCES.txt +0 -0
  11. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/pytrilogy.egg-info/dependency_links.txt +0 -0
  12. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/pytrilogy.egg-info/entry_points.txt +0 -0
  13. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/pytrilogy.egg-info/requires.txt +0 -0
  14. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/pytrilogy.egg-info/top_level.txt +0 -0
  15. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/setup.cfg +0 -0
  16. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/setup.py +0 -0
  17. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/tests/test_datatypes.py +0 -0
  18. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/tests/test_declarations.py +0 -0
  19. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/tests/test_derived_concepts.py +0 -0
  20. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/tests/test_discovery_nodes.py +0 -0
  21. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/tests/test_enums.py +0 -0
  22. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/tests/test_environment.py +0 -0
  23. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/tests/test_execute_models.py +0 -0
  24. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/tests/test_executor.py +0 -0
  25. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/tests/test_failure.py +0 -0
  26. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/tests/test_functions.py +0 -0
  27. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/tests/test_imports.py +0 -0
  28. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/tests/test_metadata.py +0 -0
  29. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/tests/test_models.py +0 -0
  30. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/tests/test_multi_join_assignments.py +0 -0
  31. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/tests/test_parse_engine.py +0 -0
  32. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/tests/test_parsing.py +0 -0
  33. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/tests/test_parsing_failures.py +0 -0
  34. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/tests/test_partial_handling.py +0 -0
  35. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/tests/test_query_processing.py +0 -0
  36. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/tests/test_query_render.py +0 -0
  37. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/tests/test_select.py +0 -0
  38. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/tests/test_show.py +0 -0
  39. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/tests/test_statements.py +0 -0
  40. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/tests/test_typing.py +0 -0
  41. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/tests/test_undefined_concept.py +0 -0
  42. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/tests/test_user_functions.py +0 -0
  43. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/tests/test_validators.py +0 -0
  44. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/tests/test_where_clause.py +0 -0
  45. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/authoring/__init__.py +0 -0
  46. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/constants.py +0 -0
  47. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/__init__.py +0 -0
  48. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/constants.py +0 -0
  49. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/enums.py +0 -0
  50. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/env_processor.py +0 -0
  51. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/environment_helpers.py +0 -0
  52. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/ergonomics.py +0 -0
  53. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/exceptions.py +0 -0
  54. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/functions.py +0 -0
  55. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/graph_models.py +0 -0
  56. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/internal.py +0 -0
  57. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/models/__init__.py +0 -0
  58. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/models/author.py +0 -0
  59. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/models/build.py +0 -0
  60. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/models/build_environment.py +0 -0
  61. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/models/core.py +0 -0
  62. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/models/datasource.py +0 -0
  63. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/models/environment.py +0 -0
  64. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/models/execute.py +0 -0
  65. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/optimization.py +0 -0
  66. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/optimizations/__init__.py +0 -0
  67. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/optimizations/base_optimization.py +0 -0
  68. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/optimizations/hide_unused_concept.py +0 -0
  69. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/optimizations/inline_datasource.py +0 -0
  70. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/optimizations/predicate_pushdown.py +0 -0
  71. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/__init__.py +0 -0
  72. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/concept_strategies_v3.py +0 -0
  73. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/discovery_node_factory.py +0 -0
  74. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/discovery_validation.py +0 -0
  75. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/graph_utils.py +0 -0
  76. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/node_generators/__init__.py +0 -0
  77. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/node_generators/basic_node.py +0 -0
  78. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/node_generators/common.py +0 -0
  79. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/node_generators/constant_node.py +0 -0
  80. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/node_generators/group_node.py +0 -0
  81. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/node_generators/group_to_node.py +0 -0
  82. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/node_generators/multiselect_node.py +0 -0
  83. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/node_generators/node_merge_node.py +0 -0
  84. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/node_generators/recursive_node.py +0 -0
  85. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/node_generators/rowset_node.py +0 -0
  86. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/node_generators/select_helpers/__init__.py +0 -0
  87. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/node_generators/select_helpers/datasource_injection.py +0 -0
  88. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/node_generators/select_merge_node.py +0 -0
  89. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/node_generators/select_node.py +0 -0
  90. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/node_generators/synonym_node.py +0 -0
  91. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/node_generators/union_node.py +0 -0
  92. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/node_generators/window_node.py +0 -0
  93. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/nodes/__init__.py +0 -0
  94. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/nodes/base_node.py +0 -0
  95. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/nodes/filter_node.py +0 -0
  96. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/nodes/group_node.py +0 -0
  97. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/nodes/merge_node.py +0 -0
  98. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/nodes/recursive_node.py +0 -0
  99. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/nodes/select_node_v2.py +0 -0
  100. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/nodes/union_node.py +0 -0
  101. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/nodes/unnest_node.py +0 -0
  102. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/nodes/window_node.py +0 -0
  103. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/processing/utility.py +0 -0
  104. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/query_processor.py +0 -0
  105. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/statements/__init__.py +0 -0
  106. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/statements/author.py +0 -0
  107. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/statements/build.py +0 -0
  108. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/statements/common.py +0 -0
  109. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/statements/execute.py +0 -0
  110. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/utility.py +0 -0
  111. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/validation/__init__.py +0 -0
  112. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/validation/common.py +0 -0
  113. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/validation/concept.py +0 -0
  114. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/validation/datasource.py +0 -0
  115. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/validation/environment.py +0 -0
  116. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/core/validation/fix.py +0 -0
  117. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/dialect/__init__.py +0 -0
  118. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/dialect/base.py +0 -0
  119. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/dialect/bigquery.py +0 -0
  120. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/dialect/common.py +0 -0
  121. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/dialect/config.py +0 -0
  122. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/dialect/dataframe.py +0 -0
  123. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/dialect/duckdb.py +0 -0
  124. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/dialect/enums.py +0 -0
  125. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/dialect/metadata.py +0 -0
  126. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/dialect/postgres.py +0 -0
  127. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/dialect/presto.py +0 -0
  128. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/dialect/snowflake.py +0 -0
  129. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/dialect/sql_server.py +0 -0
  130. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/engine.py +0 -0
  131. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/executor.py +0 -0
  132. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/hooks/__init__.py +0 -0
  133. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/hooks/base_hook.py +0 -0
  134. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/hooks/graph_hook.py +0 -0
  135. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/hooks/query_debugger.py +0 -0
  136. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/metadata/__init__.py +0 -0
  137. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/parser.py +0 -0
  138. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/parsing/__init__.py +0 -0
  139. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/parsing/common.py +0 -0
  140. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/parsing/config.py +0 -0
  141. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/parsing/exceptions.py +0 -0
  142. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/parsing/helpers.py +0 -0
  143. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/parsing/parse_engine.py +0 -0
  144. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/parsing/render.py +0 -0
  145. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/parsing/trilogy.lark +0 -0
  146. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/py.typed +0 -0
  147. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/render.py +0 -0
  148. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/scripts/__init__.py +0 -0
  149. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/scripts/trilogy.py +0 -0
  150. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/std/__init__.py +0 -0
  151. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/std/color.preql +0 -0
  152. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/std/date.preql +0 -0
  153. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/std/display.preql +0 -0
  154. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/std/geography.preql +0 -0
  155. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/std/metric.preql +0 -0
  156. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/std/money.preql +0 -0
  157. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/std/net.preql +0 -0
  158. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/std/ranking.preql +0 -0
  159. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/std/report.preql +0 -0
  160. {pytrilogy-0.0.3.104 → pytrilogy-0.0.3.105}/trilogy/utility.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pytrilogy
3
- Version: 0.0.3.104
3
+ Version: 0.0.3.105
4
4
  Summary: Declarative, typed query language that compiles to SQL.
5
5
  Home-page:
6
6
  Author:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pytrilogy
3
- Version: 0.0.3.104
3
+ Version: 0.0.3.105
4
4
  Summary: Declarative, typed query language that compiles to SQL.
5
5
  Home-page:
6
6
  Author:
@@ -4,6 +4,6 @@ from trilogy.dialect.enums import Dialects
4
4
  from trilogy.executor import Executor
5
5
  from trilogy.parser import parse
6
6
 
7
- __version__ = "0.0.3.104"
7
+ __version__ = "0.0.3.105"
8
8
 
9
9
  __all__ = ["parse", "Executor", "Dialects", "Environment", "CONFIG"]
@@ -27,18 +27,22 @@ def calculate_effective_parent_grain(
27
27
  ) -> BuildGrain:
28
28
  # calculate the effective grain of the parent node
29
29
  # this is the union of all parent grains
30
- if isinstance(node, MergeNode):
30
+ if isinstance(node, QueryDatasource):
31
31
  grain = BuildGrain()
32
- qds = node.resolve()
32
+ qds = node
33
33
  if not qds.joins:
34
34
  return qds.datasources[0].grain
35
+ seen = set()
35
36
  for join in qds.joins:
36
37
  if isinstance(join, UnnestJoin):
38
+ grain += BuildGrain(components=set([x.address for x in join.concepts]))
37
39
  continue
38
40
  pairs = join.concept_pairs or []
39
41
  for key in pairs:
40
42
  left = key.existing_datasource
43
+ logger.info(f"adding left grain {left.grain} for join key {key.left}")
41
44
  grain += left.grain
45
+ seen.add(left.name)
42
46
  keys = [key.right for key in pairs]
43
47
  join_grain = BuildGrain.from_concepts(keys)
44
48
  if join_grain == join.right_datasource.grain:
@@ -48,6 +52,24 @@ def calculate_effective_parent_grain(
48
52
  f"join changes grain, adding {join.right_datasource.grain} to {grain}"
49
53
  )
50
54
  grain += join.right_datasource.grain
55
+ seen.add(join.right_datasource.name)
56
+ for x in qds.datasources:
57
+ # if we haven't seen it, it's still contributing to grain
58
+ # unless used ONLY in a subselect
59
+ # so the existence check is a [bad] proxy for that
60
+ if x.name not in seen and not (
61
+ qds.condition
62
+ and qds.condition.existence_arguments
63
+ and any(
64
+ [
65
+ c.address in block
66
+ for c in x.output_concepts
67
+ for block in qds.condition.existence_arguments
68
+ ]
69
+ )
70
+ ):
71
+ logger.info(f"adding unjoined grain {x.grain} for datasource {x.name}")
72
+ grain += x.grain
51
73
  return grain
52
74
  else:
53
75
  return node.grain or BuildGrain()
@@ -75,7 +97,7 @@ def check_if_group_required(
75
97
  if comp_grain.issubset(target_grain):
76
98
 
77
99
  logger.info(
78
- f"{padding}{LOGGER_PREFIX} Group requirement check: {comp_grain}, target: {target_grain}, grain is subset of target, no group node required"
100
+ f"{padding}{LOGGER_PREFIX} Group requirement check: {comp_grain}, target: {target_grain}, grain is subset of target, no group node required"
79
101
  )
80
102
  return GroupRequiredResponse(target_grain, comp_grain, False)
81
103
  # find out what extra is in the comp grain vs target grain
@@ -4,7 +4,6 @@ from trilogy.constants import logger
4
4
  from trilogy.core.models.build import (
5
5
  BuildConcept,
6
6
  BuildFilterItem,
7
- BuildGrain,
8
7
  BuildWhereClause,
9
8
  )
10
9
  from trilogy.core.models.build_environment import BuildEnvironment
@@ -238,10 +237,10 @@ def gen_filter_node(
238
237
  if not parent.preexisting_conditions == where.conditional:
239
238
  parent.add_condition(where.conditional)
240
239
  parent.add_existence_concepts(flattened_existence, False)
241
- parent.grain = BuildGrain.from_concepts(
242
- parent.output_concepts,
243
- environment=environment,
244
- )
240
+ # parent.grain = BuildGrain.from_concepts(
241
+ # parent.output_concepts,
242
+ # environment=environment,
243
+ # )
245
244
  parent.rebuild_cache()
246
245
  filter_node = parent
247
246
  else:
@@ -4,7 +4,6 @@ from trilogy.constants import logger
4
4
  from trilogy.core.models.build import (
5
5
  BuildConcept,
6
6
  BuildFunction,
7
- BuildGrain,
8
7
  BuildWhereClause,
9
8
  )
10
9
  from trilogy.core.models.build_environment import BuildEnvironment
@@ -104,10 +103,6 @@ def gen_unnest_node(
104
103
  preexisting_conditions=(
105
104
  conditional if conditional and local_conditions is False else None
106
105
  ),
107
- grain=BuildGrain.from_concepts(
108
- concepts=base.output_concepts,
109
- environment=environment,
110
- ),
111
106
  )
112
107
  # qds = new.resolve()
113
108
  # assert qds.source_map[concept.address] == {base.resolve()}
File without changes
File without changes
File without changes
File without changes