>From <murali.kris...@couchbase.com>:

murali.kris...@couchbase.com has uploaded this change for review. ( 
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19943 )


Change subject: [ASTERIXDB-3571][COMP] Infer Selection predicates from join 
predicates
......................................................................

[ASTERIXDB-3571][COMP] Infer Selection predicates from join predicates

Change-Id: I7766e107bfadd915b6d760fc1ab74a6651c49db6
---
M 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/Stats.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
3 files changed, 16 insertions(+), 9 deletions(-)



  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb 
refs/changes/43/19943/1

diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinEnum.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinEnum.java
index 73be298..af096e1 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinEnum.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinEnum.java
@@ -1445,6 +1445,11 @@
         ILogicalOperator child = parent.getInputs().get(0).getValue();
         parent.getInputs().get(0).setValue(newSelOp);
         newSelOp.getInputs().add(new MutableObject<>(child));
+        // Add the selectivity annotation with selectivity 1.0;
+        // Note the actual cardinality will be different; but all join 
cardinalities should be ok.
+        PredicateCardinalityAnnotation anno = new 
PredicateCardinalityAnnotation(1.0);
+        AbstractFunctionCallExpression afce = (AbstractFunctionCallExpression) 
newSelOp.getCondition().getValue();
+        afce.putAnnotation(anno);
         optCtx.computeAndSetTypeEnvironmentForOperator(newSelOp);
     }

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 3451966..5cbb6f8 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
@@ -371,6 +371,7 @@

         // There are predicates here. So skip the predicates and get the 
original dataset card.
         // Now apply all the predicates and get the card after all predicates 
are applied.
+        // We call the sampling query even if a selectivity hint was provided 
because we have to get the lengths of the variables.
         result = 
joinEnum.getStatsHandle().runSamplingQueryProjection(joinEnum.optCtx, 
leafInput, jnArrayIndex,
                 primaryKey);
         double predicateCardinalityFromSample = 
joinEnum.getStatsHandle().findPredicateCardinality(result, true);
diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/Stats.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/Stats.java
index 18bc53f..ab57d3f 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/Stats.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/Stats.java
@@ -153,15 +153,7 @@
                 return 1.0;
             }
             double productivity = anno.getJoinProductivity();
-            if (productivity <= 0) {
-                IWarningCollector warningCollector = 
joinEnum.optCtx.getWarningCollector();
-                if (warningCollector.shouldWarn()) {
-                    
warningCollector.warn(Warning.of(joinExpr.getSourceLocation(), 
ErrorCode.INAPPLICABLE_HINT,
-                            "productivity",
-                            "Productivity specified: " + productivity + ", has 
to be a decimal value greater than 0"));
-                }
-                return 1.0;
-            }
+
             if (leftIndex == idx1) {
                 return productivity / card2;
             } else {

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

Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Change-Id: I7766e107bfadd915b6d760fc1ab74a6651c49db6
Gerrit-Change-Number: 19943
Gerrit-PatchSet: 1
Gerrit-Owner: murali.kris...@couchbase.com
Gerrit-MessageType: newchange

Reply via email to