pytrilogy 0.0.2.41__py3-none-any.whl → 0.0.2.42__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.

@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pytrilogy
3
- Version: 0.0.2.41
3
+ Version: 0.0.2.42
4
4
  Summary: Declarative, typed query language that compiles to SQL.
5
5
  Home-page:
6
6
  Author:
@@ -1,4 +1,4 @@
1
- trilogy/__init__.py,sha256=TkwxYmJ568eljR1wX8-wzP48QWvm0V6gSnZBN5DX-jk,291
1
+ trilogy/__init__.py,sha256=glHFECV4KATmV-8gTFg956amPYtuISIt3uvusd_0zl8,291
2
2
  trilogy/compiler.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  trilogy/constants.py,sha256=UPymm94T2c6a55XdDaXw0aleTe1pOJ6lf6gOWLKZyKg,1430
4
4
  trilogy/engine.py,sha256=R5ubIxYyrxRExz07aZCUfrTsoXCHQ8DKFTDsobXdWdA,1102
@@ -40,7 +40,7 @@ trilogy/core/processing/node_generators/rowset_node.py,sha256=KtdN6t2xM8CJxobc4a
40
40
  trilogy/core/processing/node_generators/select_merge_node.py,sha256=UF4xra2sJ6dGg9TLJUgqtTX-UxqUaCEfAGo-uq7HlVs,12139
41
41
  trilogy/core/processing/node_generators/select_node.py,sha256=nwXHQF6C-aQUIelx9dyxN2pK3muL-4-6RIqnqQqNwtw,1808
42
42
  trilogy/core/processing/node_generators/unnest_node.py,sha256=cZ26CN338CBnd6asML1OBUtNcDzmNlFpY0Vnade4yrc,2256
43
- trilogy/core/processing/node_generators/window_node.py,sha256=Jfjjdvn8RqFzrQ1gZc6vS0Bsh_iTA5AmRZ0zLlT4574,3155
43
+ trilogy/core/processing/node_generators/window_node.py,sha256=Ywb2K0T5Ym_Y4XStzIE2fuWV1fW2dp5eQ2hXVFTLsGM,3511
44
44
  trilogy/core/processing/nodes/__init__.py,sha256=qS5EJDRwwIrCEfS7ibCA2ESE0RPzsAIii1UWd_wNsHA,4760
45
45
  trilogy/core/processing/nodes/base_node.py,sha256=sc3HrXkWk-xpsAQ7B7ltX1ZejYAkqFiv8Ei8Jg5VGkQ,15579
46
46
  trilogy/core/processing/nodes/filter_node.py,sha256=GfZ9eghpFDI-s7iQP2UqTljCmn25LT_T5TAxDlh7PkQ,2343
@@ -66,7 +66,7 @@ trilogy/hooks/graph_hook.py,sha256=onHvMQPwj_KOS3HOTpRFiy7QLLKAiycq2MzJ_Q0Oh5Y,2
66
66
  trilogy/hooks/query_debugger.py,sha256=787umJjdGA057DCC714dqFstzJRUbwmz3MNr66IdpQI,4404
67
67
  trilogy/metadata/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
68
  trilogy/parsing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
- trilogy/parsing/common.py,sha256=_GW9LU6_4RuUgcdcr8EE1ybCRd-7cz3idZtjHZ66pYA,10182
69
+ trilogy/parsing/common.py,sha256=3kly4cH36F_8nwR1evKB5_yk1ezEtwwoeav4PrHUJ6o,10417
70
70
  trilogy/parsing/config.py,sha256=Z-DaefdKhPDmSXLgg5V4pebhSB0h590vI0_VtHnlukI,111
71
71
  trilogy/parsing/exceptions.py,sha256=92E5i2frv5hj9wxObJZsZqj5T6bglvPzvdvco_vW1Zk,38
72
72
  trilogy/parsing/helpers.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
@@ -75,9 +75,9 @@ trilogy/parsing/render.py,sha256=-qqpXQg4yHcv284Vosjnsc_vrPveH6oaYbeCd3ZSvs0,156
75
75
  trilogy/parsing/trilogy.lark,sha256=B6NM3-rBHtYB_WSEti0DiS8Z-I8YH3kZU47xNzQvBx4,12389
76
76
  trilogy/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
77
  trilogy/scripts/trilogy.py,sha256=PHxvv6f2ODv0esyyhWxlARgra8dVhqQhYl0lTrSyVNo,3729
