You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by na...@apache.org on 2011/07/01 03:53:07 UTC
svn commit: r1141777 -
/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBaseCompare.java
Author: namit
Date: Fri Jul 1 01:53:07 2011
New Revision: 1141777
URL: http://svn.apache.org/viewvc?rev=1141777&view=rev
Log:
HIVE-2248 Comparison Operators convert number types to common type instead of
double if necessary (Siying Dong via namit)
Modified:
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBaseCompare.java
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBaseCompare.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBaseCompare.java?rev=1141777&r1=1141776&r2=1141777&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBaseCompare.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBaseCompare.java Fri Jul 1 01:53:07 2011
@@ -19,6 +19,7 @@
package org.apache.hadoop.hive.ql.udf.generic;
import org.apache.hadoop.hive.ql.exec.Description;
+import org.apache.hadoop.hive.ql.exec.FunctionRegistry;
import org.apache.hadoop.hive.ql.exec.UDFArgumentException;
import org.apache.hadoop.hive.ql.exec.UDFArgumentTypeException;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDFUtils.ReturnObjectInspectorResolver;
@@ -132,8 +133,22 @@ public abstract class GenericUDFBaseComp
if (oiTypeInfo0 != oiTypeInfo1) {
compareType = CompareType.NEED_CONVERT;
- compareOI = TypeInfoUtils.getStandardWritableObjectInspectorFromTypeInfo(
- TypeInfoFactory.doubleTypeInfo);
+
+ // If either argument is a string, we convert to a double because a number
+ // in string form should always be convertible into a double
+ if (oiTypeInfo0.equals(TypeInfoFactory.stringTypeInfo)
+ || oiTypeInfo1.equals(TypeInfoFactory.stringTypeInfo)) {
+ compareOI = TypeInfoUtils.getStandardWritableObjectInspectorFromTypeInfo(
+ TypeInfoFactory.doubleTypeInfo);
+ } else {
+ TypeInfo compareType = FunctionRegistry.getCommonClass(oiTypeInfo0, oiTypeInfo1);
+
+ // For now, we always convert to double if we can't find a common type
+ compareOI = TypeInfoUtils.getStandardWritableObjectInspectorFromTypeInfo(
+ (compareType == null) ?
+ TypeInfoFactory.doubleTypeInfo : compareType);
+ }
+
converter0 = ObjectInspectorConverters.getConverter(arguments[0], compareOI);
converter1 = ObjectInspectorConverters.getConverter(arguments[1], compareOI);
} else {