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

Files changed (43) hide show
  1. {pytrilogy-0.0.2.49.dist-info → pytrilogy-0.0.2.51.dist-info}/METADATA +1 -1
  2. {pytrilogy-0.0.2.49.dist-info → pytrilogy-0.0.2.51.dist-info}/RECORD +43 -41
  3. trilogy/__init__.py +1 -1
  4. trilogy/core/enums.py +11 -0
  5. trilogy/core/functions.py +4 -1
  6. trilogy/core/internal.py +5 -1
  7. trilogy/core/models.py +135 -263
  8. trilogy/core/processing/concept_strategies_v3.py +14 -7
  9. trilogy/core/processing/node_generators/basic_node.py +7 -3
  10. trilogy/core/processing/node_generators/common.py +8 -5
  11. trilogy/core/processing/node_generators/filter_node.py +5 -8
  12. trilogy/core/processing/node_generators/group_node.py +24 -9
  13. trilogy/core/processing/node_generators/group_to_node.py +0 -2
  14. trilogy/core/processing/node_generators/multiselect_node.py +4 -5
  15. trilogy/core/processing/node_generators/node_merge_node.py +14 -3
  16. trilogy/core/processing/node_generators/rowset_node.py +3 -5
  17. trilogy/core/processing/node_generators/select_helpers/__init__.py +0 -0
  18. trilogy/core/processing/node_generators/select_helpers/datasource_injection.py +203 -0
  19. trilogy/core/processing/node_generators/select_merge_node.py +153 -66
  20. trilogy/core/processing/node_generators/union_node.py +0 -1
  21. trilogy/core/processing/node_generators/unnest_node.py +0 -2
  22. trilogy/core/processing/node_generators/window_node.py +0 -2
  23. trilogy/core/processing/nodes/base_node.py +2 -36
  24. trilogy/core/processing/nodes/filter_node.py +0 -3
  25. trilogy/core/processing/nodes/group_node.py +19 -13
  26. trilogy/core/processing/nodes/merge_node.py +2 -5
  27. trilogy/core/processing/nodes/select_node_v2.py +0 -4
  28. trilogy/core/processing/nodes/union_node.py +0 -3
  29. trilogy/core/processing/nodes/unnest_node.py +0 -3
  30. trilogy/core/processing/nodes/window_node.py +0 -3
  31. trilogy/core/processing/utility.py +3 -0
  32. trilogy/core/query_processor.py +0 -1
  33. trilogy/dialect/base.py +14 -2
  34. trilogy/dialect/duckdb.py +7 -0
  35. trilogy/hooks/graph_hook.py +17 -1
  36. trilogy/parsing/common.py +68 -17
  37. trilogy/parsing/parse_engine.py +70 -20
  38. trilogy/parsing/render.py +8 -1
  39. trilogy/parsing/trilogy.lark +3 -1
  40. {pytrilogy-0.0.2.49.dist-info → pytrilogy-0.0.2.51.dist-info}/LICENSE.md +0 -0
  41. {pytrilogy-0.0.2.49.dist-info → pytrilogy-0.0.2.51.dist-info}/WHEEL +0 -0
  42. {pytrilogy-0.0.2.49.dist-info → pytrilogy-0.0.2.51.dist-info}/entry_points.txt +0 -0
  43. {pytrilogy-0.0.2.49.dist-info → pytrilogy-0.0.2.51.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pytrilogy
3
- Version: 0.0.2.49
3
+ Version: 0.0.2.51
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=hG5X0wOuxbm75ZaOS3dSSefwEZ4P5yCHSSmZ1x9LX4I,291
1
+ trilogy/__init__.py,sha256=TMbpm0ynWcQ4tG8lUyLaIHKjUOj4LeFA9xtKRoLmrOc,291
2
2
  trilogy/compiler.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  trilogy/constants.py,sha256=qZ1d0hoKPPV2HHCoFwPYTVB7b6bXjpWvXd3lE-zEhy8,1494
4
4
  trilogy/engine.py,sha256=yOPnR7XCjWG82Gym_LLZBkYKKJdLCvqdCyt8zguNcnM,1103
@@ -8,55 +8,57 @@ trilogy/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  trilogy/utility.py,sha256=eguES83XhmSOAQSBu5xq4aAXimiZFrxcUu81zDL22ug,707
9
9
  trilogy/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
10
  trilogy/core/constants.py,sha256=7XaCpZn5mQmjTobbeBn56SzPWq9eMNDfzfsRU-fP0VE,171
11
- trilogy/core/enums.py,sha256=iBrgUSGhGX865mV784KIU4qKmg6d7bZV71CgdZh20VI,6944
11
+ trilogy/core/enums.py,sha256=6pGjEXNJPB1ngbDQRJjxRi4NmKM8NZQ5-iwnZhrdo5U,7281
12
12
  trilogy/core/env_processor.py,sha256=Pt4lmJfbShBbeSe5M7_FrTk5krrOziiAA__Slnettvc,2585
13
13
  trilogy/core/environment_helpers.py,sha256=CSmQyEXE6EZ4XFYuQQITUHuWXxXGo9AL4UsTnu0404A,7159
14
14
  trilogy/core/ergonomics.py,sha256=ASLDd0RqKWrZiG3XcKHo8nyTjaB_8xfE9t4NZ1UvGpc,1639
15
15
  trilogy/core/exceptions.py,sha256=1c1lQCwSw4_5CQS3q7scOkXU8GQvullJXfPHubprl90,617
16
- trilogy/core/functions.py,sha256=qpVLwTNU_qHQyIvNish5O2AlbpRMQQOqZWEUiSMnpqE,10721
16
+ trilogy/core/functions.py,sha256=hDlwLxQUskT9iRcIic1lfACQnxMLNM5ASdHRPi0ghyw,10835
17
17
  trilogy/core/graph_models.py,sha256=mameUTiuCajtihDw_2-W218xyJlvTusOWrEKP1yAWgk,2003
18
- trilogy/core/internal.py,sha256=-CykZknaWieFh5begaQJ4EgGP9qJccGg4XXdmBirxEc,1074
19
- trilogy/core/models.py,sha256=GLy30_Rhvb9Z1atXPlK-sOSeN4lBzBspyMiqti5wS50,166562
18
+ trilogy/core/internal.py,sha256=FQWbuETKPfzjALMmdXJwlOMlESfm2Z5gmErSsq3BX9c,1173
19
+ trilogy/core/models.py,sha256=1d9Li5gQymKDl2U9PWweEYctxgxaKORIggsQhUibefM,162044
20
20
  trilogy/core/optimization.py,sha256=Jy3tVJNeqhpK6VSyTvgIWKCao6y-VCZ7mYA69MIF6L0,7989
21
- trilogy/core/query_processor.py,sha256=keXQMpvM-S4rYU1YhzRAkvB1bVlbcX4CKNFafhVRgiI,18635
21
+ trilogy/core/query_processor.py,sha256=V-TqybYO0kCY8O7Nk58OBhb7_eRPs_EqAwaQv-EYLSY,18615
22
22
  trilogy/core/optimizations/__init__.py,sha256=EBanqTXEzf1ZEYjAneIWoIcxtMDite5-n2dQ5xcfUtg,356
23
23
  trilogy/core/optimizations/base_optimization.py,sha256=P4kF-eCXkBxO-5c6tLHhMZ4ODRH1A04hb_6ovkaVyLw,505
24
24
  trilogy/core/optimizations/inline_constant.py,sha256=c-YHOg6eAufL4EaCf4-0PbY_D4skBHW0ldR55_phsMA,1277
25
25
  trilogy/core/optimizations/inline_datasource.py,sha256=LsngRKBy-LYcx1sfo1-rnDym_ly73YV9WkEngSjpFx8,3943
26
26
  trilogy/core/optimizations/predicate_pushdown.py,sha256=XPWEBv8jXnc0OL2JDPNwFvJ5AtOE7dLzJK0LzdmdZMo,9252
27
27
  trilogy/core/processing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
- trilogy/core/processing/concept_strategies_v3.py,sha256=0xN1AMBGPKfl2Bbl0zIIGJYcmaNl9PFl2ESzBniVO24,37104
28
+ trilogy/core/processing/concept_strategies_v3.py,sha256=TrkaE8bY0AU7XiLP47rLqqFqkfiinrNF3v6C6DtZiY4,37474
29
29
  trilogy/core/processing/graph_utils.py,sha256=stbYnDxnK-1kbo9L4XNU85FQhWCP-oZYO7LCXhAdC5M,1198
30
- trilogy/core/processing/utility.py,sha256=RG0v0hCgyWsxRHzDx2-ME0ENp1LlahLk4zB--Hfrsbc,18717
30
+ trilogy/core/processing/utility.py,sha256=STqSHP8fWTVmaIUCfHAb9Hke_fzOG2pTbmWIdYS4cvc,18787
31
31
  trilogy/core/processing/node_generators/__init__.py,sha256=s_YV1OYc336DuS9591259qjI_K_CtOCuhkf4t2aOgYs,733
32
- trilogy/core/processing/node_generators/basic_node.py,sha256=VqVyb4wXI_B2OmfwtpsypimzcevoPe_pnstlKLU3S5s,2878
33
- trilogy/core/processing/node_generators/common.py,sha256=kETikLR2fWbrKywPL0TXXj6YY4rpOA8PjsUSyx_mNyE,8907
34
- trilogy/core/processing/node_generators/filter_node.py,sha256=Br10q3yHtQbA337dR8JwzQMCGqo_H0kjF1vprK7PPns,7610
35
- trilogy/core/processing/node_generators/group_node.py,sha256=wlj8N4Nd1_8cpmccoe0BocM9jUEYsc-1WEMDCoh1WSw,4876
36
- trilogy/core/processing/node_generators/group_to_node.py,sha256=RNvDo0x1TNFCDi97IAZ4taLMEe9Wv0XzNtuCCM9vjvw,2537
37
- trilogy/core/processing/node_generators/multiselect_node.py,sha256=abS8mWWoTxRXYdjKTgRgdfeLiWcJjZ7qgESYwDv5e_o,6510
38
- trilogy/core/processing/node_generators/node_merge_node.py,sha256=IYDS5DNF-5_dpgwre_n1Kh7RBnt4srzgYkaUahe_K_o,14001
39
- trilogy/core/processing/node_generators/rowset_node.py,sha256=kM4N8n20U0zGeHgQBfyXC7PP-ABIdWUHc1q1vnWkfOw,5297
40
- trilogy/core/processing/node_generators/select_merge_node.py,sha256=JFoBKETwhmd2KdmoNq4wT2SOrd3Jh-GGcO5qMiUh8JE,12691
32
+ trilogy/core/processing/node_generators/basic_node.py,sha256=dz7i0BSn4qRv6SBIS_JnVAm09-nkNizoAHrznmqnJXY,3074
33
+ trilogy/core/processing/node_generators/common.py,sha256=2TeYHZzUkLbQh0602IWilLd2yyfoorhc1zAkpTluyHU,9033
34
+ trilogy/core/processing/node_generators/filter_node.py,sha256=NAI5gDQap8ygk905lTuPh6UxoWy--PpChEjgSJl5jKA,7567
35
+ trilogy/core/processing/node_generators/group_node.py,sha256=k57SVWHSVvTqCd47tyLUGCsSZaP7UQqMCJYTSz1S7oQ,5566
36
+ trilogy/core/processing/node_generators/group_to_node.py,sha256=8ToptIWQoJttquEPrRTMvU33jCJQI-VJxVObN8W8QJk,2511
37
+ trilogy/core/processing/node_generators/multiselect_node.py,sha256=se-cHRYRPskxq2Wq9bw5LkUFSCN1rhk8_05-OTezLz0,6421
38
+ trilogy/core/processing/node_generators/node_merge_node.py,sha256=3GzuiTiorFVe9MyLhoz2PDyI0x9XL7bQ8ucEbV54le8,14627
39
+ trilogy/core/processing/node_generators/rowset_node.py,sha256=cLEfhjQPpnxc1_34j_1A7lmsGcbi89F2cMqDYls4Oh0,5199
40
+ trilogy/core/processing/node_generators/select_merge_node.py,sha256=YW0H81IpE9B6f0SK75QH2DVSfr8d3oA9AbbqP44Jhnc,15746
41
41
  trilogy/core/processing/node_generators/select_node.py,sha256=bjTylBa-vYbmzpuSpphmIo_Oi78YZpI8ppHnN9KDYDk,1795
42
- trilogy/core/processing/node_generators/union_node.py,sha256=MVmLqOZbCEVqZYVZxxWxtDMvyEdSnAg7pU9NzoOXy1I,2517
43
- trilogy/core/processing/node_generators/unnest_node.py,sha256=MNNjWW7Dp3A_Xv_XGjzdHU1PHQBauZHMBVKRJhqRZJY,2255
44
- trilogy/core/processing/node_generators/window_node.py,sha256=x4n5NWEouMsOS0V9myyJNmEg2e3kUDPLWXQhq3PyUdY,3510
42
+ trilogy/core/processing/node_generators/union_node.py,sha256=MfJjF2m0ARl0oUH9QT1awzPv0e3yA3mXK1XqAvUTgKw,2504
43
+ trilogy/core/processing/node_generators/unnest_node.py,sha256=8El2B1mzC9vIUSk-m94xHvaJwAf5GtCAGfTxGDSiqmU,2229
44
+ trilogy/core/processing/node_generators/window_node.py,sha256=5htRRxaxw6EnS-2TVoQIiy4bkNSoBefBpj2DVBtBo-w,3484
45
+ trilogy/core/processing/node_generators/select_helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
+ trilogy/core/processing/node_generators/select_helpers/datasource_injection.py,sha256=hJZS7GT0dl7sK0riweEwVAVRv5LCXOnMD1hF0XY9hpE,6548
45
47
  trilogy/core/processing/nodes/__init__.py,sha256=WNUmYmZF3uqF2qiJ1L7y0u9qiVD9YnluKds0wA5opJE,4813
46
- trilogy/core/processing/nodes/base_node.py,sha256=t0SQW6z3OdAMDfyuUUtI8NCbDruJLq2-FgZxPuWZS0Q,16567
47
- trilogy/core/processing/nodes/filter_node.py,sha256=metDcI7b2QsONOy5l0Mx7by1OhXac0N8yKUDoL_2WWo,2342
48
- trilogy/core/processing/nodes/group_node.py,sha256=NdIrmBg7DjFy8KwvRoI653cOyAi1xChcWdXZS8tqMW0,7488
49
- trilogy/core/processing/nodes/merge_node.py,sha256=7lhmTyWLV5e9zT_m_UJnUgXVGBEoyX98lcUABstcf3w,14916
50
- trilogy/core/processing/nodes/select_node_v2.py,sha256=Xx2zT1RLFJCMmRQ0GaZnrrgRo33aI53Lgw3PqHRSCp4,8284
51
- trilogy/core/processing/nodes/union_node.py,sha256=WHycDepNr16flkgQdwyZRo1g-kzYKWVUb6CZ7N_U4OA,1402
52
- trilogy/core/processing/nodes/unnest_node.py,sha256=aR1XKa-bT7f45QYKUOS0EUuc0t4GbvYAEG8ZYFJ67sI,2151
53
- trilogy/core/processing/nodes/window_node.py,sha256=kXHhOZ9CZ8AQvUbJXCIxUPQ-NF3ooZT7VBgNUyM3VM8,1213
48
+ trilogy/core/processing/nodes/base_node.py,sha256=KFk6sKNS3lEA_JyimHqdry4-QNEntnMO0GBBC_oA1bs,15552
49
+ trilogy/core/processing/nodes/filter_node.py,sha256=j7icDAXJ7oFPkHTOQVmm9QbZxrhhYEUGJj2lSiguXKA,2292
50
+ trilogy/core/processing/nodes/group_node.py,sha256=C2U4kyfYnM0Gy1b_C5K-uh-s-9Kncr5olFxMuF0G7zQ,7852
51
+ trilogy/core/processing/nodes/merge_node.py,sha256=p9KoJmOoPqXlehYWj5pF_VuP5ZESTr5dAjAOQbf66O8,14875
52
+ trilogy/core/processing/nodes/select_node_v2.py,sha256=t3ln9Kxeml8mVTnLgtNPvavb5TLTRtfkJ0nyxh7UYUs,8212
53
+ trilogy/core/processing/nodes/union_node.py,sha256=1QgOWkjJ-ADFdanoRzi0EM5buhuzJbmlda9BAUGp4mM,1352
54
+ trilogy/core/processing/nodes/unnest_node.py,sha256=0TFANwqVPaVpUR6SF5uweGTlXfEnagXRBBZU6dUwtcY,2101
55
+ trilogy/core/processing/nodes/window_node.py,sha256=yYwWuOq1Uwm-xEl8lFH_urm-YXaAGAgNhE20MEoD5QQ,1163
54
56
  trilogy/dialect/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
- trilogy/dialect/base.py,sha256=KZwtnni34pfghrBH2nBfa8ZDf-BH_cEuQKxBB3JvZWo,38003
57
+ trilogy/dialect/base.py,sha256=DR7cHoL5rbRBnsj6PCq5wK8GHH-l5szpKXUaxMqx1Mw,38568
56
58
  trilogy/dialect/bigquery.py,sha256=mKC3zoEU232h9RtIXJjqiZ72lWH8a6S28p6wAZKrAfg,2952
57
59
  trilogy/dialect/common.py,sha256=b0E6JqdKaaSzThLiFa9jwUg4YnXahf-3bqmzOn5z-6E,3827
58
60
  trilogy/dialect/config.py,sha256=UiBY2tBbNk9owx-zxP_3lN9lErEUXhXIU_bcXA18AvU,2992
59
- trilogy/dialect/duckdb.py,sha256=qh5XMgtl9LBUZ8DJ65GLui_nk0Iq9n11bbA6Ek9sum0,3419
61
+ trilogy/dialect/duckdb.py,sha256=O-2k0zaJKnr_McdU6iqBHcufCtHwsIKanAnpBD5o33A,3685
60
62
  trilogy/dialect/enums.py,sha256=iaghGgOl6zRr4RxRn4TxRnxZU9iSYJG6hN5wqYiBRNQ,3948
61
63
  trilogy/dialect/postgres.py,sha256=VH4EB4myjIeZTHeFU6vK00GxY9c53rCBjg2mLbdaCEE,3254
62
64
  trilogy/dialect/presto.py,sha256=y2BMOXvpKh1_cXnpGhG0sjhGP-pNVLkf760Hz_pNw_s,3386
@@ -64,22 +66,22 @@ trilogy/dialect/snowflake.py,sha256=wmao9p26jX5yIX5SC8sRAZTXkPGTvq6ixO693QTfhz8,
64
66
  trilogy/dialect/sql_server.py,sha256=7iFpo2xztQ4ZJVwJ5n8kntWreymRzz035iClGZp3Nyc,3117
65
67
  trilogy/hooks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
66
68
  trilogy/hooks/base_hook.py,sha256=gD6_sjzTzchpLIn3CvJzkM9IvaWNfQUra3yDh9-s8qQ,1125
67
- trilogy/hooks/graph_hook.py,sha256=wljLY-Ac22vgn7PlsVlRy9HswrapRvVzHrFMlD8qhOY,2468
69
+ trilogy/hooks/graph_hook.py,sha256=c-vC-IXoJ_jDmKQjxQyIxyXPOuUcLIURB573gCsAfzQ,2940
68
70
  trilogy/hooks/query_debugger.py,sha256=FoDh2bu2NiwLusVhKa5El_l8EKaqfET7zn55GP0TkOE,4644
69
71
  trilogy/metadata/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
70
72
  trilogy/parsing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
71
- trilogy/parsing/common.py,sha256=haPZbJrola5Fvwp940A-MJ1o-EhGXKsRFa-Y2e7OsjU,10370
73
+ trilogy/parsing/common.py,sha256=ZVYF8sOzSa1bkUp7y_fwEmRPfsnVJ2kmbUuUg8TpHRY,12062
72
74
  trilogy/parsing/config.py,sha256=Z-DaefdKhPDmSXLgg5V4pebhSB0h590vI0_VtHnlukI,111
73
75
  trilogy/parsing/exceptions.py,sha256=92E5i2frv5hj9wxObJZsZqj5T6bglvPzvdvco_vW1Zk,38
74
76
  trilogy/parsing/helpers.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
75
- trilogy/parsing/parse_engine.py,sha256=CrXaK3KDsMt7C6qYIGy5lH4p3-dQNqRn-34VbI8XRRw,67200
76
- trilogy/parsing/render.py,sha256=Dr0QKIaAUi9uxfZZJVNV-todKoTA-tsWXNXPJ4Ohjn0,15650
77
- trilogy/parsing/trilogy.lark,sha256=d_d3H8ExBcrVffPLq1TgTcEyWDppPJO2zB6cC6mdq9I,12489
77
+ trilogy/parsing/parse_engine.py,sha256=GgImj-mtDHOctDQWC1SDuSANPR0S_nXTJOhmOuHyD5g,69332
78
+ trilogy/parsing/render.py,sha256=NM6Bprz2g4mPG-RjlgMcc7W5F38wpRR_v7kOGd5gQak,15866
79
+ trilogy/parsing/trilogy.lark,sha256=EazfEvYPuvkPkNjUnVzFi0uD9baavugbSI8CyfawShk,12573
78
80
  trilogy/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
79
81
  trilogy/scripts/trilogy.py,sha256=DQDW81E5mDMWFP8oPw8q-IyrR2JGxQSDWgUWe2VTSRQ,3731
80
- pytrilogy-0.0.2.49.dist-info/LICENSE.md,sha256=5ZRvtTyCCFwz1THxDTjAu3Lidds9WjPvvzgVwPSYNDo,1042
81
- pytrilogy-0.0.2.49.dist-info/METADATA,sha256=dI1KF17Tz1MjU5LMQwL9wLiQwzI3pUNc469_XthJuTQ,8426
82
- pytrilogy-0.0.2.49.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
83
- pytrilogy-0.0.2.49.dist-info/entry_points.txt,sha256=0petKryjvvtEfTlbZC1AuMFumH_WQ9v8A19LvoS6G6c,54
84
- pytrilogy-0.0.2.49.dist-info/top_level.txt,sha256=cAy__NW_eMAa_yT9UnUNlZLFfxcg6eimUAZ184cdNiE,8
85
- pytrilogy-0.0.2.49.dist-info/RECORD,,
82
+ pytrilogy-0.0.2.51.dist-info/LICENSE.md,sha256=5ZRvtTyCCFwz1THxDTjAu3Lidds9WjPvvzgVwPSYNDo,1042
83
+ pytrilogy-0.0.2.51.dist-info/METADATA,sha256=IG65EoMo0Wfj2WScfAt60Iqm8rEjNqKX5ZfEpdjoiDw,8426
84
+ pytrilogy-0.0.2.51.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
85
+ pytrilogy-0.0.2.51.dist-info/entry_points.txt,sha256=0petKryjvvtEfTlbZC1AuMFumH_WQ9v8A19LvoS6G6c,54
86
+ pytrilogy-0.0.2.51.dist-info/top_level.txt,sha256=cAy__NW_eMAa_yT9UnUNlZLFfxcg6eimUAZ184cdNiE,8
87
+ pytrilogy-0.0.2.51.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.2.49"
7
+ __version__ = "0.0.2.51"
8
8
 
9
9
  __all__ = ["parse", "Executor", "Dialects", "Environment", "CONFIG"]
trilogy/core/enums.py CHANGED
@@ -120,6 +120,8 @@ class FunctionType(Enum):
120
120
 
121
121
  ALIAS = "alias"
122
122
 
123
+ PARENTHETICAL = "parenthetical"
124
+
123
125
  # Generic
124
126
  CASE = "case"
125
127
  CAST = "cast"
@@ -135,6 +137,8 @@ class FunctionType(Enum):
135
137
  ATTR_ACCESS = "attr_access"
136
138
  STRUCT = "struct"
137
139
  ARRAY = "array"
140
+ DATE_LITERAL = "date_literal"
141
+ DATETIME_LITERAL = "datetime_literal"
138
142
 
139
143
  # TEXT AND MAYBE MORE
140
144
  SPLIT = "split"
@@ -260,6 +264,13 @@ class ComparisonOperator(Enum):
260
264
  CONTAINS = "contains"
261
265
  ELSE = "else"
262
266
 
267
+ def __eq__(self, other):
268
+ if isinstance(other, str):
269
+ return self.value == other
270
+ if not isinstance(other, ComparisonOperator):
271
+ return False
272
+ return self.value == other.value
273
+
263
274
  @classmethod
264
275
  def _missing_(cls, value):
265
276
  if not isinstance(value, list) and " " in str(value):
trilogy/core/functions.py CHANGED
@@ -1,3 +1,4 @@
1
+ from datetime import date, datetime
1
2
  from typing import Optional
2
3
 
3
4
  from trilogy.constants import MagicConstants
@@ -17,6 +18,8 @@ from trilogy.core.models import (
17
18
  arg_to_datatype,
18
19
  )
19
20
 
21
+ GENERIC_ARGS = Concept | Function | str | int | float | date | datetime
22
+
20
23
 
21
24
  def create_function_derived_concept(
22
25
  name: str,
@@ -262,7 +265,7 @@ def get_attr_datatype(
262
265
  return arg.datatype
263
266
 
264
267
 
265
- def AttrAccess(args: list[Concept]):
268
+ def AttrAccess(args: list[GENERIC_ARGS]):
266
269
  return Function(
267
270
  operator=FunctionType.ATTR_ACCESS,
268
271
  arguments=args,
trilogy/core/internal.py CHANGED
@@ -1,6 +1,6 @@
1
1
  from trilogy.core.constants import ALL_ROWS_CONCEPT, INTERNAL_NAMESPACE
2
2
  from trilogy.core.enums import FunctionType, Purpose
3
- from trilogy.core.models import Concept, DataType, Function
3
+ from trilogy.core.models import Concept, DataType, Function, Grain
4
4
 
5
5
  DEFAULT_CONCEPTS = {
6
6
  ALL_ROWS_CONCEPT: Concept(
@@ -8,6 +8,7 @@ DEFAULT_CONCEPTS = {
8
8
  namespace=INTERNAL_NAMESPACE,
9
9
  datatype=DataType.INTEGER,
10
10
  purpose=Purpose.CONSTANT,
11
+ grain=Grain(),
11
12
  lineage=Function(
12
13
  operator=FunctionType.CONSTANT,
13
14
  arguments=[1],
@@ -20,17 +21,20 @@ DEFAULT_CONCEPTS = {
20
21
  namespace=INTERNAL_NAMESPACE,
21
22
  datatype=DataType.STRING,
22
23
  purpose=Purpose.KEY,
24
+ grain=Grain(),
23
25
  ),
24
26
  "datasource": Concept(
25
27
  name="datasource",
26
28
  namespace=INTERNAL_NAMESPACE,
27
29
  datatype=DataType.STRING,
28
30
  purpose=Purpose.KEY,
31
+ grain=Grain(),
29
32
  ),
30
33
  "query_text": Concept(
31
34
  name="query_text",
32
35
  namespace=INTERNAL_NAMESPACE,
33
36
  datatype=DataType.STRING,
34
37
  purpose=Purpose.KEY,
38
+ grain=Grain(),
35
39
  ),
36
40
  }