exonware-xwnode 0.0.1.21__py3-none-any.whl → 0.0.1.23__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.
- exonware/__init__.py +8 -1
- exonware/xwnode/__init__.py +18 -5
- exonware/xwnode/add_strategy_types.py +165 -0
- exonware/xwnode/base.py +7 -5
- exonware/xwnode/common/__init__.py +1 -1
- exonware/xwnode/common/graph/__init__.py +30 -0
- exonware/xwnode/common/graph/caching.py +131 -0
- exonware/xwnode/common/graph/contracts.py +100 -0
- exonware/xwnode/common/graph/errors.py +44 -0
- exonware/xwnode/common/graph/indexing.py +260 -0
- exonware/xwnode/common/graph/manager.py +568 -0
- exonware/xwnode/common/management/__init__.py +3 -5
- exonware/xwnode/common/management/manager.py +9 -9
- exonware/xwnode/common/management/migration.py +6 -6
- exonware/xwnode/common/monitoring/__init__.py +3 -5
- exonware/xwnode/common/monitoring/metrics.py +7 -3
- exonware/xwnode/common/monitoring/pattern_detector.py +2 -2
- exonware/xwnode/common/monitoring/performance_monitor.py +6 -2
- exonware/xwnode/common/patterns/__init__.py +3 -5
- exonware/xwnode/common/patterns/advisor.py +1 -1
- exonware/xwnode/common/patterns/flyweight.py +6 -2
- exonware/xwnode/common/patterns/registry.py +203 -184
- exonware/xwnode/common/utils/__init__.py +25 -11
- exonware/xwnode/common/utils/simple.py +1 -1
- exonware/xwnode/config.py +3 -8
- exonware/xwnode/contracts.py +4 -105
- exonware/xwnode/defs.py +413 -159
- exonware/xwnode/edges/strategies/__init__.py +86 -4
- exonware/xwnode/edges/strategies/_base_edge.py +2 -2
- exonware/xwnode/edges/strategies/adj_list.py +287 -121
- exonware/xwnode/edges/strategies/adj_matrix.py +316 -222
- exonware/xwnode/edges/strategies/base.py +1 -1
- exonware/xwnode/edges/strategies/{edge_bidir_wrapper.py → bidir_wrapper.py} +45 -4
- exonware/xwnode/edges/strategies/bitemporal.py +520 -0
- exonware/xwnode/edges/strategies/{edge_block_adj_matrix.py → block_adj_matrix.py} +77 -6
- exonware/xwnode/edges/strategies/bv_graph.py +664 -0
- exonware/xwnode/edges/strategies/compressed_graph.py +217 -0
- exonware/xwnode/edges/strategies/{edge_coo.py → coo.py} +46 -4
- exonware/xwnode/edges/strategies/{edge_csc.py → csc.py} +45 -4
- exonware/xwnode/edges/strategies/{edge_csr.py → csr.py} +94 -12
- exonware/xwnode/edges/strategies/{edge_dynamic_adj_list.py → dynamic_adj_list.py} +46 -4
- exonware/xwnode/edges/strategies/edge_list.py +168 -0
- exonware/xwnode/edges/strategies/edge_property_store.py +2 -2
- exonware/xwnode/edges/strategies/euler_tour.py +560 -0
- exonware/xwnode/edges/strategies/{edge_flow_network.py → flow_network.py} +2 -2
- exonware/xwnode/edges/strategies/graphblas.py +449 -0
- exonware/xwnode/edges/strategies/hnsw.py +637 -0
- exonware/xwnode/edges/strategies/hop2_labels.py +467 -0
- exonware/xwnode/edges/strategies/{edge_hyperedge_set.py → hyperedge_set.py} +2 -2
- exonware/xwnode/edges/strategies/incidence_matrix.py +250 -0
- exonware/xwnode/edges/strategies/k2_tree.py +613 -0
- exonware/xwnode/edges/strategies/link_cut.py +626 -0
- exonware/xwnode/edges/strategies/multiplex.py +532 -0
- exonware/xwnode/edges/strategies/{edge_neural_graph.py → neural_graph.py} +2 -2
- exonware/xwnode/edges/strategies/{edge_octree.py → octree.py} +69 -11
- exonware/xwnode/edges/strategies/{edge_quadtree.py → quadtree.py} +66 -10
- exonware/xwnode/edges/strategies/roaring_adj.py +438 -0
- exonware/xwnode/edges/strategies/{edge_rtree.py → rtree.py} +43 -5
- exonware/xwnode/edges/strategies/{edge_temporal_edgeset.py → temporal_edgeset.py} +24 -5
- exonware/xwnode/edges/strategies/{edge_tree_graph_basic.py → tree_graph_basic.py} +78 -7
- exonware/xwnode/edges/strategies/{edge_weighted_graph.py → weighted_graph.py} +188 -10
- exonware/xwnode/errors.py +3 -6
- exonware/xwnode/facade.py +20 -20
- exonware/xwnode/nodes/strategies/__init__.py +29 -9
- exonware/xwnode/nodes/strategies/adjacency_list.py +650 -177
- exonware/xwnode/nodes/strategies/aho_corasick.py +358 -183
- exonware/xwnode/nodes/strategies/array_list.py +36 -3
- exonware/xwnode/nodes/strategies/art.py +581 -0
- exonware/xwnode/nodes/strategies/{node_avl_tree.py → avl_tree.py} +77 -6
- exonware/xwnode/nodes/strategies/{node_b_plus_tree.py → b_plus_tree.py} +81 -40
- exonware/xwnode/nodes/strategies/{node_btree.py → b_tree.py} +79 -9
- exonware/xwnode/nodes/strategies/base.py +469 -98
- exonware/xwnode/nodes/strategies/{node_bitmap.py → bitmap.py} +12 -12
- exonware/xwnode/nodes/strategies/{node_bitset_dynamic.py → bitset_dynamic.py} +11 -11
- exonware/xwnode/nodes/strategies/{node_bloom_filter.py → bloom_filter.py} +15 -2
- exonware/xwnode/nodes/strategies/bloomier_filter.py +519 -0
- exonware/xwnode/nodes/strategies/bw_tree.py +531 -0
- exonware/xwnode/nodes/strategies/contracts.py +1 -1
- exonware/xwnode/nodes/strategies/{node_count_min_sketch.py → count_min_sketch.py} +3 -2
- exonware/xwnode/nodes/strategies/{node_cow_tree.py → cow_tree.py} +135 -13
- exonware/xwnode/nodes/strategies/crdt_map.py +629 -0
- exonware/xwnode/nodes/strategies/{node_cuckoo_hash.py → cuckoo_hash.py} +2 -2
- exonware/xwnode/nodes/strategies/{node_xdata_optimized.py → data_interchange_optimized.py} +21 -4
- exonware/xwnode/nodes/strategies/dawg.py +876 -0
- exonware/xwnode/nodes/strategies/deque.py +321 -153
- exonware/xwnode/nodes/strategies/extendible_hash.py +93 -0
- exonware/xwnode/nodes/strategies/{node_fenwick_tree.py → fenwick_tree.py} +111 -19
- exonware/xwnode/nodes/strategies/hamt.py +403 -0
- exonware/xwnode/nodes/strategies/hash_map.py +354 -67
- exonware/xwnode/nodes/strategies/heap.py +105 -5
- exonware/xwnode/nodes/strategies/hopscotch_hash.py +525 -0
- exonware/xwnode/nodes/strategies/{node_hyperloglog.py → hyperloglog.py} +6 -5
- exonware/xwnode/nodes/strategies/interval_tree.py +742 -0
- exonware/xwnode/nodes/strategies/kd_tree.py +703 -0
- exonware/xwnode/nodes/strategies/learned_index.py +533 -0
- exonware/xwnode/nodes/strategies/linear_hash.py +93 -0
- exonware/xwnode/nodes/strategies/linked_list.py +316 -119
- exonware/xwnode/nodes/strategies/{node_lsm_tree.py → lsm_tree.py} +219 -15
- exonware/xwnode/nodes/strategies/masstree.py +130 -0
- exonware/xwnode/nodes/strategies/{node_persistent_tree.py → persistent_tree.py} +149 -9
- exonware/xwnode/nodes/strategies/priority_queue.py +544 -132
- exonware/xwnode/nodes/strategies/queue.py +249 -120
- exonware/xwnode/nodes/strategies/{node_red_black_tree.py → red_black_tree.py} +183 -72
- exonware/xwnode/nodes/strategies/{node_roaring_bitmap.py → roaring_bitmap.py} +19 -6
- exonware/xwnode/nodes/strategies/rope.py +717 -0
- exonware/xwnode/nodes/strategies/{node_segment_tree.py → segment_tree.py} +106 -106
- exonware/xwnode/nodes/strategies/{node_set_hash.py → set_hash.py} +30 -29
- exonware/xwnode/nodes/strategies/{node_skip_list.py → skip_list.py} +74 -6
- exonware/xwnode/nodes/strategies/sparse_matrix.py +427 -131
- exonware/xwnode/nodes/strategies/{node_splay_tree.py → splay_tree.py} +55 -6
- exonware/xwnode/nodes/strategies/stack.py +244 -112
- exonware/xwnode/nodes/strategies/{node_suffix_array.py → suffix_array.py} +5 -1
- exonware/xwnode/nodes/strategies/t_tree.py +94 -0
- exonware/xwnode/nodes/strategies/{node_treap.py → treap.py} +75 -6
- exonware/xwnode/nodes/strategies/{node_tree_graph_hybrid.py → tree_graph_hybrid.py} +46 -5
- exonware/xwnode/nodes/strategies/trie.py +153 -9
- exonware/xwnode/nodes/strategies/union_find.py +111 -5
- exonware/xwnode/nodes/strategies/veb_tree.py +856 -0
- exonware/xwnode/strategies/__init__.py +5 -51
- exonware/xwnode/version.py +3 -3
- {exonware_xwnode-0.0.1.21.dist-info → exonware_xwnode-0.0.1.23.dist-info}/METADATA +23 -3
- exonware_xwnode-0.0.1.23.dist-info/RECORD +130 -0
- exonware/xwnode/edges/strategies/edge_adj_list.py +0 -353
- exonware/xwnode/edges/strategies/edge_adj_matrix.py +0 -445
- exonware/xwnode/nodes/strategies/_base_node.py +0 -307
- exonware/xwnode/nodes/strategies/node_aho_corasick.py +0 -525
- exonware/xwnode/nodes/strategies/node_array_list.py +0 -179
- exonware/xwnode/nodes/strategies/node_hash_map.py +0 -273
- exonware/xwnode/nodes/strategies/node_heap.py +0 -196
- exonware/xwnode/nodes/strategies/node_linked_list.py +0 -413
- exonware/xwnode/nodes/strategies/node_trie.py +0 -257
- exonware/xwnode/nodes/strategies/node_union_find.py +0 -192
- exonware/xwnode/queries/executors/__init__.py +0 -47
- exonware/xwnode/queries/executors/advanced/__init__.py +0 -37
- exonware/xwnode/queries/executors/advanced/aggregate_executor.py +0 -50
- exonware/xwnode/queries/executors/advanced/ask_executor.py +0 -50
- exonware/xwnode/queries/executors/advanced/construct_executor.py +0 -50
- exonware/xwnode/queries/executors/advanced/describe_executor.py +0 -50
- exonware/xwnode/queries/executors/advanced/for_loop_executor.py +0 -50
- exonware/xwnode/queries/executors/advanced/foreach_executor.py +0 -50
- exonware/xwnode/queries/executors/advanced/join_executor.py +0 -50
- exonware/xwnode/queries/executors/advanced/let_executor.py +0 -50
- exonware/xwnode/queries/executors/advanced/mutation_executor.py +0 -50
- exonware/xwnode/queries/executors/advanced/options_executor.py +0 -50
- exonware/xwnode/queries/executors/advanced/pipe_executor.py +0 -50
- exonware/xwnode/queries/executors/advanced/subscribe_executor.py +0 -50
- exonware/xwnode/queries/executors/advanced/subscription_executor.py +0 -50
- exonware/xwnode/queries/executors/advanced/union_executor.py +0 -50
- exonware/xwnode/queries/executors/advanced/window_executor.py +0 -51
- exonware/xwnode/queries/executors/advanced/with_cte_executor.py +0 -50
- exonware/xwnode/queries/executors/aggregation/__init__.py +0 -21
- exonware/xwnode/queries/executors/aggregation/avg_executor.py +0 -50
- exonware/xwnode/queries/executors/aggregation/count_executor.py +0 -38
- exonware/xwnode/queries/executors/aggregation/distinct_executor.py +0 -50
- exonware/xwnode/queries/executors/aggregation/group_executor.py +0 -50
- exonware/xwnode/queries/executors/aggregation/having_executor.py +0 -50
- exonware/xwnode/queries/executors/aggregation/max_executor.py +0 -50
- exonware/xwnode/queries/executors/aggregation/min_executor.py +0 -50
- exonware/xwnode/queries/executors/aggregation/sum_executor.py +0 -50
- exonware/xwnode/queries/executors/aggregation/summarize_executor.py +0 -50
- exonware/xwnode/queries/executors/array/__init__.py +0 -9
- exonware/xwnode/queries/executors/array/indexing_executor.py +0 -51
- exonware/xwnode/queries/executors/array/slicing_executor.py +0 -51
- exonware/xwnode/queries/executors/base.py +0 -257
- exonware/xwnode/queries/executors/capability_checker.py +0 -204
- exonware/xwnode/queries/executors/contracts.py +0 -166
- exonware/xwnode/queries/executors/core/__init__.py +0 -17
- exonware/xwnode/queries/executors/core/create_executor.py +0 -96
- exonware/xwnode/queries/executors/core/delete_executor.py +0 -99
- exonware/xwnode/queries/executors/core/drop_executor.py +0 -100
- exonware/xwnode/queries/executors/core/insert_executor.py +0 -39
- exonware/xwnode/queries/executors/core/select_executor.py +0 -152
- exonware/xwnode/queries/executors/core/update_executor.py +0 -102
- exonware/xwnode/queries/executors/data/__init__.py +0 -13
- exonware/xwnode/queries/executors/data/alter_executor.py +0 -50
- exonware/xwnode/queries/executors/data/load_executor.py +0 -50
- exonware/xwnode/queries/executors/data/merge_executor.py +0 -50
- exonware/xwnode/queries/executors/data/store_executor.py +0 -50
- exonware/xwnode/queries/executors/defs.py +0 -93
- exonware/xwnode/queries/executors/engine.py +0 -221
- exonware/xwnode/queries/executors/errors.py +0 -68
- exonware/xwnode/queries/executors/filtering/__init__.py +0 -25
- exonware/xwnode/queries/executors/filtering/between_executor.py +0 -80
- exonware/xwnode/queries/executors/filtering/filter_executor.py +0 -79
- exonware/xwnode/queries/executors/filtering/has_executor.py +0 -70
- exonware/xwnode/queries/executors/filtering/in_executor.py +0 -70
- exonware/xwnode/queries/executors/filtering/like_executor.py +0 -76
- exonware/xwnode/queries/executors/filtering/optional_executor.py +0 -76
- exonware/xwnode/queries/executors/filtering/range_executor.py +0 -80
- exonware/xwnode/queries/executors/filtering/term_executor.py +0 -77
- exonware/xwnode/queries/executors/filtering/values_executor.py +0 -71
- exonware/xwnode/queries/executors/filtering/where_executor.py +0 -44
- exonware/xwnode/queries/executors/graph/__init__.py +0 -15
- exonware/xwnode/queries/executors/graph/in_traverse_executor.py +0 -51
- exonware/xwnode/queries/executors/graph/match_executor.py +0 -51
- exonware/xwnode/queries/executors/graph/out_executor.py +0 -51
- exonware/xwnode/queries/executors/graph/path_executor.py +0 -51
- exonware/xwnode/queries/executors/graph/return_executor.py +0 -51
- exonware/xwnode/queries/executors/ordering/__init__.py +0 -9
- exonware/xwnode/queries/executors/ordering/by_executor.py +0 -50
- exonware/xwnode/queries/executors/ordering/order_executor.py +0 -51
- exonware/xwnode/queries/executors/projection/__init__.py +0 -9
- exonware/xwnode/queries/executors/projection/extend_executor.py +0 -50
- exonware/xwnode/queries/executors/projection/project_executor.py +0 -50
- exonware/xwnode/queries/executors/registry.py +0 -173
- exonware/xwnode/queries/parsers/__init__.py +0 -26
- exonware/xwnode/queries/parsers/base.py +0 -86
- exonware/xwnode/queries/parsers/contracts.py +0 -46
- exonware/xwnode/queries/parsers/errors.py +0 -53
- exonware/xwnode/queries/parsers/sql_param_extractor.py +0 -318
- exonware/xwnode/queries/strategies/__init__.py +0 -24
- exonware/xwnode/queries/strategies/base.py +0 -236
- exonware/xwnode/queries/strategies/cql.py +0 -201
- exonware/xwnode/queries/strategies/cypher.py +0 -181
- exonware/xwnode/queries/strategies/datalog.py +0 -70
- exonware/xwnode/queries/strategies/elastic_dsl.py +0 -70
- exonware/xwnode/queries/strategies/eql.py +0 -70
- exonware/xwnode/queries/strategies/flux.py +0 -70
- exonware/xwnode/queries/strategies/gql.py +0 -70
- exonware/xwnode/queries/strategies/graphql.py +0 -240
- exonware/xwnode/queries/strategies/gremlin.py +0 -181
- exonware/xwnode/queries/strategies/hiveql.py +0 -214
- exonware/xwnode/queries/strategies/hql.py +0 -70
- exonware/xwnode/queries/strategies/jmespath.py +0 -219
- exonware/xwnode/queries/strategies/jq.py +0 -66
- exonware/xwnode/queries/strategies/json_query.py +0 -66
- exonware/xwnode/queries/strategies/jsoniq.py +0 -248
- exonware/xwnode/queries/strategies/kql.py +0 -70
- exonware/xwnode/queries/strategies/linq.py +0 -238
- exonware/xwnode/queries/strategies/logql.py +0 -70
- exonware/xwnode/queries/strategies/mql.py +0 -68
- exonware/xwnode/queries/strategies/n1ql.py +0 -210
- exonware/xwnode/queries/strategies/partiql.py +0 -70
- exonware/xwnode/queries/strategies/pig.py +0 -215
- exonware/xwnode/queries/strategies/promql.py +0 -70
- exonware/xwnode/queries/strategies/sparql.py +0 -220
- exonware/xwnode/queries/strategies/sql.py +0 -275
- exonware/xwnode/queries/strategies/xml_query.py +0 -66
- exonware/xwnode/queries/strategies/xpath.py +0 -223
- exonware/xwnode/queries/strategies/xquery.py +0 -258
- exonware/xwnode/queries/strategies/xwnode_executor.py +0 -332
- exonware/xwnode/queries/strategies/xwquery.py +0 -456
- exonware_xwnode-0.0.1.21.dist-info/RECORD +0 -214
- /exonware/xwnode/nodes/strategies/{node_ordered_map.py → ordered_map.py} +0 -0
- /exonware/xwnode/nodes/strategies/{node_ordered_map_balanced.py → ordered_map_balanced.py} +0 -0
- /exonware/xwnode/nodes/strategies/{node_patricia.py → patricia.py} +0 -0
- /exonware/xwnode/nodes/strategies/{node_radix_trie.py → radix_trie.py} +0 -0
- /exonware/xwnode/nodes/strategies/{node_set_tree.py → set_tree.py} +0 -0
- {exonware_xwnode-0.0.1.21.dist-info → exonware_xwnode-0.0.1.23.dist-info}/WHEEL +0 -0
- {exonware_xwnode-0.0.1.21.dist-info → exonware_xwnode-0.0.1.23.dist-info}/licenses/LICENSE +0 -0
@@ -1,50 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
#exonware/xwnode/src/exonware/xwnode/queries/executors/advanced/mutation_executor.py
|
4
|
-
|
5
|
-
MUTATION Executor
|
6
|
-
|
7
|
-
Company: eXonware.com
|
8
|
-
Author: Eng. Muhammad AlShehri
|
9
|
-
Email: connect@exonware.com
|
10
|
-
Version: 0.0.1.21
|
11
|
-
Generation Date: 09-Oct-2025
|
12
|
-
"""
|
13
|
-
|
14
|
-
from typing import Any, Dict, List
|
15
|
-
from ..base import AUniversalOperationExecutor
|
16
|
-
from ..contracts import Action, ExecutionContext, ExecutionResult
|
17
|
-
from ..defs import OperationType
|
18
|
-
|
19
|
-
class MutationExecutor(AUniversalOperationExecutor):
|
20
|
-
"""
|
21
|
-
MUTATION operation executor.
|
22
|
-
|
23
|
-
Transactional mutations
|
24
|
-
|
25
|
-
Capability: Universal
|
26
|
-
Operation Type: ADVANCED
|
27
|
-
"""
|
28
|
-
|
29
|
-
OPERATION_NAME = "MUTATION"
|
30
|
-
OPERATION_TYPE = OperationType.ADVANCED
|
31
|
-
SUPPORTED_NODE_TYPES = [] # Universal
|
32
|
-
|
33
|
-
def _do_execute(self, action: Action, context: ExecutionContext) -> ExecutionResult:
|
34
|
-
"""Execute MUTATION operation."""
|
35
|
-
params = action.params
|
36
|
-
node = context.node
|
37
|
-
|
38
|
-
result_data = self._execute_mutation(node, params, context)
|
39
|
-
|
40
|
-
return ExecutionResult(
|
41
|
-
success=True,
|
42
|
-
data=result_data,
|
43
|
-
operation=self.OPERATION_NAME,
|
44
|
-
metadata={'operation': self.OPERATION_NAME}
|
45
|
-
)
|
46
|
-
|
47
|
-
def _execute_mutation(self, node: Any, params: Dict, context: ExecutionContext) -> Dict:
|
48
|
-
"""Execute mutation logic."""
|
49
|
-
# Implementation here
|
50
|
-
return {'result': 'MUTATION executed', 'params': params}
|
@@ -1,50 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
#exonware/xwnode/src/exonware/xwnode/queries/executors/advanced/options_executor.py
|
4
|
-
|
5
|
-
OPTIONS Executor
|
6
|
-
|
7
|
-
Company: eXonware.com
|
8
|
-
Author: Eng. Muhammad AlShehri
|
9
|
-
Email: connect@exonware.com
|
10
|
-
Version: 0.0.1.21
|
11
|
-
Generation Date: 09-Oct-2025
|
12
|
-
"""
|
13
|
-
|
14
|
-
from typing import Any, Dict, List
|
15
|
-
from ..base import AUniversalOperationExecutor
|
16
|
-
from ..contracts import Action, ExecutionContext, ExecutionResult
|
17
|
-
from ..defs import OperationType
|
18
|
-
|
19
|
-
class OptionsExecutor(AUniversalOperationExecutor):
|
20
|
-
"""
|
21
|
-
OPTIONS operation executor.
|
22
|
-
|
23
|
-
Query options/metadata
|
24
|
-
|
25
|
-
Capability: Universal
|
26
|
-
Operation Type: ADVANCED
|
27
|
-
"""
|
28
|
-
|
29
|
-
OPERATION_NAME = "OPTIONS"
|
30
|
-
OPERATION_TYPE = OperationType.ADVANCED
|
31
|
-
SUPPORTED_NODE_TYPES = [] # Universal
|
32
|
-
|
33
|
-
def _do_execute(self, action: Action, context: ExecutionContext) -> ExecutionResult:
|
34
|
-
"""Execute OPTIONS operation."""
|
35
|
-
params = action.params
|
36
|
-
node = context.node
|
37
|
-
|
38
|
-
result_data = self._execute_options(node, params, context)
|
39
|
-
|
40
|
-
return ExecutionResult(
|
41
|
-
success=True,
|
42
|
-
data=result_data,
|
43
|
-
operation=self.OPERATION_NAME,
|
44
|
-
metadata={'operation': self.OPERATION_NAME}
|
45
|
-
)
|
46
|
-
|
47
|
-
def _execute_options(self, node: Any, params: Dict, context: ExecutionContext) -> Dict:
|
48
|
-
"""Execute options logic."""
|
49
|
-
# Implementation here
|
50
|
-
return {'result': 'OPTIONS executed', 'params': params}
|
@@ -1,50 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
#exonware/xwnode/src/exonware/xwnode/queries/executors/advanced/pipe_executor.py
|
4
|
-
|
5
|
-
PIPE Executor
|
6
|
-
|
7
|
-
Company: eXonware.com
|
8
|
-
Author: Eng. Muhammad AlShehri
|
9
|
-
Email: connect@exonware.com
|
10
|
-
Version: 0.0.1.21
|
11
|
-
Generation Date: 09-Oct-2025
|
12
|
-
"""
|
13
|
-
|
14
|
-
from typing import Any, Dict, List
|
15
|
-
from ..base import AUniversalOperationExecutor
|
16
|
-
from ..contracts import Action, ExecutionContext, ExecutionResult
|
17
|
-
from ..defs import OperationType
|
18
|
-
|
19
|
-
class PipeExecutor(AUniversalOperationExecutor):
|
20
|
-
"""
|
21
|
-
PIPE operation executor.
|
22
|
-
|
23
|
-
Pipeline operations
|
24
|
-
|
25
|
-
Capability: Universal
|
26
|
-
Operation Type: ADVANCED
|
27
|
-
"""
|
28
|
-
|
29
|
-
OPERATION_NAME = "PIPE"
|
30
|
-
OPERATION_TYPE = OperationType.ADVANCED
|
31
|
-
SUPPORTED_NODE_TYPES = [] # Universal
|
32
|
-
|
33
|
-
def _do_execute(self, action: Action, context: ExecutionContext) -> ExecutionResult:
|
34
|
-
"""Execute PIPE operation."""
|
35
|
-
params = action.params
|
36
|
-
node = context.node
|
37
|
-
|
38
|
-
result_data = self._execute_pipe(node, params, context)
|
39
|
-
|
40
|
-
return ExecutionResult(
|
41
|
-
success=True,
|
42
|
-
data=result_data,
|
43
|
-
operation=self.OPERATION_NAME,
|
44
|
-
metadata={'operation': self.OPERATION_NAME}
|
45
|
-
)
|
46
|
-
|
47
|
-
def _execute_pipe(self, node: Any, params: Dict, context: ExecutionContext) -> Dict:
|
48
|
-
"""Execute pipe logic."""
|
49
|
-
# Implementation here
|
50
|
-
return {'result': 'PIPE executed', 'params': params}
|
@@ -1,50 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
#exonware/xwnode/src/exonware/xwnode/queries/executors/advanced/subscribe_executor.py
|
4
|
-
|
5
|
-
SUBSCRIBE Executor
|
6
|
-
|
7
|
-
Company: eXonware.com
|
8
|
-
Author: Eng. Muhammad AlShehri
|
9
|
-
Email: connect@exonware.com
|
10
|
-
Version: 0.0.1.21
|
11
|
-
Generation Date: 09-Oct-2025
|
12
|
-
"""
|
13
|
-
|
14
|
-
from typing import Any, Dict, List
|
15
|
-
from ..base import AUniversalOperationExecutor
|
16
|
-
from ..contracts import Action, ExecutionContext, ExecutionResult
|
17
|
-
from ..defs import OperationType
|
18
|
-
|
19
|
-
class SubscribeExecutor(AUniversalOperationExecutor):
|
20
|
-
"""
|
21
|
-
SUBSCRIBE operation executor.
|
22
|
-
|
23
|
-
Subscribes to data changes
|
24
|
-
|
25
|
-
Capability: Universal
|
26
|
-
Operation Type: ADVANCED
|
27
|
-
"""
|
28
|
-
|
29
|
-
OPERATION_NAME = "SUBSCRIBE"
|
30
|
-
OPERATION_TYPE = OperationType.ADVANCED
|
31
|
-
SUPPORTED_NODE_TYPES = [] # Universal
|
32
|
-
|
33
|
-
def _do_execute(self, action: Action, context: ExecutionContext) -> ExecutionResult:
|
34
|
-
"""Execute SUBSCRIBE operation."""
|
35
|
-
params = action.params
|
36
|
-
node = context.node
|
37
|
-
|
38
|
-
result_data = self._execute_subscribe(node, params, context)
|
39
|
-
|
40
|
-
return ExecutionResult(
|
41
|
-
success=True,
|
42
|
-
data=result_data,
|
43
|
-
operation=self.OPERATION_NAME,
|
44
|
-
metadata={'operation': self.OPERATION_NAME}
|
45
|
-
)
|
46
|
-
|
47
|
-
def _execute_subscribe(self, node: Any, params: Dict, context: ExecutionContext) -> Dict:
|
48
|
-
"""Execute subscribe logic."""
|
49
|
-
# Implementation here
|
50
|
-
return {'result': 'SUBSCRIBE executed', 'params': params}
|
@@ -1,50 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
#exonware/xwnode/src/exonware/xwnode/queries/executors/advanced/subscription_executor.py
|
4
|
-
|
5
|
-
SUBSCRIPTION Executor
|
6
|
-
|
7
|
-
Company: eXonware.com
|
8
|
-
Author: Eng. Muhammad AlShehri
|
9
|
-
Email: connect@exonware.com
|
10
|
-
Version: 0.0.1.21
|
11
|
-
Generation Date: 09-Oct-2025
|
12
|
-
"""
|
13
|
-
|
14
|
-
from typing import Any, Dict, List
|
15
|
-
from ..base import AUniversalOperationExecutor
|
16
|
-
from ..contracts import Action, ExecutionContext, ExecutionResult
|
17
|
-
from ..defs import OperationType
|
18
|
-
|
19
|
-
class SubscriptionExecutor(AUniversalOperationExecutor):
|
20
|
-
"""
|
21
|
-
SUBSCRIPTION operation executor.
|
22
|
-
|
23
|
-
Manages subscriptions
|
24
|
-
|
25
|
-
Capability: Universal
|
26
|
-
Operation Type: ADVANCED
|
27
|
-
"""
|
28
|
-
|
29
|
-
OPERATION_NAME = "SUBSCRIPTION"
|
30
|
-
OPERATION_TYPE = OperationType.ADVANCED
|
31
|
-
SUPPORTED_NODE_TYPES = [] # Universal
|
32
|
-
|
33
|
-
def _do_execute(self, action: Action, context: ExecutionContext) -> ExecutionResult:
|
34
|
-
"""Execute SUBSCRIPTION operation."""
|
35
|
-
params = action.params
|
36
|
-
node = context.node
|
37
|
-
|
38
|
-
result_data = self._execute_subscription(node, params, context)
|
39
|
-
|
40
|
-
return ExecutionResult(
|
41
|
-
success=True,
|
42
|
-
data=result_data,
|
43
|
-
operation=self.OPERATION_NAME,
|
44
|
-
metadata={'operation': self.OPERATION_NAME}
|
45
|
-
)
|
46
|
-
|
47
|
-
def _execute_subscription(self, node: Any, params: Dict, context: ExecutionContext) -> Dict:
|
48
|
-
"""Execute subscription logic."""
|
49
|
-
# Implementation here
|
50
|
-
return {'result': 'SUBSCRIPTION executed', 'params': params}
|
@@ -1,50 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
#exonware/xwnode/src/exonware/xwnode/queries/executors/advanced/union_executor.py
|
4
|
-
|
5
|
-
UNION Executor
|
6
|
-
|
7
|
-
Company: eXonware.com
|
8
|
-
Author: Eng. Muhammad AlShehri
|
9
|
-
Email: connect@exonware.com
|
10
|
-
Version: 0.0.1.21
|
11
|
-
Generation Date: 09-Oct-2025
|
12
|
-
"""
|
13
|
-
|
14
|
-
from typing import Any, Dict, List
|
15
|
-
from ..base import AUniversalOperationExecutor
|
16
|
-
from ..contracts import Action, ExecutionContext, ExecutionResult
|
17
|
-
from ..defs import OperationType
|
18
|
-
|
19
|
-
class UnionExecutor(AUniversalOperationExecutor):
|
20
|
-
"""
|
21
|
-
UNION operation executor.
|
22
|
-
|
23
|
-
Unions data from multiple sources
|
24
|
-
|
25
|
-
Capability: Universal
|
26
|
-
Operation Type: JOINING
|
27
|
-
"""
|
28
|
-
|
29
|
-
OPERATION_NAME = "UNION"
|
30
|
-
OPERATION_TYPE = OperationType.JOINING
|
31
|
-
SUPPORTED_NODE_TYPES = [] # Universal
|
32
|
-
|
33
|
-
def _do_execute(self, action: Action, context: ExecutionContext) -> ExecutionResult:
|
34
|
-
"""Execute UNION operation."""
|
35
|
-
params = action.params
|
36
|
-
node = context.node
|
37
|
-
|
38
|
-
result_data = self._execute_union(node, params, context)
|
39
|
-
|
40
|
-
return ExecutionResult(
|
41
|
-
success=True,
|
42
|
-
data=result_data,
|
43
|
-
operation=self.OPERATION_NAME,
|
44
|
-
metadata={'operation': self.OPERATION_NAME}
|
45
|
-
)
|
46
|
-
|
47
|
-
def _execute_union(self, node: Any, params: Dict, context: ExecutionContext) -> Dict:
|
48
|
-
"""Execute union logic."""
|
49
|
-
# Implementation here
|
50
|
-
return {'result': 'UNION executed', 'params': params}
|
@@ -1,51 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
#exonware/xwnode/src/exonware/xwnode/queries/executors/advanced/window_executor.py
|
4
|
-
|
5
|
-
WINDOW Executor
|
6
|
-
|
7
|
-
Company: eXonware.com
|
8
|
-
Author: Eng. Muhammad AlShehri
|
9
|
-
Email: connect@exonware.com
|
10
|
-
Version: 0.0.1.21
|
11
|
-
Generation Date: 09-Oct-2025
|
12
|
-
"""
|
13
|
-
|
14
|
-
from typing import Any, Dict, List
|
15
|
-
from ..base import AOperationExecutor
|
16
|
-
from ..contracts import Action, ExecutionContext, ExecutionResult
|
17
|
-
from ..defs import OperationType
|
18
|
-
from ...nodes.strategies.contracts import NodeType
|
19
|
-
|
20
|
-
class WindowExecutor(AOperationExecutor):
|
21
|
-
"""
|
22
|
-
WINDOW operation executor.
|
23
|
-
|
24
|
-
Window functions for time-series
|
25
|
-
|
26
|
-
Capability: LINEAR, TREE only
|
27
|
-
Operation Type: WINDOW
|
28
|
-
"""
|
29
|
-
|
30
|
-
OPERATION_NAME = "WINDOW"
|
31
|
-
OPERATION_TYPE = OperationType.WINDOW
|
32
|
-
SUPPORTED_NODE_TYPES = [NodeType.LINEAR, NodeType.TREE]
|
33
|
-
|
34
|
-
def _do_execute(self, action: Action, context: ExecutionContext) -> ExecutionResult:
|
35
|
-
"""Execute WINDOW operation."""
|
36
|
-
params = action.params
|
37
|
-
node = context.node
|
38
|
-
|
39
|
-
result_data = self._execute_window(node, params, context)
|
40
|
-
|
41
|
-
return ExecutionResult(
|
42
|
-
success=True,
|
43
|
-
data=result_data,
|
44
|
-
operation=self.OPERATION_NAME,
|
45
|
-
metadata={'operation': self.OPERATION_NAME}
|
46
|
-
)
|
47
|
-
|
48
|
-
def _execute_window(self, node: Any, params: Dict, context: ExecutionContext) -> Dict:
|
49
|
-
"""Execute window logic."""
|
50
|
-
# Implementation here
|
51
|
-
return {'result': 'WINDOW executed', 'params': params}
|
@@ -1,50 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
#exonware/xwnode/src/exonware/xwnode/queries/executors/advanced/with_cte_executor.py
|
4
|
-
|
5
|
-
WITH Executor
|
6
|
-
|
7
|
-
Company: eXonware.com
|
8
|
-
Author: Eng. Muhammad AlShehri
|
9
|
-
Email: connect@exonware.com
|
10
|
-
Version: 0.0.1.21
|
11
|
-
Generation Date: 09-Oct-2025
|
12
|
-
"""
|
13
|
-
|
14
|
-
from typing import Any, Dict, List
|
15
|
-
from ..base import AUniversalOperationExecutor
|
16
|
-
from ..contracts import Action, ExecutionContext, ExecutionResult
|
17
|
-
from ..defs import OperationType
|
18
|
-
|
19
|
-
class WithCteExecutor(AUniversalOperationExecutor):
|
20
|
-
"""
|
21
|
-
WITH operation executor.
|
22
|
-
|
23
|
-
Common Table Expressions
|
24
|
-
|
25
|
-
Capability: Universal
|
26
|
-
Operation Type: CONTROL_FLOW
|
27
|
-
"""
|
28
|
-
|
29
|
-
OPERATION_NAME = "WITH"
|
30
|
-
OPERATION_TYPE = OperationType.CONTROL_FLOW
|
31
|
-
SUPPORTED_NODE_TYPES = [] # Universal
|
32
|
-
|
33
|
-
def _do_execute(self, action: Action, context: ExecutionContext) -> ExecutionResult:
|
34
|
-
"""Execute WITH operation."""
|
35
|
-
params = action.params
|
36
|
-
node = context.node
|
37
|
-
|
38
|
-
result_data = self._execute_with_cte(node, params, context)
|
39
|
-
|
40
|
-
return ExecutionResult(
|
41
|
-
success=True,
|
42
|
-
data=result_data,
|
43
|
-
operation=self.OPERATION_NAME,
|
44
|
-
metadata={'operation': self.OPERATION_NAME}
|
45
|
-
)
|
46
|
-
|
47
|
-
def _execute_with_cte(self, node: Any, params: Dict, context: ExecutionContext) -> Dict:
|
48
|
-
"""Execute with_cte logic."""
|
49
|
-
# Implementation here
|
50
|
-
return {'result': 'WITH executed', 'params': params}
|
@@ -1,21 +0,0 @@
|
|
1
|
-
"""Aggregation operation executors."""
|
2
|
-
|
3
|
-
from .sum_executor import SumExecutor
|
4
|
-
from .avg_executor import AvgExecutor
|
5
|
-
from .min_executor import MinExecutor
|
6
|
-
from .max_executor import MaxExecutor
|
7
|
-
from .distinct_executor import DistinctExecutor
|
8
|
-
from .group_executor import GroupExecutor
|
9
|
-
from .having_executor import HavingExecutor
|
10
|
-
from .summarize_executor import SummarizeExecutor
|
11
|
-
|
12
|
-
__all__ = [
|
13
|
-
'SumExecutor',
|
14
|
-
'AvgExecutor',
|
15
|
-
'MinExecutor',
|
16
|
-
'MaxExecutor',
|
17
|
-
'DistinctExecutor',
|
18
|
-
'GroupExecutor',
|
19
|
-
'HavingExecutor',
|
20
|
-
'SummarizeExecutor',
|
21
|
-
]
|
@@ -1,50 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
#exonware/xwnode/src/exonware/xwnode/queries/executors/aggregation/avg_executor.py
|
4
|
-
|
5
|
-
AVG Executor
|
6
|
-
|
7
|
-
Company: eXonware.com
|
8
|
-
Author: Eng. Muhammad AlShehri
|
9
|
-
Email: connect@exonware.com
|
10
|
-
Version: 0.0.1.21
|
11
|
-
Generation Date: 09-Oct-2025
|
12
|
-
"""
|
13
|
-
|
14
|
-
from typing import Any, Dict, List
|
15
|
-
from ..base import AUniversalOperationExecutor
|
16
|
-
from ..contracts import Action, ExecutionContext, ExecutionResult
|
17
|
-
from ..defs import OperationType
|
18
|
-
|
19
|
-
class AvgExecutor(AUniversalOperationExecutor):
|
20
|
-
"""
|
21
|
-
AVG operation executor.
|
22
|
-
|
23
|
-
Computes average of numeric values
|
24
|
-
|
25
|
-
Capability: Universal
|
26
|
-
Operation Type: AGGREGATION
|
27
|
-
"""
|
28
|
-
|
29
|
-
OPERATION_NAME = "AVG"
|
30
|
-
OPERATION_TYPE = OperationType.AGGREGATION
|
31
|
-
SUPPORTED_NODE_TYPES = [] # Universal
|
32
|
-
|
33
|
-
def _do_execute(self, action: Action, context: ExecutionContext) -> ExecutionResult:
|
34
|
-
"""Execute AVG operation."""
|
35
|
-
params = action.params
|
36
|
-
node = context.node
|
37
|
-
|
38
|
-
result_data = self._execute_avg(node, params, context)
|
39
|
-
|
40
|
-
return ExecutionResult(
|
41
|
-
success=True,
|
42
|
-
data=result_data,
|
43
|
-
operation=self.OPERATION_NAME,
|
44
|
-
metadata={'operation': self.OPERATION_NAME}
|
45
|
-
)
|
46
|
-
|
47
|
-
def _execute_avg(self, node: Any, params: Dict, context: ExecutionContext) -> Dict:
|
48
|
-
"""Execute avg logic."""
|
49
|
-
# Implementation here
|
50
|
-
return {'result': 'AVG executed', 'params': params}
|
@@ -1,38 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
#exonware/xwnode/src/exonware/xwnode/queries/executors/aggregation/count_executor.py
|
4
|
-
|
5
|
-
COUNT Operation Executor
|
6
|
-
|
7
|
-
Company: eXonware.com
|
8
|
-
Author: Eng. Muhammad AlShehri
|
9
|
-
Email: connect@exonware.com
|
10
|
-
Version: 0.0.1.21
|
11
|
-
Generation Date: 08-Oct-2025
|
12
|
-
"""
|
13
|
-
|
14
|
-
from ..base import AUniversalOperationExecutor
|
15
|
-
from ..contracts import Action, ExecutionContext, ExecutionResult
|
16
|
-
|
17
|
-
|
18
|
-
class CountExecutor(AUniversalOperationExecutor):
|
19
|
-
"""COUNT operation executor - Universal aggregation."""
|
20
|
-
|
21
|
-
OPERATION_NAME = "COUNT"
|
22
|
-
|
23
|
-
def _do_execute(self, action: Action, context: ExecutionContext) -> ExecutionResult:
|
24
|
-
"""Execute COUNT operation."""
|
25
|
-
# Count items in node
|
26
|
-
count = 0
|
27
|
-
|
28
|
-
if hasattr(context.node, '__len__'):
|
29
|
-
count = len(context.node)
|
30
|
-
elif hasattr(context.node, 'size'):
|
31
|
-
count = context.node.size()
|
32
|
-
elif hasattr(context.node, '_strategy') and hasattr(context.node._strategy, 'size'):
|
33
|
-
count = context.node._strategy.size()
|
34
|
-
|
35
|
-
return ExecutionResult(data={'count': count}, affected_count=count)
|
36
|
-
|
37
|
-
|
38
|
-
__all__ = ['CountExecutor']
|
@@ -1,50 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
#exonware/xwnode/src/exonware/xwnode/queries/executors/aggregation/distinct_executor.py
|
4
|
-
|
5
|
-
DISTINCT Executor
|
6
|
-
|
7
|
-
Company: eXonware.com
|
8
|
-
Author: Eng. Muhammad AlShehri
|
9
|
-
Email: connect@exonware.com
|
10
|
-
Version: 0.0.1.21
|
11
|
-
Generation Date: 09-Oct-2025
|
12
|
-
"""
|
13
|
-
|
14
|
-
from typing import Any, Dict, List
|
15
|
-
from ..base import AUniversalOperationExecutor
|
16
|
-
from ..contracts import Action, ExecutionContext, ExecutionResult
|
17
|
-
from ..defs import OperationType
|
18
|
-
|
19
|
-
class DistinctExecutor(AUniversalOperationExecutor):
|
20
|
-
"""
|
21
|
-
DISTINCT operation executor.
|
22
|
-
|
23
|
-
Returns distinct/unique values
|
24
|
-
|
25
|
-
Capability: Universal
|
26
|
-
Operation Type: AGGREGATION
|
27
|
-
"""
|
28
|
-
|
29
|
-
OPERATION_NAME = "DISTINCT"
|
30
|
-
OPERATION_TYPE = OperationType.AGGREGATION
|
31
|
-
SUPPORTED_NODE_TYPES = [] # Universal
|
32
|
-
|
33
|
-
def _do_execute(self, action: Action, context: ExecutionContext) -> ExecutionResult:
|
34
|
-
"""Execute DISTINCT operation."""
|
35
|
-
params = action.params
|
36
|
-
node = context.node
|
37
|
-
|
38
|
-
result_data = self._execute_distinct(node, params, context)
|
39
|
-
|
40
|
-
return ExecutionResult(
|
41
|
-
success=True,
|
42
|
-
data=result_data,
|
43
|
-
operation=self.OPERATION_NAME,
|
44
|
-
metadata={'operation': self.OPERATION_NAME}
|
45
|
-
)
|
46
|
-
|
47
|
-
def _execute_distinct(self, node: Any, params: Dict, context: ExecutionContext) -> Dict:
|
48
|
-
"""Execute distinct logic."""
|
49
|
-
# Implementation here
|
50
|
-
return {'result': 'DISTINCT executed', 'params': params}
|
@@ -1,50 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
#exonware/xwnode/src/exonware/xwnode/queries/executors/aggregation/group_executor.py
|
4
|
-
|
5
|
-
GROUP Executor
|
6
|
-
|
7
|
-
Company: eXonware.com
|
8
|
-
Author: Eng. Muhammad AlShehri
|
9
|
-
Email: connect@exonware.com
|
10
|
-
Version: 0.0.1.21
|
11
|
-
Generation Date: 09-Oct-2025
|
12
|
-
"""
|
13
|
-
|
14
|
-
from typing import Any, Dict, List
|
15
|
-
from ..base import AUniversalOperationExecutor
|
16
|
-
from ..contracts import Action, ExecutionContext, ExecutionResult
|
17
|
-
from ..defs import OperationType
|
18
|
-
|
19
|
-
class GroupExecutor(AUniversalOperationExecutor):
|
20
|
-
"""
|
21
|
-
GROUP operation executor.
|
22
|
-
|
23
|
-
Groups data by specified fields
|
24
|
-
|
25
|
-
Capability: Universal
|
26
|
-
Operation Type: AGGREGATION
|
27
|
-
"""
|
28
|
-
|
29
|
-
OPERATION_NAME = "GROUP"
|
30
|
-
OPERATION_TYPE = OperationType.AGGREGATION
|
31
|
-
SUPPORTED_NODE_TYPES = [] # Universal
|
32
|
-
|
33
|
-
def _do_execute(self, action: Action, context: ExecutionContext) -> ExecutionResult:
|
34
|
-
"""Execute GROUP operation."""
|
35
|
-
params = action.params
|
36
|
-
node = context.node
|
37
|
-
|
38
|
-
result_data = self._execute_group(node, params, context)
|
39
|
-
|
40
|
-
return ExecutionResult(
|
41
|
-
success=True,
|
42
|
-
data=result_data,
|
43
|
-
operation=self.OPERATION_NAME,
|
44
|
-
metadata={'operation': self.OPERATION_NAME}
|
45
|
-
)
|
46
|
-
|
47
|
-
def _execute_group(self, node: Any, params: Dict, context: ExecutionContext) -> Dict:
|
48
|
-
"""Execute group logic."""
|
49
|
-
# Implementation here
|
50
|
-
return {'result': 'GROUP executed', 'params': params}
|
@@ -1,50 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
#exonware/xwnode/src/exonware/xwnode/queries/executors/aggregation/having_executor.py
|
4
|
-
|
5
|
-
HAVING Executor
|
6
|
-
|
7
|
-
Company: eXonware.com
|
8
|
-
Author: Eng. Muhammad AlShehri
|
9
|
-
Email: connect@exonware.com
|
10
|
-
Version: 0.0.1.21
|
11
|
-
Generation Date: 09-Oct-2025
|
12
|
-
"""
|
13
|
-
|
14
|
-
from typing import Any, Dict, List
|
15
|
-
from ..base import AUniversalOperationExecutor
|
16
|
-
from ..contracts import Action, ExecutionContext, ExecutionResult
|
17
|
-
from ..defs import OperationType
|
18
|
-
|
19
|
-
class HavingExecutor(AUniversalOperationExecutor):
|
20
|
-
"""
|
21
|
-
HAVING operation executor.
|
22
|
-
|
23
|
-
Filters grouped data
|
24
|
-
|
25
|
-
Capability: Universal
|
26
|
-
Operation Type: AGGREGATION
|
27
|
-
"""
|
28
|
-
|
29
|
-
OPERATION_NAME = "HAVING"
|
30
|
-
OPERATION_TYPE = OperationType.AGGREGATION
|
31
|
-
SUPPORTED_NODE_TYPES = [] # Universal
|
32
|
-
|
33
|
-
def _do_execute(self, action: Action, context: ExecutionContext) -> ExecutionResult:
|
34
|
-
"""Execute HAVING operation."""
|
35
|
-
params = action.params
|
36
|
-
node = context.node
|
37
|
-
|
38
|
-
result_data = self._execute_having(node, params, context)
|
39
|
-
|
40
|
-
return ExecutionResult(
|
41
|
-
success=True,
|
42
|
-
data=result_data,
|
43
|
-
operation=self.OPERATION_NAME,
|
44
|
-
metadata={'operation': self.OPERATION_NAME}
|
45
|
-
)
|
46
|
-
|
47
|
-
def _execute_having(self, node: Any, params: Dict, context: ExecutionContext) -> Dict:
|
48
|
-
"""Execute having logic."""
|
49
|
-
# Implementation here
|
50
|
-
return {'result': 'HAVING executed', 'params': params}
|