pytrilogy 0.0.3.82__py3-none-any.whl → 0.0.3.84__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.4
2
2
  Name: pytrilogy
3
- Version: 0.0.3.82
3
+ Version: 0.0.3.84
4
4
  Summary: Declarative, typed query language that compiles to SQL.
5
5
  Home-page:
6
6
  Author:
@@ -1,5 +1,5 @@
1
- pytrilogy-0.0.3.82.dist-info/licenses/LICENSE.md,sha256=5ZRvtTyCCFwz1THxDTjAu3Lidds9WjPvvzgVwPSYNDo,1042
2
- trilogy/__init__.py,sha256=bYiPbjWf72hFcdkZbNsSKQsD0uR8NWYSSfzF26YTpfM,303
1
+ pytrilogy-0.0.3.84.dist-info/licenses/LICENSE.md,sha256=5ZRvtTyCCFwz1THxDTjAu3Lidds9WjPvvzgVwPSYNDo,1042
2
+ trilogy/__init__.py,sha256=b0Bn2iqQWc-ybYMseprmaaiHheIdhoVAhJDfyMQJNkI,303
3
3
  trilogy/compiler.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  trilogy/constants.py,sha256=eKb_EJvSqjN9tGbdVEViwdtwwh8fZ3-jpOEDqL71y70,1691
5
5
  trilogy/engine.py,sha256=OK2RuqCIUId6yZ5hfF8J1nxGP0AJqHRZiafcowmW0xc,1728
@@ -11,12 +11,12 @@ trilogy/utility.py,sha256=euQccZLKoYBz0LNg5tzLlvv2YHvXh9HArnYp1V3uXsM,763
11
11
  trilogy/authoring/__init__.py,sha256=e74k-Jep4DLYPQU_2m0aVsYlw5HKTOucAKtdTbd6f2g,2595
12
12
  trilogy/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  trilogy/core/constants.py,sha256=nizWYDCJQ1bigQMtkNIEMNTcN0NoEAXiIHLzpelxQ24,201
14
- trilogy/core/enums.py,sha256=kuwTeEur5TZ07DX8nO3fSiRQ32bLZ5jRK-vIjHbBUnc,8118
14
+ trilogy/core/enums.py,sha256=gIbFV6HT93wUWgfOm6lQeMS_sQcvHc4IK-vuQpwyepY,8158
15
15
  trilogy/core/env_processor.py,sha256=pFsxnluKIusGKx1z7tTnfsd_xZcPy9pZDungkjkyvI0,3170
16
16
  trilogy/core/environment_helpers.py,sha256=VvPIiFemqaLLpIpLIqprfu63K7muZ1YzNg7UZIUph8w,8267
17
17
  trilogy/core/ergonomics.py,sha256=e-7gE29vPLFdg0_A1smQ7eOrUwKl5VYdxRSTddHweRA,1631
18
18
  trilogy/core/exceptions.py,sha256=jYEduuMehcMkmCpf-OC_taELPZm7qNfeSNzIWkDYScs,707
19
- trilogy/core/functions.py,sha256=9Q-c7UGxOR0SVwzcHt9mHX_aVroW9jEWwJr7BtHigw8,31766
19
+ trilogy/core/functions.py,sha256=hIvMYbSSsVDsXfHtZ7pwGc2CFIYqsVuYt9GOfAw3BRk,32013
20
20
  trilogy/core/graph_models.py,sha256=BYhJzHKSgnZHVLJs1CfsgrxTPHqKqPNeA64RlozGY0A,3498
21
21
  trilogy/core/internal.py,sha256=wFx4e1I0mtx159YFShSXeUBSQ82NINtAbOI-92RX4i8,2151
22
22
  trilogy/core/optimization.py,sha256=ojpn-p79lr03SSVQbbw74iPCyoYpDYBmj1dbZ3oXCjI,8860
@@ -41,7 +41,7 @@ trilogy/core/processing/discovery_node_factory.py,sha256=5QVYUsci_h6iYWhS0GCoDow
41
41
  trilogy/core/processing/discovery_utility.py,sha256=eY4n7_r6_R-cx_Sm8FiouMXh78v2iO2SGhi0aI5jvDg,4549
42
42
  trilogy/core/processing/discovery_validation.py,sha256=eZ4HfHMpqZLI8MGG2jez8arS8THs6ceuVrQFIY6gXrU,5364
43
43
  trilogy/core/processing/graph_utils.py,sha256=8QUVrkE9j-9C1AyrCb1nQEh8daCe0u1HuXl-Te85lag,1205
