----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/39248/ -----------------------------------------------------------
Review request for hive. Bugs: HIVE-12082 https://issues.apache.org/jira/browse/HIVE-12082 Repository: hive-git Description ------- See HIVE-12070 and HIVE-12082 for discussions and findings. Refactored the Greatest/Least UDF's to be inline with the SQL-standard spec of comparison operators, and the mysql implementation of greatest/least functional UDF's. The main functional changes is that: 1. Different types can be compared now, but used to throw an exception. Comparison uses the same logic as binary comparison operators, ie greaterThan. 2. If any argument is NULL, the result is null. NULLs used to be ignored in the comparison in favor of non-null values, which violates the SQL-standard. Code changes: Common logics is captured in the new class 'GenericUDFBaseNWayCompare', which does a linear comparison in the two-cases where arguments are of same type and different type, in the latter it uses Converters. The class that it uses is ObjectInspectorUtils.compare(), which is the same as the binary comparison operators. Diffs ----- ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBaseNwayCompare.java PRE-CREATION ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFGreatest.java e1eab89 ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFLeast.java 64a1b47 ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFGreatest.java 55d7d5d ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFLeast.java 47e4801 ql/src/test/queries/clientnegative/udf_greatest_error_2.q b270a1a ql/src/test/queries/clientnegative/udf_greatest_error_3.q ba21748 ql/src/test/queries/clientnegative/udf_greatest_error_4.q ae6d928 ql/src/test/queries/clientpositive/udf_greatest.q 02c7d3c ql/src/test/queries/clientpositive/udf_least.q a754ef0 ql/src/test/results/clientnegative/udf_greatest_error_2.q.out 9a6348c ql/src/test/results/clientnegative/udf_greatest_error_3.q.out 3fb3499 ql/src/test/results/clientnegative/udf_greatest_error_4.q.out 58b4c44 ql/src/test/results/clientpositive/udf_greatest.q.out 10f1c2d ql/src/test/results/clientpositive/udf_least.q.out 6983137 Diff: https://reviews.apache.org/r/39248/diff/ Testing ------- Added more unit tests, and q tests. Thanks, Szehon Ho