[ASTERIXDB-3308][COMP]: CH2 Q7 fails with internal error (with CBO on)
Change-Id: Icbdfc40090af6f7b4d7148c27a873d7e43830246
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18002
Integration-Tests: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: <murali.krishna@couchbase.com>
Reviewed-by: Vijay Sarathy <vijay.sarathy@couchbase.com>
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 c24dd7f..7ed23f7 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
@@ -1015,7 +1015,6 @@
// on top of that LeafInput. Modify the joinLeafInputsHashMap as well.
private void pushAssignsIntoLeafInputs(IPlanPrettyPrinter pp, List<ILogicalOperator> leafInputs,
List<AssignOperator> assignOps, List<ILogicalExpression> assignJoinExprs) throws AlgebricksException {
- int pos = 0;
for (ILogicalOperator lo : leafInputs) {
ILogicalOperator joinLeafInput = lo;
printPlan(pp, (AbstractLogicalOperator) joinLeafInput, "Incoming leaf Input");
@@ -1023,10 +1022,8 @@
if (assignNumber != -1) {
joinLeafInput = addAssignToLeafInput(joinLeafInput, assignOps.get(assignNumber));
printPlan(pp, (AbstractLogicalOperator) joinLeafInput, "Modified leaf Input");
- leafInputs.add(pos, joinLeafInput);
assignOps.remove(assignNumber);
}
- pos++;
}
}
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 e748e55..76f87b2 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
@@ -440,6 +440,7 @@
usedVars.clear();
ILogicalExpression expr = jc.joinCondition;
expr.getUsedVariables(usedVars);
+ List<AssignOperator> erase = new ArrayList<>();
for (AssignOperator aOp : assignOps) {
for (int i = 0; i < aOp.getVariables().size(); i++) {
if (usedVars.contains(aOp.getVariables().get(i))) {
@@ -447,9 +448,13 @@
aOp.getVariables().get(i), aOp.getExpressions().get(i).getValue());
jc.joinCondition = expr;
jc.selectivity = stats.getSelectivityFromAnnotationMain(jc.joinCondition, true);
+ erase.add(aOp);
}
}
}
+ for (int i = erase.size() - 1; i >= 0; i--) {
+ assignOps.remove(erase.get(i));
+ }
}
// now fill the datasetBits for each join condition.