hadoop-hive-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From zs...@apache.org
Subject 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/
Date Thu, 01 Apr 2010 22:26:00 GMT
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());
+    }
+}



Mime
View raw message