44
- trilogy/core/processing/utility.py,sha256=VjKhDFeItB642riF8KHwyk4YEc58nVDiPLIydwdLPcQ,22716
44
+ trilogy/core/processing/utility.py,sha256=I7KgLJc1oLYPZoArMzoYMr-w2y3wv80u2VfVYbBNfkM,22716
45
45
  trilogy/core/processing/node_generators/__init__.py,sha256=iVJ-crowPxYeut-hFjyEjfibKIDq7PfB4LEuDAUCjGY,943
46
46
  trilogy/core/processing/node_generators/basic_node.py,sha256=TLZCv4WS196a-0g5xgKuJGthnGP8Ugm46iz85_3NIY4,5626
47
47
  trilogy/core/processing/node_generators/common.py,sha256=PdysdroW9DUADP7f5Wv_GKPUyCTROZV1g3L45fawxi8,9443
@@ -50,7 +50,7 @@ trilogy/core/processing/node_generators/filter_node.py,sha256=oRRq2-T3ufgn4D23uQ
50
50
  trilogy/core/processing/node_generators/group_node.py,sha256=1QJhRxsTklJ5xq8wHlAURZaN9gL9FPpeCa1OJ7IwXnY,6769
51
51
  trilogy/core/processing/node_generators/group_to_node.py,sha256=jKcNCDOY6fNblrdZwaRU0sbUSr9H0moQbAxrGgX6iGA,3832
52
52
  trilogy/core/processing/node_generators/multiselect_node.py,sha256=GWV5yLmKTe1yyPhN60RG1Rnrn4ktfn9lYYXi_FVU4UI,7061
53
- trilogy/core/processing/node_generators/node_merge_node.py,sha256=bYhXGJqJDgT4JWlN4u761V3bkP96o6J25LFs6YBOiKQ,18304
53
+ trilogy/core/processing/node_generators/node_merge_node.py,sha256=sUKS9bSTeYNCyF9jibrkac1_QkmxD-k4x35nQK1b9cM,18312
54
54
  trilogy/core/processing/node_generators/recursive_node.py,sha256=l5zdh0dURKwmAy8kK4OpMtZfyUEQRk6N-PwSWIyBpSM,2468
55
55
  trilogy/core/processing/node_generators/rowset_node.py,sha256=5L5u6xz1In8EaHQdcYgR2si-tz9WB9YLXURo4AkUT9A,6630
56
56
  trilogy/core/processing/node_generators/select_merge_node.py,sha256=Cv2GwNiYSmwewjuK8T3JB3pbgrLZFPsB75DCP153BMA,22818
@@ -77,7 +77,7 @@ trilogy/core/statements/build.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
77
77
  trilogy/core/statements/common.py,sha256=KxEmz2ySySyZ6CTPzn0fJl5NX2KOk1RPyuUSwWhnK1g,759
78
78
  trilogy/core/statements/execute.py,sha256=pfr1CZ_Cx1qQ-7LDyRI0JUfvtxBr_GGv-VeqiAjr43g,1406
79
79
  trilogy/dialect/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
- trilogy/dialect/base.py,sha256=0nVDvsnDS8iMTIlCUsBs_ymoZMW6uh04U4MMZxOuHUw,47428
80
+ trilogy/dialect/base.py,sha256=Bj3Wun81NAtfpjAyJGHDPSogPaTjBO1Bnmm9JxfpyfM,47533
81
81
  trilogy/dialect/bigquery.py,sha256=8xhEu0z_lKANjbvzvBbC7CeKrJf1iP8YyrHqNale-ug,4351
82
82
  trilogy/dialect/common.py,sha256=tSthIZOXXRPQ4KeMKnDDsH7KlTmf2EVqigVtLyoc4zc,6071
83
83
  trilogy/dialect/config.py,sha256=olnyeVU5W5T6b9-dMeNAnvxuPlyc2uefb7FRME094Ec,3834
@@ -98,9 +98,9 @@ trilogy/parsing/common.py,sha256=yV1AckK0h8u1OFeGQBTMu-wuW5m63c5CcZuPicsTH_w,306
98
98
  trilogy/parsing/config.py,sha256=Z-DaefdKhPDmSXLgg5V4pebhSB0h590vI0_VtHnlukI,111
99
99
  trilogy/parsing/exceptions.py,sha256=Xwwsv2C9kSNv2q-HrrKC1f60JNHShXcCMzstTSEbiCw,154
100
100
  trilogy/parsing/helpers.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
