diff --git a/ql/src/java/org/apache/hadoop/hive/ql/io/sarg/ConvertAstToSearchArg.java b/ql/src/java/org/apache/hadoop/hive/ql/io/sarg/ConvertAstToSearchArg.java index 300ed20..9013084 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/io/sarg/ConvertAstToSearchArg.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/io/sarg/ConvertAstToSearchArg.java @@ -153,10 +153,9 @@ private static Object boxLiteral(ExprNodeConstantDesc constantDesc, return lit.toString(); } case FLOAT: - if (lit instanceof Float || lit instanceof HiveDecimal) { - // converting a float directly to a double causes annoying conversion - // problems - return Double.parseDouble(lit.toString()); + if (lit instanceof HiveDecimal) { + // HiveDecimal -> Float -> Number -> Double + return ((Number)((HiveDecimal) lit).floatValue()).doubleValue(); } else { return ((Number) lit).doubleValue(); } diff --git a/ql/src/test/queries/clientpositive/orc_ppd_basic.q b/ql/src/test/queries/clientpositive/orc_ppd_basic.q index 33076d9..c367848 100644 --- a/ql/src/test/queries/clientpositive/orc_ppd_basic.q +++ b/ql/src/test/queries/clientpositive/orc_ppd_basic.q @@ -175,4 +175,16 @@ select count(*) from orc_ppd where s = "wendy king"; select count(*) from orc_ppd where s = "wendy king" and t < 0; -- INPUT_RECORDS: 100 -select count(*) from orc_ppd where s = "wendy king" and t > 100; \ No newline at end of file +select count(*) from orc_ppd where s = "wendy king" and t > 100; + +set hive.optimize.index.filter=false; +-- when cbo is disabled constant gets converted to HiveDecimal +select count(*) from orc_ppd where f=74.72; +set hive.optimize.index.filter=true; +select count(*) from orc_ppd where f=74.72; + +set hive.cbo.enable=true; +set hive.optimize.index.filter=false; +select count(*) from orc_ppd where f=74.72; +set hive.optimize.index.filter=true; +select count(*) from orc_ppd where f=74.72; diff --git a/ql/src/test/results/clientpositive/tez/orc_ppd_basic.q.out b/ql/src/test/results/clientpositive/tez/orc_ppd_basic.q.out index bfdf66b..4935092 100644 --- a/ql/src/test/results/clientpositive/tez/orc_ppd_basic.q.out +++ b/ql/src/test/results/clientpositive/tez/orc_ppd_basic.q.out @@ -951,3 +951,72 @@ Stage-1 HIVE COUNTERS: RECORDS_OUT_0: 1 RECORDS_OUT_INTERMEDIATE_Map_1: 1 2 +PREHOOK: query: -- when cbo is disabled constant gets converted to HiveDecimal +select count(*) from orc_ppd where f=74.72 +PREHOOK: type: QUERY +PREHOOK: Input: default@orc_ppd +#### A masked pattern was here #### +Stage-1 FILE SYSTEM COUNTERS: + HDFS_BYTES_READ: 21496 + HDFS_BYTES_WRITTEN: 101 + HDFS_READ_OPS: 4 + HDFS_LARGE_READ_OPS: 0 + HDFS_WRITE_OPS: 2 +Stage-1 HIVE COUNTERS: + CREATED_FILES: 1 + DESERIALIZE_ERRORS: 0 + RECORDS_IN_Map_1: 2100 + RECORDS_OUT_0: 1 + RECORDS_OUT_INTERMEDIATE_Map_1: 1 +2 +PREHOOK: query: select count(*) from orc_ppd where f=74.72 +PREHOOK: type: QUERY +PREHOOK: Input: default@orc_ppd +#### A masked pattern was here #### +Stage-1 FILE SYSTEM COUNTERS: + HDFS_BYTES_READ: 23556 + HDFS_BYTES_WRITTEN: 101 + HDFS_READ_OPS: 4 + HDFS_LARGE_READ_OPS: 0 + HDFS_WRITE_OPS: 2 +Stage-1 HIVE COUNTERS: + CREATED_FILES: 1 + DESERIALIZE_ERRORS: 0 + RECORDS_IN_Map_1: 100 + RECORDS_OUT_0: 1 + RECORDS_OUT_INTERMEDIATE_Map_1: 1 +2 +PREHOOK: query: select count(*) from orc_ppd where f=74.72 +PREHOOK: type: QUERY +PREHOOK: Input: default@orc_ppd +#### A masked pattern was here #### +Stage-1 FILE SYSTEM COUNTERS: + HDFS_BYTES_READ: 21496 + HDFS_BYTES_WRITTEN: 101 + HDFS_READ_OPS: 4 + HDFS_LARGE_READ_OPS: 0 + HDFS_WRITE_OPS: 2 +Stage-1 HIVE COUNTERS: + CREATED_FILES: 1 + DESERIALIZE_ERRORS: 0 + RECORDS_IN_Map_1: 2100 + RECORDS_OUT_0: 1 + RECORDS_OUT_INTERMEDIATE_Map_1: 1 +2 +PREHOOK: query: select count(*) from orc_ppd where f=74.72 +PREHOOK: type: QUERY +PREHOOK: Input: default@orc_ppd +#### A masked pattern was here #### +Stage-1 FILE SYSTEM COUNTERS: + HDFS_BYTES_READ: 23556 + HDFS_BYTES_WRITTEN: 101 + HDFS_READ_OPS: 4 + HDFS_LARGE_READ_OPS: 0 + HDFS_WRITE_OPS: 2 +Stage-1 HIVE COUNTERS: + CREATED_FILES: 1 + DESERIALIZE_ERRORS: 0 + RECORDS_IN_Map_1: 100 + RECORDS_OUT_0: 1 + RECORDS_OUT_INTERMEDIATE_Map_1: 1 +2