You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ha...@apache.org on 2013/07/27 23:20:06 UTC

svn commit: r1507713 [5/6] - in /hive/trunk: data/files/ jdbc/src/java/org/apache/hadoop/hive/jdbc/ jdbc/src/java/org/apache/hive/jdbc/ jdbc/src/test/org/apache/hadoop/hive/jdbc/ jdbc/src/test/org/apache/hive/jdbc/ ql/src/gen/protobuf/gen-java/org/apac...

Added: hive/trunk/ql/src/test/results/clientpositive/union_date.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientpositive/union_date.q.out?rev=1507713&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientpositive/union_date.q.out (added)
+++ hive/trunk/ql/src/test/results/clientpositive/union_date.q.out Sat Jul 27 21:20:03 2013
@@ -0,0 +1,128 @@
+PREHOOK: query: drop table union_date_1
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table union_date_1
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: drop table union_date_2
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table union_date_2
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: create table union_date_1 (
+  ORIGIN_CITY_NAME string,
+  DEST_CITY_NAME string,
+  FL_DATE date,
+  ARR_DELAY float,
+  FL_NUM int
+)
+PREHOOK: type: CREATETABLE
+POSTHOOK: query: create table union_date_1 (
+  ORIGIN_CITY_NAME string,
+  DEST_CITY_NAME string,
+  FL_DATE date,
+  ARR_DELAY float,
+  FL_NUM int
+)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: default@union_date_1
+PREHOOK: query: create table union_date_2 (
+  ORIGIN_CITY_NAME string,
+  DEST_CITY_NAME string,
+  FL_DATE date,
+  ARR_DELAY float,
+  FL_NUM int
+)
+PREHOOK: type: CREATETABLE
+POSTHOOK: query: create table union_date_2 (
+  ORIGIN_CITY_NAME string,
+  DEST_CITY_NAME string,
+  FL_DATE date,
+  ARR_DELAY float,
+  FL_NUM int
+)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: default@union_date_2
+PREHOOK: query: LOAD DATA LOCAL INPATH '../data/files/flights_join.txt' OVERWRITE INTO TABLE union_date_1
+PREHOOK: type: LOAD
+PREHOOK: Output: default@union_date_1
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../data/files/flights_join.txt' OVERWRITE INTO TABLE union_date_1
+POSTHOOK: type: LOAD
+POSTHOOK: Output: default@union_date_1
+PREHOOK: query: LOAD DATA LOCAL INPATH '../data/files/flights_join.txt' OVERWRITE INTO TABLE union_date_2
+PREHOOK: type: LOAD
+PREHOOK: Output: default@union_date_2
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../data/files/flights_join.txt' OVERWRITE INTO TABLE union_date_2
+POSTHOOK: type: LOAD
+POSTHOOK: Output: default@union_date_2
+PREHOOK: query: select * from (
+  select fl_num, fl_date from union_date_1
+  union all
+  select fl_num, fl_date from union_date_2
+) union_result order by fl_date, fl_num
+PREHOOK: type: QUERY
+PREHOOK: Input: default@union_date_1
+PREHOOK: Input: default@union_date_2
+#### A masked pattern was here ####
+POSTHOOK: query: select * from (
+  select fl_num, fl_date from union_date_1
+  union all
+  select fl_num, fl_date from union_date_2
+) union_result order by fl_date, fl_num
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@union_date_1
+POSTHOOK: Input: default@union_date_2
+#### A masked pattern was here ####
+1064	2000-11-20
+1064	2000-11-20
+1142	2000-11-21
+1142	2000-11-21
+1599	2000-11-22
+1599	2000-11-22
+361	2000-11-23
+361	2000-11-23
+897	2000-11-24
+897	2000-11-24
+1531	2000-11-25
+1531	2000-11-25
+1610	2000-11-26
+1610	2000-11-26
+3198	2000-11-27
+3198	2000-11-27
+1064	2000-11-28
+1064	2000-11-28
+1142	2000-11-28
+1142	2000-11-28
+1064	2010-10-20
+1064	2010-10-20
+1142	2010-10-21
+1142	2010-10-21
+1599	2010-10-22
+1599	2010-10-22
+361	2010-10-23
+361	2010-10-23
+897	2010-10-24
+897	2010-10-24
+1531	2010-10-25
+1531	2010-10-25
+1610	2010-10-26
+1610	2010-10-26
+3198	2010-10-27
+3198	2010-10-27
+1064	2010-10-28
+1064	2010-10-28
+1142	2010-10-29
+1142	2010-10-29
+PREHOOK: query: drop table union_date_1
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@union_date_1
+PREHOOK: Output: default@union_date_1
+POSTHOOK: query: drop table union_date_1
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@union_date_1
+POSTHOOK: Output: default@union_date_1
+PREHOOK: query: drop table union_date_2
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@union_date_2
+PREHOOK: Output: default@union_date_2
+POSTHOOK: query: drop table union_date_2
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@union_date_2
+POSTHOOK: Output: default@union_date_2

Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/RegexSerDe.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/RegexSerDe.java?rev=1507713&r1=1507712&r2=1507713&view=diff
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/RegexSerDe.java (original)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/RegexSerDe.java Sat Jul 27 21:20:03 2013
@@ -17,6 +17,8 @@
  */
 package org.apache.hadoop.hive.serde2;
 
+import java.sql.Date;
+import java.sql.Timestamp;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -134,6 +136,10 @@ public class RegexSerDe extends Abstract
        columnOIs.add(PrimitiveObjectInspectorFactory.javaDoubleObjectInspector);
       } else if (typeName.equals(serdeConstants.BOOLEAN_TYPE_NAME)) {
         columnOIs.add(PrimitiveObjectInspectorFactory.javaBooleanObjectInspector);
+      } else if (typeName.equals(serdeConstants.TIMESTAMP_TYPE_NAME)) {
+        columnOIs.add(PrimitiveObjectInspectorFactory.javaTimestampObjectInspector);
+      } else if (typeName.equals(serdeConstants.DATE_TYPE_NAME)) {
+        columnOIs.add(PrimitiveObjectInspectorFactory.javaDateObjectInspector);
       } else if (typeName.equals(serdeConstants.DECIMAL_TYPE_NAME)) {
         columnOIs.add(PrimitiveObjectInspectorFactory.javaHiveDecimalObjectInspector);
       } else {
@@ -229,6 +235,14 @@ public class RegexSerDe extends Abstract
           Boolean b;
           b = Boolean.valueOf(t);
           row.set(c, b);
+        } else if (typeName.equals(serdeConstants.TIMESTAMP_TYPE_NAME)) {
+          Timestamp ts;
+          ts = Timestamp.valueOf(t);
+          row.set(c, ts);
+        } else if (typeName.equals(serdeConstants.DATE_TYPE_NAME)) {
+          Date d;
+          d = Date.valueOf(t);
+          row.set(c, d);
         } else if (typeName.equals(serdeConstants.DECIMAL_TYPE_NAME)) {
           HiveDecimal bd;
           bd = new HiveDecimal(t);

Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/SerDeUtils.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/SerDeUtils.java?rev=1507713&r1=1507712&r2=1507713&view=diff
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/SerDeUtils.java (original)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/SerDeUtils.java Sat Jul 27 21:20:03 2013
@@ -44,6 +44,7 @@ import org.apache.hadoop.hive.serde2.obj
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.LongObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.ShortObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.StringObjectInspector;
+import org.apache.hadoop.hive.serde2.objectinspector.primitive.DateObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.TimestampObjectInspector;
 import org.apache.hadoop.io.BytesWritable;
 import org.apache.hadoop.io.Text;
@@ -283,6 +284,13 @@ public final class SerDeUtils {
           sb.append('"');
           break;
         }
+        case DATE: {
+          sb.append('"');
+          sb.append(((DateObjectInspector) poi)
+              .getPrimitiveWritableObject(o));
+          sb.append('"');
+          break;
+        }
         case TIMESTAMP: {
           sb.append('"');
           sb.append(((TimestampObjectInspector) poi)

Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/binarysortable/BinarySortableSerDe.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/binarysortable/BinarySortableSerDe.java?rev=1507713&r1=1507712&r2=1507713&view=diff
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/binarysortable/BinarySortableSerDe.java (original)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/binarysortable/BinarySortableSerDe.java Sat Jul 27 21:20:03 2013
@@ -37,6 +37,7 @@ import org.apache.hadoop.hive.serde2.Abs
 import org.apache.hadoop.hive.serde2.SerDeException;
 import org.apache.hadoop.hive.serde2.SerDeStats;
 import org.apache.hadoop.hive.serde2.io.ByteWritable;
+import org.apache.hadoop.hive.serde2.io.DateWritable;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
 import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.ShortWritable;
@@ -52,6 +53,7 @@ import org.apache.hadoop.hive.serde2.obj
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.BinaryObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.BooleanObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.ByteObjectInspector;
+import org.apache.hadoop.hive.serde2.objectinspector.primitive.DateObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.DoubleObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.FloatObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.HiveDecimalObjectInspector;
@@ -225,11 +227,7 @@ public class BinarySortableSerDe extends
       }
       case INT: {
         IntWritable r = reuse == null ? new IntWritable() : (IntWritable) reuse;
-        int v = buffer.read(invert) ^ 0x80;
-        for (int i = 0; i < 3; i++) {
-          v = (v << 8) + (buffer.read(invert) & 0xff);
-        }
-        r.set(v);
+        r.set(deserializeInt(buffer, invert));
         return r;
       }
       case LONG: {
@@ -368,6 +366,13 @@ public class BinarySortableSerDe extends
         return bw;
       }
 
+      case DATE: {
+        DateWritable d = reuse == null ? new DateWritable()
+            : (DateWritable) reuse;
+        d.set(deserializeInt(buffer, invert));
+        return d;
+      }
+
       case TIMESTAMP:
         TimestampWritable t = (reuse == null ? new TimestampWritable() :
             (TimestampWritable) reuse);
@@ -539,6 +544,14 @@ public class BinarySortableSerDe extends
     }
   }
 
