From 26df87766f9988d35bea887ef0daf2aa69ca2035 Mon Sep 17 00:00:00 2001 From: paulgb Date: Tue, 23 Nov 2010 14:48:58 -0800 Subject: [PATCH] fixed NaN comparison bug --- .../test/queries/clientpositive/ops_comparison.q | 23 +++ .../results/clientpositive/ops_comparison.q.out | 162 ++++++++++++++++++++ .../objectinspector/ObjectInspectorUtils.java | 4 +- 3 files changed, 187 insertions(+), 2 deletions(-) create mode 100644 ql/src/test/queries/clientpositive/ops_comparison.q create mode 100644 ql/src/test/results/clientpositive/ops_comparison.q.out diff --git ql/src/test/queries/clientpositive/ops_comparison.q ql/src/test/queries/clientpositive/ops_comparison.q new file mode 100644 index 0000000..b685ae6 --- /dev/null +++ ql/src/test/queries/clientpositive/ops_comparison.q @@ -0,0 +1,23 @@ + +select 1.0 < 2.0 from src limit 1; +select 2.0 < 2.0 from src limit 1; +select 2.0 > 1.0 from src limit 1; +select 2.0 > 2.0 from src limit 1; + +select 'NaN' < 2.0 from src limit 1; +select 1.0 < 'NaN' from src limit 1; +select 1.0 > 'NaN' from src limit 1; +select 'NaN' > 2.0 from src limit 1; +select 'NaN' > 'NaN' from src limit 1; +select 'NaN' < 'NaN' from src limit 1; + +select 'NaN' = 2.0 from src limit 1; +select 1.0 = 'NaN' from src limit 1; +select 'NaN' = 2.0 from src limit 1; +select 'NaN' = 'NaN' from src limit 1; + +select 'NaN' <> 2.0 from src limit 1; +select 1.0 <> 'NaN' from src limit 1; +select 'NaN' <> 2.0 from src limit 1; +select 'NaN' <> 'NaN' from src limit 1; + diff --git ql/src/test/results/clientpositive/ops_comparison.q.out ql/src/test/results/clientpositive/ops_comparison.q.out new file mode 100644 index 0000000..9c2ed2b --- /dev/null +++ ql/src/test/results/clientpositive/ops_comparison.q.out @@ -0,0 +1,162 @@ +PREHOOK: query: select 1.0 < 2.0 from src limit 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-36-43_171_8359342299792578494/-mr-10000 +POSTHOOK: query: select 1.0 < 2.0 from src limit 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-36-43_171_8359342299792578494/-mr-10000 +true +PREHOOK: query: select 2.0 < 2.0 from src limit 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-36-47_563_6509004989273547234/-mr-10000 +POSTHOOK: query: select 2.0 < 2.0 from src limit 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-36-47_563_6509004989273547234/-mr-10000 +false +PREHOOK: query: select 2.0 > 1.0 from src limit 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-36-51_147_4921144132913433715/-mr-10000 +POSTHOOK: query: select 2.0 > 1.0 from src limit 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-36-51_147_4921144132913433715/-mr-10000 +true +PREHOOK: query: select 2.0 > 2.0 from src limit 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-36-54_792_405822316321812886/-mr-10000 +POSTHOOK: query: select 2.0 > 2.0 from src limit 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-36-54_792_405822316321812886/-mr-10000 +false +PREHOOK: query: select 'NaN' < 2.0 from src limit 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-36-58_235_6381965909893763309/-mr-10000 +POSTHOOK: query: select 'NaN' < 2.0 from src limit 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-36-58_235_6381965909893763309/-mr-10000 +false +PREHOOK: query: select 1.0 < 'NaN' from src limit 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-01_805_3406552689505838240/-mr-10000 +POSTHOOK: query: select 1.0 < 'NaN' from src limit 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-01_805_3406552689505838240/-mr-10000 +true +PREHOOK: query: select 1.0 > 'NaN' from src limit 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-06_098_3368587280982912415/-mr-10000 +POSTHOOK: query: select 1.0 > 'NaN' from src limit 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-06_098_3368587280982912415/-mr-10000 +false +PREHOOK: query: select 'NaN' > 2.0 from src limit 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-09_598_8795319605305040803/-mr-10000 +POSTHOOK: query: select 'NaN' > 2.0 from src limit 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-09_598_8795319605305040803/-mr-10000 +true +PREHOOK: query: select 'NaN' > 'NaN' from src limit 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-13_054_3393533389220441923/-mr-10000 +POSTHOOK: query: select 'NaN' > 'NaN' from src limit 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-13_054_3393533389220441923/-mr-10000 +false +PREHOOK: query: select 'NaN' < 'NaN' from src limit 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-16_767_6332302817430866113/-mr-10000 +POSTHOOK: query: select 'NaN' < 'NaN' from src limit 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-16_767_6332302817430866113/-mr-10000 +false +PREHOOK: query: select 'NaN' = 2.0 from src limit 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-20_272_3118451494666412808/-mr-10000 +POSTHOOK: query: select 'NaN' = 2.0 from src limit 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-20_272_3118451494666412808/-mr-10000 +false +PREHOOK: query: select 1.0 = 'NaN' from src limit 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-23_936_1948317467590272623/-mr-10000 +POSTHOOK: query: select 1.0 = 'NaN' from src limit 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-23_936_1948317467590272623/-mr-10000 +false +PREHOOK: query: select 'NaN' = 2.0 from src limit 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-27_763_4197853802869223089/-mr-10000 +POSTHOOK: query: select 'NaN' = 2.0 from src limit 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-27_763_4197853802869223089/-mr-10000 +false +PREHOOK: query: select 'NaN' = 'NaN' from src limit 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-31_373_6623902100898132587/-mr-10000 +POSTHOOK: query: select 'NaN' = 'NaN' from src limit 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-31_373_6623902100898132587/-mr-10000 +true +PREHOOK: query: select 'NaN' <> 2.0 from src limit 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-34_888_733814877538910170/-mr-10000 +POSTHOOK: query: select 'NaN' <> 2.0 from src limit 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-34_888_733814877538910170/-mr-10000 +true +PREHOOK: query: select 1.0 <> 'NaN' from src limit 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-38_678_7424470523261520477/-mr-10000 +POSTHOOK: query: select 1.0 <> 'NaN' from src limit 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-38_678_7424470523261520477/-mr-10000 +true +PREHOOK: query: select 'NaN' <> 2.0 from src limit 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-42_137_8062365212971009367/-mr-10000 +POSTHOOK: query: select 'NaN' <> 2.0 from src limit 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-42_137_8062365212971009367/-mr-10000 +true +PREHOOK: query: select 'NaN' <> 'NaN' from src limit 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-45_602_40266132423363774/-mr-10000 +POSTHOOK: query: select 'NaN' <> 'NaN' from src limit 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: file:/tmp/pbutler/hive_2010-11-23_14-37-45_602_40266132423363774/-mr-10000 +false diff --git serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java index 7c0311c..2b77072 100644 --- serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java +++ serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java @@ -564,12 +564,12 @@ public final class ObjectInspectorUtils { case FLOAT: { float v1 = ((FloatObjectInspector) poi1).get(o1); float v2 = ((FloatObjectInspector) poi2).get(o2); - return v1 > v2 ? 1 : (v1 < v2 ? -1 : 0); + return Float.compare(v1, v2); } case DOUBLE: { double v1 = ((DoubleObjectInspector) poi1).get(o1); double v2 = ((DoubleObjectInspector) poi2).get(o2); - return v1 > v2 ? 1 : (v1 < v2 ? -1 : 0); + return Double.compare(v1, v2); } case STRING: { if (poi1.preferWritable() || poi2.preferWritable()) { -- 1.6.6.5.g743753