>From Vijay Sarathy <[email protected]>:

Vijay Sarathy has submitted this change. ( 
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17408 )

Change subject: [ASTERIXDB-3125][COMP] Select operator has zero cost and 
cardinality
......................................................................

[ASTERIXDB-3125][COMP] Select operator has zero cost and cardinality

[ASTERIXDB-3126][COMP] CBO: hint productivity NPE if missing cardinality
estimate on collection

- user model changes: no
- storage format changes: no
- interface changes: no


Change-Id: I7cbff25b14346ca8eca5baa7e0fe8fb1da72f270
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17408
Reviewed-by: Ali Alsuliman <[email protected]>
Tested-by: Ali Alsuliman <[email protected]>
Tested-by: Jenkins <[email protected]>
Integration-Tests: Ali Alsuliman <[email protected]>
---
M asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
M 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java
2 files changed, 49 insertions(+), 20 deletions(-)

Approvals:
  Ali Alsuliman: Looks good to me, approved; Verified; Verified
  Jenkins: Verified
  Anon. E. Moose #1000171:




diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java
index 183eb46..cee555e 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java
@@ -434,8 +434,9 @@
             HashMap<EmptyTupleSourceOperator, ILogicalOperator> 
joinLeafInputsHashMap) {
         ILogicalOperator leftInput = 
joinLeafInputsHashMap.get(plan.getEmptyTupleSourceOp());
         skipAllIndexes(plan, leftInput);
-        if (leftInput.getOperatorTag() == LogicalOperatorTag.SELECT) {
-            addCardCostAnnotations(leftInput, plan);
+        ILogicalOperator selOp = findSelectOrDataScan(leftInput);
+        if (selOp != null) {
+            addCardCostAnnotations(selOp, plan);
         }
         addCardCostAnnotations(findDataSourceScanOperator(leftInput), plan);
     }
@@ -493,8 +494,9 @@
             // leaf
             ILogicalOperator leftInput = 
joinLeafInputsHashMap.get(leftPlan.getEmptyTupleSourceOp());
             skipAllIndexes(leftPlan, leftInput);
-            if (leftInput.getOperatorTag() == LogicalOperatorTag.SELECT) {
-                addCardCostAnnotations(leftInput, leftPlan);
+            ILogicalOperator selOp = findSelectOrDataScan(leftInput);
+            if (selOp != null) {
+                addCardCostAnnotations(selOp, leftPlan);
             }
             joinOp.getInputs().get(0).setValue(leftInput);
             addCardCostAnnotations(findDataSourceScanOperator(leftInput), 
leftPlan);
@@ -510,8 +512,9 @@
             // leaf
             ILogicalOperator rightInput = 
joinLeafInputsHashMap.get(rightPlan.getEmptyTupleSourceOp());
             skipAllIndexes(rightPlan, rightInput);
-            if (rightInput.getOperatorTag() == LogicalOperatorTag.SELECT) {
-                addCardCostAnnotations(rightInput, rightPlan);
+            ILogicalOperator selOp = findSelectOrDataScan(rightInput);
+            if (selOp != null) {
+                addCardCostAnnotations(selOp, rightPlan);
             }
             joinOp.getInputs().get(1).setValue(rightInput);
             addCardCostAnnotations(findDataSourceScanOperator(rightInput), 
rightPlan);
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj 
b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
index e03a3e3..98fc560 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
+++ b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
@@ -690,21 +690,25 @@
       try {
         switch (hintToken.hint) {
           case SINGLE_DATASET_PREDICATE_SELECTIVITY_HINT:
-            selectivity = 1.0; // uninitialized
-            if (hintToken.hintParams != null) {
-            Matcher mat = lessThanOnePat.matcher(hintToken.hintParams);
-            if (mat.find()) {
-                selectivity = Double.parseDouble (mat.group());
-                }
+            if (hintToken.hintParams == null) {
+                throw new SqlppParseException(getSourceLocation(hintToken), 
"Expected selectivity value");
             }
-
-            return new PredicateCardinalityAnnotation(selectivity);
+            else {
+                selectivity = 1.0; // uninitialized
+                Matcher mat = lessThanOnePat.matcher(hintToken.hintParams);
+                if (mat.find()) {
+                    selectivity = Double.parseDouble (mat.group());
+                }
+                return new PredicateCardinalityAnnotation(selectivity);
+            }
           case JOIN_PREDICATE_PRODUCTIVITY_HINT:
-            productivity = 1.0; // uninitialized
-            String leftSideDataSet = null;
-            if (hintToken.hintParams != null) {
+            if (hintToken.hintParams == null) {
+                throw new SqlppParseException(getSourceLocation(hintToken), 
"Expected productivity value");
+            }
+            else {
+                productivity = 1.0; // uninitialized
+                String leftSideDataSet = null;
                 Matcher StringNum = stringNumber.matcher(hintToken.hintParams);
-
                 if (StringNum.find()) {
                     String matchedGroup = StringNum.group();
                     Pattern var = Pattern.compile("[a-zA-Z]\\w*"); // any word 
character [a-zA-Z_0-9]
@@ -715,9 +719,9 @@
                     if (numMat.find())
                         productivity = Double.parseDouble (numMat.group());
                 }
+                // attach hint to global scope
+                return new JoinProductivityAnnotation (productivity, 
leftSideDataSet);
             }
-            // attach hint to global scope
-            return new JoinProductivityAnnotation (productivity, 
leftSideDataSet);
           case HASH_BROADCAST_JOIN_HINT:
             if (hintToken.hintParams == null) {
               return new 
BroadcastExpressionAnnotation(BroadcastExpressionAnnotation.BroadcastSide.RIGHT);

--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17408
To unsubscribe, or for help writing mail filters, visit 
https://asterix-gerrit.ics.uci.edu/settings

Gerrit-Project: asterixdb
Gerrit-Branch: neo
Gerrit-Change-Id: I7cbff25b14346ca8eca5baa7e0fe8fb1da72f270
Gerrit-Change-Number: 17408
Gerrit-PatchSet: 5
Gerrit-Owner: Vijay Sarathy <[email protected]>
Gerrit-Reviewer: Ali Alsuliman <[email protected]>
Gerrit-Reviewer: Anon. E. Moose #1000171
Gerrit-Reviewer: Jenkins <[email protected]>
Gerrit-Reviewer: Vijay Sarathy <[email protected]>
Gerrit-MessageType: merged

Reply via email to