You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by se...@apache.org on 2014/10/30 21:11:16 UTC

svn commit: r1635601 - in /hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql: exec/ optimizer/optiq/rules/ optimizer/optiq/translator/ udf/generic/

Author: sershe
Date: Thu Oct 30 20:11:15 2014
New Revision: 1635601

URL: http://svn.apache.org/r1635601
Log:
HIVE-8662 : CBO: tez_dml fails (Sergey Shelukhin, reviewed by Gunther Hagleitner)

Modified:
    hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java
    hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/rules/PartitionPruner.java
    hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/ExprNodeConverter.java
    hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/SqlFunctionConverter.java
    hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBaseNumeric.java

Modified: hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java
URL: http://svn.apache.org/viewvc/hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java?rev=1635601&r1=1635600&r2=1635601&view=diff
==============================================================================
--- hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java (original)
+++ hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java Thu Oct 30 20:11:15 2014
@@ -170,6 +170,8 @@ public final class FunctionRegistry {
   public static final String LAG_FUNC_NAME = "lag";
   public static final String LAST_VALUE_FUNC_NAME = "last_value";
 
+  public static final String UNARY_PLUS_FUNC_NAME = "positive";
+  public static final String UNARY_MINUS_FUNC_NAME = "negative";
 
   public static final String WINDOWING_TABLE_FUNCTION = "windowingtablefunction";
   private static final String NOOP_TABLE_FUNCTION = "noop";
@@ -252,8 +254,8 @@ public final class FunctionRegistry {
     registerGenericUDF("str_to_map", GenericUDFStringToMap.class);
     registerGenericUDF("translate", GenericUDFTranslate.class);
 
-    registerGenericUDF("positive", GenericUDFOPPositive.class);
-    registerGenericUDF("negative", GenericUDFOPNegative.class);
+    registerGenericUDF(UNARY_PLUS_FUNC_NAME, GenericUDFOPPositive.class);
+    registerGenericUDF(UNARY_MINUS_FUNC_NAME, GenericUDFOPNegative.class);
 
     registerUDF("day", UDFDayOfMonth.class, false);
     registerUDF("dayofmonth", UDFDayOfMonth.class, false);

Modified: hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/rules/PartitionPruner.java
URL: http://svn.apache.org/viewvc/hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/rules/PartitionPruner.java?rev=1635601&r1=1635600&r2=1635601&view=diff
==============================================================================
--- hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/rules/PartitionPruner.java (original)
+++ hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/rules/PartitionPruner.java Thu Oct 30 20:11:15 2014
@@ -108,7 +108,7 @@ public class PartitionPruner {
       boolean argsPruned = false;
 
       GenericUDF hiveUDF = SqlFunctionConverter.getHiveUDF(call.getOperator(),
-          call.getType());
+          call.getType(), call.operands.size());
       if (hiveUDF != null &&
           !FunctionRegistry.isDeterministic(hiveUDF)) {
         return null;

Modified: hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/ExprNodeConverter.java
URL: http://svn.apache.org/viewvc/hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/ExprNodeConverter.java?rev=1635601&r1=1635600&r2=1635601&view=diff
==============================================================================
--- hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/ExprNodeConverter.java (original)
+++ hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/ExprNodeConverter.java Thu Oct 30 20:11:15 2014
@@ -89,17 +89,17 @@ public class ExprNodeConverter extends R
       ArrayList<ExprNodeDesc> tmpExprArgs = new ArrayList<ExprNodeDesc>();
       tmpExprArgs.addAll(args.subList(0, 2));
       gfDesc = new ExprNodeGenericFuncDesc(TypeConverter.convert(call.getType()),
-          SqlFunctionConverter.getHiveUDF(call.getOperator(), call.getType()), tmpExprArgs);
+          SqlFunctionConverter.getHiveUDF(call.getOperator(), call.getType(), 2), tmpExprArgs);
       for (int i = 2; i < call.operands.size(); i++) {
         tmpExprArgs = new ArrayList<ExprNodeDesc>();
         tmpExprArgs.add(gfDesc);
         tmpExprArgs.add(args.get(i));
         gfDesc = new ExprNodeGenericFuncDesc(TypeConverter.convert(call.getType()),
-            SqlFunctionConverter.getHiveUDF(call.getOperator(), call.getType()), tmpExprArgs);
+            SqlFunctionConverter.getHiveUDF(call.getOperator(), call.getType(), 2), tmpExprArgs);
       }
     } else {
       gfDesc = new ExprNodeGenericFuncDesc(TypeConverter.convert(call.getType()),
-          SqlFunctionConverter.getHiveUDF(call.getOperator(), call.getType()), args);
+          SqlFunctionConverter.getHiveUDF(call.getOperator(), call.getType(), args.size()), args);
     }
 
     return gfDesc;

Modified: hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/SqlFunctionConverter.java
URL: http://svn.apache.org/viewvc/hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/SqlFunctionConverter.java?rev=1635601&r1=1635600&r2=1635601&view=diff
==============================================================================
--- hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/SqlFunctionConverter.java (original)
+++ hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/translator/SqlFunctionConverter.java Thu Oct 30 20:11:15 2014
@@ -98,10 +98,19 @@ public class SqlFunctionConverter {
     return getOptiqFn(name, optiqArgTypes, retType);
   }
 
-  public static GenericUDF getHiveUDF(SqlOperator op, RelDataType dt) {
+  public static GenericUDF getHiveUDF(SqlOperator op, RelDataType dt, int argsLength) {
     String name = reverseOperatorMap.get(op);
-    if (name == null)
+    if (name == null) {
       name = op.getName();
+    }
+    // Make sure we handle unary + and - correctly.
+    if (argsLength == 1) {
+      if (name == "+") {
+        name = FunctionRegistry.UNARY_PLUS_FUNC_NAME;
+      } else if (name == "-") {
+        name = FunctionRegistry.UNARY_MINUS_FUNC_NAME;
+      }
+    }
     FunctionInfo hFn = name != null ? FunctionRegistry.getFunctionInfo(name) : null;
     if (hFn == null)
       hFn = handleExplicitCast(op, dt);

Modified: hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBaseNumeric.java
URL: http://svn.apache.org/viewvc/hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBaseNumeric.java?rev=1635601&r1=1635600&r2=1635601&view=diff
==============================================================================
--- hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBaseNumeric.java (original)
+++ hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBaseNumeric.java Thu Oct 30 20:11:15 2014
@@ -294,7 +294,7 @@ public abstract class GenericUDFBaseNume
 
   @Override
   public String getDisplayString(String[] children) {
-    assert (children.length == 2);
+    assert (children.length == 2) : opDisplayName + " with " + children.length + " children";
     return "(" + children[0] + " " + opDisplayName + " " + children[1] + ")";
   }