You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by rh...@apache.org on 2014/09/11 02:35:44 UTC
svn commit: r1624172 - in
/hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql:
optimizer/optiq/translator/SqlFunctionConverter.java
parse/SemanticAnalyzer.java
Author: rhbutani
Date: Thu Sep 11 00:35:43 2014
New Revision: 1624172
URL: http://svn.apache.org/r1624172
Log:
HIVE-8046 CBO: fix issues with Windowing queries (Harish Butani via John Pullokkaran)
Modified:
hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/SqlFunctionConverter.java
hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
Modified: hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/SqlFunctionConverter.java
URL: http://svn.apache.org/viewvc/hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/SqlFunctionConverter.java?rev=1624172&r1=1624171&r2=1624172&view=diff
==============================================================================
--- hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/SqlFunctionConverter.java (original)
+++ hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/SqlFunctionConverter.java Thu Sep 11 00:35:43 2014
@@ -143,6 +143,12 @@ public class SqlFunctionConverter {
} else if (op.kind == SqlKind.PLUS_PREFIX) {
node = (ASTNode) ParseDriver.adaptor.create(HiveParser.PLUS, "PLUS");
} else {
+ if (op.getName().toUpperCase()
+ .equals(SqlStdOperatorTable.COUNT.getName())
+ && children.size() == 0) {
+ node = (ASTNode) ParseDriver.adaptor.create(
+ HiveParser.TOK_FUNCTIONSTAR, "TOK_FUNCTIONSTAR");
+ }
node.addChild((ASTNode) ParseDriver.adaptor.create(HiveParser.Identifier, op.getName()));
}
}
Modified: hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
URL: http://svn.apache.org/viewvc/hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java?rev=1624172&r1=1624171&r2=1624172&view=diff
==============================================================================
--- hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (original)
+++ hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java Thu Sep 11 00:35:43 2014
@@ -216,6 +216,7 @@ import org.apache.hadoop.hive.serde2.obj
import org.apache.hadoop.hive.serde2.objectinspector.StandardStructObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.StructField;
import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector;
+import org.apache.hadoop.hive.serde2.typeinfo.ListTypeInfo;
import org.apache.hadoop.hive.serde2.typeinfo.PrimitiveTypeInfo;
import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo;
import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoFactory;
@@ -12805,13 +12806,26 @@ public class SemanticAnalyzer extends Ba
// 3.3.1 Get UDAF Evaluator
Mode amode = groupByDescModeToUDAFMode(GroupByDesc.Mode.COMPLETE, isDistinct);
- GenericUDAFEvaluator genericUDAFEvaluator = getGenericUDAFEvaluator(aggName,
+
+ GenericUDAFEvaluator genericUDAFEvaluator = null;
+ if (aggName.toLowerCase().equals(FunctionRegistry.LEAD_FUNC_NAME)
+ || aggName.toLowerCase().equals(FunctionRegistry.LAG_FUNC_NAME)) {
+ ArrayList<ObjectInspector> originalParameterTypeInfos =
+ getWritableObjectInspector(aggParameters);
+ genericUDAFEvaluator =
+ FunctionRegistry.getGenericWindowingEvaluator(aggName,
+ originalParameterTypeInfos, isDistinct, isAllColumns);
+ GenericUDAFInfo udaf = getGenericUDAFInfo(genericUDAFEvaluator, amode, aggParameters);
+ udafRetType = ((ListTypeInfo)udaf.returnType).getListElementTypeInfo();
+ } else {
+ genericUDAFEvaluator = getGenericUDAFEvaluator(aggName,
aggParameters, aggAst, isDistinct, isAllColumns);
- assert (genericUDAFEvaluator != null);
+ assert (genericUDAFEvaluator != null);
- // 3.3.2 Get UDAF Info using UDAF Evaluator
- GenericUDAFInfo udaf = getGenericUDAFInfo(genericUDAFEvaluator, amode, aggParameters);
- udafRetType = udaf.returnType;
+ // 3.3.2 Get UDAF Info using UDAF Evaluator
+ GenericUDAFInfo udaf = getGenericUDAFInfo(genericUDAFEvaluator, amode, aggParameters);
+ udafRetType = udaf.returnType;
+ }
} catch (Exception e) {
LOG.debug("CBO: Couldn't Obtain UDAF evaluators for " + aggName
+ ", trying to translate to GenericUDF");