Repository: hive Updated Branches: refs/heads/master e16bcca64 -> b507520e1
HIVE-13380 : Decimal should have lower precedence than double in type hierachy (Ashutosh Chauhan via Jason Dere) Signed-off-by: Ashutosh Chauhan <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/b507520e Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/b507520e Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/b507520e Branch: refs/heads/master Commit: b507520e17811c8e059aa7d30490d29b984e2e96 Parents: e16bcca Author: Ashutosh Chauhan <[email protected]> Authored: Tue Mar 29 18:14:43 2016 -0700 Committer: Ashutosh Chauhan <[email protected]> Committed: Tue Apr 12 18:04:43 2016 -0700 ---------------------------------------------------------------------- .../org/apache/hadoop/hive/ql/udf/UDFSign.java | 15 +++++++++++ .../hive/ql/exec/TestFunctionRegistry.java | 26 ++++++++++---------- .../ql/udf/generic/TestGenericUDFOPMinus.java | 4 +-- .../udf/generic/TestGenericUDFOPMultiply.java | 4 +-- .../ql/udf/generic/TestGenericUDFOPPlus.java | 4 +-- .../clientpositive/alter_partition_change_col.q | 1 + .../clientpositive/alter_table_cascade.q | 1 + .../results/clientpositive/perf/query32.q.out | 2 +- .../results/clientpositive/perf/query65.q.out | 2 +- .../results/clientpositive/perf/query75.q.out | 2 +- .../results/clientpositive/perf/query89.q.out | 8 +++--- .../tez/vector_decimal_expressions.q.out | 2 +- .../results/clientpositive/udf_greatest.q.out | 4 +-- .../test/results/clientpositive/udf_least.q.out | 4 +-- .../vector_decimal_expressions.q.out | 2 +- .../hive/serde2/typeinfo/TypeInfoUtils.java | 11 +++------ 16 files changed, 53 insertions(+), 39 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/b507520e/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFSign.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFSign.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFSign.java index 022b130..67d62d9 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFSign.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFSign.java @@ -27,6 +27,7 @@ import org.apache.hadoop.hive.ql.exec.vector.expressions.gen.FuncSignLongToDoubl import org.apache.hadoop.hive.serde2.io.DoubleWritable; import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable; import org.apache.hadoop.io.IntWritable; +import org.apache.hadoop.io.LongWritable; @Description(name = "sign", value = "_FUNC_(x) - returns the sign of x )", @@ -57,6 +58,20 @@ public class UDFSign extends UDF { return result; } + public DoubleWritable evaluate(LongWritable a) { + if (a == null) { + return null; + } + if (a.get() == 0) { + result.set(0); + } else if (a.get() > 0) { + result.set(1); + } else { + result.set(-1); + } + return result; + } + /** * Get the sign of the decimal input * http://git-wip-us.apache.org/repos/asf/hive/blob/b507520e/ql/src/test/org/apache/hadoop/hive/ql/exec/TestFunctionRegistry.java ---------------------------------------------------------------------- diff --git a/ql/src/test/org/apache/hadoop/hive/ql/exec/TestFunctionRegistry.java b/ql/src/test/org/apache/hadoop/hive/ql/exec/TestFunctionRegistry.java index 8488c21..59ecd1e 100644 --- a/ql/src/test/org/apache/hadoop/hive/ql/exec/TestFunctionRegistry.java +++ b/ql/src/test/org/apache/hadoop/hive/ql/exec/TestFunctionRegistry.java @@ -23,12 +23,10 @@ import java.util.ArrayList; import java.util.LinkedList; import java.util.List; -import junit.framework.Assert; import junit.framework.TestCase; import org.apache.hadoop.hive.common.type.HiveVarchar; import org.apache.hadoop.hive.conf.HiveConf; -import org.apache.hadoop.hive.ql.parse.SemanticException; import org.apache.hadoop.hive.ql.session.SessionState; import org.apache.hadoop.hive.serde2.io.DateWritable; import org.apache.hadoop.hive.serde2.io.DoubleWritable; @@ -42,6 +40,7 @@ import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoUtils; import org.apache.hadoop.io.BytesWritable; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; +import org.junit.Assert; public class TestFunctionRegistry extends TestCase { @@ -85,9 +84,10 @@ public class TestFunctionRegistry extends TestCase { public void testImplicitConversion() { implicit(TypeInfoFactory.intTypeInfo, TypeInfoFactory.decimalTypeInfo, true); - implicit(TypeInfoFactory.floatTypeInfo, TypeInfoFactory.decimalTypeInfo, true); - implicit(TypeInfoFactory.doubleTypeInfo, TypeInfoFactory.decimalTypeInfo, true); - implicit(TypeInfoFactory.stringTypeInfo, TypeInfoFactory.decimalTypeInfo, true); + implicit(TypeInfoFactory.longTypeInfo, TypeInfoFactory.decimalTypeInfo, true); + implicit(TypeInfoFactory.floatTypeInfo, TypeInfoFactory.decimalTypeInfo, false); + implicit(TypeInfoFactory.doubleTypeInfo, TypeInfoFactory.decimalTypeInfo, false); + implicit(TypeInfoFactory.stringTypeInfo, TypeInfoFactory.decimalTypeInfo, false); implicit(TypeInfoFactory.dateTypeInfo, TypeInfoFactory.decimalTypeInfo, false); implicit(TypeInfoFactory.timestampTypeInfo, TypeInfoFactory.decimalTypeInfo, false); implicit(varchar10, TypeInfoFactory.stringTypeInfo, true); @@ -185,16 +185,16 @@ public class TestFunctionRegistry extends TestCase { public void testGetMethodInternal() { verify(TestUDF.class, "same", TypeInfoFactory.intTypeInfo, TypeInfoFactory.intTypeInfo, - DoubleWritable.class, DoubleWritable.class, false); + HiveDecimalWritable.class, HiveDecimalWritable.class, false); verify(TestUDF.class, "same", TypeInfoFactory.doubleTypeInfo, TypeInfoFactory.doubleTypeInfo, DoubleWritable.class, DoubleWritable.class, false); verify(TestUDF.class, "same", TypeInfoFactory.doubleTypeInfo, TypeInfoFactory.decimalTypeInfo, - HiveDecimalWritable.class, HiveDecimalWritable.class, false); + DoubleWritable.class, DoubleWritable.class, false); verify(TestUDF.class, "same", TypeInfoFactory.decimalTypeInfo, TypeInfoFactory.doubleTypeInfo, - HiveDecimalWritable.class, HiveDecimalWritable.class, false); + DoubleWritable.class, DoubleWritable.class, false); verify(TestUDF.class, "same", TypeInfoFactory.decimalTypeInfo, TypeInfoFactory.decimalTypeInfo, HiveDecimalWritable.class, HiveDecimalWritable.class, false); @@ -226,7 +226,7 @@ public class TestFunctionRegistry extends TestCase { common(TypeInfoFactory.stringTypeInfo, TypeInfoFactory.decimalTypeInfo, TypeInfoFactory.stringTypeInfo); common(TypeInfoFactory.doubleTypeInfo, TypeInfoFactory.decimalTypeInfo, - TypeInfoFactory.decimalTypeInfo); + TypeInfoFactory.doubleTypeInfo); common(TypeInfoFactory.doubleTypeInfo, TypeInfoFactory.stringTypeInfo, TypeInfoFactory.stringTypeInfo); @@ -246,9 +246,9 @@ public class TestFunctionRegistry extends TestCase { comparison(TypeInfoFactory.intTypeInfo, TypeInfoFactory.decimalTypeInfo, TypeInfoFactory.decimalTypeInfo); comparison(TypeInfoFactory.stringTypeInfo, TypeInfoFactory.decimalTypeInfo, - TypeInfoFactory.decimalTypeInfo); + TypeInfoFactory.doubleTypeInfo); comparison(TypeInfoFactory.doubleTypeInfo, TypeInfoFactory.decimalTypeInfo, - TypeInfoFactory.decimalTypeInfo); + TypeInfoFactory.doubleTypeInfo); comparison(TypeInfoFactory.doubleTypeInfo, TypeInfoFactory.stringTypeInfo, TypeInfoFactory.doubleTypeInfo); @@ -330,9 +330,9 @@ public class TestFunctionRegistry extends TestCase { unionAll(TypeInfoFactory.intTypeInfo, TypeInfoFactory.decimalTypeInfo, TypeInfoFactory.decimalTypeInfo); unionAll(TypeInfoFactory.stringTypeInfo, TypeInfoFactory.decimalTypeInfo, - TypeInfoFactory.decimalTypeInfo); + TypeInfoFactory.stringTypeInfo); unionAll(TypeInfoFactory.doubleTypeInfo, TypeInfoFactory.decimalTypeInfo, - TypeInfoFactory.decimalTypeInfo); + TypeInfoFactory.doubleTypeInfo); unionAll(TypeInfoFactory.doubleTypeInfo, TypeInfoFactory.stringTypeInfo, TypeInfoFactory.stringTypeInfo); http://git-wip-us.apache.org/repos/asf/hive/blob/b507520e/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFOPMinus.java ---------------------------------------------------------------------- diff --git a/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFOPMinus.java b/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFOPMinus.java index 771a6c7..b060877 100644 --- a/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFOPMinus.java +++ b/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFOPMinus.java @@ -224,7 +224,7 @@ public class TestGenericUDFOPMinus extends AbstractTestGenericUDFOPNumeric { verifyReturnType(new GenericUDFOPMinus(), "float", "float", "float"); verifyReturnType(new GenericUDFOPMinus(), "float", "double", "double"); - verifyReturnType(new GenericUDFOPMinus(), "float", "decimal(10,2)", "double"); + verifyReturnType(new GenericUDFOPMinus(), "float", "decimal(10,2)", "float"); verifyReturnType(new GenericUDFOPMinus(), "double", "double", "double"); verifyReturnType(new GenericUDFOPMinus(), "double", "decimal(10,2)", "double"); @@ -246,7 +246,7 @@ public class TestGenericUDFOPMinus extends AbstractTestGenericUDFOPNumeric { verifyReturnType(new GenericUDFOPMinus(), "float", "float", "float"); verifyReturnType(new GenericUDFOPMinus(), "float", "double", "double"); - verifyReturnType(new GenericUDFOPMinus(), "float", "decimal(10,2)", "double"); + verifyReturnType(new GenericUDFOPMinus(), "float", "decimal(10,2)", "float"); verifyReturnType(new GenericUDFOPMinus(), "double", "double", "double"); verifyReturnType(new GenericUDFOPMinus(), "double", "decimal(10,2)", "double"); http://git-wip-us.apache.org/repos/asf/hive/blob/b507520e/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFOPMultiply.java ---------------------------------------------------------------------- diff --git a/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFOPMultiply.java b/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFOPMultiply.java index 696682f..e342a76 100644 --- a/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFOPMultiply.java +++ b/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFOPMultiply.java @@ -215,7 +215,7 @@ public class TestGenericUDFOPMultiply extends AbstractTestGenericUDFOPNumeric { verifyReturnType(new GenericUDFOPMultiply(), "float", "float", "float"); verifyReturnType(new GenericUDFOPMultiply(), "float", "double", "double"); - verifyReturnType(new GenericUDFOPMultiply(), "float", "decimal(10,2)", "double"); + verifyReturnType(new GenericUDFOPMultiply(), "float", "decimal(10,2)", "float"); verifyReturnType(new GenericUDFOPMultiply(), "double", "double", "double"); verifyReturnType(new GenericUDFOPMultiply(), "double", "decimal(10,2)", "double"); @@ -237,7 +237,7 @@ public class TestGenericUDFOPMultiply extends AbstractTestGenericUDFOPNumeric { verifyReturnType(new GenericUDFOPMultiply(), "float", "float", "float"); verifyReturnType(new GenericUDFOPMultiply(), "float", "double", "double"); - verifyReturnType(new GenericUDFOPMultiply(), "float", "decimal(10,2)", "double"); + verifyReturnType(new GenericUDFOPMultiply(), "float", "decimal(10,2)", "float"); verifyReturnType(new GenericUDFOPMultiply(), "double", "double", "double"); verifyReturnType(new GenericUDFOPMultiply(), "double", "decimal(10,2)", "double"); http://git-wip-us.apache.org/repos/asf/hive/blob/b507520e/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFOPPlus.java ---------------------------------------------------------------------- diff --git a/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFOPPlus.java b/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFOPPlus.java index eba4894..b49f6ef 100644 --- a/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFOPPlus.java +++ b/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFOPPlus.java @@ -230,7 +230,7 @@ public class TestGenericUDFOPPlus extends AbstractTestGenericUDFOPNumeric { verifyReturnType(new GenericUDFOPPlus(), "float", "float", "float"); verifyReturnType(new GenericUDFOPPlus(), "float", "double", "double"); - verifyReturnType(new GenericUDFOPPlus(), "float", "decimal(10,2)", "double"); + verifyReturnType(new GenericUDFOPPlus(), "float", "decimal(10,2)", "float"); verifyReturnType(new GenericUDFOPPlus(), "double", "double", "double"); verifyReturnType(new GenericUDFOPPlus(), "double", "decimal(10,2)", "double"); @@ -252,7 +252,7 @@ public class TestGenericUDFOPPlus extends AbstractTestGenericUDFOPNumeric { verifyReturnType(new GenericUDFOPPlus(), "float", "float", "float"); verifyReturnType(new GenericUDFOPPlus(), "float", "double", "double"); - verifyReturnType(new GenericUDFOPPlus(), "float", "decimal(10,2)", "double"); + verifyReturnType(new GenericUDFOPPlus(), "float", "decimal(10,2)", "float"); verifyReturnType(new GenericUDFOPPlus(), "double", "double", "double"); verifyReturnType(new GenericUDFOPPlus(), "double", "decimal(10,2)", "double"); http://git-wip-us.apache.org/repos/asf/hive/blob/b507520e/ql/src/test/queries/clientpositive/alter_partition_change_col.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientpositive/alter_partition_change_col.q b/ql/src/test/queries/clientpositive/alter_partition_change_col.q index 6861ca2..360f4d2 100644 --- a/ql/src/test/queries/clientpositive/alter_partition_change_col.q +++ b/ql/src/test/queries/clientpositive/alter_partition_change_col.q @@ -1,3 +1,4 @@ +set hive.metastore.disallow.incompatible.col.type.changes=false; SET hive.exec.dynamic.partition = true; SET hive.exec.dynamic.partition.mode = nonstrict; http://git-wip-us.apache.org/repos/asf/hive/blob/b507520e/ql/src/test/queries/clientpositive/alter_table_cascade.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientpositive/alter_table_cascade.q b/ql/src/test/queries/clientpositive/alter_table_cascade.q index 479fda4..acca4e8 100644 --- a/ql/src/test/queries/clientpositive/alter_table_cascade.q +++ b/ql/src/test/queries/clientpositive/alter_table_cascade.q @@ -1,3 +1,4 @@ +set hive.metastore.disallow.incompatible.col.type.changes=false; SET hive.exec.dynamic.partition = true; SET hive.exec.dynamic.partition.mode = nonstrict; http://git-wip-us.apache.org/repos/asf/hive/blob/b507520e/ql/src/test/results/clientpositive/perf/query32.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/perf/query32.q.out b/ql/src/test/results/clientpositive/perf/query32.q.out index f9cfd69..7cfda2f 100644 --- a/ql/src/test/results/clientpositive/perf/query32.q.out +++ b/ql/src/test/results/clientpositive/perf/query32.q.out @@ -60,7 +60,7 @@ Stage-0 Select Operator [SEL_32] (rows=169400 width=1436) Output:["_col1"] Filter Operator [FIL_31] (rows=169400 width=1436) - predicate:(_col1 > CAST( _col5 AS decimal(20,15))) + predicate:(UDFToDouble(_col1) > _col5) Merge Join Operator [MERGEJOIN_59] (rows=508200 width=1436) Conds:RS_27._col0=RS_28._col0(Inner),RS_28._col0=RS_29._col0(Inner),Output:["_col1","_col5"] <-Map 6 [SIMPLE_EDGE] http://git-wip-us.apache.org/repos/asf/hive/blob/b507520e/ql/src/test/results/clientpositive/perf/query65.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/perf/query65.q.out b/ql/src/test/results/clientpositive/perf/query65.q.out index 9673373..15b2615 100644 --- a/ql/src/test/results/clientpositive/perf/query65.q.out +++ b/ql/src/test/results/clientpositive/perf/query65.q.out @@ -102,7 +102,7 @@ Stage-0 Select Operator [SEL_49] (rows=372680 width=1436) Output:["_col0","_col1","_col2","_col3","_col4","_col5"] Filter Operator [FIL_48] (rows=372680 width=1436) - predicate:(_col11 <= CAST( (0.1 * UDFToDouble(_col8)) AS decimal(30,15))) + predicate:(UDFToDouble(_col11) <= (0.1 * UDFToDouble(_col8))) Merge Join Operator [MERGEJOIN_73] (rows=1118040 width=1436) Conds:RS_45._col7, _col0, _col2=RS_46._col0, _col0, _col1(Inner),Output:["_col1","_col3","_col4","_col5","_col6","_col8","_col11"] <-Reducer 13 [SIMPLE_EDGE] http://git-wip-us.apache.org/repos/asf/hive/blob/b507520e/ql/src/test/results/clientpositive/perf/query75.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/perf/query75.q.out b/ql/src/test/results/clientpositive/perf/query75.q.out index 35729a2..15c46c2 100644 --- a/ql/src/test/results/clientpositive/perf/query75.q.out +++ b/ql/src/test/results/clientpositive/perf/query75.q.out @@ -43,7 +43,7 @@ Stage-0 Select Operator [SEL_152] (rows=169103 width=1436) Output:["_col0","_col1","_col2","_col3","_col4","_col5","_col6","_col7","_col8","_col9"] Filter Operator [FIL_151] (rows=169103 width=1436) - predicate:((CAST( _col5 AS decimal(17,2)) / CAST( _col12 AS decimal(17,2))) < 0.9) + predicate:(UDFToDouble((CAST( _col5 AS decimal(17,2)) / CAST( _col12 AS decimal(17,2)))) < 0.9) Merge Join Operator [MERGEJOIN_259] (rows=507310 width=1436) Conds:RS_148._col1, _col2, _col3, _col4=RS_149._col1, _col2, _col3, _col4(Inner),Output:["_col0","_col1","_col2","_col3","_col4","_col5","_col6","_col7","_col12","_col13"] <-Reducer 31 [SIMPLE_EDGE] http://git-wip-us.apache.org/repos/asf/hive/blob/b507520e/ql/src/test/results/clientpositive/perf/query89.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/perf/query89.q.out b/ql/src/test/results/clientpositive/perf/query89.q.out index 165d829..75f7385 100644 --- a/ql/src/test/results/clientpositive/perf/query89.q.out +++ b/ql/src/test/results/clientpositive/perf/query89.q.out @@ -70,14 +70,14 @@ Stage-0 File Output Operator [FS_36] Limit [LIM_35] (rows=100 width=1436) Number of rows:100 - Select Operator [SEL_34] (rows=76865 width=1436) + Select Operator [SEL_34] (rows=51243 width=1436) Output:["_col0","_col1","_col2","_col3","_col4","_col5","_col6","_col7"] <-Reducer 6 [SIMPLE_EDGE] SHUFFLE [RS_33] - Select Operator [SEL_30] (rows=76865 width=1436) + Select Operator [SEL_30] (rows=51243 width=1436) Output:["_col0","_col1","_col2","_col3","_col4","_col5","_col6","_col7"] - Filter Operator [FIL_46] (rows=76865 width=1436) - predicate:CASE WHEN ((avg_window_0 <> 0)) THEN (((abs((_col6 - avg_window_0)) / avg_window_0) > 0.1)) ELSE (null) END + Filter Operator [FIL_46] (rows=51243 width=1436) + predicate:(UDFToDouble(CASE WHEN ((avg_window_0 <> 0)) THEN ((abs((_col6 - avg_window_0)) / avg_window_0)) ELSE (null) END) > 0.1) Select Operator [SEL_29] (rows=153730 width=1436) Output:["avg_window_0","_col0","_col1","_col2","_col3","_col4","_col5","_col6"] PTF Operator [PTF_28] (rows=153730 width=1436) http://git-wip-us.apache.org/repos/asf/hive/blob/b507520e/ql/src/test/results/clientpositive/tez/vector_decimal_expressions.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/tez/vector_decimal_expressions.q.out b/ql/src/test/results/clientpositive/tez/vector_decimal_expressions.q.out index 1b21c99..e5e5b4b 100644 --- a/ql/src/test/results/clientpositive/tez/vector_decimal_expressions.q.out +++ b/ql/src/test/results/clientpositive/tez/vector_decimal_expressions.q.out @@ -41,7 +41,7 @@ STAGE PLANS: alias: decimal_test Statistics: Num rows: 12288 Data size: 2128368 Basic stats: COMPLETE Column stats: NONE Filter Operator - predicate: ((cdecimal1 > 0) and (cdecimal1 < 12345.5678) and (cdecimal2 <> 0) and (cdecimal2 > 1000) and cdouble is not null) (type: boolean) + predicate: ((cdecimal1 > 0) and (UDFToDouble(cdecimal1) < 12345.5678) and (cdecimal2 <> 0) and (cdecimal2 > 1000) and cdouble is not null) (type: boolean) Statistics: Num rows: 455 Data size: 78809 Basic stats: COMPLETE Column stats: NONE Select Operator expressions: (cdecimal1 + cdecimal2) (type: decimal(25,14)), (cdecimal1 - (2 * cdecimal2)) (type: decimal(26,14)), ((UDFToDouble(cdecimal1) + 2.34) / UDFToDouble(cdecimal2)) (type: double), (UDFToDouble(cdecimal1) * (UDFToDouble(cdecimal2) / 3.4)) (type: double), (cdecimal1 % 10) (type: decimal(12,10)), UDFToInteger(cdecimal1) (type: int), UDFToShort(cdecimal2) (type: smallint), UDFToByte(cdecimal2) (type: tinyint), UDFToLong(cdecimal1) (type: bigint), UDFToBoolean(cdecimal1) (type: boolean), UDFToDouble(cdecimal2) (type: double), UDFToFloat(cdecimal1) (type: float), UDFToString(cdecimal2) (type: string), CAST( cdecimal1 AS TIMESTAMP) (type: timestamp) http://git-wip-us.apache.org/repos/asf/hive/blob/b507520e/ql/src/test/results/clientpositive/udf_greatest.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/udf_greatest.q.out b/ql/src/test/results/clientpositive/udf_greatest.q.out index 47cfb3f..7c7e67a 100644 --- a/ql/src/test/results/clientpositive/udf_greatest.q.out +++ b/ql/src/test/results/clientpositive/udf_greatest.q.out @@ -183,7 +183,7 @@ FROM src tablesample (1 rows) POSTHOOK: type: QUERY POSTHOOK: Input: default@src #### A masked pattern was here #### -1.1 1.1 1 NULL +1.100000023841858 1.1 1.0 NULL PREHOOK: query: SELECT GREATEST(-100Y, -80S, -60, -40L, cast(-20 as float), cast(0 as double), cast(0.5 as decimal)), GREATEST(100Y, 80S, 60, 40L, cast(20 as float), cast(0 as double), cast(-0.5 as decimal)), GREATEST(100Y, 80S, 60, 40L, null, cast(0 as double), cast(-0.5 as decimal)) @@ -198,7 +198,7 @@ FROM src tablesample (1 rows) POSTHOOK: type: QUERY POSTHOOK: Input: default@src #### A masked pattern was here #### -1 100 NULL +1.0 100.0 NULL PREHOOK: query: SELECT GREATEST(10L, 'a', date('2001-01-28')) FROM src tablesample (1 rows) PREHOOK: type: QUERY http://git-wip-us.apache.org/repos/asf/hive/blob/b507520e/ql/src/test/results/clientpositive/udf_least.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/udf_least.q.out b/ql/src/test/results/clientpositive/udf_least.q.out index 2363abe..497370e 100644 --- a/ql/src/test/results/clientpositive/udf_least.q.out +++ b/ql/src/test/results/clientpositive/udf_least.q.out @@ -183,7 +183,7 @@ FROM src tablesample (1 rows) POSTHOOK: type: QUERY POSTHOOK: Input: default@src #### A masked pattern was here #### --1.1 -1.1 -0.1 NULL +-1.1 -1.100000023841858 -0.1 NULL PREHOOK: query: SELECT LEAST(-100Y, -80S, -60, -40L, cast(-20 as float), cast(0 as double), cast(0.5 as decimal)), LEAST(100Y, 80S, 60, 40L, cast(20 as float), cast(0 as double), cast(-0.5 as decimal)), LEAST(100Y, 80S, 60, 40L, null, cast(0 as double), cast(-0.5 as decimal)) @@ -198,7 +198,7 @@ FROM src tablesample (1 rows) POSTHOOK: type: QUERY POSTHOOK: Input: default@src #### A masked pattern was here #### --100 -1 NULL +-100.0 -1.0 NULL PREHOOK: query: SELECT LEAST(10L, 'a', date('2001-01-28')) FROM src tablesample (1 rows) PREHOOK: type: QUERY http://git-wip-us.apache.org/repos/asf/hive/blob/b507520e/ql/src/test/results/clientpositive/vector_decimal_expressions.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/vector_decimal_expressions.q.out b/ql/src/test/results/clientpositive/vector_decimal_expressions.q.out index 03f6f35..9244efd 100644 --- a/ql/src/test/results/clientpositive/vector_decimal_expressions.q.out +++ b/ql/src/test/results/clientpositive/vector_decimal_expressions.q.out @@ -35,7 +35,7 @@ STAGE PLANS: alias: decimal_test Statistics: Num rows: 12288 Data size: 2128368 Basic stats: COMPLETE Column stats: NONE Filter Operator - predicate: ((cdecimal1 > 0) and (cdecimal1 < 12345.5678) and (cdecimal2 <> 0) and (cdecimal2 > 1000) and cdouble is not null) (type: boolean) + predicate: ((cdecimal1 > 0) and (UDFToDouble(cdecimal1) < 12345.5678) and (cdecimal2 <> 0) and (cdecimal2 > 1000) and cdouble is not null) (type: boolean) Statistics: Num rows: 455 Data size: 78809 Basic stats: COMPLETE Column stats: NONE Select Operator expressions: (cdecimal1 + cdecimal2) (type: decimal(25,14)), (cdecimal1 - (2 * cdecimal2)) (type: decimal(26,14)), ((UDFToDouble(cdecimal1) + 2.34) / UDFToDouble(cdecimal2)) (type: double), (UDFToDouble(cdecimal1) * (UDFToDouble(cdecimal2) / 3.4)) (type: double), (cdecimal1 % 10) (type: decimal(12,10)), UDFToInteger(cdecimal1) (type: int), UDFToShort(cdecimal2) (type: smallint), UDFToByte(cdecimal2) (type: tinyint), UDFToLong(cdecimal1) (type: bigint), UDFToBoolean(cdecimal1) (type: boolean), UDFToDouble(cdecimal2) (type: double), UDFToFloat(cdecimal1) (type: float), UDFToString(cdecimal2) (type: string), CAST( cdecimal1 AS TIMESTAMP) (type: timestamp) http://git-wip-us.apache.org/repos/asf/hive/blob/b507520e/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfoUtils.java ---------------------------------------------------------------------- diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfoUtils.java b/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfoUtils.java index 16daecf..abd2838 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfoUtils.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfoUtils.java @@ -68,9 +68,9 @@ public final class TypeInfoUtils { registerNumericType(PrimitiveCategory.SHORT, 2); registerNumericType(PrimitiveCategory.INT, 3); registerNumericType(PrimitiveCategory.LONG, 4); - registerNumericType(PrimitiveCategory.FLOAT, 5); - registerNumericType(PrimitiveCategory.DOUBLE, 6); - registerNumericType(PrimitiveCategory.DECIMAL, 7); + registerNumericType(PrimitiveCategory.DECIMAL, 5); + registerNumericType(PrimitiveCategory.FLOAT, 6); + registerNumericType(PrimitiveCategory.DOUBLE, 7); registerNumericType(PrimitiveCategory.STRING, 8); } @@ -885,10 +885,7 @@ public final class TypeInfoUtils { if (fromPg == PrimitiveGrouping.STRING_GROUP && to == PrimitiveCategory.DOUBLE) { return true; } - // Allow implicit String to Decimal conversion - if (fromPg == PrimitiveGrouping.STRING_GROUP && to == PrimitiveCategory.DECIMAL) { - return true; - } + // Void can be converted to any type if (from == PrimitiveCategory.VOID) { return true;
