You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by zs...@apache.org on 2010/04/02 00:26:00 UTC
svn commit: r930114 - in /hadoop/hive/trunk: ./
ql/src/java/org/apache/hadoop/hive/ql/udf/
ql/src/test/org/apache/hadoop/hive/ql/udf/
Author: zshao
Date: Thu Apr 1 22:26:00 2010
New Revision: 930114
URL: http://svn.apache.org/viewvc?rev=930114&view=rev
Log:
HIVE-1253. Fix Date_sub and Date_add in case of daylight saving. (Bryan Talbot via zshao)
Added:
hadoop/hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/udf/TestUDFDateAdd.java
hadoop/hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/udf/TestUDFDateDiff.java
hadoop/hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/udf/TestUDFDateSub.java
Modified:
hadoop/hive/trunk/CHANGES.txt
hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDateAdd.java
hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDateSub.java
Modified: hadoop/hive/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/CHANGES.txt?rev=930114&r1=930113&r2=930114&view=diff
==============================================================================
--- hadoop/hive/trunk/CHANGES.txt (original)
+++ hadoop/hive/trunk/CHANGES.txt Thu Apr 1 22:26:00 2010
@@ -333,6 +333,9 @@ Trunk - Unreleased
HIVE-1286. Remove debug message from stdout in ColumnarSerDe.
(Yongqiang He via zshao)
+ HIVE-1253. Fix Date_sub and Date_add in case of daylight saving.
+ (Bryan Talbot via zshao)
+
Release 0.5.0 - Unreleased
INCOMPATIBLE CHANGES
Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDateAdd.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDateAdd.java?rev=930114&r1=930113&r2=930114&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDateAdd.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDateAdd.java Thu Apr 1 22:26:00 2010
@@ -22,7 +22,6 @@ import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
-import java.util.TimeZone;
import org.apache.hadoop.hive.ql.exec.Description;
import org.apache.hadoop.hive.ql.exec.UDF;
@@ -43,7 +42,7 @@ import org.apache.hadoop.io.Text;
+ " '2009-31-07'")
public class UDFDateAdd extends UDF {
private final SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
- private final Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
+ private final Calendar calendar = Calendar.getInstance();
private Text result = new Text();
Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDateSub.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDateSub.java?rev=930114&r1=930113&r2=930114&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDateSub.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDateSub.java Thu Apr 1 22:26:00 2010
@@ -22,7 +22,6 @@ import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
-import java.util.TimeZone;
import org.apache.hadoop.hive.ql.exec.Description;
import org.apache.hadoop.hive.ql.exec.UDF;
@@ -43,8 +42,7 @@ import org.apache.hadoop.io.Text;
+ " '2009-29-07'")
public class UDFDateSub extends UDF {
private final SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
- private final Calendar calendar = Calendar.getInstance(TimeZone
- .getTimeZone("UTC"));
+ private final Calendar calendar = Calendar.getInstance();
private Text result = new Text();
Added: hadoop/hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/udf/TestUDFDateAdd.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/udf/TestUDFDateAdd.java?rev=930114&view=auto
==============================================================================
--- hadoop/hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/udf/TestUDFDateAdd.java (added)
+++ hadoop/hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/udf/TestUDFDateAdd.java Thu Apr 1 22:26:00 2010
@@ -0,0 +1,68 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hive.ql.udf;
+
+import org.apache.hadoop.io.IntWritable;
+import org.apache.hadoop.io.Text;
+
+import junit.framework.TestCase;
+
+import java.util.TimeZone;
+
+/**
+ * JUnit test for UDFDateAdd.
+ */
+public class TestUDFDateAdd extends TestCase {
+
+ /**
+ * Verify if adding dates across a daylight savings time change
+ * from daylight to standard time. The timezone tested is west
+ * coast US (PDT/PST) with a 1 hour shift back in time at 02:00 AM
+ * on 2009-10-31.
+ */
+ public void testFallBack() throws Exception {
+ // set the default time zone so that the dates cover
+ // the zone's daylight saving time adjustment (2009-10-31)
+ // from daylight to standard time
+ TimeZone.setDefault(TimeZone.getTimeZone("America/Los_Angeles"));
+ final IntWritable nmDays = new IntWritable(7);
+ final Text dtStr = new Text("2009-10-26");
+
+ final Text result = new UDFDateAdd().evaluate(dtStr, nmDays);
+ assertEquals("2009-11-02", result.toString());
+ }
+
+ /**
+ * Verify if adding dates across a daylight savings time change
+ * from standard to daylight time. The timezone tested is west
+ * coast US (PDT/PST) with a 1 hour shift forward in time at 02:00 AM
+ * on 2010-03-14.
+ */
+ public void testSpringAhead() throws Exception {
+ // set the default time zone so that the dates cover
+ // the zone's daylight saving time adjustment (2010-03-14)
+ // from standard to daylight time
+ TimeZone.setDefault(TimeZone.getTimeZone("America/Los_Angeles"));
+ final IntWritable nmDays = new IntWritable(7);
+ final Text dtStr = new Text("2010-03-08");
+
+ final Text result = new UDFDateAdd().evaluate(dtStr, nmDays);
+ assertEquals("2010-03-15", result.toString());
+ }
+}
Added: hadoop/hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/udf/TestUDFDateDiff.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/udf/TestUDFDateDiff.java?rev=930114&view=auto
==============================================================================
--- hadoop/hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/udf/TestUDFDateDiff.java (added)
+++ hadoop/hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/udf/TestUDFDateDiff.java Thu Apr 1 22:26:00 2010
@@ -0,0 +1,66 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hive.ql.udf;
+
+import org.apache.hadoop.io.IntWritable;
+import org.apache.hadoop.io.Text;
+
+import junit.framework.TestCase;
+
+import java.util.TimeZone;
+
+/**
+ * JUnit test for UDFDateDiff.
+ */
+public class TestUDFDateDiff extends TestCase {
+
+ /**
+ * Verify differences of dates crossing a daylight savings time change
+ * are correct. The timezone tested is west coast US (PDT/PST) with a
+ * 1 hour shift back in time at 02:00 AM on 2009-10-31 and a
+ * 1 hour shift forward in time at 02:00 AM on 2010-03-14.
+ */
+ public void testDaylightChange() throws Exception {
+ TimeZone.setDefault(TimeZone.getTimeZone("America/Los_Angeles"));
+
+ // time moves ahead an hour at 02:00 on 2009-10-31
+ // which results in a 23 hour long day
+ Text date1 = new Text("2009-11-01");
+ Text date2 = new Text("2009-10-25");
+
+ IntWritable result = new UDFDateDiff().evaluate(date1, date2);
+ assertEquals(7, result.get());
+
+ result = new UDFDateDiff().evaluate(date2, date1);
+ assertEquals(-7, result.get());
+
+
+ // time moves back an hour at 02:00 on 2010-03-14
+ // which results in a 25 hour long day
+ date1 = new Text("2010-03-15");
+ date2 = new Text("2010-03-08");
+
+ result = new UDFDateDiff().evaluate(date1, date2);
+ assertEquals(7, result.get());
+
+ result = new UDFDateDiff().evaluate(date2, date1);
+ assertEquals(-7, result.get());
+
+ }
+}
Added: hadoop/hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/udf/TestUDFDateSub.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/udf/TestUDFDateSub.java?rev=930114&view=auto
==============================================================================
--- hadoop/hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/udf/TestUDFDateSub.java (added)
+++ hadoop/hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/udf/TestUDFDateSub.java Thu Apr 1 22:26:00 2010
@@ -0,0 +1,68 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hive.ql.udf;
+
+import org.apache.hadoop.io.IntWritable;
+import org.apache.hadoop.io.Text;
+
+import junit.framework.TestCase;
+
+import java.util.TimeZone;
+
+/**
+ * JUnit test for UDFDateSub.
+ */
+public class TestUDFDateSub extends TestCase {
+
+ /**
+ * Verify if subtracting dates across a daylight savings time change
+ * from daylight to standard time. The timezone tested is west
+ * coast US (PDT/PST) with a 1 hour shift back in time at 02:00 AM
+ * on 2009-10-31.
+ */
+ public void testFallBack() throws Exception {
+ // set the default time zone so that the dates cover
+ // the zone's daylight saving time adjustment (2009-10-31)
+ // from daylight to standard time
+ TimeZone.setDefault(TimeZone.getTimeZone("America/Los_Angeles"));
+ final IntWritable nmDays = new IntWritable(7);
+ final Text dtStr = new Text("2009-11-02");
+
+ final Text result = new UDFDateSub().evaluate(dtStr, nmDays);
+ assertEquals("2009-10-26", result.toString());
+ }
+
+ /**
+ * Verify if subtracting dates across a daylight savings time change
+ * from standard to daylight time. The timezone tested is west
+ * coast US (PDT/PST) with a 1 hour shift forward in time at 02:00 AM
+ * on 2010-03-14.
+ */
+ public void testSpringAhead() throws Exception {
+ // set the default time zone so that the dates cover
+ // the zone's daylight saving time adjustment (2010-03-14)
+ // from standard to daylight time
+ TimeZone.setDefault(TimeZone.getTimeZone("America/Los_Angeles"));
+ final IntWritable nmDays = new IntWritable(7);
+ final Text dtStr = new Text("2010-03-15");
+
+ final Text result = new UDFDateSub().evaluate(dtStr, nmDays);
+ assertEquals("2010-03-08", result.toString());
+ }
+}