>From Preetham Poluparthi <[email protected]>: Preetham Poluparthi has uploaded this change for review. ( https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/21406?usp=email )
Change subject: [ASTERIXDB-3606][COMP]: Refactor CBO into registry-based, class-per-concern design ...................................................................... [ASTERIXDB-3606][COMP]: Refactor CBO into registry-based, class-per-concern design - user model changes: no - storage format changes: no - interface changes: no Details: Combines the phase-wise CBO refactors (previously staged on branches cbo_refac_2.0 through cbo_refac_5.0) into a single change on top of the already-merged plan-representation refactor: - Parsing IR: phase-one parsing moved out of EnumerateJoinsRule into RawPlanBuilder producing a typed RawPlanTree (AbstractRawPlanNode, JoinRawPlanNode, ScanRawPlanNode, LeafDataset), separating raw plan capture from optimization. - Virtual plan construction: VirtualOpBuilder / VirtualPlanBuilder / VirtualPlanTree / VirtualOperatorRegistry build the CBO's working plan (including unnest-to-fake-LOJ modeling) as registry-tracked virtual structures instead of mutating the incoming plan in place. Leaf inputs become AbstractVirtualLeafInput / DatasetVirtualLeafInput / UnnestVirtualLeafInput; UnnestLeafInput becomes UnnestArray. - Join conditions: the flag-based JoinCondition is replaced by a typed hierarchy (AbstractJoinCondition, AbstractBinaryJoinCondition, EquiJoinCondition, NonEquiBinaryJoinCondition, NonBinaryJoinCondition) owned by JoinConditionRegistry; internal-edge assign tracking moves to ExtraAssigns. - Join node registry: the raw jnArray in JoinEnum is replaced by JoinNodeRegistry, which owns the DP table and provides subset-, leaf-input- and index-based lookups. Completes the previously WIP migration: all remaining jnArray/getJnArray/findJoinNodeIndexByName usages in JoinEnum, JoinNode and Stats now go through the registry. Carried forward from master while merging: - Skip-index hint handling in disjunctive predicates (ASTERIXDB-3750). - Join condition handling for bushy plans: getNewJoinConditionsOnly() keeps conditions spanning both child subsets instead of assuming zigzag-only trees. - Disjunction support in index lookups (ASTERIXDB-3709). Adds the extra-assigns runtime test. Ext-ref: MB-66641 Co-Authored-By: Claude Fable 5 <[email protected]> Change-Id: Ife1f88cdef5c6cd603cc4a60e1f194d221d6f32b --- M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/AttachCompileTimeRangeMapRule.java A asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/AbstractBinaryJoinCondition.java A asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/AbstractJoinCondition.java C asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/AbstractRawPlanNode.java R asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/AbstractVirtualLeafInput.java M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/DatasetRegistry.java A asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/DatasetVirtualLeafInput.java M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java A asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EquiJoinCondition.java A asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/ExtraAssigns.java D asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinCondition.java A asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinConditionRegistry.java M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinEnum.java M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java A asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNodeRegistry.java M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinPlanNode.java A asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinRawPlanNode.java C asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/LeafDataset.java R asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/NonBinaryJoinCondition.java C asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/NonEquiBinaryJoinCondition.java M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/OperatorUtils.java A asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/RawPlanBuilder.java A asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/RawPlanTree.java M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/ScanPlanNode.java A asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/ScanRawPlanNode.java M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/Stats.java R asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/UnnestArray.java C asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/UnnestVirtualLeafInput.java A asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/VirtualOpBuilder.java C asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/VirtualOperatorRegistry.java A asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/VirtualPlanBuilder.java A asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/VirtualPlanTree.java M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/indexadvisor/AbstractAdvisorPlanNode.java R asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/indexadvisor/AdvPlanStateTree.java M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/indexadvisor/AdvisorJoinPlanNode.java M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/indexadvisor/AdvisorPlanParser.java M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/indexadvisor/AdvisorScanPlanNode.java M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/indexadvisor/FakeIndexProvider.java C asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cbo-join/extra-assigns/extra-assigns.1.ddl.sqlpp C asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cbo-join/extra-assigns/extra-assigns.2.update.sqlpp C asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/cbo-join/extra-assigns/extra-assigns.4.query.sqlpp A asterixdb/asterix-app/src/test/resources/runtimets/results/cbo-join/extra-assigns/extra-assigns.4.adm 42 files changed, 2,454 insertions(+), 1,673 deletions(-) git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb refs/changes/06/21406/1 -- To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/21406?usp=email To unsubscribe, or for help writing mail filters, visit https://asterix-gerrit.ics.uci.edu/settings?usp=email Gerrit-MessageType: newchange Gerrit-Project: asterixdb Gerrit-Branch: master Gerrit-Change-Id: Ife1f88cdef5c6cd603cc4a60e1f194d221d6f32b Gerrit-Change-Number: 21406 Gerrit-PatchSet: 1 Gerrit-Owner: Preetham Poluparthi <[email protected]>