+  private static int deserializeInt(InputByteBuffer buffer, boolean invert) throws IOException {
+    int v = buffer.read(invert) ^ 0x80;
+    for (int i = 0; i < 3; i++) {
+      v = (v << 8) + (buffer.read(invert) & 0xff);
+    }
+    return v;
+  }
+
   BytesWritable serializeBytesWritable = new BytesWritable();
   OutputByteBuffer outputByteBuffer = new OutputByteBuffer();
 
@@ -596,10 +609,7 @@ public class BinarySortableSerDe extends
       case INT: {
         IntObjectInspector ioi = (IntObjectInspector) poi;
         int v = ioi.get(o);
-        buffer.write((byte) ((v >> 24) ^ 0x80), invert);
-        buffer.write((byte) (v >> 16), invert);
-        buffer.write((byte) (v >> 8), invert);
-        buffer.write((byte) v, invert);
+        serializeInt(buffer, v, invert);
         return;
       }
       case LONG: {
@@ -666,6 +676,12 @@ public class BinarySortableSerDe extends
         serializeBytes(buffer, toSer, ba.getLength(), invert);
         return;
       }
+      case  DATE: {
+        DateObjectInspector doi = (DateObjectInspector) poi;
+        int v = doi.getPrimitiveWritableObject(o).getDays();
+        serializeInt(buffer, v, invert);
+        return;
+      }
       case TIMESTAMP: {
         TimestampObjectInspector toi = (TimestampObjectInspector) poi;
         TimestampWritable t = toi.getPrimitiveWritableObject(o);
@@ -788,6 +804,14 @@ public class BinarySortableSerDe extends
     }
     buffer.write((byte) 0, invert);
   }
