diff --git ql/src/java/org/apache/hadoop/hive/ql/io/orc/RecordReaderImpl.java ql/src/java/org/apache/hadoop/hive/ql/io/orc/RecordReaderImpl.java index 4ec07cb..268eee5 100644 --- ql/src/java/org/apache/hadoop/hive/ql/io/orc/RecordReaderImpl.java +++ ql/src/java/org/apache/hadoop/hive/ql/io/orc/RecordReaderImpl.java @@ -50,6 +50,7 @@ import org.apache.hadoop.hive.ql.io.sarg.PredicateLeaf; import org.apache.hadoop.hive.ql.io.sarg.SearchArgument; import org.apache.hadoop.hive.ql.io.sarg.SearchArgument.TruthValue; +import org.apache.hadoop.hive.ql.plan.ExprNodeConstantDesc; import org.apache.hadoop.hive.serde2.io.ByteWritable; import org.apache.hadoop.hive.serde2.io.DateWritable; import org.apache.hadoop.hive.serde2.io.DoubleWritable; @@ -2404,6 +2405,10 @@ private static Object getBaseObjectForComparison(Object predObj, Object statsObj return Double.valueOf(predObj.toString()); } } else if (statsObj instanceof String) { + // Ex: where d = date '1970-02-01' will be ExprNodeConstantDesc + if (predObj instanceof ExprNodeConstantDesc) { + return ((ExprNodeConstantDesc) predObj).getValue().toString(); + } return predObj.toString(); } else if (statsObj instanceof HiveDecimal) { if (predObj instanceof Long) { diff --git ql/src/test/queries/clientpositive/orc_ppd_date.q ql/src/test/queries/clientpositive/orc_ppd_date.q index c34be86..3d21d41 100644 --- ql/src/test/queries/clientpositive/orc_ppd_date.q +++ ql/src/test/queries/clientpositive/orc_ppd_date.q @@ -12,6 +12,9 @@ select sum(hash(*)) from newtypesorc where da='1970-02-20'; set hive.optimize.index.filter=true; select sum(hash(*)) from newtypesorc where da='1970-02-20'; +set hive.optimize.index.filter=true; +select sum(hash(*)) from newtypesorc where da= date '1970-02-20'; + set hive.optimize.index.filter=false; select sum(hash(*)) from newtypesorc where da=cast('1970-02-20' as date); diff --git ql/src/test/results/clientpositive/orc_ppd_date.q.out ql/src/test/results/clientpositive/orc_ppd_date.q.out index 39b9c85..e999481 100644 --- ql/src/test/results/clientpositive/orc_ppd_date.q.out +++ ql/src/test/results/clientpositive/orc_ppd_date.q.out @@ -37,6 +37,15 @@ POSTHOOK: type: QUERY POSTHOOK: Input: default@newtypesorc #### A masked pattern was here #### -252951929000 +PREHOOK: query: select sum(hash(*)) from newtypesorc where da= date '1970-02-20' +PREHOOK: type: QUERY +PREHOOK: Input: default@newtypesorc +#### A masked pattern was here #### +POSTHOOK: query: select sum(hash(*)) from newtypesorc where da= date '1970-02-20' +POSTHOOK: type: QUERY +POSTHOOK: Input: default@newtypesorc +#### A masked pattern was here #### +-252951929000 PREHOOK: query: select sum(hash(*)) from newtypesorc where da=cast('1970-02-20' as date) PREHOOK: type: QUERY PREHOOK: Input: default@newtypesorc