You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ha...@apache.org on 2015/01/13 18:31:55 UTC

svn commit: r1651419 - in /hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec: ExprNodeEvaluatorFactory.java SelectOperator.java

Author: hashutosh
Date: Tue Jan 13 17:31:55 2015
New Revision: 1651419

URL: http://svn.apache.org/r1651419
Log:
HIVE-7550 : Extend cached evaluation to multiple expressions (Navis via Ashutosh Chauhan)

Modified:
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/ExprNodeEvaluatorFactory.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/SelectOperator.java

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/ExprNodeEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/ExprNodeEvaluatorFactory.java?rev=1651419&r1=1651418&r2=1651419&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/ExprNodeEvaluatorFactory.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/ExprNodeEvaluatorFactory.java Tue Jan 13 17:31:55 2015
@@ -64,6 +64,20 @@ public final class ExprNodeEvaluatorFact
         "Cannot find ExprNodeEvaluator for the exprNodeDesc = " + desc);
   }
 
+  public static ExprNodeEvaluator[] toCachedEvals(ExprNodeEvaluator[] evals) {
+    EvaluatorContext context = new EvaluatorContext();
+    for (int i = 0; i < evals.length; i++) {
+      if (evals[i] instanceof ExprNodeGenericFuncEvaluator) {
+        iterate(evals[i], context);
+        if (context.hasReference) {
+          evals[i] = new ExprNodeEvaluatorHead(evals[i]);
+          context.hasReference = false;
+        }
+      }
+    }
+    return evals;
+  }
+
   /**
    * Should be called before eval is initialized
    */

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/SelectOperator.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/SelectOperator.java?rev=1651419&r1=1651418&r2=1651419&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/SelectOperator.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/SelectOperator.java Tue Jan 13 17:31:55 2015
@@ -28,7 +28,6 @@ import org.apache.hadoop.hive.ql.plan.Ex
 import org.apache.hadoop.hive.ql.plan.ExprNodeDesc;
 import org.apache.hadoop.hive.ql.plan.SelectDesc;
 import org.apache.hadoop.hive.ql.plan.api.OperatorType;
-import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector;
 
 /**
  * Select operator implementation.
@@ -55,12 +54,12 @@ public class SelectOperator extends Oper
     for (int i = 0; i < colList.size(); i++) {
       assert (colList.get(i) != null);
       eval[i] = ExprNodeEvaluatorFactory.get(colList.get(i));
-      if (HiveConf.getBoolVar(hconf, HiveConf.ConfVars.HIVEEXPREVALUATIONCACHE)) {
-        eval[i] = ExprNodeEvaluatorFactory.toCachedEval(eval[i]);
-      }
+    }
+    if (HiveConf.getBoolVar(hconf, HiveConf.ConfVars.HIVEEXPREVALUATIONCACHE)) {
+      eval = ExprNodeEvaluatorFactory.toCachedEvals(eval);
     }
     output = new Object[eval.length];
-    LOG.info("SELECT " + ((StructObjectInspector) inputObjInspectors[0]).getTypeName());
+    LOG.info("SELECT " + inputObjInspectors[0].getTypeName());
     outputObjInspector = initEvaluatorsAndReturnStruct(eval, conf.getOutputColumnNames(),
         inputObjInspectors[0]);
     initializeChildren(hconf);