78
- pytrilogy-0.0.2.41.dist-info/LICENSE.md,sha256=5ZRvtTyCCFwz1THxDTjAu3Lidds9WjPvvzgVwPSYNDo,1042
79
- pytrilogy-0.0.2.41.dist-info/METADATA,sha256=PGYuvWWThHh9Vucj7-eZIWLGu7db7pN7iVyXL9f42-Q,8426
80
- pytrilogy-0.0.2.41.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
81
- pytrilogy-0.0.2.41.dist-info/entry_points.txt,sha256=0petKryjvvtEfTlbZC1AuMFumH_WQ9v8A19LvoS6G6c,54
82
- pytrilogy-0.0.2.41.dist-info/top_level.txt,sha256=cAy__NW_eMAa_yT9UnUNlZLFfxcg6eimUAZ184cdNiE,8
83
- pytrilogy-0.0.2.41.dist-info/RECORD,,
78
+ pytrilogy-0.0.2.42.dist-info/LICENSE.md,sha256=5ZRvtTyCCFwz1THxDTjAu3Lidds9WjPvvzgVwPSYNDo,1042
79
+ pytrilogy-0.0.2.42.dist-info/METADATA,sha256=DIvk05ia-Z1WZ3x27s6T8KbPpw-qsTeKjJEFyZ-f06s,8426
80
+ pytrilogy-0.0.2.42.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
81
+ pytrilogy-0.0.2.42.dist-info/entry_points.txt,sha256=0petKryjvvtEfTlbZC1AuMFumH_WQ9v8A19LvoS6G6c,54
82
+ pytrilogy-0.0.2.42.dist-info/top_level.txt,sha256=cAy__NW_eMAa_yT9UnUNlZLFfxcg6eimUAZ184cdNiE,8
83
+ pytrilogy-0.0.2.42.dist-info/RECORD,,
trilogy/__init__.py CHANGED
@@ -4,6 +4,6 @@ from trilogy.executor import Executor
4
4
  from trilogy.parser import parse
5
5
  from trilogy.constants import CONFIG
6
6
 
7
- __version__ = "0.0.2.41"
7
+ __version__ = "0.0.2.42"
8
8
 
9
9
  __all__ = ["parse", "Executor", "Dialects", "Environment", "CONFIG"]
@@ -10,7 +10,9 @@ from trilogy.core.processing.utility import padding
10
10
  LOGGER_PREFIX = "[GEN_WINDOW_NODE]"
11
11
 
12
12
 
13
- def resolve_window_parent_concepts(concept: Concept) -> tuple[Concept, List[Concept]]:
13
+ def resolve_window_parent_concepts(
14
+ concept: Concept, environment: Environment
15
+ ) -> tuple[Concept, List[Concept]]:
14
16
  if not isinstance(concept.lineage, WindowItem):
15
17
  raise ValueError
16
18
  base = []
@@ -18,6 +20,11 @@ def resolve_window_parent_concepts(concept: Concept) -> tuple[Concept, List[Conc
18
20
  base += concept.lineage.over
19
21
  if concept.lineage.order_by:
20
22
  for item in concept.lineage.order_by:
23
+ # TODO: we do want to use the rehydrated value, but
24
+ # that introduces a circular dependency on an aggregate
25
+ # that is grouped by a window
26
+ # need to figure out how to resolve this
27
+ # base += [environment.concepts[item.expr.output.address]]
21
28
  base += [item.expr.output]
22
29
  return concept.lineage.content, unique(base, "address")
23
30
 
@@ -32,12 +39,12 @@ def gen_window_node(
32
39
  history: History | None = None,
33
40
  conditions: WhereClause | None = None,
34
41
  ) -> StrategyNode | None:
35
- base, parent_concepts = resolve_window_parent_concepts(concept)
42
+ base, parent_concepts = resolve_window_parent_concepts(concept, environment)
36
43
  equivalent_optional = [
37
44
  x
38
45
  for x in local_optional
39
46
  if isinstance(x.lineage, WindowItem)
40
- and resolve_window_parent_concepts(x)[1] == parent_concepts
47
+ and resolve_window_parent_concepts(x, environment)[1] == parent_concepts
41
48
  ]
42
49
 
43
50
  non_equivalent_optional = [
trilogy/parsing/common.py CHANGED
@@ -13,6 +13,7 @@ from trilogy.core.models import (
13
13
  Parenthetical,
14
14
  FunctionClass,
15
15
  Environment,
16
+ DataType,
16
17
  )
17
18
  from typing import List, Tuple
18
19
  from trilogy.core.functions import (
@@ -25,7 +26,7 @@ from trilogy.core.enums import PurposeLineage
25
26
  from trilogy.constants import (
26
27
  VIRTUAL_CONCEPT_PREFIX,
27
28
  )
28
- from trilogy.core.enums import Modifier
29
+ from trilogy.core.enums import Modifier, WindowType
29
30
 
30
31
 
31
32
  def get_upstream_modifiers(keys: List[Concept]) -> list[Modifier]:
@@ -234,9 +235,18 @@ def window_item_to_concept(
234
235
  else:
235
236
  grain = parent.over + [parent.content.output]
236
237
  modifiers = get_upstream_modifiers(parent.content.concept_arguments)
238
+ datatype = parent.content.datatype
239
+ if parent.type in (
240
+ WindowType.RANK,
241
+ WindowType.ROW_NUMBER,
242
+ WindowType.COUNT,
243
+ WindowType.COUNT_DISTINCT,
244
+ ):
245
+ datatype = DataType.INTEGER
246
+
237
247
  return Concept(
238
248
  name=name,
239
- datatype=parent.content.datatype,
249
+ datatype=datatype,
240
250
  purpose=local_purpose,
241
251
  lineage=parent,
242
252
  metadata=fmetadata,