Index: ql/src/test/results/clientpositive/timestamp_udf.q.out =================================================================== --- ql/src/test/results/clientpositive/timestamp_udf.q.out +++ ql/src/test/results/clientpositive/timestamp_udf.q.out @@ -91,7 +91,7 @@ #### 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 @@ #### 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 @@ #### 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 @@ #### 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 Index: ql/src/test/queries/clientpositive/timestamp_udf.q =================================================================== --- ql/src/test/queries/clientpositive/timestamp_udf.q +++ ql/src/test/queries/clientpositive/timestamp_udf.q @@ -26,6 +26,17 @@ 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), Index: ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFFromUtcTimestamp.java =================================================================== --- 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 @@ 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