>From Peeyush Gupta <[email protected]>:
Peeyush Gupta has uploaded this change for review. (
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18584 )
Change subject: WIP : fix for left outer join condition x.col1 = x.col2
......................................................................
WIP : fix for left outer join condition x.col1 = x.col2
Change-Id: I520f8a7780dfb945d219e3842de7fc47496add83
---
M
hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/util/JoinUtils.java
M
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java
2 files changed, 25 insertions(+), 1 deletion(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/84/18584/1
diff --git
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java
index 302d4e0..fa02382 100644
---
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java
+++
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java
@@ -128,6 +128,7 @@
import
org.apache.hyracks.algebricks.core.algebra.operators.logical.DistinctOperator;
import
org.apache.hyracks.algebricks.core.algebra.operators.logical.EmptyTupleSourceOperator;
import
org.apache.hyracks.algebricks.core.algebra.operators.logical.InnerJoinOperator;
+import
org.apache.hyracks.algebricks.core.algebra.operators.logical.LeftOuterJoinOperator;
import
org.apache.hyracks.algebricks.core.algebra.operators.logical.LeftOuterUnnestOperator;
import
org.apache.hyracks.algebricks.core.algebra.operators.logical.NestedTupleSourceOperator;
import
org.apache.hyracks.algebricks.core.algebra.operators.logical.OrderOperator;
@@ -370,6 +371,20 @@
filter.getInputs().add(conditionExprOpPair.second);
filter.setSourceLocation(conditionExprOpPair.first.getSourceLocation());
return new Pair<>(filter, rightBranch.second);
+ } else if (joinClause.getJoinType() == JoinType.LEFTOUTER
+ && !hasFreeVariables(joinClause.getRightExpression())) {
+ EmptyTupleSourceOperator ets = new EmptyTupleSourceOperator();
+ ets.setSourceLocation(joinClause.getSourceLocation());
+ Mutable<ILogicalOperator> rightInputRef = new MutableObject<>(ets);
+ Pair<ILogicalOperator, LogicalVariable> rightBranch =
+ generateUnnestForBinaryCorrelateRightBranch(joinClause,
rightInputRef, false, null);
+ Pair<ILogicalExpression, Mutable<ILogicalOperator>>
conditionExprOpPair = langExprToAlgExpression(
+ joinClause.getConditionExpression(), new
MutableObject<>(rightBranch.first));
+ AbstractBinaryJoinOperator joinOperator =
+ new LeftOuterJoinOperator(new
MutableObject<>(conditionExprOpPair.first), leftInputRef,
+ new MutableObject<>(rightBranch.first),
ConstantExpression.MISSING.getValue());
+ joinOperator.setSourceLocation(sourceLoc);
+ return new Pair<>(joinOperator, rightBranch.second);
} else if (joinClause.getJoinType() == JoinType.INNER ||
joinClause.getJoinType() == JoinType.LEFTOUTER) {
// Creates a subplan operator.
SubplanOperator subplanOp = new SubplanOperator();
diff --git
a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/util/JoinUtils.java
b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/util/JoinUtils.java
index 49ff483..fbf2103 100644
---
a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/util/JoinUtils.java
+++
b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/util/JoinUtils.java
@@ -211,7 +211,7 @@
} else {
return false;
}
- return true;
+ return !outLeftFields.isEmpty() &&
!outRightFields.isEmpty();
}
}
default:
--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18584
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: I520f8a7780dfb945d219e3842de7fc47496add83
Gerrit-Change-Number: 18584
Gerrit-PatchSet: 1
Gerrit-Owner: Peeyush Gupta <[email protected]>
Gerrit-MessageType: newchange