>From Ali Alsuliman <[email protected]>:
Ali Alsuliman has uploaded this change for review. (
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19473 )
Change subject: WIP: eq hash join
......................................................................
WIP: eq hash join
Change-Id: I5ca76afb607c725beaf68272e917d0566000a6ac
---
M
hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/util/JoinUtils.java
1 file changed, 35 insertions(+), 9 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/73/19473/1
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..9d1c4af 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
@@ -173,27 +173,38 @@
private static boolean isHashJoinCondition(ILogicalExpression e,
Collection<LogicalVariable> inLeftAll,
Collection<LogicalVariable> inRightAll,
Collection<LogicalVariable> outLeftFields,
Collection<LogicalVariable> outRightFields) {
+ return isValidHashJoinExpr(e, inLeftAll, inRightAll, outLeftFields,
outRightFields) == Boolean.TRUE;
+ }
+
+ private static Boolean isValidHashJoinExpr(ILogicalExpression e,
Collection<LogicalVariable> inLeftAll,
+ Collection<LogicalVariable> inRightAll,
Collection<LogicalVariable> outLeftFields,
+ Collection<LogicalVariable> outRightFields) {
switch (e.getExpressionTag()) {
case FUNCTION_CALL: {
AbstractFunctionCallExpression fexp =
(AbstractFunctionCallExpression) e;
FunctionIdentifier fi = fexp.getFunctionIdentifier();
if (fi.equals(AlgebricksBuiltinFunctions.AND)) {
+ Boolean foundValidEQ = null;
for (Mutable<ILogicalExpression> a : fexp.getArguments()) {
- if (!isHashJoinCondition(a.getValue(), inLeftAll,
inRightAll, outLeftFields, outRightFields)) {
- return false;
+ Boolean validHashJoinExpr =
+ isValidHashJoinExpr(a.getValue(), inLeftAll,
inRightAll, outLeftFields, outRightFields);
+ if (validHashJoinExpr == Boolean.FALSE) {
+ return Boolean.FALSE;
+ } else if (validHashJoinExpr == Boolean.TRUE) {
+ foundValidEQ = Boolean.TRUE;
}
}
- return true;
+ return foundValidEQ;
} else {
ComparisonKind ck =
AlgebricksBuiltinFunctions.getComparisonType(fi);
if (ck != ComparisonKind.EQ) {
- return false;
+ return null;
}
ILogicalExpression opLeft =
fexp.getArguments().get(0).getValue();
ILogicalExpression opRight =
fexp.getArguments().get(1).getValue();
if (opLeft.getExpressionTag() !=
LogicalExpressionTag.VARIABLE
|| opRight.getExpressionTag() !=
LogicalExpressionTag.VARIABLE) {
- return false;
+ return Boolean.FALSE;
}
LogicalVariable var1 = ((VariableReferenceExpression)
opLeft).getVariableReference();
if (inLeftAll.contains(var1) &&
!outLeftFields.contains(var1)) {
@@ -201,7 +212,7 @@
} else if (inRightAll.contains(var1) &&
!outRightFields.contains(var1)) {
outRightFields.add(var1);
} else {
- return false;
+ return Boolean.FALSE;
}
LogicalVariable var2 = ((VariableReferenceExpression)
opRight).getVariableReference();
if (inLeftAll.contains(var2) &&
!outLeftFields.contains(var2)) {
@@ -209,13 +220,13 @@
} else if (inRightAll.contains(var2) &&
!outRightFields.contains(var2)) {
outRightFields.add(var2);
} else {
- return false;
+ return Boolean.FALSE;
}
- return true;
+ return Boolean.TRUE;
}
}
default:
- return false;
+ return null;
}
}
@@ -329,4 +340,10 @@
}
}
}
+
+ private enum JoinExpr {
+ VALID_EQ,
+ INVALID_EQ,
+ INVALID_EXPR;
+ }
}
--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19473
To unsubscribe, or for help writing mail filters, visit
https://asterix-gerrit.ics.uci.edu/settings
Gerrit-Project: asterixdb
Gerrit-Branch: ionic
Gerrit-Change-Id: I5ca76afb607c725beaf68272e917d0566000a6ac
Gerrit-Change-Number: 19473
Gerrit-PatchSet: 1
Gerrit-Owner: Ali Alsuliman <[email protected]>
Gerrit-MessageType: newchange