diff --git ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFFromUtcTimestamp.java ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFFromUtcTimestamp.java index aff47c4..25c2028 100644 --- ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFFromUtcTimestamp.java +++ ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFFromUtcTimestamp.java @@ -96,11 +96,10 @@ public class GenericUDFFromUtcTimestamp extends GenericUDF { protected Timestamp applyOffset(long offset, Timestamp t) { long newTime = t.getTime() + offset; - int nanos = (int) (t.getNanos() + (newTime % 1000) * 1000000); - t.setTime(newTime); - t.setNanos(nanos); + Timestamp t2 = new Timestamp(newTime); + t2.setNanos(t.getNanos()); - return t; + return t2; } @Override diff --git ql/src/test/queries/clientpositive/timestamp_udf.q ql/src/test/queries/clientpositive/timestamp_udf.q index 6ac670a..2620ace 100644 --- ql/src/test/queries/clientpositive/timestamp_udf.q +++ ql/src/test/queries/clientpositive/timestamp_udf.q @@ -26,6 +26,17 @@ select from_utc_timestamp(t, 'America/Chicago') select to_utc_timestamp(t, 'America/Chicago') from timestamp_udf; +select t, from_utc_timestamp(t, 'America/Chicago') + from timestamp_udf; + +select t, from_utc_timestamp(t, 'America/Chicago'), t, from_utc_timestamp(t, 'America/Chicago') + from timestamp_udf; + +select t, to_utc_timestamp(t, 'America/Chicago') + from timestamp_udf; + +select t, to_utc_timestamp(t, 'America/Chicago'), t, to_utc_timestamp(t, 'America/Chicago') + from timestamp_udf; -- Test UDFs with string input select unix_timestamp(t), year(t), month(t), day(t), dayofmonth(t), diff --git ql/src/test/results/clientpositive/timestamp_udf.q.out ql/src/test/results/clientpositive/timestamp_udf.q.out index 280d736..c04de7a 100644 --- ql/src/test/results/clientpositive/timestamp_udf.q.out +++ ql/src/test/results/clientpositive/timestamp_udf.q.out @@ -91,7 +91,7 @@ POSTHOOK: Input: default@timestamp_udf #### A masked pattern was here #### POSTHOOK: Lineage: timestamp_udf.t EXPRESSION [] POSTHOOK: Lineage: timestamp_udf_string.t SIMPLE [] -2011-05-06 02:08:09.2464567 +2011-05-06 02:08:09.1234567 PREHOOK: query: select to_utc_timestamp(t, 'America/Chicago') from timestamp_udf PREHOOK: type: QUERY @@ -104,7 +104,59 @@ POSTHOOK: Input: default@timestamp_udf #### A masked pattern was here #### POSTHOOK: Lineage: timestamp_udf.t EXPRESSION [] POSTHOOK: Lineage: timestamp_udf_string.t SIMPLE [] -2011-05-06 12:08:09.2464567 +2011-05-06 12:08:09.1234567 +PREHOOK: query: select t, from_utc_timestamp(t, 'America/Chicago') + from timestamp_udf +PREHOOK: type: QUERY +PREHOOK: Input: default@timestamp_udf +#### A masked pattern was here #### +POSTHOOK: query: select t, from_utc_timestamp(t, 'America/Chicago') + from timestamp_udf +POSTHOOK: type: QUERY +POSTHOOK: Input: default@timestamp_udf +#### A masked pattern was here #### +POSTHOOK: Lineage: timestamp_udf.t EXPRESSION [] +POSTHOOK: Lineage: timestamp_udf_string.t SIMPLE [] +2011-05-06 07:08:09.1234567 2011-05-06 02:08:09.1234567 +PREHOOK: query: select t, from_utc_timestamp(t, 'America/Chicago'), t, from_utc_timestamp(t, 'America/Chicago') + from timestamp_udf +PREHOOK: type: QUERY +PREHOOK: Input: default@timestamp_udf +#### A masked pattern was here #### +POSTHOOK: query: select t, from_utc_timestamp(t, 'America/Chicago'), t, from_utc_timestamp(t, 'America/Chicago') + from timestamp_udf +POSTHOOK: type: QUERY +POSTHOOK: Input: default@timestamp_udf +#### A masked pattern was here #### +POSTHOOK: Lineage: timestamp_udf.t EXPRESSION [] +POSTHOOK: Lineage: timestamp_udf_string.t SIMPLE [] +2011-05-06 07:08:09.1234567 2011-05-06 02:08:09.1234567 2011-05-06 07:08:09.1234567 2011-05-06 02:08:09.1234567 +PREHOOK: query: select t, to_utc_timestamp(t, 'America/Chicago') + from timestamp_udf +PREHOOK: type: QUERY +PREHOOK: Input: default@timestamp_udf +#### A masked pattern was here #### +POSTHOOK: query: select t, to_utc_timestamp(t, 'America/Chicago') + from timestamp_udf +POSTHOOK: type: QUERY +POSTHOOK: Input: default@timestamp_udf +#### A masked pattern was here #### +POSTHOOK: Lineage: timestamp_udf.t EXPRESSION [] +POSTHOOK: Lineage: timestamp_udf_string.t SIMPLE [] +2011-05-06 07:08:09.1234567 2011-05-06 12:08:09.1234567 +PREHOOK: query: select t, to_utc_timestamp(t, 'America/Chicago'), t, to_utc_timestamp(t, 'America/Chicago') + from timestamp_udf +PREHOOK: type: QUERY +PREHOOK: Input: default@timestamp_udf +#### A masked pattern was here #### +POSTHOOK: query: select t, to_utc_timestamp(t, 'America/Chicago'), t, to_utc_timestamp(t, 'America/Chicago') + from timestamp_udf +POSTHOOK: type: QUERY +POSTHOOK: Input: default@timestamp_udf +#### A masked pattern was here #### +POSTHOOK: Lineage: timestamp_udf.t EXPRESSION [] +POSTHOOK: Lineage: timestamp_udf_string.t SIMPLE [] +2011-05-06 07:08:09.1234567 2011-05-06 12:08:09.1234567 2011-05-06 07:08:09.1234567 2011-05-06 12:08:09.1234567 PREHOOK: query: -- Test UDFs with string input select unix_timestamp(t), year(t), month(t), day(t), dayofmonth(t), weekofyear(t), hour(t), minute(t), second(t), to_date(t) @@ -158,7 +210,7 @@ POSTHOOK: Input: default@timestamp_udf_string #### A masked pattern was here #### POSTHOOK: Lineage: timestamp_udf.t EXPRESSION [] POSTHOOK: Lineage: timestamp_udf_string.t SIMPLE [] -2011-05-06 02:08:09.2464567 +2011-05-06 02:08:09.1234567 PREHOOK: query: select to_utc_timestamp(t, 'America/Chicago') from timestamp_udf_string PREHOOK: type: QUERY @@ -171,7 +223,7 @@ POSTHOOK: Input: default@timestamp_udf_string #### A masked pattern was here #### POSTHOOK: Lineage: timestamp_udf.t EXPRESSION [] POSTHOOK: Lineage: timestamp_udf_string.t SIMPLE [] -2011-05-06 12:08:09.2464567 +2011-05-06 12:08:09.1234567 PREHOOK: query: drop table timestamp_udf PREHOOK: type: DROPTABLE PREHOOK: Input: default@timestamp_udf