This is an automated email from the ASF dual-hosted git repository.

vsarathy1 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git


The following commit(s) were added to refs/heads/master by this push:
     new c6e1eb27a1 [ASTERIXDB-3351][COMP] More refactoring of CBO plan 
generation code.
c6e1eb27a1 is described below

commit c6e1eb27a10347b4f7fdfc5ad7d0a57efc0cf7de
Author: Vijay Sarathy <[email protected]>
AuthorDate: Sat Feb 3 13:31:15 2024 -0800

    [ASTERIXDB-3351][COMP] More refactoring of CBO plan generation code.
    
    Change-Id: Ic45928658c372ba975fdef5710adfea73949d718
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18152
    Integration-Tests: Jenkins <[email protected]>
    Tested-by: Jenkins <[email protected]>
    Reviewed-by: <[email protected]>
    Reviewed-by: Vijay Sarathy <[email protected]>
---
 .../asterix/optimizer/rules/cbo/JoinNode.java      | 43 +++++++++++-----------
 1 file changed, 21 insertions(+), 22 deletions(-)

diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java
index 872f6b1ad2..6d52706c5f 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java
@@ -1303,15 +1303,8 @@ public class JoinNode {
                         buildHashJoinPlan(rightJn, leftJn, rightPlan, 
leftPlan, hashJoinExpr, hintHashJoin, outerJoin);
             }
         }
-        if (hjPlan == PlanNode.NO_PLAN && commutativeHjPlan == 
PlanNode.NO_PLAN) {
-            // No hinted HJ plan, issue an inapplicable hint warning.
-            inapplicableHintWarning(hintHashJoin, newJoinConditions);
-            return false;
-        }
 
-        // hintHashJoin has been used, no warning to be issued.
-        joinEnum.joinHints.put(hintHashJoin, null);
-        return true;
+        return handleHints(hjPlan, commutativeHjPlan, hintHashJoin, 
newJoinConditions);
     }
 
     private boolean buildHintedBcastHJPlans(JoinNode leftJn, JoinNode rightJn, 
PlanNode leftPlan, PlanNode rightPlan,
@@ -1342,15 +1335,8 @@ public class JoinNode {
                         hintBroadcastHashJoin, outerJoin);
             }
         }
-        if (bcastHjPlan == PlanNode.NO_PLAN && commutativeBcastHjPlan == 
PlanNode.NO_PLAN) {
-            // No hinted BHJ plan, issue an inapplicable hint warning.
-            inapplicableHintWarning(hintBroadcastHashJoin, newJoinConditions);
-            return false;
-        }
 
-        // hintBroadcastHashJoin has been used, no warning to be issued.
-        joinEnum.joinHints.put(hintBroadcastHashJoin, null);
-        return true;
+        return handleHints(bcastHjPlan, commutativeBcastHjPlan, 
hintBroadcastHashJoin, newJoinConditions);
     }
 
     private boolean buildHintedNLJPlans(JoinNode leftJn, JoinNode rightJn, 
PlanNode leftPlan, PlanNode rightPlan,
@@ -1363,14 +1349,26 @@ public class JoinNode {
             commutativeNljPlan =
                     buildNLJoinPlan(rightJn, leftJn, rightPlan, leftPlan, 
nestedLoopJoinExpr, hintNLJoin, outerJoin);
         }
-        if (nljPlan == PlanNode.NO_PLAN && commutativeNljPlan == 
PlanNode.NO_PLAN) {
-            // No hinted NLJ plan, issue an inapplicable hint warning.
-            inapplicableHintWarning(hintNLJoin, newJoinConditions);
-            return false;
+
+        return handleHints(nljPlan, commutativeNljPlan, hintNLJoin, 
newJoinConditions);
+    }
+
+    private boolean handleHints(int plan, int commutativePlan, 
IExpressionAnnotation hint,
+            List<Integer> newJoinConditions) {
+        if (plan != PlanNode.NO_PLAN || commutativePlan != PlanNode.NO_PLAN) {
+            // The hint has been applied to produce a valid plan.
+            joinEnum.joinHints.put(hint, null);
+            return true;
         }
 
-        // hintNLJoin has been used, no warning to be issued.
-        joinEnum.joinHints.put(hintNLJoin, null);
+        // No hinted plan, issue an inapplicable hint warning if the hint
+        // has not been applied previously.
+        if (!(joinEnum.joinHints.containsKey(hint) && 
joinEnum.joinHints.get(hint) == null)) {
+            inapplicableHintWarning(hint, newJoinConditions);
+            return false; // This will trigger enumeration of all non-hinted 
plans.
+        }
+
+        // The hint has been applied previously, do not enumerate all 
non-hinted plans.
         return true;
     }
 
@@ -1398,6 +1396,7 @@ public class JoinNode {
     private void inapplicableHintWarning(IExpressionAnnotation hint, 
List<Integer> newJoinConditions) {
         HashJoinExpressionAnnotation hintHashJoin;
         BroadcastExpressionAnnotation hintBroadcastHashJoin;
+
         String param1 = "";
         String param2 = "";
 

Reply via email to