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,192 +0,0 @@
|
|
1
|
-
"""
|
2
|
-
Union-Find Node Strategy Implementation
|
3
|
-
|
4
|
-
This module implements the UNION_FIND strategy for efficient set operations.
|
5
|
-
"""
|
6
|
-
|
7
|
-
from typing import Any, Iterator, Dict, List, Set
|
8
|
-
from .base import ANodeGraphStrategy
|
9
|
-
from .contracts import NodeType
|
10
|
-
from ...defs import NodeMode, NodeTrait
|
11
|
-
from ..utils import (
|
12
|
-
UnionFind,
|
13
|
-
safe_to_native_conversion,
|
14
|
-
create_basic_metrics,
|
15
|
-
create_basic_backend_info,
|
16
|
-
create_size_tracker,
|
17
|
-
create_access_tracker,
|
18
|
-
update_size_tracker,
|
19
|
-
record_access,
|
20
|
-
get_access_metrics
|
21
|
-
)
|
22
|
-
|
23
|
-
|
24
|
-
class UnionFindStrategy(ANodeGraphStrategy):
|
25
|
-
"""
|
26
|
-
Union-Find node strategy for efficient set operations.
|
27
|
-
|
28
|
-
Optimized for union, find, and connected oper
|
29
|
-
|
30
|
-
# Strategy type classification
|
31
|
-
STRATEGY_TYPE = NodeType.GRAPH
|
32
|
-
ations on disjoint sets.
|
33
|
-
"""
|
34
|
-
|
35
|
-
def __init__(self, traits: NodeTrait = NodeTrait.NONE, **options):
|
36
|
-
"""Initialize the union-find strategy."""
|
37
|
-
super().__init__(NodeMode.UNION_FIND, traits, **options)
|
38
|
-
self._union_find = UnionFind()
|
39
|
-
self._size_tracker = create_size_tracker()
|
40
|
-
self._access_tracker = create_access_tracker()
|
41
|
-
|
42
|
-
def get_supported_traits(self) -> NodeTrait:
|
43
|
-
"""Get the traits supported by the union-find strategy."""
|
44
|
-
return (NodeTrait.SET_OPERATIONS | NodeTrait.HIERARCHICAL)
|
45
|
-
|
46
|
-
# ============================================================================
|
47
|
-
# CORE OPERATIONS
|
48
|
-
# ============================================================================
|
49
|
-
|
50
|
-
def put(self, key: Any, value: Any = None) -> None:
|
51
|
-
"""Store a key-value pair (creates a new set)."""
|
52
|
-
str_key = str(key)
|
53
|
-
if str_key not in self._union_find.parent:
|
54
|
-
update_size_tracker(self._size_tracker, 1)
|
55
|
-
self._union_find.make_set(str_key, value)
|
56
|
-
record_access(self._access_tracker, 'put_count')
|
57
|
-
|
58
|
-
def get(self, key: Any, default: Any = None) -> Any:
|
59
|
-
"""Retrieve a value by key."""
|
60
|
-
str_key = str(key)
|
61
|
-
record_access(self._access_tracker, 'get_count')
|
62
|
-
return self._union_find.values.get(str_key, default)
|
63
|
-
|
64
|
-
def has(self, key: Any) -> bool:
|
65
|
-
"""Check if key exists."""
|
66
|
-
return str(key) in self._union_find.parent
|
67
|
-
|
68
|
-
def remove(self, key: Any) -> bool:
|
69
|
-
"""Remove a key-value pair."""
|
70
|
-
str_key = str(key)
|
71
|
-
if str_key in self._union_find.parent:
|
72
|
-
# Remove from all data structures
|
73
|
-
del self._union_find.parent[str_key]
|
74
|
-
if str_key in self._union_find.rank:
|
75
|
-
del self._union_find.rank[str_key]
|
76
|
-
if str_key in self._union_find.values:
|
77
|
-
del self._union_find.values[str_key]
|
78
|
-
update_size_tracker(self._size_tracker, -1)
|
79
|
-
record_access(self._access_tracker, 'delete_count')
|
80
|
-
return True
|
81
|
-
return False
|
82
|
-
|
83
|
-
def delete(self, key: Any) -> bool:
|
84
|
-
"""Remove a key-value pair (alias for remove)."""
|
85
|
-
return self.remove(key)
|
86
|
-
|
87
|
-
def clear(self) -> None:
|
88
|
-
"""Clear all data."""
|
89
|
-
self._union_find = UnionFind()
|
90
|
-
self._size_tracker['size'] = 0
|
91
|
-
|
92
|
-
def keys(self) -> Iterator[str]:
|
93
|
-
"""Get all keys."""
|
94
|
-
return iter(self._union_find.parent.keys())
|
95
|
-
|
96
|
-
def values(self) -> Iterator[Any]:
|
97
|
-
"""Get all values."""
|
98
|
-
return iter(self._union_find.values.values())
|
99
|
-
|
100
|
-
def items(self) -> Iterator[tuple[str, Any]]:
|
101
|
-
"""Get all key-value pairs."""
|
102
|
-
return iter(self._union_find.values.items())
|
103
|
-
|
104
|
-
def __len__(self) -> int:
|
105
|
-
"""Get the number of items."""
|
106
|
-
return self._size_tracker['size']
|
107
|
-
|
108
|
-
def to_native(self) -> Dict[str, Any]:
|
109
|
-
"""Convert to native Python dict with set structure info."""
|
110
|
-
result = {}
|
111
|
-
for key in self._union_find.parent.keys():
|
112
|
-
result[key] = {
|
113
|
-
'value': safe_to_native_conversion(self._union_find.values.get(key)),
|
114
|
-
'root': self._union_find.find(key),
|
115
|
-
'set_id': self._union_find.find(key)
|
116
|
-
}
|
117
|
-
return result
|
118
|
-
|
119
|
-
@property
|
120
|
-
def is_list(self) -> bool:
|
121
|
-
"""This is not a list strategy."""
|
122
|
-
return False
|
123
|
-
|
124
|
-
@property
|
125
|
-
def is_dict(self) -> bool:
|
126
|
-
"""This behaves like a dict but with set semantics."""
|
127
|
-
return True
|
128
|
-
|
129
|
-
# ============================================================================
|
130
|
-
# UNION-FIND SPECIFIC OPERATIONS
|
131
|
-
# ============================================================================
|
132
|
-
|
133
|
-
def make_set(self, element: str, value: Any = None) -> None:
|
134
|
-
"""Create a new set containing only the given element."""
|
135
|
-
if element not in self._union_find.parent:
|
136
|
-
update_size_tracker(self._size_tracker, 1)
|
137
|
-
self._union_find.make_set(element, value)
|
138
|
-
|
139
|
-
def find(self, element: str) -> str:
|
140
|
-
"""Find the root of the set containing element (with path compression)."""
|
141
|
-
return self._union_find.find(element)
|
142
|
-
|
143
|
-
def union(self, element1: str, element2: str) -> bool:
|
144
|
-
"""Union the sets containing element1 and element2."""
|
145
|
-
return self._union_find.union(element1, element2)
|
146
|
-
|
147
|
-
def connected(self, element1: str, element2: str) -> bool:
|
148
|
-
"""Check if two elements are in the same set."""
|
149
|
-
return self._union_find.connected(element1, element2)
|
150
|
-
|
151
|
-
def get_set_members(self, element: str) -> Set[str]:
|
152
|
-
"""Get all members of the set containing the given element."""
|
153
|
-
return self._union_find.get_set_members(element)
|
154
|
-
|
155
|
-
def get_all_sets(self) -> List[Set[str]]:
|
156
|
-
"""Get all disjoint sets."""
|
157
|
-
return self._union_find.get_all_sets()
|
158
|
-
|
159
|
-
def get_set_count(self) -> int:
|
160
|
-
"""Get the number of disjoint sets."""
|
161
|
-
return self._union_find.get_set_count()
|
162
|
-
|
163
|
-
def get_set_size(self, element: str) -> int:
|
164
|
-
"""Get the size of the set containing the given element."""
|
165
|
-
return self._union_find.get_set_size(element)
|
166
|
-
|
167
|
-
# ============================================================================
|
168
|
-
# PERFORMANCE CHARACTERISTICS
|
169
|
-
# ============================================================================
|
170
|
-
|
171
|
-
def backend_info(self) -> Dict[str, Any]:
|
172
|
-
"""Get backend implementation info."""
|
173
|
-
return create_basic_backend_info(
|
174
|
-
'UNION_FIND',
|
175
|
-
'UnionFind with path compression and union by rank',
|
176
|
-
complexity={
|
177
|
-
'find': 'O(α(n)) amortized where α is inverse Ackermann',
|
178
|
-
'union': 'O(α(n)) amortized where α is inverse Ackermann',
|
179
|
-
'connected': 'O(α(n)) amortized where α is inverse Ackermann'
|
180
|
-
}
|
181
|
-
)
|
182
|
-
|
183
|
-
def metrics(self) -> Dict[str, Any]:
|
184
|
-
"""Get performance metrics."""
|
185
|
-
base_metrics = create_basic_metrics('UNION_FIND', self._size_tracker['size'])
|
186
|
-
access_metrics = get_access_metrics(self._access_tracker)
|
187
|
-
base_metrics.update(access_metrics)
|
188
|
-
base_metrics.update({
|
189
|
-
'set_count': self._union_find.get_set_count(),
|
190
|
-
'avg_set_size': self._size_tracker['size'] / max(1, self._union_find.get_set_count())
|
191
|
-
})
|
192
|
-
return base_metrics
|
@@ -1,47 +0,0 @@
|
|
1
|
-
"""
|
2
|
-
#exonware/xwnode/src/exonware/xwnode/queries/executors/__init__.py
|
3
|
-
|
4
|
-
Query Operation Executors
|
5
|
-
|
6
|
-
This package implements the execution layer for 50 XWQuery Script operations.
|
7
|
-
|
8
|
-
Company: eXonware.com
|
9
|
-
Author: Eng. Muhammad AlShehri
|
10
|
-
Email: connect@exonware.com
|
11
|
-
Version: 0.0.1.21
|
12
|
-
Generation Date: 08-Oct-2025
|
13
|
-
"""
|
14
|
-
|
15
|
-
from .contracts import (
|
16
|
-
IOperationExecutor,
|
17
|
-
Action,
|
18
|
-
ExecutionContext,
|
19
|
-
ExecutionResult
|
20
|
-
)
|
21
|
-
from .defs import OperationCapability, OperationType, ExecutionStatus
|
22
|
-
from .errors import ExecutorError, OperationExecutionError, ValidationError, UnsupportedOperationError
|
23
|
-
from .base import AOperationExecutor
|
24
|
-
from .registry import OperationRegistry, get_operation_registry, register_operation
|
25
|
-
|
26
|
-
__all__ = [
|
27
|
-
# Contracts
|
28
|
-
'IOperationExecutor',
|
29
|
-
'Action',
|
30
|
-
'ExecutionContext',
|
31
|
-
'ExecutionResult',
|
32
|
-
# Types
|
33
|
-
'OperationCapability',
|
34
|
-
'OperationType',
|
35
|
-
'ExecutionStatus',
|
36
|
-
# Errors
|
37
|
-
'ExecutorError',
|
38
|
-
'OperationExecutionError',
|
39
|
-
'ValidationError',
|
40
|
-
'UnsupportedOperationError',
|
41
|
-
# Base
|
42
|
-
'AOperationExecutor',
|
43
|
-
# Registry
|
44
|
-
'OperationRegistry',
|
45
|
-
'get_operation_registry',
|
46
|
-
'register_operation',
|
47
|
-
]
|
@@ -1,37 +0,0 @@
|
|
1
|
-
"""Advanced operation executors."""
|
2
|
-
|
3
|
-
from .join_executor import JoinExecutor
|
4
|
-
from .union_executor import UnionExecutor
|
5
|
-
from .with_cte_executor import WithCteExecutor
|
6
|
-
from .aggregate_executor import AggregateExecutor
|
7
|
-
from .foreach_executor import ForeachExecutor
|
8
|
-
from .let_executor import LetExecutor
|
9
|
-
from .for_loop_executor import ForLoopExecutor
|
10
|
-
from .window_executor import WindowExecutor
|
11
|
-
from .describe_executor import DescribeExecutor
|
12
|
-
from .construct_executor import ConstructExecutor
|
13
|
-
from .ask_executor import AskExecutor
|
14
|
-
from .subscribe_executor import SubscribeExecutor
|
15
|
-
from .subscription_executor import SubscriptionExecutor
|
16
|
-
from .mutation_executor import MutationExecutor
|
17
|
-
from .pipe_executor import PipeExecutor
|
18
|
-
from .options_executor import OptionsExecutor
|
19
|
-
|
20
|
-
__all__ = [
|
21
|
-
'JoinExecutor',
|
22
|
-
'UnionExecutor',
|
23
|
-
'WithCteExecutor',
|
24
|
-
'AggregateExecutor',
|
25
|
-
'ForeachExecutor',
|
26
|
-
'LetExecutor',
|
27
|
-
'ForLoopExecutor',
|
28
|
-
'WindowExecutor',
|
29
|
-
'DescribeExecutor',
|
30
|
-
'ConstructExecutor',
|
31
|
-
'AskExecutor',
|
32
|
-
'SubscribeExecutor',
|
33
|
-
'SubscriptionExecutor',
|
34
|
-
'MutationExecutor',
|
35
|
-
'PipeExecutor',
|
36
|
-
'OptionsExecutor',
|
37
|
-
]
|
@@ -1,50 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
#exonware/xwnode/src/exonware/xwnode/queries/executors/advanced/aggregate_executor.py
|
4
|
-
|
5
|
-
AGGREGATE 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 AggregateExecutor(AUniversalOperationExecutor):
|
20
|
-
"""
|
21
|
-
AGGREGATE operation executor.
|
22
|
-
|
23
|
-
Window aggregation operations
|
24
|
-
|
25
|
-
Capability: Universal
|
26
|
-
Operation Type: AGGREGATION
|
27
|
-
"""
|
28
|
-
|
29
|
-
OPERATION_NAME = "AGGREGATE"
|
30
|
-
OPERATION_TYPE = OperationType.AGGREGATION
|
31
|
-
SUPPORTED_NODE_TYPES = [] # Universal
|
32
|
-
|
33
|
-
def _do_execute(self, action: Action, context: ExecutionContext) -> ExecutionResult:
|
34
|
-
"""Execute AGGREGATE operation."""
|
35
|
-
params = action.params
|
36
|
-
node = context.node
|
37
|
-
|
38
|
-
result_data = self._execute_aggregate(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_aggregate(self, node: Any, params: Dict, context: ExecutionContext) -> Dict:
|
48
|
-
"""Execute aggregate logic."""
|
49
|
-
# Implementation here
|
50
|
-
return {'result': 'AGGREGATE executed', 'params': params}
|
@@ -1,50 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
#exonware/xwnode/src/exonware/xwnode/queries/executors/advanced/ask_executor.py
|
4
|
-
|
5
|
-
ASK 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 AskExecutor(AUniversalOperationExecutor):
|
20
|
-
"""
|
21
|
-
ASK operation executor.
|
22
|
-
|
23
|
-
Boolean query (yes/no result)
|
24
|
-
|
25
|
-
Capability: Universal
|
26
|
-
Operation Type: ADVANCED
|
27
|
-
"""
|
28
|
-
|
29
|
-
OPERATION_NAME = "ASK"
|
30
|
-
OPERATION_TYPE = OperationType.ADVANCED
|
31
|
-
SUPPORTED_NODE_TYPES = [] # Universal
|
32
|
-
|
33
|
-
def _do_execute(self, action: Action, context: ExecutionContext) -> ExecutionResult:
|
34
|
-
"""Execute ASK operation."""
|
35
|
-
params = action.params
|
36
|
-
node = context.node
|
37
|
-
|
38
|
-
result_data = self._execute_ask(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_ask(self, node: Any, params: Dict, context: ExecutionContext) -> Dict:
|
48
|
-
"""Execute ask logic."""
|
49
|
-
# Implementation here
|
50
|
-
return {'result': 'ASK executed', 'params': params}
|
@@ -1,50 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
#exonware/xwnode/src/exonware/xwnode/queries/executors/advanced/construct_executor.py
|
4
|
-
|
5
|
-
CONSTRUCT 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 ConstructExecutor(AUniversalOperationExecutor):
|
20
|
-
"""
|
21
|
-
CONSTRUCT operation executor.
|
22
|
-
|
23
|
-
Constructs new data structures
|
24
|
-
|
25
|
-
Capability: Universal
|
26
|
-
Operation Type: ADVANCED
|
27
|
-
"""
|
28
|
-
|
29
|
-
OPERATION_NAME = "CONSTRUCT"
|
30
|
-
OPERATION_TYPE = OperationType.ADVANCED
|
31
|
-
SUPPORTED_NODE_TYPES = [] # Universal
|
32
|
-
|
33
|
-
def _do_execute(self, action: Action, context: ExecutionContext) -> ExecutionResult:
|
34
|
-
"""Execute CONSTRUCT operation."""
|
35
|
-
params = action.params
|
36
|
-
node = context.node
|
37
|
-
|
38
|
-
result_data = self._execute_construct(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_construct(self, node: Any, params: Dict, context: ExecutionContext) -> Dict:
|
48
|
-
"""Execute construct logic."""
|
49
|
-
# Implementation here
|
50
|
-
return {'result': 'CONSTRUCT executed', 'params': params}
|
@@ -1,50 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
#exonware/xwnode/src/exonware/xwnode/queries/executors/advanced/describe_executor.py
|
4
|
-
|
5
|
-
DESCRIBE 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 DescribeExecutor(AUniversalOperationExecutor):
|
20
|
-
"""
|
21
|
-
DESCRIBE operation executor.
|
22
|
-
|
23
|
-
Describes structure/schema
|
24
|
-
|
25
|
-
Capability: Universal
|
26
|
-
Operation Type: ADVANCED
|
27
|
-
"""
|
28
|
-
|
29
|
-
OPERATION_NAME = "DESCRIBE"
|
30
|
-
OPERATION_TYPE = OperationType.ADVANCED
|
31
|
-
SUPPORTED_NODE_TYPES = [] # Universal
|
32
|
-
|
33
|
-
def _do_execute(self, action: Action, context: ExecutionContext) -> ExecutionResult:
|
34
|
-
"""Execute DESCRIBE operation."""
|
35
|
-
params = action.params
|
36
|
-
node = context.node
|
37
|
-
|
38
|
-
result_data = self._execute_describe(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_describe(self, node: Any, params: Dict, context: ExecutionContext) -> Dict:
|
48
|
-
"""Execute describe logic."""
|
49
|
-
# Implementation here
|
50
|
-
return {'result': 'DESCRIBE executed', 'params': params}
|
@@ -1,50 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
#exonware/xwnode/src/exonware/xwnode/queries/executors/advanced/for_loop_executor.py
|
4
|
-
|
5
|
-
FOR 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 ForLoopExecutor(AUniversalOperationExecutor):
|
20
|
-
"""
|
21
|
-
FOR operation executor.
|
22
|
-
|
23
|
-
For loop construct
|
24
|
-
|
25
|
-
Capability: Universal
|
26
|
-
Operation Type: CONTROL_FLOW
|
27
|
-
"""
|
28
|
-
|
29
|
-
OPERATION_NAME = "FOR"
|
30
|
-
OPERATION_TYPE = OperationType.CONTROL_FLOW
|
31
|
-
SUPPORTED_NODE_TYPES = [] # Universal
|
32
|
-
|
33
|
-
def _do_execute(self, action: Action, context: ExecutionContext) -> ExecutionResult:
|
34
|
-
"""Execute FOR operation."""
|
35
|
-
params = action.params
|
36
|
-
node = context.node
|
37
|
-
|
38
|
-
result_data = self._execute_for_loop(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_for_loop(self, node: Any, params: Dict, context: ExecutionContext) -> Dict:
|
48
|
-
"""Execute for_loop logic."""
|
49
|
-
# Implementation here
|
50
|
-
return {'result': 'FOR executed', 'params': params}
|
@@ -1,50 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
#exonware/xwnode/src/exonware/xwnode/queries/executors/advanced/foreach_executor.py
|
4
|
-
|
5
|
-
FOREACH 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 ForeachExecutor(AUniversalOperationExecutor):
|
20
|
-
"""
|
21
|
-
FOREACH operation executor.
|
22
|
-
|
23
|
-
Iterates over collections
|
24
|
-
|
25
|
-
Capability: Universal
|
26
|
-
Operation Type: CONTROL_FLOW
|
27
|
-
"""
|
28
|
-
|
29
|
-
OPERATION_NAME = "FOREACH"
|
30
|
-
OPERATION_TYPE = OperationType.CONTROL_FLOW
|
31
|
-
SUPPORTED_NODE_TYPES = [] # Universal
|
32
|
-
|
33
|
-
def _do_execute(self, action: Action, context: ExecutionContext) -> ExecutionResult:
|
34
|
-
"""Execute FOREACH operation."""
|
35
|
-
params = action.params
|
36
|
-
node = context.node
|
37
|
-
|
38
|
-
result_data = self._execute_foreach(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_foreach(self, node: Any, params: Dict, context: ExecutionContext) -> Dict:
|
48
|
-
"""Execute foreach logic."""
|
49
|
-
# Implementation here
|
50
|
-
return {'result': 'FOREACH executed', 'params': params}
|
@@ -1,50 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
#exonware/xwnode/src/exonware/xwnode/queries/executors/advanced/join_executor.py
|
4
|
-
|
5
|
-
JOIN 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 JoinExecutor(AUniversalOperationExecutor):
|
20
|
-
"""
|
21
|
-
JOIN operation executor.
|
22
|
-
|
23
|
-
Joins data from multiple sources
|
24
|
-
|
25
|
-
Capability: Universal
|
26
|
-
Operation Type: JOINING
|
27
|
-
"""
|
28
|
-
|
29
|
-
OPERATION_NAME = "JOIN"
|
30
|
-
OPERATION_TYPE = OperationType.JOINING
|
31
|
-
SUPPORTED_NODE_TYPES = [] # Universal
|
32
|
-
|
33
|
-
def _do_execute(self, action: Action, context: ExecutionContext) -> ExecutionResult:
|
34
|
-
"""Execute JOIN operation."""
|
35
|
-
params = action.params
|
36
|
-
node = context.node
|
37
|
-
|
38
|
-
result_data = self._execute_join(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_join(self, node: Any, params: Dict, context: ExecutionContext) -> Dict:
|
48
|
-
"""Execute join logic."""
|
49
|
-
# Implementation here
|
50
|
-
return {'result': 'JOIN executed', 'params': params}
|
@@ -1,50 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
#exonware/xwnode/src/exonware/xwnode/queries/executors/advanced/let_executor.py
|
4
|
-
|
5
|
-
LET 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 LetExecutor(AUniversalOperationExecutor):
|
20
|
-
"""
|
21
|
-
LET operation executor.
|
22
|
-
|
23
|
-
Variable binding/assignment
|
24
|
-
|
25
|
-
Capability: Universal
|
26
|
-
Operation Type: CONTROL_FLOW
|
27
|
-
"""
|
28
|
-
|
29
|
-
OPERATION_NAME = "LET"
|
30
|
-
OPERATION_TYPE = OperationType.CONTROL_FLOW
|
31
|
-
SUPPORTED_NODE_TYPES = [] # Universal
|
32
|
-
|
33
|
-
def _do_execute(self, action: Action, context: ExecutionContext) -> ExecutionResult:
|
34
|
-
"""Execute LET operation."""
|
35
|
-
params = action.params
|
36
|
-
node = context.node
|
37
|
-
|
38
|
-
result_data = self._execute_let(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_let(self, node: Any, params: Dict, context: ExecutionContext) -> Dict:
|
48
|
-
"""Execute let logic."""
|
49
|
-
# Implementation here
|
50
|
-
return {'result': 'LET executed', 'params': params}
|