+
+  private static void serializeInt(OutputByteBuffer buffer, int v, boolean invert) {
+    buffer.write((byte) ((v >> 24) ^ 0x80), invert);
+    buffer.write((byte) (v >> 16), invert);
+    buffer.write((byte) (v >> 8), invert);
+    buffer.write((byte) v, invert);
+  }
+
   @Override
   public SerDeStats getSerDeStats() {
     // no support for statistics

Added: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/io/DateWritable.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/io/DateWritable.java?rev=1507713&view=auto
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/io/DateWritable.java (added)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/io/DateWritable.java Sat Jul 27 21:20:03 2013
@@ -0,0 +1,183 @@
+/**
+ * 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.serde2.io;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+import java.sql.Date;
+import java.util.Calendar;
+import java.util.TimeZone;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.hive.serde2.ByteStream.Output;
+import org.apache.hadoop.hive.serde2.lazybinary.LazyBinaryUtils;
+import org.apache.hadoop.hive.serde2.lazybinary.LazyBinaryUtils.VInt;
+import org.apache.hadoop.io.WritableComparable;
+import org.apache.hadoop.io.WritableUtils;
+
+
+/**
+ * DateWritable
+ * Writable equivalent of java.sql.Date.
+ *
+ * Dates are of the format
+ *    YYYY-MM-DD
+ *
+ */
+public class DateWritable implements WritableComparable<DateWritable> {
+  private static final Log LOG = LogFactory.getLog(DateWritable.class);
+
+  private static final long MILLIS_PER_DAY = TimeUnit.DAYS.toMillis(1);
+
+  // Local time zone.
+  // Java TimeZone has no mention of thread safety. Use thread local instance to be safe.
+  private static final ThreadLocal<TimeZone> LOCAL_TIMEZONE = new ThreadLocal<TimeZone>() {
+    @Override
+    protected TimeZone initialValue() {
+      return Calendar.getInstance().getTimeZone();
+    }
+  };
+
+  // Internal representation is an integer representing day offset from our epoch value 1970-01-01
+  private int daysSinceEpoch = 0;
+
+  /* Constructors */
+  public DateWritable() {
+  }
+
+  public DateWritable(DateWritable d) {
+    set(d);
+  }
+
+  public DateWritable(Date d) {
+    set(d);
+  }
+
+  public DateWritable(int d) {
+    set(d);
+  }
+
+  /**
+   * Set the DateWritable based on the days since epoch date.
+   * @param d integer value representing days since epoch date
+   */
+  public void set(int d) {
+    daysSinceEpoch = d;
+  }
+
+  /**
+   * Set the DateWritable based on the year/month/day of the date in the local timezone.
+   * @param d Date value
+   */
+  public void set(Date d) {
+    if (d == null) {
+      daysSinceEpoch = 0;
+      return;
+    }
+
+    set(dateToDays(d));
+  }
+
+  public void set(DateWritable d) {
+    set(d.daysSinceEpoch);
+  }
+
+  /**
+   *
+   * @return Date value corresponding to the date in the local time zone
+   */
+  public Date get() {
+    return new Date(daysToMillis(daysSinceEpoch));
+  }
+
+  public int getDays() {
+    return daysSinceEpoch;
+  }
+
+  /**
+   *
+   * @return time in seconds corresponding to this DateWritable
+   */
+  public long getTimeInSeconds() {
+    return get().getTime() / 1000;
+  }
+
+  public static Date timeToDate(long l) {
+    return new Date(l * 1000);
+  }
+
+  public static long daysToMillis(int d) {
+    // Convert from day offset to ms in UTC, then apply local timezone offset.
+    long millisUtc = d * MILLIS_PER_DAY;
+    return millisUtc - LOCAL_TIMEZONE.get().getOffset(millisUtc);
+  }
+
+  public static int dateToDays(Date d) {
+    // convert to equivalent time in UTC, then get day offset
+    long millisLocal = d.getTime();
+    long millisUtc = millisLocal + LOCAL_TIMEZONE.get().getOffset(millisLocal);
+    return (int)(millisUtc / MILLIS_PER_DAY);
+  }
+
+  public void setFromBytes(byte[] bytes, int offset, int length, VInt vInt) {
+    LazyBinaryUtils.readVInt(bytes, offset, vInt);
+    assert (length == vInt.length);
+    set(vInt.value);
+  }
+
+  public void writeToByteStream(Output byteStream) {
+    LazyBinaryUtils.writeVInt(byteStream, getDays());
+  }
+
+
+  @Override
+  public void readFields(DataInput in) throws IOException {
+    daysSinceEpoch = WritableUtils.readVInt(in);
+  }
+
+  @Override
+  public void write(DataOutput out) throws IOException {
+    WritableUtils.writeVInt(out, daysSinceEpoch);
+  }
+
+  @Override
+  public int compareTo(DateWritable d) {
+    return daysSinceEpoch - d.daysSinceEpoch;
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (!(o instanceof DateWritable)) {
+      return false;
+    }
+    return compareTo((DateWritable) o) == 0;
+  }
+
+  @Override
+  public String toString() {
+    return get().toString();
+  }
+
+  @Override
+  public int hashCode() {
+    return daysSinceEpoch;
+  }
+}

Added: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyDate.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyDate.java?rev=1507713&view=auto
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyDate.java (added)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyDate.java Sat Jul 27 21:20:03 2013
@@ -0,0 +1,85 @@
+/**
+ * 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.serde2.lazy;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.nio.ByteBuffer;
+import java.sql.Date;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.hive.serde2.io.DateWritable;
+import org.apache.hadoop.hive.serde2.lazy.objectinspector.primitive.LazyDateObjectInspector;
+import org.apache.hadoop.io.Text;
+
+/**
+ *
+ * LazyDate.
+ * Serializes and deserializes a Date in the SQL date format
+ *
+ *    YYYY-MM-DD
+ *
+ */
+public class LazyDate extends LazyPrimitive<LazyDateObjectInspector, DateWritable> {
+  private static final Log LOG = LogFactory.getLog(LazyDate.class);
+
+  public LazyDate(LazyDateObjectInspector oi) {
+    super(oi);
+    data = new DateWritable();
+  }
+
+  public LazyDate(LazyDate copy) {
+    super(copy);
+    data = new DateWritable(copy.data);
+  }
+
+  /**
+   * Initializes LazyDate object by interpreting the input bytes as a SQL date string.
+   *
+   * @param bytes
+   * @param start
+   * @param length
+   */
+  @Override
+  public void init(ByteArrayRef bytes, int start, int length) {
+    String s = null;
+    try {
+      s = Text.decode(bytes.getData(), start, length);
+      data.set(Date.valueOf(s));
+    } catch (Exception e) {
+      isNull = true;
+      logExceptionMessage(bytes, start, length, "DATE");
+    }
+  }
+
+  /**
+   * Writes a Date in SQL date format to the output stream.
+   * @param out
+   *          The output stream
+   * @param i
+   *          The Date to write
+   * @throws IOException
+   */
+  public static void writeUTF8(OutputStream out, DateWritable d)
+      throws IOException {
+    ByteBuffer b = Text.encode(d.toString());
+    out.write(b.array(), 0, b.limit());
+  }
+
+}

Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyFactory.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyFactory.java?rev=1507713&r1=1507712&r2=1507713&view=diff
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyFactory.java (original)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyFactory.java Sat Jul 27 21:20:03 2013
@@ -38,6 +38,7 @@ import org.apache.hadoop.hive.serde2.laz
 import org.apache.hadoop.hive.serde2.lazy.objectinspector.primitive.LazyPrimitiveObjectInspectorFactory;
 import org.apache.hadoop.hive.serde2.lazy.objectinspector.primitive.LazyShortObjectInspector;
 import org.apache.hadoop.hive.serde2.lazy.objectinspector.primitive.LazyStringObjectInspector;
+import org.apache.hadoop.hive.serde2.lazy.objectinspector.primitive.LazyDateObjectInspector;
 import org.apache.hadoop.hive.serde2.lazy.objectinspector.primitive.LazyTimestampObjectInspector;
 import org.apache.hadoop.hive.serde2.lazy.objectinspector.primitive.LazyVoidObjectInspector;
 import org.apache.hadoop.hive.serde2.lazydio.LazyDioBoolean;
@@ -111,6 +112,8 @@ public final class LazyFactory {
       return new LazyDouble((LazyDoubleObjectInspector) oi);
     case STRING:
       return new LazyString((LazyStringObjectInspector) oi);
+    case DATE:
+      return new LazyDate((LazyDateObjectInspector) oi);
     case TIMESTAMP:
       return new LazyTimestamp((LazyTimestampObjectInspector) oi);
     case BINARY:

Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyUtils.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyUtils.java?rev=1507713&r1=1507712&r2=1507713&view=diff
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyUtils.java (original)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyUtils.java Sat Jul 27 21:20:03 2013
@@ -43,6 +43,7 @@ import org.apache.hadoop.hive.serde2.obj
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.LongObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.ShortObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.StringObjectInspector;
+import org.apache.hadoop.hive.serde2.objectinspector.primitive.DateObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.TimestampObjectInspector;
 import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoUtils;
 import org.apache.hadoop.io.BytesWritable;
@@ -232,6 +233,11 @@ public final class LazyUtils {
       out.write(toWrite, 0, toWrite.length);
       break;
     }
+    case DATE: {
+      LazyDate.writeUTF8(out,
+          ((DateObjectInspector) oi).getPrimitiveWritableObject(o));
+      break;
+    }
     case TIMESTAMP: {
       LazyTimestamp.writeUTF8(out,
           ((TimestampObjectInspector) oi).getPrimitiveWritableObject(o));

Added: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/objectinspector/primitive/LazyDateObjectInspector.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/objectinspector/primitive/LazyDateObjectInspector.java?rev=1507713&view=auto
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/objectinspector/primitive/LazyDateObjectInspector.java (added)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/objectinspector/primitive/LazyDateObjectInspector.java Sat Jul 27 21:20:03 2013
@@ -0,0 +1,47 @@
+/**
+ * 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.serde2.lazy.objectinspector.primitive;
+
+import java.sql.Date;
+
+import org.apache.hadoop.hive.serde2.io.DateWritable;
+import org.apache.hadoop.hive.serde2.lazy.LazyDate;
+import org.apache.hadoop.hive.serde2.objectinspector.primitive.DateObjectInspector;
+import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorUtils;
+
+/**
+ * A WritableDateObjectInspector inspects a DateWritable Object.
+ */
+public class LazyDateObjectInspector
+    extends AbstractPrimitiveLazyObjectInspector<DateWritable>
+    implements DateObjectInspector {
+
+  protected LazyDateObjectInspector() {
+    super(PrimitiveObjectInspectorUtils.dateTypeEntry);
+  }
+
+  @Override
+  public Object copyObject(Object o) {
+    return o == null ? null : new LazyDate((LazyDate) o);
+  }
+
+  @Override
+  public Date getPrimitiveJavaObject(Object o) {
+    return o == null ? null : ((LazyDate) o).getWritableObject().get();
+  }
+}

Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/objectinspector/primitive/LazyPrimitiveObjectInspectorFactory.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/objectinspector/primitive/LazyPrimitiveObjectInspectorFactory.java?rev=1507713&r1=1507712&r2=1507713&view=diff
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/objectinspector/primitive/LazyPrimitiveObjectInspectorFactory.java (original)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/objectinspector/primitive/LazyPrimitiveObjectInspectorFactory.java Sat Jul 27 21:20:03 2013
@@ -53,6 +53,8 @@ public final class LazyPrimitiveObjectIn
       new LazyDoubleObjectInspector();
   public static final LazyVoidObjectInspector LAZY_VOID_OBJECT_INSPECTOR =
       new LazyVoidObjectInspector();
+  public static final LazyDateObjectInspector LAZY_DATE_OBJECT_INSPECTOR =
+      new LazyDateObjectInspector();
   public static final LazyTimestampObjectInspector LAZY_TIMESTAMP_OBJECT_INSPECTOR =
       new LazyTimestampObjectInspector();
   public static final LazyBinaryObjectInspector LAZY_BINARY_OBJECT_INSPECTOR =
@@ -101,6 +103,8 @@ public final class LazyPrimitiveObjectIn
       return LAZY_BINARY_OBJECT_INSPECTOR;
     case VOID:
       return LAZY_VOID_OBJECT_INSPECTOR;
+    case DATE:
+      return LAZY_DATE_OBJECT_INSPECTOR;
     case TIMESTAMP:
       return LAZY_TIMESTAMP_OBJECT_INSPECTOR;
     case DECIMAL:

Added: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazybinary/LazyBinaryDate.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazybinary/LazyBinaryDate.java?rev=1507713&view=auto
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazybinary/LazyBinaryDate.java (added)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazybinary/LazyBinaryDate.java Sat Jul 27 21:20:03 2013
@@ -0,0 +1,60 @@
+/**
+ * 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.serde2.lazybinary;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.hive.serde2.io.DateWritable;
+import org.apache.hadoop.hive.serde2.lazy.ByteArrayRef;
+import org.apache.hadoop.hive.serde2.lazybinary.LazyBinaryUtils.VInt;
+import org.apache.hadoop.hive.serde2.objectinspector.primitive.WritableDateObjectInspector;
+
+/**
+ * A LazyBinaryObject that encodes a java.sql.Date in a VInt.
+ *
+ */
+public class LazyBinaryDate extends
+    LazyBinaryPrimitive<WritableDateObjectInspector, DateWritable> {
+  static final Log LOG = LogFactory.getLog(LazyBinaryDate.class);
+
+  LazyBinaryDate(WritableDateObjectInspector oi) {
+    super(oi);
+    data = new DateWritable();
+  }
+
+  LazyBinaryDate(LazyBinaryDate copy) {
+    super(copy);
+    data = new DateWritable(copy.data);
+  }
+
+  /**
+   * Reusable member for decoding integer.
+   */
+  VInt vInt = new LazyBinaryUtils.VInt();
+
+  /**
+   * Initializes LazyBinaryDate object.
+   * @param bytes
+   * @param start
+   * @param length
+   */
+  @Override
+  public void init(ByteArrayRef bytes, int start, int length) {
+    data.setFromBytes(bytes.getData(), start, length, vInt);
+  }
+}

Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazybinary/LazyBinaryFactory.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazybinary/LazyBinaryFactory.java?rev=1507713&r1=1507712&r2=1507713&view=diff
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazybinary/LazyBinaryFactory.java (original)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazybinary/LazyBinaryFactory.java Sat Jul 27 21:20:03 2013
@@ -37,6 +37,7 @@ import org.apache.hadoop.hive.serde2.obj
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.WritableLongObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.WritableShortObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.WritableStringObjectInspector;
+import org.apache.hadoop.hive.serde2.objectinspector.primitive.WritableDateObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.WritableTimestampObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.WritableVoidObjectInspector;
 import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo;
@@ -72,6 +73,8 @@ public final class LazyBinaryFactory {
       return new LazyBinaryString((WritableStringObjectInspector) oi);
     case VOID: // for NULL
       return new LazyBinaryVoid((WritableVoidObjectInspector) oi);
+    case DATE:
+      return new LazyBinaryDate((WritableDateObjectInspector) oi);
     case TIMESTAMP:
       return new LazyBinaryTimestamp((WritableTimestampObjectInspector) oi);
     case BINARY:

Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazybinary/LazyBinarySerDe.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazybinary/LazyBinarySerDe.java?rev=1507713&r1=1507712&r2=1507713&view=diff
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazybinary/LazyBinarySerDe.java (original)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazybinary/LazyBinarySerDe.java Sat Jul 27 21:20:03 2013
@@ -33,6 +33,7 @@ import org.apache.hadoop.hive.serde2.Byt
 import org.apache.hadoop.hive.serde2.ByteStream.Output;
 import org.apache.hadoop.hive.serde2.SerDeException;
 import org.apache.hadoop.hive.serde2.SerDeStats;
+import org.apache.hadoop.hive.serde2.io.DateWritable;
 import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.TimestampWritable;
 import org.apache.hadoop.hive.serde2.lazy.ByteArrayRef;
@@ -43,12 +44,13 @@ import org.apache.hadoop.hive.serde2.obj
 import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.StructField;
 import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector;
-import org.apache.hadoop.hive.serde2.objectinspector.primitive.HiveDecimalObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.BinaryObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.BooleanObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.ByteObjectInspector;
+import org.apache.hadoop.hive.serde2.objectinspector.primitive.DateObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.DoubleObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.FloatObjectInspector;
+import org.apache.hadoop.hive.serde2.objectinspector.primitive.HiveDecimalObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.IntObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.LongObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.ShortObjectInspector;
@@ -378,6 +380,11 @@ public class LazyBinarySerDe extends Abs
         return warnedOnceNullMapKey;
       }
 
+      case DATE: {
+        DateWritable d = ((DateObjectInspector) poi).getPrimitiveWritableObject(obj);
+        d.writeToByteStream(byteStream);
+        return warnedOnceNullMapKey;
+      }
       case TIMESTAMP: {
         TimestampObjectInspector toi = (TimestampObjectInspector) poi;
         TimestampWritable t = toi.getPrimitiveWritableObject(obj);
@@ -557,6 +564,7 @@ public class LazyBinarySerDe extends Abs
    * Returns the statistics after (de)serialization)
    */
 
+  @Override
   public SerDeStats getSerDeStats() {
     // must be different
     assert (lastOperationSerialize != lastOperationDeserialize);

Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazybinary/LazyBinaryUtils.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazybinary/LazyBinaryUtils.java?rev=1507713&r1=1507712&r2=1507713&view=diff
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazybinary/LazyBinaryUtils.java (original)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazybinary/LazyBinaryUtils.java Sat Jul 27 21:20:03 2013
@@ -196,6 +196,10 @@ public final class LazyBinaryUtils {
         recordInfo.elementOffset = vInt.length;
         recordInfo.elementSize = vInt.value;
         break;
+      case DATE:
+        recordInfo.elementOffset = 0;
+        recordInfo.elementSize = WritableUtils.decodeVIntSize(bytes[offset]);
+        break;
       case TIMESTAMP:
         recordInfo.elementOffset = 0;
         recordInfo.elementSize = 4;

Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorConverters.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorConverters.java?rev=1507713&r1=1507712&r2=1507713&view=diff
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorConverters.java (original)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorConverters.java Sat Jul 27 21:20:03 2013
@@ -34,6 +34,7 @@ import org.apache.hadoop.hive.serde2.obj
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.SettableIntObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.SettableLongObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.SettableShortObjectInspector;
+import org.apache.hadoop.hive.serde2.objectinspector.primitive.SettableDateObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.SettableTimestampObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.VoidObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.WritableStringObjectInspector;
@@ -100,6 +101,10 @@ public final class ObjectInspectorConver
         return new PrimitiveObjectInspectorConverter.StringConverter(
             inputOI);
       }
+    case DATE:
+      return new PrimitiveObjectInspectorConverter.DateConverter(
+          inputOI,
+          (SettableDateObjectInspector) outputOI);
     case TIMESTAMP:
       return new PrimitiveObjectInspectorConverter.TimestampConverter(
           inputOI,

Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java?rev=1507713&r1=1507712&r2=1507713&view=diff
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java (original)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java Sat Jul 27 21:20:03 2013
@@ -30,6 +30,7 @@ import java.util.Map;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hive.serde.serdeConstants;
+import org.apache.hadoop.hive.serde2.io.DateWritable;
 import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.TimestampWritable;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector.Category;
@@ -38,6 +39,7 @@ import org.apache.hadoop.hive.serde2.obj
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.BinaryObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.BooleanObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.ByteObjectInspector;
+import org.apache.hadoop.hive.serde2.objectinspector.primitive.DateObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.DoubleObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.FloatObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.HiveDecimalObjectInspector;
@@ -488,6 +490,8 @@ public final class ObjectInspectorUtils 
       case BINARY:
         return ((BinaryObjectInspector) poi).getPrimitiveWritableObject(o).hashCode();
 
+      case DATE:
+        return ((DateObjectInspector) poi).getPrimitiveWritableObject(o).hashCode();
       case TIMESTAMP:
         TimestampWritable t = ((TimestampObjectInspector) poi)
             .getPrimitiveWritableObject(o);
@@ -684,6 +688,13 @@ public final class ObjectInspectorUtils 
         return bw1.compareTo(bw2);
       }
 
+      case DATE: {
+        DateWritable d1 = ((DateObjectInspector) poi1)
+            .getPrimitiveWritableObject(o1);
+        DateWritable d2 = ((DateObjectInspector) poi2)
+            .getPrimitiveWritableObject(o2);
+        return d1.compareTo(d2);
+      }
       case TIMESTAMP: {
         TimestampWritable t1 = ((TimestampObjectInspector) poi1)
             .getPrimitiveWritableObject(o1);

Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/PrimitiveObjectInspector.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/PrimitiveObjectInspector.java?rev=1507713&r1=1507712&r2=1507713&view=diff
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/PrimitiveObjectInspector.java (original)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/PrimitiveObjectInspector.java Sat Jul 27 21:20:03 2013
@@ -27,7 +27,8 @@ public interface PrimitiveObjectInspecto
    * The primitive types supported by Hive.
    */
   public static enum PrimitiveCategory {
-    VOID, BOOLEAN, BYTE, SHORT, INT, LONG, FLOAT, DOUBLE, STRING, TIMESTAMP, BINARY, DECIMAL, UNKNOWN
+    VOID, BOOLEAN, BYTE, SHORT, INT, LONG, FLOAT, DOUBLE, STRING,
+    DATE, TIMESTAMP, BINARY, DECIMAL, UNKNOWN
   };
 
   /**

Added: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/DateObjectInspector.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/DateObjectInspector.java?rev=1507713&view=auto
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/DateObjectInspector.java (added)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/DateObjectInspector.java Sat Jul 27 21:20:03 2013
@@ -0,0 +1,33 @@
+/**
+ * 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.serde2.objectinspector.primitive;
+
+import java.sql.Date;
+
+import org.apache.hadoop.hive.serde2.io.DateWritable;
+import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector;
+
+/**
+ * A DateObjectInspector inspects an Object representing a Date.
+ */
+public interface DateObjectInspector extends PrimitiveObjectInspector {
+
+  DateWritable getPrimitiveWritableObject(Object o);
+
+  Date getPrimitiveJavaObject(Object o);
+}

Added: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaDateObjectInspector.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaDateObjectInspector.java?rev=1507713&view=auto
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaDateObjectInspector.java (added)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaDateObjectInspector.java Sat Jul 27 21:20:03 2013
@@ -0,0 +1,62 @@
+/**
+ * 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.serde2.objectinspector.primitive;
+
+import java.sql.Date;
+
+import org.apache.hadoop.hive.serde2.io.DateWritable;
+
+/**
+ * A JavaDateObjectInspector inspects a Java Date Object.
+ */
+public class JavaDateObjectInspector
+    extends AbstractPrimitiveJavaObjectInspector
+    implements SettableDateObjectInspector {
+
+  protected JavaDateObjectInspector() {
+    super(PrimitiveObjectInspectorUtils.dateTypeEntry);
+  }
+
+  public DateWritable getPrimitiveWritableObject(Object o) {
+    return o == null ? null : new DateWritable((Date) o);
+  }
+
+  @Override
+  public Date getPrimitiveJavaObject(Object o) {
+    return o == null ? null : (Date) o;
+  }
+
+  public Date get(Object o) {
+    return (Date) o;
+  }
+
+  public Object set(Object o, Date value) {
+    ((Date) o).setTime(value.getTime());
+    return o;
+  }
+
+  public Object set(Object o, DateWritable d) {
+    ((Date) o).setTime(d.get().getTime());
+    return o;
+  }
+
+  public Object create(Date value) {
+    return new Date(value.getTime());
+  }
+
+}

Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorConverter.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorConverter.java?rev=1507713&r1=1507712&r2=1507713&view=diff
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorConverter.java (original)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorConverter.java Sat Jul 27 21:20:03 2013
@@ -18,6 +18,7 @@
 
 package org.apache.hadoop.hive.serde2.objectinspector.primitive;
 
+import java.sql.Date;
 import java.sql.Timestamp;
 
 import org.apache.hadoop.hive.common.type.HiveDecimal;
@@ -237,6 +238,27 @@ public class PrimitiveObjectInspectorCon
     }
   }
 
+  public static class DateConverter implements Converter {
+    PrimitiveObjectInspector inputOI;
+    SettableDateObjectInspector outputOI;
+    Object r;
+
+    public DateConverter(PrimitiveObjectInspector inputOI,
+        SettableDateObjectInspector outputOI) {
+      this.inputOI = inputOI;
+      this.outputOI = outputOI;
+      r = outputOI.create(new Date(0));
+    }
+
+    public Object convert(Object input) {
+      if (input == null) {
+        return null;
+      }
+      return outputOI.set(r, PrimitiveObjectInspectorUtils.getDate(input,
+          inputOI));
+    }
+  }
+
   public static class TimestampConverter implements Converter {
     PrimitiveObjectInspector inputOI;
     SettableTimestampObjectInspector outputOI;
@@ -276,7 +298,7 @@ public class PrimitiveObjectInspectorCon
       if (input == null) {
         return null;
       }
-      
+
       try {
         return outputOI.set(r, PrimitiveObjectInspectorUtils.getHiveDecimal(input,
             inputOI));
@@ -368,6 +390,9 @@ public class PrimitiveObjectInspectorCon
           t.set(((StringObjectInspector) inputOI).getPrimitiveJavaObject(input));
         }
         return t;
+      case DATE:
+        t.set(((DateObjectInspector) inputOI).getPrimitiveWritableObject(input).toString());
+        return t;
       case TIMESTAMP:
         t.set(((TimestampObjectInspector) inputOI)
             .getPrimitiveWritableObject(input).toString());

Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorFactory.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorFactory.java?rev=1507713&r1=1507712&r2=1507713&view=diff
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorFactory.java (original)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorFactory.java Sat Jul 27 21:20:03 2013
@@ -24,6 +24,7 @@ import org.apache.hadoop.hive.serde2.io.
 import org.apache.hadoop.hive.serde2.io.ByteWritable;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
 import org.apache.hadoop.hive.serde2.io.ShortWritable;
+import org.apache.hadoop.hive.serde2.io.DateWritable;
 import org.apache.hadoop.hive.serde2.io.TimestampWritable;
 import org.apache.hadoop.hive.serde2.objectinspector.ConstantObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector;
@@ -66,6 +67,8 @@ public final class PrimitiveObjectInspec
       new JavaStringObjectInspector();
   public static final JavaVoidObjectInspector javaVoidObjectInspector =
       new JavaVoidObjectInspector();
+  public static final JavaDateObjectInspector javaDateObjectInspector =
+      new JavaDateObjectInspector();
   public static final JavaTimestampObjectInspector javaTimestampObjectInspector =
       new JavaTimestampObjectInspector();
   public static final JavaBinaryObjectInspector javaByteArrayObjectInspector =
@@ -91,6 +94,8 @@ public final class PrimitiveObjectInspec
       new WritableStringObjectInspector();
   public static final WritableVoidObjectInspector writableVoidObjectInspector =
       new WritableVoidObjectInspector();
+  public static final WritableDateObjectInspector writableDateObjectInspector =
+      new WritableDateObjectInspector();
   public static final WritableTimestampObjectInspector writableTimestampObjectInspector =
       new WritableTimestampObjectInspector();
   public static final WritableBinaryObjectInspector writableBinaryObjectInspector =
@@ -119,6 +124,8 @@ public final class PrimitiveObjectInspec
         writableStringObjectInspector);
     cachedPrimitiveWritableInspectorCache.put(PrimitiveCategory.VOID,
         writableVoidObjectInspector);
+    cachedPrimitiveWritableInspectorCache.put(PrimitiveCategory.DATE,
+        writableDateObjectInspector);
     cachedPrimitiveWritableInspectorCache.put(PrimitiveCategory.TIMESTAMP,
         writableTimestampObjectInspector);
     cachedPrimitiveWritableInspectorCache.put(PrimitiveCategory.BINARY,
@@ -148,6 +155,8 @@ public final class PrimitiveObjectInspec
         javaStringObjectInspector);
     cachedPrimitiveJavaInspectorCache.put(PrimitiveCategory.VOID,
         javaVoidObjectInspector);
+    cachedPrimitiveJavaInspectorCache.put(PrimitiveCategory.DATE,
+        javaDateObjectInspector);
     cachedPrimitiveJavaInspectorCache.put(PrimitiveCategory.TIMESTAMP,
         javaTimestampObjectInspector);
     cachedPrimitiveJavaInspectorCache.put(PrimitiveCategory.BINARY,
@@ -198,6 +207,8 @@ public final class PrimitiveObjectInspec
       return new WritableConstantDoubleObjectInspector((DoubleWritable)value);
     case STRING:
       return new WritableConstantStringObjectInspector((Text)value);
+    case DATE:
+      return new WritableConstantDateObjectInspector((DateWritable)value);
     case TIMESTAMP:
       return new WritableConstantTimestampObjectInspector((TimestampWritable)value);
     case DECIMAL:

Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorUtils.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorUtils.java?rev=1507713&r1=1507712&r2=1507713&view=diff
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorUtils.java (original)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorUtils.java Sat Jul 27 21:20:03 2013
@@ -21,6 +21,7 @@ package org.apache.hadoop.hive.serde2.ob
 import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
+import java.sql.Date;
 import java.sql.Timestamp;
 import java.util.HashMap;
 import java.util.Map;
@@ -28,6 +29,7 @@ import java.util.Map;
 import org.apache.hadoop.hive.common.type.HiveDecimal;
 import org.apache.hadoop.hive.serde.serdeConstants;
 import org.apache.hadoop.hive.serde2.io.ByteWritable;
+import org.apache.hadoop.hive.serde2.io.DateWritable;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
 import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
 import org.apache.hadoop.hive.serde2.io.ShortWritable;
@@ -177,7 +179,9 @@ public final class PrimitiveObjectInspec
   public static final PrimitiveTypeEntry shortTypeEntry = new PrimitiveTypeEntry(
       PrimitiveCategory.SHORT, serdeConstants.SMALLINT_TYPE_NAME, Short.TYPE,
       Short.class, ShortWritable.class);
-
+  public static final PrimitiveTypeEntry dateTypeEntry = new PrimitiveTypeEntry(
+      PrimitiveCategory.DATE, serdeConstants.DATE_TYPE_NAME, null,
+      Date.class, DateWritable.class);
   public static final PrimitiveTypeEntry timestampTypeEntry = new PrimitiveTypeEntry(
       PrimitiveCategory.TIMESTAMP, serdeConstants.TIMESTAMP_TYPE_NAME, null,
       Timestamp.class, TimestampWritable.class);
@@ -200,6 +204,7 @@ public final class PrimitiveObjectInspec
     registerType(doubleTypeEntry);
     registerType(byteTypeEntry);
     registerType(shortTypeEntry);
+    registerType(dateTypeEntry);
     registerType(timestampTypeEntry);
     registerType(decimalTypeEntry);
     registerType(unknownTypeEntry);
@@ -361,6 +366,10 @@ public final class PrimitiveObjectInspec
           .getPrimitiveWritableObject(o2);
       return t1.equals(t2);
     }
+    case DATE: {
+      return ((DateObjectInspector) oi1).getPrimitiveWritableObject(o1)
+          .equals(((DateObjectInspector) oi2).getPrimitiveWritableObject(o2));
+    }
     case TIMESTAMP: {
       return ((TimestampObjectInspector) oi1).getPrimitiveWritableObject(o1)
           .equals(((TimestampObjectInspector) oi2).getPrimitiveWritableObject(o2));
@@ -404,6 +413,7 @@ public final class PrimitiveObjectInspec
           .getDouble();
     case DECIMAL:
       return ((HiveDecimalObjectInspector) oi).getPrimitiveJavaObject(o).doubleValue();
+    case DATE:  // unsupported conversion
     default:
       throw new NumberFormatException();
     }
@@ -482,8 +492,9 @@ public final class PrimitiveObjectInspec
       result = HiveDecimal.ZERO.compareTo(
           ((HiveDecimalObjectInspector) oi).getPrimitiveJavaObject(o)) != 0;
       break;
+    case DATE:  // unsupported conversion
     default:
-      throw new RuntimeException("Hive 2 Internal error: unknown type: "
+      throw new RuntimeException("Hive 2 Internal error: unsupported conversion from type: "
           + oi.getTypeName());
     }
     return result;
@@ -566,8 +577,9 @@ public final class PrimitiveObjectInspec
       result = ((HiveDecimalObjectInspector) oi)
           .getPrimitiveJavaObject(o).intValue();
       break;
+    case DATE:  // unsupported conversion
     default: {
-      throw new RuntimeException("Hive 2 Internal error: unknown type: "
+      throw new RuntimeException("Hive 2 Internal error: unsupported conversion from type: "
           + oi.getTypeName());
     }
     }
@@ -624,8 +636,9 @@ public final class PrimitiveObjectInspec
       result = ((HiveDecimalObjectInspector) oi)
           .getPrimitiveJavaObject(o).longValue();
       break;
+    case DATE:  // unsupported conversion
     default:
-      throw new RuntimeException("Hive 2 Internal error: unknown type: "
+      throw new RuntimeException("Hive 2 Internal error: unsupported conversion from type: "
           + oi.getTypeName());
     }
     return result;
@@ -675,8 +688,9 @@ public final class PrimitiveObjectInspec
       result = ((HiveDecimalObjectInspector) oi)
           .getPrimitiveJavaObject(o).doubleValue();
       break;
+    case DATE:  // unsupported conversion
     default:
-      throw new RuntimeException("Hive 2 Internal error: unknown type: "
+      throw new RuntimeException("Hive 2 Internal error: unsupported conversion from type: "
           + oi.getTypeName());
     }
     return result;
@@ -732,6 +746,9 @@ public final class PrimitiveObjectInspec
       StringObjectInspector soi = (StringObjectInspector) oi;
       result = soi.getPrimitiveJavaObject(o);
       break;
+    case DATE:
+      result = ((DateObjectInspector) oi).getPrimitiveWritableObject(o).toString();
+      break;
     case TIMESTAMP:
       result = ((TimestampObjectInspector) oi).getPrimitiveWritableObject(o).toString();
       break;
@@ -817,13 +834,48 @@ public final class PrimitiveObjectInspec
     case DECIMAL:
       result = ((HiveDecimalObjectInspector) oi).getPrimitiveJavaObject(o);
       break;
+    case DATE:  // unsupported conversion
     default:
-      throw new RuntimeException("Hive 2 Internal error: unknown type: "
+      throw new RuntimeException("Hive 2 Internal error: unsupported conversion from type: "
                                  + oi.getTypeName());
     }
     return result;
   }
 
+  public static Date getDate(Object o, PrimitiveObjectInspector oi) {
+    if (o == null) {
+      return null;
+    }
+
+    Date result = null;
+    switch (oi.getPrimitiveCategory()) {
+    case VOID:
+      result = null;
+      break;
+    case STRING:
+      StringObjectInspector soi = (StringObjectInspector) oi;
+      String s = soi.getPrimitiveJavaObject(o).trim();
+      try {
+        result = Date.valueOf(s);
+      } catch (IllegalArgumentException e) {
+        result = null;
+      }
+      break;
+    case DATE:
+      result = ((DateObjectInspector) oi).getPrimitiveWritableObject(o).get();
+      break;
+    case TIMESTAMP:
+      result = DateWritable.timeToDate(
+          ((TimestampObjectInspector) oi).getPrimitiveWritableObject(o).getSeconds());
+      break;
+    default:
+      throw new RuntimeException("Cannot convert to Date from: "
+        + oi.getTypeName());
+    }
+
+    return result;
+  }
+
   public static Timestamp getTimestamp(Object o, PrimitiveObjectInspector oi) {
     if (o == null) {
       return null;
@@ -876,6 +928,10 @@ public final class PrimitiveObjectInspec
         result = null;
       }
       break;
+    case DATE:
+      result = new Timestamp(
+          ((DateObjectInspector) oi).getPrimitiveWritableObject(o).get().getTime());
+      break;
     case TIMESTAMP:
       result = ((TimestampObjectInspector) oi).getPrimitiveWritableObject(o).getTimestamp();
       break;

Added: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableDateObjectInspector.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableDateObjectInspector.java?rev=1507713&view=auto
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableDateObjectInspector.java (added)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableDateObjectInspector.java Sat Jul 27 21:20:03 2013
@@ -0,0 +1,33 @@
+/**
+ * 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.serde2.objectinspector.primitive;
+
+import java.sql.Date;
+
+import org.apache.hadoop.hive.serde2.io.DateWritable;
+
+/**
+ * A SettableDecimalObjectInspector can set a Date value to an object.
+ */
+public interface SettableDateObjectInspector extends DateObjectInspector {
+  Object set(Object o, Date d);
+
+  Object set(Object o, DateWritable d);
+
+  Object create(Date d);
+}

Added: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantDateObjectInspector.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantDateObjectInspector.java?rev=1507713&view=auto
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantDateObjectInspector.java (added)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantDateObjectInspector.java Sat Jul 27 21:20:03 2013
@@ -0,0 +1,43 @@
+/**
+ * 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.serde2.objectinspector.primitive;
+
+import org.apache.hadoop.hive.serde2.objectinspector.ConstantObjectInspector;
+
+import org.apache.hadoop.hive.serde2.io.DateWritable;
+
+/**
+ * A WritableConstantDateObjectInspector is a WritableDateObjectInspector
+ * that implements ConstantObjectInspector.
+ */
+public class WritableConstantDateObjectInspector extends
+    WritableDateObjectInspector implements
+    ConstantObjectInspector {
+
+  private DateWritable value;
+
+  WritableConstantDateObjectInspector(DateWritable value) {
+    super();
+    this.value = value;
+  }
+
+  @Override
+  public DateWritable getWritableConstantValue() {
+    return value;
+  }
+}

Added: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableDateObjectInspector.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableDateObjectInspector.java?rev=1507713&view=auto
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableDateObjectInspector.java (added)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableDateObjectInspector.java Sat Jul 27 21:20:03 2013
@@ -0,0 +1,61 @@
+/**
+ * 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.serde2.objectinspector.primitive;
+
+import java.sql.Date;
+
+import org.apache.hadoop.hive.serde2.io.DateWritable;
+
+/**
+ * A WritableDateObjectInspector inspects a DateWritable Object.
+ */
+public class WritableDateObjectInspector extends
+    AbstractPrimitiveWritableObjectInspector implements
+    SettableDateObjectInspector {
+
+  public WritableDateObjectInspector() {
+    super(PrimitiveObjectInspectorUtils.dateTypeEntry);
+  }
+
+  @Override
+  public DateWritable getPrimitiveWritableObject(Object o) {
+    return o == null ? null : (DateWritable) o;
+  }
+
+  public Date getPrimitiveJavaObject(Object o) {
+    return o == null ? null : ((DateWritable) o).get();
+  }
+
+  public Object copyObject(Object o) {
+    return o == null ? null : new DateWritable((DateWritable) o);
+  }
+
+  public Object set(Object o, Date d) {
+    ((DateWritable) o).set(d);
+    return o;
+  }
+
+  public Object set(Object o, DateWritable d) {
+    ((DateWritable) o).set(d);
+    return o;
+  }
+
+  public Object create(Date d) {
+    return new DateWritable(d);
+  }
+}

Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfoFactory.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfoFactory.java?rev=1507713&r1=1507712&r2=1507713&view=diff
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfoFactory.java (original)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfoFactory.java Sat Jul 27 21:20:03 2013
@@ -62,6 +62,7 @@ public final class TypeInfoFactory {
   public static final TypeInfo doubleTypeInfo = getPrimitiveTypeInfo(serdeConstants.DOUBLE_TYPE_NAME);
   public static final TypeInfo byteTypeInfo = getPrimitiveTypeInfo(serdeConstants.TINYINT_TYPE_NAME);
   public static final TypeInfo shortTypeInfo = getPrimitiveTypeInfo(serdeConstants.SMALLINT_TYPE_NAME);
+  public static final TypeInfo dateTypeInfo = getPrimitiveTypeInfo(serdeConstants.DATE_TYPE_NAME);
   public static final TypeInfo timestampTypeInfo = getPrimitiveTypeInfo(serdeConstants.TIMESTAMP_TYPE_NAME);
   public static final TypeInfo binaryTypeInfo = getPrimitiveTypeInfo(serdeConstants.BINARY_TYPE_NAME);
   public static final TypeInfo decimalTypeInfo = getPrimitiveTypeInfo(serdeConstants.DECIMAL_TYPE_NAME);

Modified: hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/TestStatsSerde.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/TestStatsSerde.java?rev=1507713&r1=1507712&r2=1507713&view=diff
==============================================================================
--- hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/TestStatsSerde.java (original)
+++ hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/TestStatsSerde.java Sat Jul 27 21:20:03 2013
@@ -18,7 +18,7 @@
 
 package org.apache.hadoop.hive.serde2;
 
-import java.math.BigInteger;
+import java.sql.Date;
 import java.util.List;
 import java.util.Properties;
 import java.util.Random;
@@ -114,13 +114,14 @@ public class TestStatsSerde extends Test
         Double d = randField > 5 ? null : Double.valueOf(r.nextDouble());
         String st = randField > 6 ? null : TestBinarySortableSerDe
             .getRandString(r);
-	HiveDecimal bd = randField > 8 ? null : TestBinarySortableSerDe.getRandHiveDecimal(r);
+	HiveDecimal bd = randField > 7 ? null : TestBinarySortableSerDe.getRandHiveDecimal(r);
+	      Date date = randField > 8 ? null : TestBinarySortableSerDe.getRandDate(r);
         MyTestInnerStruct is = randField > 9 ? null : new MyTestInnerStruct(r
             .nextInt(5) - 2, r.nextInt(5) - 2);
         List<Integer> li = randField > 10 ? null : TestBinarySortableSerDe
             .getRandIntegerArray(r);
         byte[] ba = TestBinarySortableSerDe.getRandBA(r, i);
-        MyTestClass t = new MyTestClass(b, s, n, l, f, d, st, bd, is, li,ba);
+        MyTestClass t = new MyTestClass(b, s, n, l, f, d, st, bd, date, is, li,ba);
         rows[i] = t;
       }
 

Modified: hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/binarysortable/MyTestClass.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/binarysortable/MyTestClass.java?rev=1507713&r1=1507712&r2=1507713&view=diff
==============================================================================
--- hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/binarysortable/MyTestClass.java (original)
+++ hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/binarysortable/MyTestClass.java Sat Jul 27 21:20:03 2013
@@ -17,10 +17,11 @@
  */
 package org.apache.hadoop.hive.serde2.binarysortable;
 
-import org.apache.hadoop.hive.common.type.HiveDecimal;
-
+import java.sql.Date;
 import java.util.List;
 
+import org.apache.hadoop.hive.common.type.HiveDecimal;
+
 public class MyTestClass {
     Byte myByte;
     Short myShort;
@@ -30,6 +31,7 @@ public class MyTestClass {
     Double myDouble;
     String myString;
     HiveDecimal myDecimal;
+    Date myDate;
     MyTestInnerStruct myStruct;
     List<Integer> myList;
     byte[] myBA;
@@ -38,7 +40,7 @@ public class MyTestClass {
     }
 
     public MyTestClass(Byte b, Short s, Integer i, Long l, Float f, Double d,
-		       String st, HiveDecimal bd, MyTestInnerStruct is, List<Integer> li, byte[] ba) {
+		       String st, HiveDecimal bd, Date date, MyTestInnerStruct is, List<Integer> li, byte[] ba) {
 	myByte = b;
 	myShort = s;
 	myInt = i;
@@ -47,6 +49,7 @@ public class MyTestClass {
 	myDouble = d;
 	myString = st;
 	myDecimal = bd;
+	myDate = date;
 	myStruct = is;
 	myList = li;
 	myBA = ba;

Modified: hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/binarysortable/TestBinarySortableSerDe.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/binarysortable/TestBinarySortableSerDe.java?rev=1507713&r1=1507712&r2=1507713&view=diff
==============================================================================
--- hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/binarysortable/TestBinarySortableSerDe.java (original)
+++ hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/binarysortable/TestBinarySortableSerDe.java Sat Jul 27 21:20:03 2013
@@ -17,6 +17,7 @@
  */
 package org.apache.hadoop.hive.serde2.binarysortable;
 
+import java.sql.Date;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -153,6 +154,15 @@ public class TestBinarySortableSerDe ext
     return bd;
   }
 
+  public static Date getRandDate(Random r) {
+    String dateStr = String.format("%d-%02d-%02d",
+        Integer.valueOf(1800 + r.nextInt(500)),  // year
+        Integer.valueOf(1 + r.nextInt(12)),      // month
+        Integer.valueOf(1 + r.nextInt(28)));     // day
+    Date dateVal = Date.valueOf(dateStr);
+    return dateVal;
+  }
+
   public static String getRandString(Random r) {
     return getRandString(r, null, r.nextInt(10));
   }
@@ -196,7 +206,7 @@ public class TestBinarySortableSerDe ext
       MyTestClass rows[] = new MyTestClass[num];
 
       for (int i = 0; i < num; i++) {
-        int randField = r.nextInt(10);
+        int randField = r.nextInt(11);
         MyTestClass t = new MyTestClass();
         t.myByte = randField > 0 ? null : Byte.valueOf((byte) r.nextInt());
         t.myShort = randField > 1 ? null : Short.valueOf((short) r.nextInt());
@@ -208,9 +218,10 @@ public class TestBinarySortableSerDe ext
             .valueOf(r.nextDouble() * 10 - 5);
         t.myString = randField > 6 ? null : getRandString(r);
         t.myDecimal = randField > 7 ? null : getRandHiveDecimal(r);
-        t.myStruct = randField > 8 ? null : new MyTestInnerStruct(
+        t.myDate = randField > 8 ? null : getRandDate(r);
+        t.myStruct = randField > 9 ? null : new MyTestInnerStruct(
             r.nextInt(5) - 2, r.nextInt(5) - 2);
-        t.myList = randField > 9 ? null : getRandIntegerArray(r);
+        t.myList = randField > 10 ? null : getRandIntegerArray(r);
         t.myBA = getRandBA(r, i);
         rows[i] = t;
       }
@@ -224,9 +235,9 @@ public class TestBinarySortableSerDe ext
       String fieldTypes = ObjectInspectorUtils.getFieldTypes(rowOI);
 
       testBinarySortableSerDe(rows, rowOI, getSerDe(fieldNames, fieldTypes,
-          "+++++++++++"), true);
+          "++++++++++++"), true);
       testBinarySortableSerDe(rows, rowOI, getSerDe(fieldNames, fieldTypes,
-          "-----------"), false);
+          "------------"), false);
 
       System.out.println("Test testTBinarySortableProtocol passed!");
     } catch (Throwable e) {

Modified: hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/lazybinary/MyTestClassBigger.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/lazybinary/MyTestClassBigger.java?rev=1507713&r1=1507712&r2=1507713&view=diff
==============================================================================
--- hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/lazybinary/MyTestClassBigger.java (original)
+++ hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/lazybinary/MyTestClassBigger.java Sat Jul 27 21:20:03 2013
@@ -17,6 +17,7 @@
  */
 package org.apache.hadoop.hive.serde2.lazybinary;
 
+import java.sql.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -36,6 +37,7 @@ public class MyTestClassBigger {
     Double myDouble;
     String myString;
     HiveDecimal myDecimal;
+    Date myDate;
     MyTestInnerStruct myStruct;
     List<Integer> myList;
     byte[] myBA;
@@ -45,7 +47,7 @@ public class MyTestClassBigger {
     }
 
     public MyTestClassBigger(Byte b, Short s, Integer i, Long l, Float f,
-			     Double d, String st, HiveDecimal bd, MyTestInnerStruct is, List<Integer> li,
+			     Double d, String st, HiveDecimal bd, Date date, MyTestInnerStruct is, List<Integer> li,
 			     byte[] ba, Map<String, List<MyTestInnerStruct>> mp) {
 	myByte = b;
 	myShort = s;
@@ -55,6 +57,7 @@ public class MyTestClassBigger {
 	myDouble = d;
 	myString = st;
 	myDecimal = bd;
+	myDate = date;
 	myStruct = is;
 	myList = li;
 	myBA = ba;

Modified: hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/lazybinary/MyTestClassSmaller.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/lazybinary/MyTestClassSmaller.java?rev=1507713&r1=1507712&r2=1507713&view=diff
==============================================================================
--- hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/lazybinary/MyTestClassSmaller.java (original)
+++ hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/lazybinary/MyTestClassSmaller.java Sat Jul 27 21:20:03 2013
@@ -17,6 +17,8 @@
  */
 package org.apache.hadoop.hive.serde2.lazybinary;
 
+import java.sql.Date;
+
 import org.apache.hadoop.hive.common.type.HiveDecimal;
 import org.apache.hadoop.hive.serde2.binarysortable.MyTestInnerStruct;
 
@@ -29,13 +31,14 @@ public class MyTestClassSmaller {
     Double myDouble;
     String myString;
     HiveDecimal myDecimal;
+    Date myDate;
     MyTestInnerStruct myStruct;
 
     public MyTestClassSmaller() {
     }
-    
+
     public MyTestClassSmaller(Byte b, Short s, Integer i, Long l, Float f,
-			      Double d, String st, HiveDecimal bd, MyTestInnerStruct is) {
+			      Double d, String st, HiveDecimal bd, Date date, MyTestInnerStruct is) {
 	myByte = b;
 	myShort = s;
 	myInt = i;
@@ -44,6 +47,7 @@ public class MyTestClassSmaller {
 	myDouble = d;
 	myString = st;
 	myDecimal = bd;
+	myDate = date;
 	myStruct = is;
     }
 }

Modified: hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/lazybinary/TestLazyBinarySerDe.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/lazybinary/TestLazyBinarySerDe.java?rev=1507713&r1=1507712&r2=1507713&view=diff
==============================================================================
--- hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/lazybinary/TestLazyBinarySerDe.java (original)
+++ hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/lazybinary/TestLazyBinarySerDe.java Sat Jul 27 21:20:03 2013
@@ -17,6 +17,7 @@
  */
 package org.apache.hadoop.hive.serde2.lazybinary;
 
+import java.sql.Date;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -192,7 +193,7 @@ public class TestLazyBinarySerDe extends
 
     int num = 100;
     for (int itest = 0; itest < num; itest++) {
-      int randField = r.nextInt(10);
+      int randField = r.nextInt(11);
       Byte b = randField > 0 ? null : Byte.valueOf((byte) r.nextInt());
       Short s = randField > 1 ? null : Short.valueOf((short) r.nextInt());
       Integer n = randField > 2 ? null : Integer.valueOf(r.nextInt());
@@ -202,9 +203,10 @@ public class TestLazyBinarySerDe extends
       String st = randField > 6 ? null : TestBinarySortableSerDe
           .getRandString(r);
       HiveDecimal bd = randField > 7 ? null : TestBinarySortableSerDe.getRandHiveDecimal(r);
-      MyTestInnerStruct is = randField > 7 ? null : new MyTestInnerStruct(r
+      Date date = randField > 8 ? null : TestBinarySortableSerDe.getRandDate(r);
+      MyTestInnerStruct is = randField > 9 ? null : new MyTestInnerStruct(r
           .nextInt(5) - 2, r.nextInt(5) - 2);
-      List<Integer> li = randField > 8 ? null : TestBinarySortableSerDe
+      List<Integer> li = randField > 10 ? null : TestBinarySortableSerDe
           .getRandIntegerArray(r);
       byte[] ba  = TestBinarySortableSerDe.getRandBA(r, itest);
       Map<String, List<MyTestInnerStruct>> mp = new HashMap<String, List<MyTestInnerStruct>>();
@@ -218,7 +220,7 @@ public class TestLazyBinarySerDe extends
       List<MyTestInnerStruct> value2 = getRandStructArray(r);
       mp.put(key2, value2);
 
-      MyTestClassBigger input = new MyTestClassBigger(b, s, n, l, f, d, st, bd, is,
+      MyTestClassBigger input = new MyTestClassBigger(b, s, n, l, f, d, st, bd, date, is,
           li, ba, mp);
       BytesWritable bw = (BytesWritable) serde1.serialize(input, rowOI1);
       Object output = serde2.deserialize(bw);
@@ -260,7 +262,7 @@ public class TestLazyBinarySerDe extends
 
     int num = 100;
     for (int itest = 0; itest < num; itest++) {
-      int randField = r.nextInt(11);
+      int randField = r.nextInt(12);
       Byte b = randField > 0 ? null : Byte.valueOf((byte) r.nextInt());
       Short s = randField > 1 ? null : Short.valueOf((short) r.nextInt());
       Integer n = randField > 2 ? null : Integer.valueOf(r.nextInt());
@@ -270,12 +272,13 @@ public class TestLazyBinarySerDe extends
       String st = randField > 6 ? null : TestBinarySortableSerDe
           .getRandString(r);
       HiveDecimal bd = randField > 7 ? null : TestBinarySortableSerDe.getRandHiveDecimal(r);
-      MyTestInnerStruct is = randField > 8 ? null : new MyTestInnerStruct(r
+      Date date = randField > 8 ? null : TestBinarySortableSerDe.getRandDate(r);
+      MyTestInnerStruct is = randField > 9 ? null : new MyTestInnerStruct(r
           .nextInt(5) - 2, r.nextInt(5) - 2);
-      List<Integer> li = randField > 9 ? null : TestBinarySortableSerDe
+      List<Integer> li = randField > 10 ? null : TestBinarySortableSerDe
           .getRandIntegerArray(r);
       byte[] ba = TestBinarySortableSerDe.getRandBA(r, itest);
-      MyTestClass input = new MyTestClass(b, s, n, l, f, d, st, bd, is, li, ba);
+      MyTestClass input = new MyTestClass(b, s, n, l, f, d, st, bd, date, is, li, ba);
       BytesWritable bw = (BytesWritable) serde1.serialize(input, rowOI1);
       Object output = serde2.deserialize(bw);
 
@@ -316,7 +319,7 @@ public class TestLazyBinarySerDe extends
 
     int num = 100;
     for (int itest = 0; itest < num; itest++) {
-      int randField = r.nextInt(11);
+      int randField = r.nextInt(12);
       Byte b = randField > 0 ? null : Byte.valueOf((byte) r.nextInt());
       Short s = randField > 1 ? null : Short.valueOf((short) r.nextInt());
       Integer n = randField > 2 ? null : Integer.valueOf(r.nextInt());
@@ -326,12 +329,13 @@ public class TestLazyBinarySerDe extends
       String st = randField > 6 ? null : TestBinarySortableSerDe
           .getRandString(r);
       HiveDecimal bd = randField > 7 ? null : TestBinarySortableSerDe.getRandHiveDecimal(r);
-      MyTestInnerStruct is = randField > 8 ? null : new MyTestInnerStruct(r
+      Date date = randField > 8 ? null : TestBinarySortableSerDe.getRandDate(r);
+      MyTestInnerStruct is = randField > 9 ? null : new MyTestInnerStruct(r
           .nextInt(5) - 2, r.nextInt(5) - 2);
-      List<Integer> li = randField > 9 ? null : TestBinarySortableSerDe
+      List<Integer> li = randField > 10 ? null : TestBinarySortableSerDe
           .getRandIntegerArray(r);
       byte[] ba = TestBinarySortableSerDe.getRandBA(r, itest);
-      MyTestClass input = new MyTestClass(b, s, n, l, f, d, st, bd, is, li,ba);
+      MyTestClass input = new MyTestClass(b, s, n, l, f, d, st, bd, date, is, li,ba);
       BytesWritable bw = (BytesWritable) serde1.serialize(input, rowOI1);
       Object output = serde2.deserialize(bw);
 
@@ -382,10 +386,11 @@ public class TestLazyBinarySerDe extends
       String st = randField > 6 ? null : TestBinarySortableSerDe
           .getRandString(r);
       HiveDecimal bd = randField > 7 ? null : TestBinarySortableSerDe.getRandHiveDecimal(r);
+      Date date = randField > 7 ? null : TestBinarySortableSerDe.getRandDate(r);
       MyTestInnerStruct is = randField > 7 ? null : new MyTestInnerStruct(r
           .nextInt(5) - 2, r.nextInt(5) - 2);
 
-      MyTestClassSmaller input = new MyTestClassSmaller(b, s, n, l, f, d, st, bd,
+      MyTestClassSmaller input = new MyTestClassSmaller(b, s, n, l, f, d, st, bd, date,
           is);
       BytesWritable bw = (BytesWritable) serde1.serialize(input, rowOI1);
       Object output = serde2.deserialize(bw);
@@ -415,13 +420,13 @@ public class TestLazyBinarySerDe extends
     StructObjectInspector soi1 = (StructObjectInspector) serdeOI;
     List<? extends StructField> fields1 = soi1.getAllStructFieldRefs();
     LazyBinaryMapObjectInspector lazympoi = (LazyBinaryMapObjectInspector) fields1
-        .get(11).getFieldObjectInspector();
+        .get(12).getFieldObjectInspector();
     ObjectInspector lazympkeyoi = lazympoi.getMapKeyObjectInspector();
     ObjectInspector lazympvalueoi = lazympoi.getMapValueObjectInspector();
 
     StructObjectInspector soi2 = rowOI;
     List<? extends StructField> fields2 = soi2.getAllStructFieldRefs();
-    MapObjectInspector inputmpoi = (MapObjectInspector) fields2.get(11)
+    MapObjectInspector inputmpoi = (MapObjectInspector) fields2.get(12)
         .getFieldObjectInspector();
     ObjectInspector inputmpkeyoi = inputmpoi.getMapKeyObjectInspector();
     ObjectInspector inputmpvalueoi = inputmpoi.getMapValueObjectInspector();
@@ -441,10 +446,10 @@ public class TestLazyBinarySerDe extends
       }
 
       MyTestClassBigger input = new MyTestClassBigger(null, null, null, null,
-						      null, null, null, null, null, null, null, mp);
+						      null, null, null, null, null, null, null, null, mp);
       BytesWritable bw = (BytesWritable) serde.serialize(input, rowOI);
       Object output = serde.deserialize(bw);
-      Object lazyobj = soi1.getStructFieldData(output, fields1.get(11));
+      Object lazyobj = soi1.getStructFieldData(output, fields1.get(12));
       Map<?, ?> outputmp = lazympoi.getMap(lazyobj);
 
       if (outputmp.size() != mp.size()) {
@@ -491,7 +496,7 @@ public class TestLazyBinarySerDe extends
       Random r = new Random(1234);
       MyTestClass rows[] = new MyTestClass[num];
       for (int i = 0; i < num; i++) {
-        int randField = r.nextInt(11);
+        int randField = r.nextInt(12);
         Byte b = randField > 0 ? null : Byte.valueOf((byte) r.nextInt());
         Short s = randField > 1 ? null : Short.valueOf((short) r.nextInt());
         Integer n = randField > 2 ? null : Integer.valueOf(r.nextInt());
@@ -500,13 +505,14 @@ public class TestLazyBinarySerDe extends
         Double d = randField > 5 ? null : Double.valueOf(r.nextDouble());
         String st = randField > 6 ? null : TestBinarySortableSerDe
             .getRandString(r);
-        HiveDecimal bd = randField > 7 ? null : TestBinarySortableSerDe.getRandHiveDecimal(r);      
-        MyTestInnerStruct is = randField > 8 ? null : new MyTestInnerStruct(r
+        HiveDecimal bd = randField > 7 ? null : TestBinarySortableSerDe.getRandHiveDecimal(r);
+        Date date = randField > 8 ? null : TestBinarySortableSerDe.getRandDate(r);
+        MyTestInnerStruct is = randField > 9 ? null : new MyTestInnerStruct(r
             .nextInt(5) - 2, r.nextInt(5) - 2);
-        List<Integer> li = randField > 9 ? null : TestBinarySortableSerDe
+        List<Integer> li = randField > 10 ? null : TestBinarySortableSerDe
             .getRandIntegerArray(r);
         byte[] ba = TestBinarySortableSerDe.getRandBA(r, i);
-        MyTestClass t = new MyTestClass(b, s, n, l, f, d, st, bd, is, li, ba);
+        MyTestClass t = new MyTestClass(b, s, n, l, f, d, st, bd, date, is, li, ba);
         rows[i] = t;
       }
 

Added: hive/trunk/service/README.txt
URL: http://svn.apache.org/viewvc/hive/trunk/service/README.txt?rev=1507713&view=auto
==============================================================================
--- hive/trunk/service/README.txt (added)
+++ hive/trunk/service/README.txt Sat Jul 27 21:20:03 2013
@@ -0,0 +1,7 @@
+
+Thrift commands to generate files from TCLIService.thrift:
+--------------------
+thrift --gen java:beans,hashcode -o src/gen/thrift if/TCLIService.thrift
+thrift --gen cpp -o src/gen/thrift if/TCLIService.thrift
+thrift --gen py -o src/gen/thrift if/TCLIService.thrift
+thrift --gen rb -o src/gen/thrift if/TCLIService.thrift

Modified: hive/trunk/service/if/TCLIService.thrift
URL: http://svn.apache.org/viewvc/hive/trunk/service/if/TCLIService.thrift?rev=1507713&r1=1507712&r2=1507713&view=diff
==============================================================================
--- hive/trunk/service/if/TCLIService.thrift (original)
+++ hive/trunk/service/if/TCLIService.thrift Sat Jul 27 21:20:03 2013
@@ -59,6 +59,7 @@ enum TTypeId {
   USER_DEFINED_TYPE,
   DECIMAL_TYPE,
   NULL_TYPE,
+  DATE_TYPE
 }
   
 const set<TTypeId> PRIMITIVE_TYPES = [
@@ -74,6 +75,7 @@ const set<TTypeId> PRIMITIVE_TYPES = [
   TTypeId.BINARY_TYPE,
   TTypeId.DECIMAL_TYPE,
   TTypeId.NULL_TYPE
+  TTypeId.DATE_TYPE
 ]
 
 const set<TTypeId> COMPLEX_TYPES = [
@@ -106,6 +108,7 @@ const map<TTypeId,string> TYPE_NAMES = {
   TTypeId.UNION_TYPE: "UNIONTYPE",
   TTypeId.DECIMAL_TYPE: "DECIMAL",
   TTypeId.NULL_TYPE: "NULL"
+  TTypeId.DATE_TYPE: "DATE"
 }
 
 // Thrift does not support recursively defined types or forward declarations,

Modified: hive/trunk/service/src/gen/thrift/gen-cpp/TCLIService_constants.cpp
URL: http://svn.apache.org/viewvc/hive/trunk/service/src/gen/thrift/gen-cpp/TCLIService_constants.cpp?rev=1507713&r1=1507712&r2=1507713&view=diff
==============================================================================
--- hive/trunk/service/src/gen/thrift/gen-cpp/TCLIService_constants.cpp (original)
+++ hive/trunk/service/src/gen/thrift/gen-cpp/TCLIService_constants.cpp Sat Jul 27 21:20:03 2013
@@ -23,6 +23,7 @@ TCLIServiceConstants::TCLIServiceConstan
   PRIMITIVE_TYPES.insert((TTypeId::type)9);
   PRIMITIVE_TYPES.insert((TTypeId::type)15);
   PRIMITIVE_TYPES.insert((TTypeId::type)16);
+  PRIMITIVE_TYPES.insert((TTypeId::type)17);
 
   COMPLEX_TYPES.insert((TTypeId::type)10);
   COMPLEX_TYPES.insert((TTypeId::type)11);
@@ -49,6 +50,7 @@ TCLIServiceConstants::TCLIServiceConstan
   TYPE_NAMES.insert(std::make_pair((TTypeId::type)13, "UNIONTYPE"));
   TYPE_NAMES.insert(std::make_pair((TTypeId::type)15, "DECIMAL"));
   TYPE_NAMES.insert(std::make_pair((TTypeId::type)16, "NULL"));
+  TYPE_NAMES.insert(std::make_pair((TTypeId::type)17, "DATE"));
 
 }