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