>From Vijay Sarathy <[email protected]>: Vijay Sarathy has submitted this change. ( https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17786 )
Change subject: [ASTERIXDB-3162][COMP] Limit Costing ...................................................................... [ASTERIXDB-3162][COMP] Limit Costing Change-Id: Iff86329748a020ef8626d84e619c71463425c37f Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17786 Integration-Tests: Jenkins <[email protected]> Tested-by: Jenkins <[email protected]> Reviewed-by: Vijay Sarathy <[email protected]> --- 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 2 files changed, 44 insertions(+), 0 deletions(-) Approvals: Vijay Sarathy: Looks good to me, approved Jenkins: Verified; Verified 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 3ce4e9f..edc3251 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 @@ -74,6 +74,7 @@ import org.apache.hyracks.algebricks.core.algebra.operators.logical.AssignOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.DataSourceScanOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.InnerJoinOperator; +import org.apache.hyracks.algebricks.core.algebra.operators.logical.LimitOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.SelectOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.UnnestOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.visitors.VariableUtilities; @@ -817,6 +818,10 @@ int dataScanPlan; JoinNode[] jnArray = this.getJnArray(); + int limit = -1; + if (this.numberOfTerms == 1) { + jnArray[1].setLimitVal(findLimitValue(this.op)); + } for (int i = 1; i <= this.numberOfTerms; i++) { JoinNode jn = jnArray[i]; Index.SampleIndexDetails idxDetails = jn.getIdxDetails(); @@ -886,6 +891,23 @@ return this.numberOfTerms; } + private int findLimitValue(AbstractLogicalOperator oper) { + ILogicalOperator op = oper; + while (op.getOperatorTag() != LogicalOperatorTag.EMPTYTUPLESOURCE) { + if (op.getOperatorTag() == LogicalOperatorTag.LIMIT) { + LimitOperator lop = (LimitOperator) op; + ILogicalExpression expr = lop.getMaxObjects().getValue(); + if (expr != null) { + if (expr.getExpressionTag() != LogicalExpressionTag.VARIABLE) { // must be a constant + return Integer.parseInt(lop.getMaxObjects().getValue().toString()); + } + } + } + op = op.getInputs().get(0).getValue(); + } + return -1; + } + private boolean isPredicateCardinalityAnnotationPresent(ILogicalExpression leExpr) { if (leExpr.getExpressionTag().equals(LogicalExpressionTag.FUNCTION_CALL)) { AbstractFunctionCallExpression afcExpr = (AbstractFunctionCallExpression) leExpr; 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 4c49cb3..8afc26b 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 @@ -86,6 +86,7 @@ protected int highestDatasetId; private JoinNode rightJn; private JoinNode leftJn; + private int limitVal = -1; // only for single dataset joinNodes. private List<Integer> applicableJoinConditions; protected ILogicalOperator leafInput; private List<Pair<IAccessMethod, Index>> chosenIndexes; @@ -137,6 +138,14 @@ size = avgDocSize; } + public void setLimitVal(int val) { + limitVal = val; + } + + public int getLimitVal() { + return limitVal; + } + public double getInputSize() { return size; } -- To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17786 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: Iff86329748a020ef8626d84e619c71463425c37f Gerrit-Change-Number: 17786 Gerrit-PatchSet: 4 Gerrit-Owner: [email protected] Gerrit-Reviewer: Jenkins <[email protected]> Gerrit-Reviewer: Vijay Sarathy <[email protected]> Gerrit-MessageType: merged
