>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

Reply via email to