From 50b513bcec73d76b999fd6c3f10343205ace86c8 Mon Sep 17 00:00:00 2001 From: Ashutosh Chauhan Date: Tue, 29 Mar 2016 18:14:43 -0700 Subject: [PATCH] HIVE-13380 : Decimal should have lower precedence than double in type hierachy --- .../hadoop/hive/ql/exec/TestFunctionRegistry.java | 26 +++++++++++----------- .../hadoop/hive/serde2/typeinfo/TypeInfoUtils.java | 6 ++--- 2 files changed, 16 insertions(+), 16 deletions(-) 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 6a83c32..9358966 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 @@ -85,8 +85,8 @@ private void implicit(TypeInfo a, TypeInfo b, boolean convertible) { public void testImplicitConversion() { implicit(TypeInfoFactory.intTypeInfo, TypeInfoFactory.decimalTypeInfo, true); - implicit(TypeInfoFactory.floatTypeInfo, TypeInfoFactory.decimalTypeInfo, true); - implicit(TypeInfoFactory.doubleTypeInfo, TypeInfoFactory.decimalTypeInfo, true); + implicit(TypeInfoFactory.floatTypeInfo, TypeInfoFactory.decimalTypeInfo, false); + implicit(TypeInfoFactory.doubleTypeInfo, TypeInfoFactory.decimalTypeInfo, false); implicit(TypeInfoFactory.stringTypeInfo, TypeInfoFactory.decimalTypeInfo, true); implicit(TypeInfoFactory.dateTypeInfo, TypeInfoFactory.decimalTypeInfo, false); implicit(TypeInfoFactory.timestampTypeInfo, TypeInfoFactory.decimalTypeInfo, false); @@ -185,16 +185,16 @@ private void verify(Class udf, String name, TypeInfo ta, TypeInfo tb, 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 void testCommonClass() { common(TypeInfoFactory.stringTypeInfo, TypeInfoFactory.decimalTypeInfo, TypeInfoFactory.stringTypeInfo); common(TypeInfoFactory.doubleTypeInfo, TypeInfoFactory.decimalTypeInfo, - TypeInfoFactory.decimalTypeInfo); + TypeInfoFactory.doubleTypeInfo); common(TypeInfoFactory.doubleTypeInfo, TypeInfoFactory.stringTypeInfo, TypeInfoFactory.stringTypeInfo); @@ -248,7 +248,7 @@ public void testCommonClassComparison() { comparison(TypeInfoFactory.stringTypeInfo, TypeInfoFactory.decimalTypeInfo, TypeInfoFactory.decimalTypeInfo); comparison(TypeInfoFactory.doubleTypeInfo, TypeInfoFactory.decimalTypeInfo, - TypeInfoFactory.decimalTypeInfo); + TypeInfoFactory.doubleTypeInfo); comparison(TypeInfoFactory.doubleTypeInfo, TypeInfoFactory.stringTypeInfo, TypeInfoFactory.doubleTypeInfo); @@ -328,7 +328,7 @@ public void testCommonClassUnionAll() { unionAll(TypeInfoFactory.stringTypeInfo, TypeInfoFactory.decimalTypeInfo, TypeInfoFactory.decimalTypeInfo); unionAll(TypeInfoFactory.doubleTypeInfo, TypeInfoFactory.decimalTypeInfo, - TypeInfoFactory.decimalTypeInfo); + TypeInfoFactory.doubleTypeInfo); unionAll(TypeInfoFactory.doubleTypeInfo, TypeInfoFactory.stringTypeInfo, TypeInfoFactory.stringTypeInfo); @@ -364,15 +364,15 @@ public void testGetTypeInfoForPrimitiveCategory() { // non-qualified types should simply return the TypeInfo associated with that type assertEquals(TypeInfoFactory.stringTypeInfo, FunctionRegistry.getTypeInfoForPrimitiveCategory( - (PrimitiveTypeInfo) varchar10, (PrimitiveTypeInfo) TypeInfoFactory.stringTypeInfo, + (PrimitiveTypeInfo) varchar10, TypeInfoFactory.stringTypeInfo, PrimitiveCategory.STRING)); assertEquals(TypeInfoFactory.stringTypeInfo, FunctionRegistry.getTypeInfoForPrimitiveCategory( - (PrimitiveTypeInfo) TypeInfoFactory.stringTypeInfo, - (PrimitiveTypeInfo) TypeInfoFactory.stringTypeInfo, + TypeInfoFactory.stringTypeInfo, + TypeInfoFactory.stringTypeInfo, PrimitiveCategory.STRING)); assertEquals(TypeInfoFactory.doubleTypeInfo, FunctionRegistry.getTypeInfoForPrimitiveCategory( - (PrimitiveTypeInfo) TypeInfoFactory.doubleTypeInfo, - (PrimitiveTypeInfo) TypeInfoFactory.stringTypeInfo, + TypeInfoFactory.doubleTypeInfo, + TypeInfoFactory.stringTypeInfo, PrimitiveCategory.DOUBLE)); } 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 d3bb4e4..c92eb02 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 @@ 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); } -- 1.7.12.4 (Apple Git-37)