101
- trilogy/parsing/parse_engine.py,sha256=ll3uBwpJ2iAxT-KbbXy7OuCqUvKfLPzB1gHr8gApv_s,78591
101
+ trilogy/parsing/parse_engine.py,sha256=MXG5nzQWd1tVaJddF_NDst96N_ayALQ0EB3JMh8kWaY,78776
102
102
  trilogy/parsing/render.py,sha256=HSNntD82GiiwHT-TWPLXAaIMWLYVV5B5zQEsgwrHIBE,19605
103
- trilogy/parsing/trilogy.lark,sha256=Uhy6A00-GsC-L8fRCN0JZC6fL87ujOOd9_4LbQWApY4,15248
103
+ trilogy/parsing/trilogy.lark,sha256=B7onP5W7ZIW_uKObJ5rL1sQCpnWiMeZ2azQ9j2U2ssE,15368
104
104
  trilogy/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
105
105
  trilogy/scripts/trilogy.py,sha256=1L0XrH4mVHRt1C9T1HnaDv2_kYEfbWTb5_-cBBke79w,3774
106
106
  trilogy/std/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -111,8 +111,8 @@ trilogy/std/money.preql,sha256=XWwvAV3WxBsHX9zfptoYRnBigcfYwrYtBHXTME0xJuQ,2082
111
111
  trilogy/std/net.preql,sha256=7l7MqIjs6TDCpO6dBAoNJU81Ex255jZRK36kBgE1GDs,158
112
112
  trilogy/std/ranking.preql,sha256=LDoZrYyz4g3xsII9XwXfmstZD-_92i1Eox1UqkBIfi8,83
113
113
  trilogy/std/report.preql,sha256=LbV-XlHdfw0jgnQ8pV7acG95xrd1-p65fVpiIc-S7W4,202
114
- pytrilogy-0.0.3.82.dist-info/METADATA,sha256=eFCjlA6cbwL_BeJhwzGHYJEVqKLaWB49VJSkG71s0ls,9589
115
- pytrilogy-0.0.3.82.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
116
- pytrilogy-0.0.3.82.dist-info/entry_points.txt,sha256=ewBPU2vLnVexZVnB-NrVj-p3E-4vukg83Zk8A55Wp2w,56
117
- pytrilogy-0.0.3.82.dist-info/top_level.txt,sha256=cAy__NW_eMAa_yT9UnUNlZLFfxcg6eimUAZ184cdNiE,8
118
- pytrilogy-0.0.3.82.dist-info/RECORD,,
114
+ pytrilogy-0.0.3.84.dist-info/METADATA,sha256=geu9WBXvLdcteqUAJuFHuDkeyxc8h7l-t9PgRkk7J4o,9589
115
+ pytrilogy-0.0.3.84.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
116
+ pytrilogy-0.0.3.84.dist-info/entry_points.txt,sha256=ewBPU2vLnVexZVnB-NrVj-p3E-4vukg83Zk8A55Wp2w,56
117
+ pytrilogy-0.0.3.84.dist-info/top_level.txt,sha256=cAy__NW_eMAa_yT9UnUNlZLFfxcg6eimUAZ184cdNiE,8
118
+ pytrilogy-0.0.3.84.dist-info/RECORD,,
trilogy/__init__.py CHANGED
@@ -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.82"
7
+ __version__ = "0.0.3.84"
8
8
 
9
9
  __all__ = ["parse", "Executor", "Dialects", "Environment", "CONFIG"]
trilogy/core/enums.py CHANGED
@@ -154,6 +154,7 @@ class FunctionType(Enum):
154
154
  ARRAY_SUM = "array_sum"
155
155
  ARRAY_SORT = "array_sort"
156
156
  ARRAY_TRANSFORM = "array_transform"
157
+ ARRAY_TO_STRING = "array_to_string"
157
158
 
158
159
  # TEXT AND MAYBE MORE
159
160
  SPLIT = "split"
trilogy/core/functions.py CHANGED
@@ -283,6 +283,15 @@ FUNCTION_REGISTRY: dict[FunctionType, FunctionConfig] = {
283
283
  output_type_function=get_transform_output_type,
284
284
  arg_count=3,
285
285
  ),
