DRILL-1177: Check if setsafe() succeeded while performing HashAggregation

Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/6e244231
Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/6e244231
Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/6e244231

Branch: refs/heads/master
Commit: 6e2442314f81ccd0c1c3d6e7b6b15485f63b6608
Parents: 669bd04
Author: Mehant Baid <[email protected]>
Authored: Wed Jul 23 13:22:16 2014 -0700
Committer: Aditya Kishore <[email protected]>
Committed: Thu Jul 24 16:16:02 2014 -0700

----------------------------------------------------------------------
 .../apache/drill/exec/expr/fn/DrillAggFuncHolder.java  | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/6e244231/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/DrillAggFuncHolder.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/DrillAggFuncHolder.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/DrillAggFuncHolder.java
index efe3ee3..989e490 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/DrillAggFuncHolder.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/DrillAggFuncHolder.java
@@ -20,6 +20,8 @@ package org.apache.drill.exec.expr.fn;
 import java.util.List;
 import java.util.Map;
 
+import com.sun.codemodel.JType;
+import org.apache.drill.common.exceptions.DrillRuntimeException;
 import org.apache.drill.common.types.TypeProtos.DataMode;
 import org.apache.drill.common.types.Types;
 import org.apache.drill.exec.expr.ClassGenerator;
@@ -105,7 +107,7 @@ class DrillAggFuncHolder extends DrillFuncHolder{
         
         //Use for loop to initialize entries in the workspace vectors. 
         JForLoop forLoop = setupBlock._for();
-        JVar ivar = forLoop.init(g.getModel().INT, "i", JExpr.lit(0));
+        JVar ivar = forLoop.init(g.getModel().INT, "drill_internal_i", 
JExpr.lit(0));
         forLoop.test(ivar.lt(sizeVar));
         forLoop.update(ivar.assignPlus(JExpr.lit(1)));
         
@@ -211,6 +213,7 @@ class DrillAggFuncHolder extends DrillFuncHolder{
     
     Preconditions.checkNotNull(body);
     sub.directStatement(body);
+    JVar successVar = sub.decl(JType.parse(g.getModel(), "boolean"), 
"success", JExpr.lit(false));
     
     // reassign workspace variables back.
     for(int i =0; i < workspaceJVars.length; i++){
@@ -223,8 +226,12 @@ class DrillAggFuncHolder extends DrillFuncHolder{
       }else{
         setMeth = 
g.getWorkspaceVectors().get(workspaceVars[i]).invoke("getMutator").invoke("setSafe").arg(wsIndexVariable).arg(workspaceJVars[i].ref("value"));
       }
-       
-      sub.add(setMeth);                     
+
+      sub.assign(successVar, setMeth);
+
+      JClass drillRunTimeException = 
g.getModel().ref(DrillRuntimeException.class);
+
+      
sub._if(successVar.eq(JExpr.lit(false)))._then()._throw(JExpr._new(drillRunTimeException).arg(JExpr.lit("setsafe()
 failed; cannot set holder value into the vector")));
     }
     
   }

Reply via email to