diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java index d047b25..f3e1b9f 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java @@ -1023,6 +1023,10 @@ public static boolean implicitConvertible(PrimitiveCategory from, PrimitiveCateg if (fromPg == PrimitiveGrouping.STRING_GROUP && to == PrimitiveCategory.DECIMAL) { return true; } + // Allow implicit Timestamp to Double conversion + if (from == PrimitiveCategory.TIMESTAMP && to == PrimitiveCategory.DOUBLE) { + return true; + } // Void can be converted to any type if (from == PrimitiveCategory.VOID) { return true; diff --git ql/src/test/org/apache/hadoop/hive/ql/exec/TestFunctionRegistry.java ql/src/test/org/apache/hadoop/hive/ql/exec/TestFunctionRegistry.java index f2e8113..6ce8b23 100644 --- ql/src/test/org/apache/hadoop/hive/ql/exec/TestFunctionRegistry.java +++ ql/src/test/org/apache/hadoop/hive/ql/exec/TestFunctionRegistry.java @@ -88,6 +88,7 @@ public void testImplicitConversion() { implicit(TypeInfoFactory.doubleTypeInfo, TypeInfoFactory.decimalTypeInfo, true); implicit(TypeInfoFactory.stringTypeInfo, TypeInfoFactory.decimalTypeInfo, true); implicit(TypeInfoFactory.dateTypeInfo, TypeInfoFactory.decimalTypeInfo, false); + implicit(TypeInfoFactory.timestampTypeInfo, TypeInfoFactory.doubleTypeInfo, true); implicit(TypeInfoFactory.timestampTypeInfo, TypeInfoFactory.decimalTypeInfo, false); implicit(varchar10, TypeInfoFactory.stringTypeInfo, true); implicit(TypeInfoFactory.stringTypeInfo, varchar10, true); @@ -256,6 +257,11 @@ public void testCommonClassComparison() { comparison(TypeInfoFactory.stringTypeInfo, TypeInfoFactory.dateTypeInfo, TypeInfoFactory.stringTypeInfo); + comparison(TypeInfoFactory.intTypeInfo, TypeInfoFactory.timestampTypeInfo, + TypeInfoFactory.doubleTypeInfo); + comparison(TypeInfoFactory.timestampTypeInfo, TypeInfoFactory.intTypeInfo, + TypeInfoFactory.doubleTypeInfo); + comparison(TypeInfoFactory.stringTypeInfo, varchar10, TypeInfoFactory.stringTypeInfo); comparison(varchar10, TypeInfoFactory.stringTypeInfo, TypeInfoFactory.stringTypeInfo); comparison(varchar5, varchar10, varchar10);