286
+ FunctionType.ARRAY_TO_STRING: FunctionConfig(
287
+ valid_inputs={
288
+ DataType.ARRAY,
289
+ DataType.STRING,
290
+ },
291
+ output_purpose=Purpose.PROPERTY,
292
+ output_type=DataType.STRING,
293
+ arg_count=2,
294
+ ),
286
295
  FunctionType.ARRAY_SUM: FunctionConfig(
287
296
  valid_inputs={
288
297
  DataType.ARRAY,
@@ -104,16 +104,16 @@ def determine_induced_minimal_nodes(
104
104
  if filter_downstream and lookup.derivation not in (Derivation.ROOT,):
105
105
  nodes_to_remove.append(node)
106
106
  if nodes_to_remove:
107
- logger.debug(f"Removing nodes {nodes_to_remove} from graph")
107
+ # logger.debug(f"Removing nodes {nodes_to_remove} from graph")
108
108
  H.remove_nodes_from(nodes_to_remove)
109
109
  isolates = list(nx.isolates(H))
110
110
  if isolates:
111
- logger.debug(f"Removing isolates {isolates} from graph")
111
+ # logger.debug(f"Removing isolates {isolates} from graph")
112
112
  H.remove_nodes_from(isolates)
113
113
 
114
114
  zero_out = list(x for x in H.nodes if G.out_degree(x) == 0 and x not in nodelist)
115
115
  while zero_out:
116
- logger.debug(f"Removing zero out nodes {zero_out} from graph")
116
+ # logger.debug(f"Removing zero out nodes {zero_out} from graph")
117
117
  H.remove_nodes_from(zero_out)
118
118
  zero_out = list(
119
119
  x for x in H.nodes if G.out_degree(x) == 0 and x not in nodelist
@@ -128,7 +128,7 @@ def determine_induced_minimal_nodes(
128
128
  if path_removals:
129
129
  logger.debug(f"Removing paths {path_removals} from graph")
130
130
  H.remove_nodes_from(path_removals)
131
- logger.debug(f"Graph after path removal {H.nodes}")
131
+ # logger.debug(f"Graph after path removal {H.nodes}")
132
132
  sG: nx.Graph = ax.steinertree.steiner_tree(H, nodelist).copy()
133
133
  if not sG.nodes:
134
134
  logger.debug(f"No Steiner tree found for nodes {nodelist}")
@@ -169,9 +169,9 @@ def resolve_join_order_v2(
169
169
  right_is_nullable = any(
170
170
  key in nullables.get(right, []) for key in common
171
171
  )
172
- if left_is_partial:
172
+ if left_is_partial or right_is_nullable:
173
173
  join_type = JoinType.FULL
174
- elif right_is_partial or right_is_nullable:
174
+ elif right_is_partial:
175
175
  join_type = JoinType.LEFT_OUTER
176
176
  # we can't inner join if the left was an outer join
177
177
  else:
trilogy/dialect/base.py CHANGED
@@ -193,6 +193,9 @@ FUNCTION_MAP = {
193
193
  FunctionType.ARRAY_TRANSFORM: lambda args: (
194
194
  f"array_transform({args[0]}, {args[1]} -> {args[2]})"
195
195
  ),
196
+ FunctionType.ARRAY_TO_STRING: lambda args: (
197
+ f"array_to_string({args[0]}, {args[1]})"
198
+ ),
196
199
  # math
197
200
  FunctionType.ADD: lambda x: " + ".join(x),
198
201
  FunctionType.ABS: lambda x: f"abs({x[0]})",
@@ -2034,6 +2034,12 @@ class ParseToObjects(Transformer):
2034
2034
  args, FunctionType.ARRAY_DISTINCT, meta
2035
2035
  )
2036
2036
 
2037
+ @v_args(meta=True)
2038
+ def farray_to_string(self, meta, args):
2039
+ return self.function_factory.create_function(
2040
+ args, FunctionType.ARRAY_TO_STRING, meta
2041
+ )
2042
+
2037
2043
  @v_args(meta=True)
2038
2044
  def farray_sort(self, meta, args):
2039
2045
  if len(args) == 1:
@@ -300,13 +300,15 @@
300
300
  farray_sum: _ARRAY_SUM expr ")"
301
301
  _ARRAY_DISTINCT.1: "array_distinct("i
302
302
  farray_distinct: _ARRAY_DISTINCT expr ")"
303
+ _ARRAY_TO_STRING.1: "array_to_string("i
304
+ farray_to_string: _ARRAY_TO_STRING expr "," expr ")"
303
305
  _ARRAY_SORT.1: "array_sort("i
304
306
  farray_sort: _ARRAY_SORT expr ("," ordering )? ")"
305
307
  _ARRAY_TRANSFORM.1: "array_transform("i
306
308
  transform_lambda: "@" IDENTIFIER
307
309
  farray_transform: _ARRAY_TRANSFORM expr "," transform_lambda ")"
308
310
 
309
- _array_functions: farray_sum | farray_distinct | farray_sort | farray_transform
311
+ _array_functions: farray_sum | farray_distinct | farray_sort | farray_transform | farray_to_string
310
312
 
311
313
  // special aggregate
312
314
  _GROUP.1: "group("i