diff --git a/ql/src/test/queries/clientpositive/date_withtimestamp.q b/ql/src/test/queries/clientpositive/date_withtimestamp.q new file mode 100644 index 0000000000000000000000000000000000000000..b6d04f55ac9ec872cec5bb97a7c81b4a016287b8 --- /dev/null +++ b/ql/src/test/queries/clientpositive/date_withtimestamp.q @@ -0,0 +1,3 @@ +select "2016-12-29 23:59:59" < cast("2016-12-30" as date); +select "2016-12-30 00:00:00" = cast("2016-12-30" as date); +select "2016-12-31 00:00:01" > cast("2016-12-30" as date); diff --git a/ql/src/test/results/clientpositive/annotate_stats_select.q.out b/ql/src/test/results/clientpositive/annotate_stats_select.q.out index 873f1abb25ccff9174f54a9f98f0ebc6116ffabd..489f4d241820d304430f912fde27b02043ef76d8 100644 --- a/ql/src/test/results/clientpositive/annotate_stats_select.q.out +++ b/ql/src/test/results/clientpositive/annotate_stats_select.q.out @@ -470,9 +470,9 @@ STAGE PLANS: alias: alltypes_orc Statistics: Num rows: 2 Data size: 1686 Basic stats: COMPLETE Column stats: COMPLETE Select Operator - expressions: null (type: date) + expressions: 1970-12-31 (type: date) outputColumnNames: _col0 - Statistics: Num rows: 2 Data size: 56 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 2 Data size: 112 Basic stats: COMPLETE Column stats: COMPLETE ListSink PREHOOK: query: explain select cast("58.174" as DECIMAL) from alltypes_orc diff --git a/ql/src/test/results/clientpositive/constantfolding.q.out b/ql/src/test/results/clientpositive/constantfolding.q.out index 10e185f00b8a8f848122e604906a72dd54ee9d3d..f9a9d2490e29b7c015d3ec2cb0ad7a404bdf3539 100644 --- a/ql/src/test/results/clientpositive/constantfolding.q.out +++ b/ql/src/test/results/clientpositive/constantfolding.q.out @@ -205,9 +205,9 @@ STAGE PLANS: alias: src Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: COMPLETE Select Operator - expressions: null (type: date) + expressions: 1970-12-31 (type: date) outputColumnNames: _col0 - Statistics: Num rows: 500 Data size: 56 Basic stats: COMPLETE Column stats: COMPLETE + Statistics: Num rows: 500 Data size: 28000 Basic stats: COMPLETE Column stats: COMPLETE ListSink PREHOOK: query: CREATE TABLE dest1(c1 STRING) STORED AS TEXTFILE diff --git a/ql/src/test/results/clientpositive/date_withtimestamp.q.out b/ql/src/test/results/clientpositive/date_withtimestamp.q.out new file mode 100644 index 0000000000000000000000000000000000000000..3661888d8b732aa231f830c8f7f8d0935b789917 --- /dev/null +++ b/ql/src/test/results/clientpositive/date_withtimestamp.q.out @@ -0,0 +1,27 @@ +PREHOOK: query: select "2016-12-29 23:59:59" < cast("2016-12-30" as date) +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +POSTHOOK: query: select "2016-12-29 23:59:59" < cast("2016-12-30" as date) +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +true +PREHOOK: query: select "2016-12-30 00:00:00" = cast("2016-12-30" as date) +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +POSTHOOK: query: select "2016-12-30 00:00:00" = cast("2016-12-30" as date) +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +true +PREHOOK: query: select "2016-12-31 00:00:01" > cast("2016-12-30" as date) +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +POSTHOOK: query: select "2016-12-31 00:00:01" > cast("2016-12-30" as date) +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +true diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorUtils.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorUtils.java index 9642a7e234185c3c10bbb44397d9865340f41e8a..27af6ec2c45158cf048e3dcbb64f2b6add797e80 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorUtils.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorUtils.java @@ -1072,16 +1072,26 @@ public static Date getDate(Object o, PrimitiveObjectInspector oi) { try { result = Date.valueOf(s); } catch (IllegalArgumentException e) { - result = null; + Timestamp ts = getTimestampFromString(s); + if (ts != null) { + result = new Date(ts.getTime()); + } else { + result = null; + } } break; case CHAR: case VARCHAR: { + String val = getString(o, oi).trim(); try { - String val = getString(o, oi).trim(); result = Date.valueOf(val); } catch (IllegalArgumentException e) { - result = null; + Timestamp ts = getTimestampFromString(val); + if (ts != null) { + result = new Date(ts.getTime()); + } else { + result = null; + } } break; }