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] + ")";
}