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);