Description
How to reproduce:
$ echo "2011-12-25 09:00:00.123456" > /tmp/data5.txt hive> create table ts1(t1 timestamp); hive> load data local inpath '/tmp/data5.txt' overwrite into table ts1; hive> select t1, from_utc_timestamp(t1, 'JST'), from_utc_timestamp(t1, 'JST') from ts1 limit 1;
The following result is expected:
2011-12-25 09:00:00.123456 2011-12-25 18:00:00.123456 2011-12-25 18:00:00.123456
However, the above query return incorrect result like this:
2011-12-26 03:00:00.492456 2011-12-26 03:00:00.492456 2011-12-26 03:00:00.492456
This is because GenericUDFFromUtcTimestamp.applyOffset() does setTime() improperly.
On evaluating query, timestamp argument always returns the same instance.
GenericUDFFromUtcTimestamp.applyOffset() does setTime() on the instance.
That means it adds all offsets in the query.