pytrilogy 0.0.3.55__py3-none-any.whl → 0.0.3.57__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 (39) hide show
  1. {pytrilogy-0.0.3.55.dist-info → pytrilogy-0.0.3.57.dist-info}/METADATA +1 -1
  2. {pytrilogy-0.0.3.55.dist-info → pytrilogy-0.0.3.57.dist-info}/RECORD +39 -34
  3. {pytrilogy-0.0.3.55.dist-info → pytrilogy-0.0.3.57.dist-info}/WHEEL +1 -1
  4. trilogy/__init__.py +1 -1
  5. trilogy/authoring/__init__.py +12 -1
  6. trilogy/core/enums.py +1 -0
  7. trilogy/core/models/author.py +6 -4
  8. trilogy/core/models/execute.py +4 -1
  9. trilogy/core/optimization.py +4 -4
  10. trilogy/core/processing/concept_strategies_v3.py +324 -895
  11. trilogy/core/processing/discovery_loop.py +0 -0
  12. trilogy/core/processing/discovery_node_factory.py +475 -0
  13. trilogy/core/processing/discovery_utility.py +123 -0
  14. trilogy/core/processing/discovery_validation.py +155 -0
  15. trilogy/core/processing/node_generators/basic_node.py +29 -11
  16. trilogy/core/processing/node_generators/node_merge_node.py +1 -1
  17. trilogy/core/processing/node_generators/select_node.py +6 -8
  18. trilogy/core/processing/node_generators/synonym_node.py +2 -1
  19. trilogy/core/processing/node_generators/unnest_node.py +7 -1
  20. trilogy/core/processing/nodes/__init__.py +2 -4
  21. trilogy/core/processing/nodes/base_node.py +0 -13
  22. trilogy/core/processing/nodes/group_node.py +1 -1
  23. trilogy/core/processing/utility.py +38 -11
  24. trilogy/core/query_processor.py +3 -3
  25. trilogy/core/statements/author.py +6 -2
  26. trilogy/core/statements/execute.py +3 -2
  27. trilogy/dialect/base.py +3 -30
  28. trilogy/dialect/snowflake.py +1 -1
  29. trilogy/executor.py +13 -4
  30. trilogy/parsing/common.py +1 -3
  31. trilogy/parsing/parse_engine.py +14 -2
  32. trilogy/parsing/trilogy.lark +1 -1
  33. trilogy/std/date.preql +3 -1
  34. trilogy/std/geography.preql +4 -0
  35. trilogy/std/money.preql +65 -4
  36. trilogy/std/net.preql +8 -0
  37. {pytrilogy-0.0.3.55.dist-info → pytrilogy-0.0.3.57.dist-info}/entry_points.txt +0 -0
  38. {pytrilogy-0.0.3.55.dist-info → pytrilogy-0.0.3.57.dist-info}/licenses/LICENSE.md +0 -0
  39. {pytrilogy-0.0.3.55.dist-info → pytrilogy-0.0.3.57.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pytrilogy
3
- Version: 0.0.3.55
3
+ Version: 0.0.3.57
4
4
  Summary: Declarative, typed query language that compiles to SQL.
5
5
  Home-page:
6
6
  Author:
@@ -1,17 +1,17 @@
1
- pytrilogy-0.0.3.55.dist-info/licenses/LICENSE.md,sha256=5ZRvtTyCCFwz1THxDTjAu3Lidds9WjPvvzgVwPSYNDo,1042
2
- trilogy/__init__.py,sha256=8imvlrqcfkFMW4ZwYgNE-dGvIeWPqAyRgtnjVYICUyw,303
1
+ pytrilogy-0.0.3.57.dist-info/licenses/LICENSE.md,sha256=5ZRvtTyCCFwz1THxDTjAu3Lidds9WjPvvzgVwPSYNDo,1042
2
+ trilogy/__init__.py,sha256=JPKu2C5PxT7TYswlIkOCzUXcjNHQ8puwzu6tF26QzWc,303
3
3
  trilogy/compiler.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  trilogy/constants.py,sha256=lv_aJWP6dn6e2aF4BAE72jbnNtceFddfqtiDSsvzno0,1692
5
5
  trilogy/engine.py,sha256=OK2RuqCIUId6yZ5hfF8J1nxGP0AJqHRZiafcowmW0xc,1728
6
- trilogy/executor.py,sha256=GwNhP9UW4565dxnpHbw-VWNE2lX8uroQJQtSpC_j2pI,16298
6
+ trilogy/executor.py,sha256=BolR6UwgDOdIcDG0gw_OSaB23rISgIn8Dzdll0kODmg,16506
7
7
  trilogy/parser.py,sha256=o4cfk3j3yhUFoiDKq9ZX_GjBF3dKhDjXEwb63rcBkBM,293
8
8
  trilogy/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
9
  trilogy/render.py,sha256=qQWwduymauOlB517UtM-VGbVe8Cswa4UJub5aGbSO6c,1512
10
10
  trilogy/utility.py,sha256=euQccZLKoYBz0LNg5tzLlvv2YHvXh9HArnYp1V3uXsM,763
11
- trilogy/authoring/__init__.py,sha256=v9PRuZs4fTnxhpXAnwTxCDwlLasUax6g2FONidcujR4,2369
11
+ trilogy/authoring/__init__.py,sha256=h-Ag7vT76tsjib9BfjOgI-yVpuJDgpn2TSps-ibRAj8,2593
12
12
  trilogy/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  trilogy/core/constants.py,sha256=7XaCpZn5mQmjTobbeBn56SzPWq9eMNDfzfsRU-fP0VE,171
14
- trilogy/core/enums.py,sha256=XeA25YPIkVdgwrcHYyUGlcaNSrI8W3qfY7hHeZTzYKE,7711
14
+ trilogy/core/enums.py,sha256=9thKx6u-Z3vzT3iGBBUtHsHCXaU-8L4IaqGJp1G7It0,7737
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
@@ -19,47 +19,51 @@ trilogy/core/exceptions.py,sha256=JPYyBcit3T_pRtlHdtKSeVJkIyWUTozW2aaut25A2xI,67
19
19
  trilogy/core/functions.py,sha256=poVfAwet1xdxTkC7WL38UmGRDpUVO9iSMNWSagl9_r4,29302
20
20
  trilogy/core/graph_models.py,sha256=z17EoO8oky2QOuO6E2aMWoVNKEVJFhLdsQZOhC4fNLU,2079
21
21
  trilogy/core/internal.py,sha256=iicDBlC6nM8d7e7jqzf_ZOmpUsW8yrr2AA8AqEiLx-s,1577
22
- trilogy/core/optimization.py,sha256=ChIAv0kRmw9RKyDGDCdSdbIN5fJGMkIlE6eVfTFsxg4,8867
23
- trilogy/core/query_processor.py,sha256=jSS1xZFDqBuI0sZBbuYAAuuVGwas7W-mV_v5oFZJFpA,20275
22
+ trilogy/core/optimization.py,sha256=lE5WSTsDHOaqvh-G9bOfbegP3R7NDqD4jrD3VAYxEHY,8853
23
+ trilogy/core/query_processor.py,sha256=QiE_w5HgheT4GLZFnaLssJ4plf4voK0TeTd6N3jhR6A,20188
24
24
  trilogy/core/utility.py,sha256=3VC13uSQWcZNghgt7Ot0ZTeEmNqs__cx122abVq9qhM,410
25
25
  trilogy/core/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
- trilogy/core/models/author.py,sha256=N0bdexQaGWgdVg20Uc-5p37qnbTtAxfXo7fMLvX-0QA,77417
26
+ trilogy/core/models/author.py,sha256=8XbIsQr6cQrgo9uzee5qRoYiMdEG7yKF4FiiWImW7U0,77490
27
27
  trilogy/core/models/build.py,sha256=yBiOQ4Bhjz09pSD1jSGhhf9QFFQuplrvZ0JQB5-iXHk,63104
28
28
  trilogy/core/models/build_environment.py,sha256=s_C9xAHuD3yZ26T15pWVBvoqvlp2LdZ8yjsv2_HdXLk,5363
29
29
  trilogy/core/models/core.py,sha256=wx6hJcFECMG-Ij972ADNkr-3nFXkYESr82ObPiC46_U,10875
30
30
  trilogy/core/models/datasource.py,sha256=6RjJUd2u4nYmEwFBpJlM9LbHVYDv8iHJxqiBMZqUrwI,9422
31
31
  trilogy/core/models/environment.py,sha256=AVSrvjNcNX535GhCPtYhCRY2Lp_Hj0tdY3VVt_kZb9Q,27260
32
- trilogy/core/models/execute.py,sha256=_JC93S5tpCQM9jpgmmbd6wkLMEfPvaMZwWZBVcgehlI,42931
32
+ trilogy/core/models/execute.py,sha256=hOilC-lka4W-C8Pakb0Vd1-T0oskeWdC8Ls0bm8_388,43109
33
33
  trilogy/core/optimizations/__init__.py,sha256=YH2-mGXZnVDnBcWVi8vTbrdw7Qs5TivG4h38rH3js_I,290
34
34
  trilogy/core/optimizations/base_optimization.py,sha256=gzDOKImoFn36k7XBD3ysEYDnbnb6vdVIztUfFQZsGnM,513
35
35
  trilogy/core/optimizations/inline_datasource.py,sha256=2sWNRpoRInnTgo9wExVT_r9RfLAQHI57reEV5cGHUcg,4329
36
36
  trilogy/core/optimizations/predicate_pushdown.py,sha256=g4AYE8Aw_iMlAh68TjNXGP754NTurrDduFECkUjoBnc,9399
37
37
  trilogy/core/processing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
- trilogy/core/processing/concept_strategies_v3.py,sha256=wOrcy-I_mSRvhUODmZqhRCCZo1wMyyqH6bm1tmMHdBI,44801
38
+ trilogy/core/processing/concept_strategies_v3.py,sha256=KHpSQyG5Ubb5H1dmzpDWI2ypJL_rxeS3zc3sjaeCq_s,21997
39
+ trilogy/core/processing/discovery_loop.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
+ trilogy/core/processing/discovery_node_factory.py,sha256=eC9AkPq9Phe3iY9qIstb98BqAPqKJ8RejsjqUYJMixQ,14890
41
+ trilogy/core/processing/discovery_utility.py,sha256=hF3aUbRHHZFeFT5aBjE6TuSeU60I90gzmj512QXG_t8,4856
42
+ trilogy/core/processing/discovery_validation.py,sha256=Ek9jviFgimLMUMYLXBChUQmOD94ihhwQ3NDVe6RTdWg,4930
39
43
  trilogy/core/processing/graph_utils.py,sha256=8QUVrkE9j-9C1AyrCb1nQEh8daCe0u1HuXl-Te85lag,1205
40
- trilogy/core/processing/utility.py,sha256=rfzdgl-vWkCyhLzXNNuWgPLK59eiYypQb6TdZKymUqk,21469
44
+ trilogy/core/processing/utility.py,sha256=mrfR9pgek-xjxoDQSlvPqOW9dpmREjgzqn4AGoqpGeM,22774
41
45
  trilogy/core/processing/node_generators/__init__.py,sha256=w8TQQgNhyAra6JQHdg1_Ags4BGyxjXYruu6UeC5yOkI,873
42
- trilogy/core/processing/node_generators/basic_node.py,sha256=UVsXMn6jTjm_ofVFt218jAS11s4RV4zD781vP4im-GI,3371
46
+ trilogy/core/processing/node_generators/basic_node.py,sha256=kyOAiVaYnUlWWRs4y6ctQPlisQ2kCRZ1wZYmJfbkRSw,4337
43
47
  trilogy/core/processing/node_generators/common.py,sha256=PdysdroW9DUADP7f5Wv_GKPUyCTROZV1g3L45fawxi8,9443
44
48
  trilogy/core/processing/node_generators/filter_node.py,sha256=0hdfiS2I-Jvr6P-il3jnAJK-g-DMG7_cFbZGCnLnJAo,10032
45
49
  trilogy/core/processing/node_generators/group_node.py,sha256=nIfiMrJQEksUfqAeeA3X5PS1343y4lmPTipYuCa-rvs,6141
46
50
  trilogy/core/processing/node_generators/group_to_node.py,sha256=jKcNCDOY6fNblrdZwaRU0sbUSr9H0moQbAxrGgX6iGA,3832
47
51
  trilogy/core/processing/node_generators/multiselect_node.py,sha256=GWV5yLmKTe1yyPhN60RG1Rnrn4ktfn9lYYXi_FVU4UI,7061
48
- trilogy/core/processing/node_generators/node_merge_node.py,sha256=sv55oynfqgpHEpo1OEtVDri-5fywzPhDlR85qaWikvY,16195
52
+ trilogy/core/processing/node_generators/node_merge_node.py,sha256=kTyvSIDFFGnulh3SeXHar3oCZK2DOpymXIZbCWZFxI0,16220
49
53
  trilogy/core/processing/node_generators/recursive_node.py,sha256=l5zdh0dURKwmAy8kK4OpMtZfyUEQRk6N-PwSWIyBpSM,2468
50
54
  trilogy/core/processing/node_generators/rowset_node.py,sha256=2BiSsegbRF9csJ_Xl8P_CxIm4dAAb7dF29u6v_Odr-A,6709
51
55
  trilogy/core/processing/node_generators/select_merge_node.py,sha256=lxXhMhDKGbu67QFNbbAT-BO8gbWppIvjn_hAXpLEPe0,19953
52
- trilogy/core/processing/node_generators/select_node.py,sha256=Y-zO0AFkTrpi2LyebjpyHU7WWANr7nKZSS9rY7DH4Wo,1888
53
- trilogy/core/processing/node_generators/synonym_node.py,sha256=9LHK2XHDjbyTLjmDQieskG8fqbiSpRnFOkfrutDnOTE,2258
56
+ trilogy/core/processing/node_generators/select_node.py,sha256=3dvw0d53eUtCRCUPN6J48I3qBEX1Wha7saQ_ndPu6_I,1777
57
+ trilogy/core/processing/node_generators/synonym_node.py,sha256=a_RllD_5b4wg4JtiEkxJOfroFdEXJq6P4VUjga7sv5w,2300
54
58
  trilogy/core/processing/node_generators/union_node.py,sha256=VNo6Oey4p8etU9xrOh2oTT2lIOTvY6PULUPRvVa2uxU,2877
55
- trilogy/core/processing/node_generators/unnest_node.py,sha256=cOEKnMRzXUW3bwmiOlgn3E1-B38osng0dh2pDykwITY,2410
59
+ trilogy/core/processing/node_generators/unnest_node.py,sha256=uWug51k3WtvFzj1uKyEoori0nDfvxeaiLbvf7ZmfYCM,2666
56
60
  trilogy/core/processing/node_generators/window_node.py,sha256=GP3Hvkbb0TDA6ef7W7bmvQEHVH-NRIfBT_0W4fcH3g4,6529
57
61
  trilogy/core/processing/node_generators/select_helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
58
62
  trilogy/core/processing/node_generators/select_helpers/datasource_injection.py,sha256=GMW07bb6hXurhF0hZLYoMAKSIS65tat5hwBjvqqPeSA,6516
59
- trilogy/core/processing/nodes/__init__.py,sha256=9FaUt9_gtsC9Y0-I9BeHTnNlghKaA4iIaLwOM8QKwCE,6117
60
- trilogy/core/processing/nodes/base_node.py,sha256=IdKR2yaQGY1iRgKXgxF1UtlyuJEmPXWRh0rGFXv7Z_U,18111
63
+ trilogy/core/processing/nodes/__init__.py,sha256=97eFwBa9vBhhXszgO-9JVxUzejKKeSHG6DilxRCWRm0,6083
64
+ trilogy/core/processing/nodes/base_node.py,sha256=p6yljFNLQsXz277c5wTATMNqsKUbsdP_3e7--tezBMw,17691
61
65
  trilogy/core/processing/nodes/filter_node.py,sha256=5VtRfKbCORx0dV-vQfgy3gOEkmmscL9f31ExvlODwvY,2461
62
- trilogy/core/processing/nodes/group_node.py,sha256=MUvcOg9U5J6TnWBel8eht9PdI9BfAKjUxmfjP_ZXx9o,10484
66
+ trilogy/core/processing/nodes/group_node.py,sha256=4EbOur1wSsOpPvP6znHih126o6A-TWbBXyvhiw5B0rs,10505
63
67
  trilogy/core/processing/nodes/merge_node.py,sha256=02oWRca0ba41U6PSAB14jwnWWxoyrvxRPLwkli259SY,15865
64
68
  trilogy/core/processing/nodes/recursive_node.py,sha256=k0rizxR8KE64ievfHx_GPfQmU8QAP118Laeyq5BLUOk,1526
65
69
  trilogy/core/processing/nodes/select_node_v2.py,sha256=Xyfq8lU7rP7JTAd8VV0ATDNal64n4xIBgWQsOuMe_Ak,8824
@@ -67,12 +71,12 @@ trilogy/core/processing/nodes/union_node.py,sha256=fDFzLAUh5876X6_NM7nkhoMvHEdGJ
67
71
  trilogy/core/processing/nodes/unnest_node.py,sha256=oLKMMNMx6PLDPlt2V5neFMFrFWxET8r6XZElAhSNkO0,2181
68
72
  trilogy/core/processing/nodes/window_node.py,sha256=JXJ0iVRlSEM2IBr1TANym2RaUf_p5E_l2sNykRzXWDo,1710
69
73
  trilogy/core/statements/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
70
- trilogy/core/statements/author.py,sha256=jCwPXmnjj8u2ytBRAS_NU7ga0uB7k3_TZY6dZSIMl9Y,15253
74
+ trilogy/core/statements/author.py,sha256=PES6GPOAt90EOb6pSJol7A_ChTSUuj740TOO60PG0Wg,15400
71
75
  trilogy/core/statements/build.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
72
76
  trilogy/core/statements/common.py,sha256=KxEmz2ySySyZ6CTPzn0fJl5NX2KOk1RPyuUSwWhnK1g,759
73
- trilogy/core/statements/execute.py,sha256=cSlvpHFOqpiZ89pPZ5GDp9Hu6j6uj-5_h21FWm_L-KM,1248
77
+ trilogy/core/statements/execute.py,sha256=rqfuoMuXPcH7L7TmE1dSiZ_K_A1ohB8whVMfGimZBOk,1294
74
78
  trilogy/dialect/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
- trilogy/dialect/base.py,sha256=SwYg3aCLmam70mlkJURYN42IggmbxviFnMUJ72WYE4g,42940
79
+ trilogy/dialect/base.py,sha256=Ts5rRMNyc9S2GJqrDIUImAZ41vYYfhcA9blEAsBlWhU,41840
76
80
  trilogy/dialect/bigquery.py,sha256=4u4SuQ67_Zwyu0czyQnBMDUVlegqir0SA30iEbZEAwU,3575
77
81
  trilogy/dialect/common.py,sha256=IhW0v5zATvZ2K0vr4Ab4TWpYMKKkGangSpIyqaPYEkw,5762
78
82
  trilogy/dialect/config.py,sha256=olnyeVU5W5T6b9-dMeNAnvxuPlyc2uefb7FRME094Ec,3834
@@ -81,7 +85,7 @@ trilogy/dialect/duckdb.py,sha256=C5TovwacDXo9YDpMTpPxkH7D0AxQERa7JL1RUkDGVng,389
81
85
  trilogy/dialect/enums.py,sha256=FRNYQ5-w-B6-X0yXKNU5g9GowsMlERFogTC5u2nxL_s,4740
82
86
  trilogy/dialect/postgres.py,sha256=VH4EB4myjIeZTHeFU6vK00GxY9c53rCBjg2mLbdaCEE,3254
83
87
  trilogy/dialect/presto.py,sha256=Mw7_F8h19mWfuZHkHQJizQWbpu1lIHe6t2PA0r88gsY,3392
84
- trilogy/dialect/snowflake.py,sha256=-PQABpiyY5zrsXtS0MV4Pe0YFu06hhxuMVD0WA9yBsc,3185
88
+ trilogy/dialect/snowflake.py,sha256=LQIcHuyuGZXbxrv6sH17aLXLzw7yFVuRoE9M4doNk5k,3187
85
89
  trilogy/dialect/sql_server.py,sha256=z2Vg7Qvw83rbGiEFIvHHLqVWJTWiz2xs76kpQj4HdTU,3131
86
90
  trilogy/hooks/__init__.py,sha256=T3SF3phuUDPLXKGRVE_Lf9mzuwoXWyaLolncR_1kY30,144
87
91
  trilogy/hooks/base_hook.py,sha256=I_l-NBMNC7hKTDx1JgHZPVOOCvLQ36m2oIGaR5EUMXY,1180
@@ -89,23 +93,24 @@ trilogy/hooks/graph_hook.py,sha256=c-vC-IXoJ_jDmKQjxQyIxyXPOuUcLIURB573gCsAfzQ,2
89
93
  trilogy/hooks/query_debugger.py,sha256=1npRjww94sPV5RRBBlLqMJRaFkH9vhEY6o828MeoEcw,5583
90
94
  trilogy/metadata/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
91
95
  trilogy/parsing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
92
- trilogy/parsing/common.py,sha256=pvkmT67wYE6HwVecSTfW9RRaeiF6CD6iNHo-e-xiSrY,29901
96
+ trilogy/parsing/common.py,sha256=kjA0-14mgrr1smOjt01h0nk6iatLj9tXXC8cMsir084,29782
93
97
  trilogy/parsing/config.py,sha256=Z-DaefdKhPDmSXLgg5V4pebhSB0h590vI0_VtHnlukI,111
94
98
  trilogy/parsing/exceptions.py,sha256=Xwwsv2C9kSNv2q-HrrKC1f60JNHShXcCMzstTSEbiCw,154
95
99
  trilogy/parsing/helpers.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
96
- trilogy/parsing/parse_engine.py,sha256=jgmBqKi5JVR1MSOnEDUWOpGtdUih4TmP7l78yCEoS7o,70785
100
+ trilogy/parsing/parse_engine.py,sha256=ioKWF6EFj1AIyg_pqPB9L6AjalkKQYoNav4cw4orWik,71368
97
101
  trilogy/parsing/render.py,sha256=hI4y-xjXrEXvHslY2l2TQ8ic0zAOpN41ADH37J2_FZY,19047
98
- trilogy/parsing/trilogy.lark,sha256=se-gnL3UfrdznVvhNbzzcE5VZxZ18iNMbNMFvRjr30I,14304
102
+ trilogy/parsing/trilogy.lark,sha256=CK7Hqqr9W6FYb1BRWd9k3B6SzhJ8GgK4lu4hALxn_kw,14307
99
103
  trilogy/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
100
104
  trilogy/scripts/trilogy.py,sha256=1L0XrH4mVHRt1C9T1HnaDv2_kYEfbWTb5_-cBBke79w,3774
101
105
  trilogy/std/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
102
- trilogy/std/date.preql,sha256=0MHeGLp2mG4QBKtmozcBZ7qVjOAdWOtrliIKn6hz1Pc,95
106
+ trilogy/std/date.preql,sha256=Ki4M-dG2xUIT_U16kOBXdaZb62S3P7iDrMBY93I4I3Q,132
103
107
  trilogy/std/display.preql,sha256=2BbhvqR4rcltyAbOXAUo7SZ_yGFYZgFnurglHMbjW2g,40
104
- trilogy/std/geography.preql,sha256=-fqAGnBL6tR-UtT8DbSek3iMFg66ECR_B_41pODxv-k,504
105
- trilogy/std/money.preql,sha256=ZHW-csTX-kYbOLmKSO-TcGGgQ-_DMrUXy0BjfuJSFxM,80
108
+ trilogy/std/geography.preql,sha256=qLnHmDU5EnvjTbfqZF-NEclSYM5_e9rZra7QjV01rZ4,582
109
+ trilogy/std/money.preql,sha256=XWwvAV3WxBsHX9zfptoYRnBigcfYwrYtBHXTME0xJuQ,2082
110
+ trilogy/std/net.preql,sha256=-bMV6dyofskl4Kvows-iQ4JCxjVUwsZOeWCy8JO5Ftw,135
106
111
  trilogy/std/report.preql,sha256=LbV-XlHdfw0jgnQ8pV7acG95xrd1-p65fVpiIc-S7W4,202
107
- pytrilogy-0.0.3.55.dist-info/METADATA,sha256=cLSfLU5-e2rmY39yQSBiG0H52-3RB_RjF7w8nmu9-Pw,9095
108
- pytrilogy-0.0.3.55.dist-info/WHEEL,sha256=zaaOINJESkSfm_4HQVc5ssNzHCPXhJm0kEUakpsEHaU,91
109
- pytrilogy-0.0.3.55.dist-info/entry_points.txt,sha256=ewBPU2vLnVexZVnB-NrVj-p3E-4vukg83Zk8A55Wp2w,56
110
- pytrilogy-0.0.3.55.dist-info/top_level.txt,sha256=cAy__NW_eMAa_yT9UnUNlZLFfxcg6eimUAZ184cdNiE,8
111
- pytrilogy-0.0.3.55.dist-info/RECORD,,
112
+ pytrilogy-0.0.3.57.dist-info/METADATA,sha256=eEwXdnEJXGts7_XfpLnH-bw-Ee8zvPrFxklMcCfRLC4,9095
113
+ pytrilogy-0.0.3.57.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
114
+ pytrilogy-0.0.3.57.dist-info/entry_points.txt,sha256=ewBPU2vLnVexZVnB-NrVj-p3E-4vukg83Zk8A55Wp2w,56
115
+ pytrilogy-0.0.3.57.dist-info/top_level.txt,sha256=cAy__NW_eMAa_yT9UnUNlZLFfxcg6eimUAZ184cdNiE,8
116
+ pytrilogy-0.0.3.57.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.8.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
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.55"
7
+ __version__ = "0.0.3.57"
8
8
 
9
9
  __all__ = ["parse", "Executor", "Dialects", "Environment", "CONFIG"]
@@ -43,14 +43,19 @@ from trilogy.core.models.core import (
43
43
  MapType,
44
44
  StructType,
45
45
  )
46
- from trilogy.core.models.datasource import Datasource, DatasourceMetadata
46
+ from trilogy.core.models.datasource import Address, Datasource, DatasourceMetadata
47
47
  from trilogy.core.models.environment import Environment
48
48
  from trilogy.core.statements.author import (
49
49
  ConceptDeclarationStatement,
50
50
  ConceptTransform,
51
+ CopyStatement,
52
+ Grain,
53
+ HasUUID,
54
+ ImportStatement,
51
55
  MultiSelectStatement,
52
56
  PersistStatement,
53
57
  RawSQLStatement,
58
+ RowsetDerivationStatement,
54
59
  SelectItem,
55
60
  SelectStatement,
56
61
  )
@@ -73,6 +78,8 @@ __all__ = [
73
78
  "DataType",
74
79
  "StructType",
75
80
  "ListType",
81
+ "Grain",
82
+ "RowsetDerivationStatement",
76
83
  "MapType",
77
84
  "ListWrapper",
78
85
  "FunctionType",
@@ -109,4 +116,8 @@ __all__ = [
109
116
  "MultiSelectLineage",
110
117
  "RowsetItem",
111
118
  "FunctionCallWrapper",
119
+ "CopyStatement",
120
+ "HasUUID",
121
+ "ImportStatement",
122
+ "Address",
112
123
  ]
trilogy/core/enums.py CHANGED
@@ -42,6 +42,7 @@ class Purpose(Enum):
42
42
 
43
43
  class Derivation(Enum):
44
44
  BASIC = "basic"
45
+ GROUP_TO = "group_to"
45
46
  WINDOW = "window"
46
47
  AGGREGATE = "aggregate"
47
48
  FILTER = "filter"
@@ -1176,6 +1176,12 @@ class Concept(Addressable, DataTyped, ConceptArgs, Mergeable, Namespaced, BaseMo
1176
1176
  and lineage.operator == FunctionType.UNION
1177
1177
  ):
1178
1178
  return Derivation.UNION
1179
+ elif (
1180
+ lineage
1181
+ and isinstance(lineage, (BuildFunction, Function))
1182
+ and lineage.operator == FunctionType.GROUP
1183
+ ):
1184
+ return Derivation.GROUP_TO
1179
1185
  elif (
1180
1186
  lineage
1181
1187
  and isinstance(lineage, (BuildFunction, Function))
@@ -1195,10 +1201,6 @@ class Concept(Addressable, DataTyped, ConceptArgs, Mergeable, Namespaced, BaseMo
1195
1201
  return Derivation.CONSTANT
1196
1202
  return Derivation.ROOT
1197
1203
 
1198
- # @property
1199
- # def derivation(self) -> Derivation:
1200
- # return self.calculate_derivation(self.lineage, self.purpose)
1201
-
1202
1204
  @classmethod
1203
1205
  def calculate_granularity(cls, derivation: Derivation, grain: Grain, lineage):
1204
1206
  from trilogy.core.models.build import BuildFunction
@@ -658,18 +658,21 @@ class QueryDatasource(BaseModel):
658
658
  @classmethod
659
659
  def validate_source_map(cls, v: dict, info: ValidationInfo):
660
660
  values = info.data
661
+ hidden_concepts = values.get("hidden_concepts", set())
661
662
  for key in ("input_concepts", "output_concepts"):
662
663
  if not values.get(key):
663
664
  continue
664
665
  concept: BuildConcept
665
666
  for concept in values[key]:
667
+ if concept.address in hidden_concepts:
668
+ continue
666
669
  if (
667
670
  concept.address not in v
668
671
  and not any(x in v for x in concept.pseudonyms)
669
672
  and CONFIG.validate_missing
670
673
  ):
671
674
  raise SyntaxError(
672
- f"On query datasource missing source map for {concept.address} on {key} with pseudonyms {concept.pseudonyms}, have {v}"
675
+ f"On query datasource from {values} missing source map entry (map: {v}) for {concept.address} on {key} with pseudonyms {concept.pseudonyms}, have {v}"
673
676
  )
674
677
  return v
675
678
 
@@ -141,9 +141,7 @@ def is_direct_return_eligible(cte: CTE | UnionCTE) -> CTE | UnionCTE | None:
141
141
  if not output_addresses.issubset(parent_output_addresses):
142
142
  return None
143
143
  if not direct_parent.grain == cte.grain:
144
- logger.info("grain mismatch, cannot early exit")
145
- logger.info(direct_parent.grain)
146
- logger.info(cte.grain)
144
+ logger.info("[Direct Return] grain mismatch, cannot early exit")
147
145
  return None
148
146
 
149
147
  assert isinstance(cte, CTE)
@@ -236,6 +234,8 @@ def optimize_ctes(
236
234
  complete = not actions_taken
237
235
  loops += 1
238
236
  input = reorder_ctes(filter_irrelevant_ctes(input, root_cte))
239
- logger.info(f"finished checking for {type(rule).__name__} in {loops} loops")
237
+ logger.info(
238
+ f"[Optimization] Finished checking for {type(rule).__name__} after {loops} loop(s)"
239
+ )
240
240
 
241
241
  return reorder_ctes(filter_irrelevant_ctes(input, root_cte))