You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@impala.apache.org by cs...@apache.org on 2020/03/12 16:04:58 UTC

[impala] branch master updated: IMPALA-8800: Added support of Kudu DATE type to Impala

This is an automated email from the ASF dual-hosted git repository.

csringhofer pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/impala.git


The following commit(s) were added to refs/heads/master by this push:
     new 6fdc644  IMPALA-8800: Added support of Kudu DATE type to Impala
6fdc644 is described below

commit 6fdc644fed40d2270f3b1d9176ee7e4ad12e4dd5
Author: Volodymyr Verovkin <ve...@cloudera.com>
AuthorDate: Wed Nov 13 14:46:46 2019 -0800

    IMPALA-8800: Added support of Kudu DATE type to Impala
    
    This patch supports reading and writing DATE values
    to Kudu tables. It does not add min-max filter runtime
    support, but there is followup JIRA IMPALA-9294.
    Corresponding Kudu JIRA is KUDU-2632.
    
    Change-Id: I91656749a58ac769b54c2a63bdd4f85c89520b32
    Reviewed-on: http://gerrit.cloudera.org:8080/14705
    Reviewed-by: Impala Public Jenkins <im...@cloudera.com>
    Tested-by: Impala Public Jenkins <im...@cloudera.com>
---
 be/src/exec/kudu-util.cc                           |  25 ++
 bin/impala-config.sh                               |   4 +-
 .../impala/planner/RuntimeFilterGenerator.java     |   2 +
 .../main/java/org/apache/impala/util/KuduUtil.java |  17 +-
 .../apache/impala/analysis/AnalyzeKuduDDLTest.java |   6 +-
 .../queries/QueryTest/kudu_create.test             |  78 +++-
 .../queries/QueryTest/kudu_delete.test             | 282 +++++++--------
 .../queries/QueryTest/kudu_describe.test           |  18 +
 .../queries/QueryTest/kudu_insert.test             | 196 +++++-----
 .../queries/QueryTest/kudu_update.test             | 266 +++++++-------
 .../queries/QueryTest/kudu_upsert.test             | 396 ++++++++++-----------
 tests/query_test/test_kudu.py                      |  10 +-
 12 files changed, 728 insertions(+), 572 deletions(-)

diff --git a/be/src/exec/kudu-util.cc b/be/src/exec/kudu-util.cc
index 4d3930c..b29a53e 100644
--- a/be/src/exec/kudu-util.cc
+++ b/be/src/exec/kudu-util.cc
@@ -30,6 +30,7 @@
 #include "common/logging.h"
 #include "common/names.h"
 #include "common/status.h"
+#include "runtime/date-value.h"
 #include "runtime/decimal-value.h"
 #include "runtime/timestamp-value.h"
 #include "runtime/timestamp-value.inline.h"
@@ -126,6 +127,16 @@ static Status ConvertTimestampValue(const TimestampValue* tv, int64_t* ts_micros
   return Status::OK();
 }
 
+// Converts a DateValue to Kudu's representation which is returned in 'days'.
+static Status ConvertDateValue(const DateValue* dv, int32_t* days) {
+  bool success = dv->ToDaysSinceEpoch(days);
+  DCHECK(success); // If the value was invalid the slot should've been null.
+  if (UNLIKELY(!success)) {
+    return Status(TErrorCode::RUNTIME_ERROR, "Invalid DateValue");
+  }
+  return Status::OK();
+}
+
 Status WriteKuduValue(int col, const ColumnType& col_type, const void* value,
     bool copy_strings, kudu::KuduPartialRow* row) {
   // TODO: codegen this to eliminate branching on type.
@@ -178,6 +189,13 @@ Status WriteKuduValue(int col, const ColumnType& col_type, const void* value,
       KUDU_RETURN_IF_ERROR(
           row->SetUnixTimeMicros(col, ts_micros), "Could not set Kudu row value.");
       break;
+    case TYPE_DATE:
+    {
+      int32_t days = 0;
+      RETURN_IF_ERROR(ConvertDateValue(reinterpret_cast<const DateValue*>(value), &days));
+      KUDU_RETURN_IF_ERROR(row->SetDate(col, days), "Could not set Kudu row value.");
+      break;
+    }
     case TYPE_DECIMAL:
       switch (col_type.GetByteSize()) {
         case 4:
@@ -225,6 +243,7 @@ ColumnType KuduDataTypeToColumnType(
     case DataType::DECIMAL:
       return ColumnType::CreateDecimalType(
           type_attributes.precision(), type_attributes.scale());
+    case DataType::DATE: return ColumnType(PrimitiveType::TYPE_DATE);
     default: return ColumnType(PrimitiveType::INVALID_TYPE);
   }
 }
@@ -267,6 +286,12 @@ Status CreateKuduValue(const ColumnType& col_type, const void* value, KuduValue*
       *out = KuduValue::FromInt(ts_micros);
       break;
     }
+    case TYPE_DATE: {
+      int32_t days;
+      RETURN_IF_ERROR(ConvertDateValue(reinterpret_cast<const DateValue*>(value), &days));
+      *out = KuduValue::FromInt(days);
+      break;
+    }
     case TYPE_DECIMAL: {
       switch (col_type.GetByteSize()) {
         case 4:
diff --git a/bin/impala-config.sh b/bin/impala-config.sh
index 0e260b8..413ca34 100755
--- a/bin/impala-config.sh
+++ b/bin/impala-config.sh
@@ -68,7 +68,7 @@ fi
 # moving to a different build of the toolchain, e.g. when a version is bumped or a
 # compile option is changed. The build id can be found in the output of the toolchain
 # build jobs, it is constructed from the build number and toolchain git hash prefix.
-export IMPALA_TOOLCHAIN_BUILD_ID=150-22cf7d2029
+export IMPALA_TOOLCHAIN_BUILD_ID=159-0989d236fd
 # Versions of toolchain dependencies.
 # -----------------------------------
 export IMPALA_AVRO_VERSION=1.7.4-p5
@@ -723,7 +723,7 @@ if $USE_CDH_KUDU; then
   export IMPALA_TOOLCHAIN_KUDU_MAVEN_REPOSITORY="file:///non/existing/repo"
   export IMPALA_TOOLCHAIN_KUDU_MAVEN_REPOSITORY_ENABLED=false
 else
-  export IMPALA_KUDU_VERSION=${IMPALA_KUDU_VERSION-"5c610bf40"}
+  export IMPALA_KUDU_VERSION=${IMPALA_KUDU_VERSION-"4ed0dbbd1"}
   export IMPALA_KUDU_JAVA_VERSION=${IMPALA_KUDU_JAVA_VERSION-"1.12.0-SNAPSHOT"}
   export IMPALA_KUDU_HOME=${IMPALA_TOOLCHAIN}/kudu-$IMPALA_KUDU_VERSION
   export IMPALA_KUDU_JAVA_HOME=${IMPALA_TOOLCHAIN}/kudu-${IMPALA_KUDU_VERSION}/java
diff --git a/fe/src/main/java/org/apache/impala/planner/RuntimeFilterGenerator.java b/fe/src/main/java/org/apache/impala/planner/RuntimeFilterGenerator.java
index 21e3227..b9d3c3b 100644
--- a/fe/src/main/java/org/apache/impala/planner/RuntimeFilterGenerator.java
+++ b/fe/src/main/java/org/apache/impala/planner/RuntimeFilterGenerator.java
@@ -703,6 +703,8 @@ public final class RuntimeFilterGenerator {
         continue;
       } else if (scanNode instanceof KuduScanNode) {
         if (filter.getType() != TRuntimeFilterType.MIN_MAX) continue;
+        // TODO: IMPALA-9294: Support Kudu Date Min/Max Filters
+        if (targetExpr.getType().isDate()) continue;
         SlotRef slotRef = targetExpr.unwrapSlotRef(true);
         // Kudu only supports targeting a single column, not general exprs, so the target
         // must be a SlotRef pointing to a column. We can allow implicit integer casts
diff --git a/fe/src/main/java/org/apache/impala/util/KuduUtil.java b/fe/src/main/java/org/apache/impala/util/KuduUtil.java
index 2c9c719..a601459 100644
--- a/fe/src/main/java/org/apache/impala/util/KuduUtil.java
+++ b/fe/src/main/java/org/apache/impala/util/KuduUtil.java
@@ -21,6 +21,8 @@ import static java.lang.String.format;
 
 import java.math.BigDecimal;
 import java.math.BigInteger;
+import java.sql.Date;
+import java.time.LocalDate;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
@@ -176,6 +178,11 @@ public class KuduUtil {
         checkCorrectType(literal.isSetInt_literal(), type, colName, literal);
         key.addLong(pos, literal.getInt_literal().getValue());
         break;
+      case DATE:
+        checkCorrectType(literal.isSetDate_literal(), type, colName, literal);
+        key.addDate(pos, Date.valueOf(LocalDate.ofEpochDay(
+            literal.getDate_literal().getDays_since_epoch())));
+        break;
       case DECIMAL:
         checkCorrectType(literal.isSetDecimal_literal(), type, colName, literal);
         BigInteger unscaledVal = new BigInteger(literal.getDecimal_literal().getValue());
@@ -229,6 +236,10 @@ public class KuduUtil {
       case UNIXTIME_MICROS:
         checkCorrectType(literal.isSetInt_literal(), type, colName, literal);
         return literal.getInt_literal().getValue();
+      case DATE:
+        checkCorrectType(literal.isSetDate_literal(), type, colName, literal);
+        return Date.valueOf(LocalDate.ofEpochDay(
+            literal.getDate_literal().getDays_since_epoch()));
       case DECIMAL:
         checkCorrectType(literal.isSetDecimal_literal(), type, colName, literal);
         BigInteger unscaledVal = new BigInteger(literal.getDecimal_literal().getValue());
@@ -378,7 +389,8 @@ public class KuduUtil {
   }
 
   public static boolean isSupportedKeyType(org.apache.impala.catalog.Type type) {
-    return type.isIntegerType() || type.isStringType() || type.isTimestamp();
+    return type.isIntegerType() || type.isStringType() || type.isTimestamp()
+        || type.isDate();
   }
 
   /**
@@ -427,11 +439,11 @@ public class KuduUtil {
       case FLOAT: return org.apache.kudu.Type.FLOAT;
       case TIMESTAMP: return org.apache.kudu.Type.UNIXTIME_MICROS;
       case DECIMAL: return org.apache.kudu.Type.DECIMAL;
+      case DATE: return org.apache.kudu.Type.DATE;
       /* Fall through below */
       case INVALID_TYPE:
       case NULL_TYPE:
       case BINARY:
-      case DATE:
       case DATETIME:
       case CHAR:
       case VARCHAR:
@@ -453,6 +465,7 @@ public class KuduUtil {
       case INT64: return Type.BIGINT;
       case STRING: return Type.STRING;
       case UNIXTIME_MICROS: return Type.TIMESTAMP;
+      case DATE: return Type.DATE;
       case DECIMAL:
         return ScalarType.createDecimalType(
             typeAttributes.getPrecision(), typeAttributes.getScale());
diff --git a/fe/src/test/java/org/apache/impala/analysis/AnalyzeKuduDDLTest.java b/fe/src/test/java/org/apache/impala/analysis/AnalyzeKuduDDLTest.java
index 3bde618..c021b3d 100644
--- a/fe/src/test/java/org/apache/impala/analysis/AnalyzeKuduDDLTest.java
+++ b/fe/src/test/java/org/apache/impala/analysis/AnalyzeKuduDDLTest.java
@@ -350,7 +350,8 @@ public class AnalyzeKuduDDLTest extends FrontendTestBase {
     AnalyzesOk("create table tab (x int primary key, i1 tinyint default null, " +
         "i2 smallint default null, i3 int default null, i4 bigint default null, " +
         "vals string default null, valf float default null, vald double default null, " +
-        "valb boolean default null, valdec decimal(10, 5) default null) " +
+        "valb boolean default null, valdec decimal(10, 5) default null, " +
+        "valdate date default null) " +
         "partition by hash (x) partitions 3 stored as kudu", isExternalPurgeTbl);
     // Use NULL as a default value on a non-nullable column
     AnalysisError("create table tab (x int primary key, y int not null default null) " +
@@ -385,6 +386,7 @@ public class AnalyzeKuduDDLTest extends FrontendTestBase {
         "valf float default cast(1.2 as float), vald double default " +
         "cast(3.1452 as double), valb boolean default true, " +
         "valdec decimal(10, 5) default 3.14159, " +
+        "valdate date default date '1970-01-01', " +
         "primary key (i1, i2, i3, i4, vals)) partition by hash (i1) partitions 3 " +
         "stored as kudu", isExternalPurgeTbl);
     AnalyzesOk("create table tab (i int primary key default 1+1+1) " +
@@ -631,7 +633,7 @@ public class AnalyzeKuduDDLTest extends FrontendTestBase {
     // Columns with different supported data types
     AnalyzesOk("alter table functional_kudu.testtbl add columns (a1 tinyint null, a2 " +
         "smallint null, a3 int null, a4 bigint null, a5 string null, a6 float null, " +
-        "a7 double null, a8 boolean null comment 'boolean')");
+        "a7 double null, a8 boolean null comment 'boolean', a9 date null)");
     // Decimal types
     AnalyzesOk("alter table functional_kudu.testtbl add columns (d1 decimal null, d2 " +
         "decimal(9, 2) null, d3 decimal(15, 15) null, d4 decimal(38, 0) null)");
diff --git a/testdata/workloads/functional-query/queries/QueryTest/kudu_create.test b/testdata/workloads/functional-query/queries/QueryTest/kudu_create.test
index 039af92..ef8bb32 100644
--- a/testdata/workloads/functional-query/queries/QueryTest/kudu_create.test
+++ b/testdata/workloads/functional-query/queries/QueryTest/kudu_create.test
@@ -151,7 +151,8 @@ create table tbl_with_null_defaults (x int primary key, i1 tinyint default null,
   i2 smallint default null, i3 int default null, i4 bigint default null,
   vals string default null, valf float default null, vald double default null,
   valb boolean default null, valdec4 decimal(9) default null,
-  valdec8 decimal(18) default null, valdec16 decimal(38) default null)
+  valdec8 decimal(18) default null, valdec16 decimal(38) default null,
+  valdate date default null)
   partition by hash (x) partitions 3 stored as kudu
 ---- RESULTS
 'Table has been created.'
@@ -162,11 +163,11 @@ insert into tbl_with_null_defaults (x) values (1);
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-X, I1, I2, I3, I4, VALS, VALF, VALD, VALB, VALDEC4, VALDEC8, VALDEC16
+X, I1, I2, I3, I4, VALS, VALF, VALD, VALB, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tbl_with_null_defaults
-1,NULL,NULL,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL
+1,NULL,NULL,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL
 ---- TYPES
-INT,TINYINT,SMALLINT,INT,BIGINT,STRING,FLOAT,DOUBLE,BOOLEAN,DECIMAL,DECIMAL,DECIMAL
+INT,TINYINT,SMALLINT,INT,BIGINT,STRING,FLOAT,DOUBLE,BOOLEAN,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # Overlapping ranges are rejected by the Kudu client
@@ -352,3 +353,72 @@ show range partitions ctas_rewrite;
 ---- RESULTS
 '0 <= VALUES < 100'
 ====
+---- QUERY
+# create table with primary key of DATE type
+create table kudu_date_key (fdatekey date primary key, val string)
+stored as kudu
+---- RESULTS
+'Table has been created.'
+---- ERRORS
+Unpartitioned Kudu tables are inefficient for large data sizes.
+====
+---- QUERY
+insert into kudu_date_key values (DATE '1970-01-01', 'Unix epoch'), (DATE '2019-12-12', 'today')
+---- RUNTIME_PROFILE
+NumModifiedRows: 2
+NumRowErrors: 0
+---- LABELS
+FDATEKEY,VAL
+---- DML_RESULTS: kudu_date_key
+1970-01-01,'Unix epoch'
+2019-12-12,'today'
+---- TYPES
+DATE,STRING
+====
+---- QUERY
+# create table with invalid default DATE value
+create table kudu_invalid_default_date (fdate date default DATE '111111-33-33')
+stored as kudu
+---- CATCH
+AnalysisException: Invalid date literal: '111111-33-33'
+====
+---- QUERY
+# create table with DATE primary key partitioned by range
+create table kudu_datepk_range (fdate DATE not null primary key)
+partition by range (fdate)
+(
+  partition values < DATE '1900-01-01',
+  partition DATE '1900-01-01' <= values < DATE '1970-01-01',
+  partition DATE '1970-01-01' <= values < DATE '2000-01-01',
+  partition DATE '2000-01-01' <= values
+)
+stored as kudu
+---- RESULTS
+'Table has been created.'
+====
+---- QUERY
+insert into kudu_datepk_range values
+  (DATE '1800-01-01'),
+  (DATE '1970-01-01'),
+  (DATE '2019-12-12')
+---- RUNTIME_PROFILE
+NumModifiedRows: 3
+NumRowErrors: 0
+---- LABELS
+FDATE
+---- DML_RESULTS: kudu_datepk_range
+1800-01-01
+1970-01-01
+2019-12-12
+---- TYPES
+DATE
+====
+---- QUERY
+select * from kudu_datepk_range;
+---- RESULTS
+1800-01-01
+1970-01-01
+2019-12-12
+---- TYPES
+DATE
+====
diff --git a/testdata/workloads/functional-query/queries/QueryTest/kudu_delete.test b/testdata/workloads/functional-query/queries/QueryTest/kudu_delete.test
index 9fd7f32..67a30b2 100644
--- a/testdata/workloads/functional-query/queries/QueryTest/kudu_delete.test
+++ b/testdata/workloads/functional-query/queries/QueryTest/kudu_delete.test
@@ -4,7 +4,7 @@ create table tdata
   (id int primary key, valf float null, vali bigint null, valv string null,
    valb boolean null, valt tinyint null, vals smallint null, vald double null,
    valdec4 decimal(9,9) null, valdec8 decimal(18,2) null,
-   valdec16 decimal(38, 0) null)
+   valdec16 decimal(38, 0) null, valdate date null)
   PARTITION BY RANGE (PARTITION VALUES < 100, PARTITION 100 <= VALUES < 1000,
   PARTITION 1000 <= VALUES <= 10000) STORED AS KUDU
 ---- RESULTS
@@ -12,16 +12,16 @@ create table tdata
 ====
 ---- QUERY
 insert into table tdata values
-(1, 1.0, 1, 'one', true, 1, 1, 1, 0.000000001, 1.11, 1),
-(2, -2, 20, 'two', false, 0, 1, NULL, 0.000000002, 2.22, 2),
-(3, 0, NULL, 'three', false, 10, 20, 30, 0.000000040, 50.00, 60),
-(4, 5, 6, 'four', true, 7, 8, 9, 0.000000010, 11.11, 12),
-(5, 0, 10, 'five', NULL, 15, 20, 25, 0.000000030, 35.35, 40),
-(6, 9, 12, 'six', true, -1, -2, cast('inf' as double), -0.000000001, -1.11, -1),
-(7, NULL, 7, 'seven', false, 77, 777, NULL, NULL, NULL, NULL),
-(8, 0, 80, NULL, true, 10, 11, 12, 0.000000013, 0.14, 15),
-(9, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
-(127, 1, 2, '127', false, 3, 4, 5, 0.000000000, 0.00, 0)
+(1, 1.0, 1, 'one', true, 1, 1, 1, 0.000000001, 1.11, 1, DATE '2019-01-01'),
+(2, -2, 20, 'two', false, 0, 1, NULL, 0.000000002, 2.22, 2, DATE '2019-01-02'),
+(3, 0, NULL, 'three', false, 10, 20, 30, 0.000000040, 50.00, 60, DATE '2019-01-03'),
+(4, 5, 6, 'four', true, 7, 8, 9, 0.000000010, 11.11, 12, DATE '2019-01-04'),
+(5, 0, 10, 'five', NULL, 15, 20, 25, 0.000000030, 35.35, 40, DATE '2019-01-05'),
+(6, 9, 12, 'six', true, -1, -2, cast('inf' as double), -0.000000001, -1.11, -1, DATE '2019-01-06'),
+(7, NULL, 7, 'seven', false, 77, 777, NULL, NULL, NULL, NULL, NULL),
+(8, 0, 80, NULL, true, 10, 11, 12, 0.000000013, 0.14, 15, DATE '2019-01-08'),
+(9, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+(127, 1, 2, '127', false, 3, 4, 5, 0.000000000, 0.00, 0, DATE '2019-01-27')
 ---- RESULTS
 : 10
 ====
@@ -32,19 +32,19 @@ delete from tdata where id = 1
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2
-3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60
-4,5,6,'four',true,7,8,9,0.000000010,11.11,12
-5,0,10,'five',NULL,15,20,25,0.000000030,35.35,40
-6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1
-7,NULL,7,'seven',false,77,777,NULL,NULL,NULL,NULL
-8,0,80,'NULL',true,10,11,12,0.000000013,0.14,15
-9,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL
-127,1,2,'127',false,3,4,5,0.000000000,0.00,0
+2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2,2019-01-02
+3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60,2019-01-03
+4,5,6,'four',true,7,8,9,0.000000010,11.11,12,2019-01-04
+5,0,10,'five',NULL,15,20,25,0.000000030,35.35,40,2019-01-05
+6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1,2019-01-06
+7,NULL,7,'seven',false,77,777,NULL,NULL,NULL,NULL,NULL
+8,0,80,'NULL',true,10,11,12,0.000000013,0.14,15,2019-01-08
+9,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
+127,1,2,'127',false,3,4,5,0.000000000,0.00,0,2019-01-27
 ---- TYPES
-INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # predicate on key, NULL
@@ -53,19 +53,19 @@ delete from tdata where id is NULL
 NumModifiedRows: 0
 NumRowErrors: 0
 ---- LABELS
-ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2
-3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60
-4,5,6,'four',true,7,8,9,0.000000010,11.11,12
-5,0,10,'five',NULL,15,20,25,0.000000030,35.35,40
-6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1
-7,NULL,7,'seven',false,77,777,NULL,NULL,NULL,NULL
-8,0,80,'NULL',true,10,11,12,0.000000013,0.14,15
-9,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL
-127,1,2,'127',false,3,4,5,0.000000000,0.00,0
+2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2,2019-01-02
+3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60,2019-01-03
+4,5,6,'four',true,7,8,9,0.000000010,11.11,12,2019-01-04
+5,0,10,'five',NULL,15,20,25,0.000000030,35.35,40,2019-01-05
+6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1,2019-01-06
+7,NULL,7,'seven',false,77,777,NULL,NULL,NULL,NULL,NULL
+8,0,80,'NULL',true,10,11,12,0.000000013,0.14,15,2019-01-08
+9,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
+127,1,2,'127',false,3,4,5,0.000000000,0.00,0,2019-01-27
 ---- TYPES
-INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # predicate on key, nothing is deleted
@@ -74,19 +74,19 @@ delete from tdata where id = 10
 NumModifiedRows: 0
 NumRowErrors: 0
 ---- LABELS
-ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2
-3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60
-4,5,6,'four',true,7,8,9,0.000000010,11.11,12
-5,0,10,'five',NULL,15,20,25,0.000000030,35.35,40
-6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1
-7,NULL,7,'seven',false,77,777,NULL,NULL,NULL,NULL
-8,0,80,'NULL',true,10,11,12,0.000000013,0.14,15
-9,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL
-127,1,2,'127',false,3,4,5,0.000000000,0.00,0
+2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2,2019-01-02
+3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60,2019-01-03
+4,5,6,'four',true,7,8,9,0.000000010,11.11,12,2019-01-04
+5,0,10,'five',NULL,15,20,25,0.000000030,35.35,40,2019-01-05
+6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1,2019-01-06
+7,NULL,7,'seven',false,77,777,NULL,NULL,NULL,NULL,NULL
+8,0,80,'NULL',true,10,11,12,0.000000013,0.14,15,2019-01-08
+9,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
+127,1,2,'127',false,3,4,5,0.000000000,0.00,0,2019-01-27
 ---- TYPES
-INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # predicate on key, boundary value
@@ -95,18 +95,18 @@ delete from tdata where id = max_tinyint()
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2
-3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60
-4,5,6,'four',true,7,8,9,0.000000010,11.11,12
-5,0,10,'five',NULL,15,20,25,0.000000030,35.35,40
-6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1
-7,NULL,7,'seven',false,77,777,NULL,NULL,NULL,NULL
-8,0,80,'NULL',true,10,11,12,0.000000013,0.14,15
-9,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL
+2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2,2019-01-02
+3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60,2019-01-03
+4,5,6,'four',true,7,8,9,0.000000010,11.11,12,2019-01-04
+5,0,10,'five',NULL,15,20,25,0.000000030,35.35,40,2019-01-05
+6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1,2019-01-06
+7,NULL,7,'seven',false,77,777,NULL,NULL,NULL,NULL,NULL
+8,0,80,'NULL',true,10,11,12,0.000000013,0.14,15,2019-01-08
+9,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
 ---- TYPES
-INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # compound predicate on key
@@ -115,17 +115,17 @@ delete from tdata where id > 6 and id < 8
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2
-3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60
-4,5,6,'four',true,7,8,9,0.000000010,11.11,12
-5,0,10,'five',NULL,15,20,25,0.000000030,35.35,40
-6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1
-8,0,80,'NULL',true,10,11,12,0.000000013,0.14,15
-9,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL
+2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2,2019-01-02
+3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60,2019-01-03
+4,5,6,'four',true,7,8,9,0.000000010,11.11,12,2019-01-04
+5,0,10,'five',NULL,15,20,25,0.000000030,35.35,40,2019-01-05
+6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1,2019-01-06
+8,0,80,'NULL',true,10,11,12,0.000000013,0.14,15,2019-01-08
+9,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
 ---- TYPES
-INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # predicate on key, multiple rows
@@ -134,23 +134,23 @@ delete from tdata where id % 4 = 0
 NumModifiedRows: 2
 NumRowErrors: 0
 ---- LABELS
-ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2
-3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60
-5,0,10,'five',NULL,15,20,25,0.000000030,35.35,40
-6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1
-9,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL
+2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2,2019-01-02
+3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60,2019-01-03
+5,0,10,'five',NULL,15,20,25,0.000000030,35.35,40,2019-01-05
+6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1,2019-01-06
+9,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
 ---- TYPES
-INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # insert new values, including some that were previously deleted
 insert into table tdata values
-(10, 20, 30, 'ten', true, 40, 50, 60, 0.000000070, 80.80, 90),
-(1, 1.0, 1, 'one', true, 1, 1, 1, 0.000000001, 1.11, 1),
-(11, -11, 11, 'eleven', false, 1, 11, 111, 0.000000011, 11.00, 11),
-(8, 0, 80, NULL, true, 10, 11, 12, 0.000000013, 0.14, 15)
+(10, 20, 30, 'ten', true, 40, 50, 60, 0.000000070, 80.80, 90, DATE '2019-01-10'),
+(1, 1.0, 1, 'one', true, 1, 1, 1, 0.000000001, 1.11, 1, DATE '2019-01-01'),
+(11, -11, 11, 'eleven', false, 1, 11, 111, 0.000000011, 11.00, 11, DATE '2019-01-11'),
+(8, 0, 80, NULL, true, 10, 11, 12, 0.000000013, 0.14, 15, DATE '2019-01-08')
 ====
 ---- QUERY
 # single row, predicate on non-key
@@ -159,18 +159,18 @@ delete from tdata where valv = 'five'
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2
-3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60
-6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1
-9,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL
-10,20,30,'ten',true,40,50,60,0.000000070,80.80,90
-1,1.0,1,'one',true,1,1,1,0.000000001,1.11,1
-11,-11,11,'eleven',false,1,11,111,0.000000011,11.00,11
-8,0,80,'NULL',true,10,11,12,0.000000013,0.14,15
+2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2,2019-01-02
+3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60,2019-01-03
+6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1,2019-01-06
+9,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
+10,20,30,'ten',true,40,50,60,0.000000070,80.80,90,2019-01-10
+1,1.0,1,'one',true,1,1,1,0.000000001,1.11,1,2019-01-01
+11,-11,11,'eleven',false,1,11,111,0.000000011,11.00,11,2019-01-11
+8,0,80,'NULL',true,10,11,12,0.000000013,0.14,15,2019-01-08
 ---- TYPES
-INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # predicate on non-key, NULL
@@ -179,17 +179,17 @@ delete from tdata where valb is NULL
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2
-3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60
-6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1
-10,20,30,'ten',true,40,50,60,0.000000070,80.80,90
-1,1.0,1,'one',true,1,1,1,0.000000001,1.11,1
-11,-11,11,'eleven',false,1,11,111,0.000000011,11.00,11
-8,0,80,'NULL',true,10,11,12,0.000000013,0.14,15
+2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2,2019-01-02
+3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60,2019-01-03
+6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1,2019-01-06
+10,20,30,'ten',true,40,50,60,0.000000070,80.80,90,2019-01-10
+1,1.0,1,'one',true,1,1,1,0.000000001,1.11,1,2019-01-01
+11,-11,11,'eleven',false,1,11,111,0.000000011,11.00,11,2019-01-11
+8,0,80,'NULL',true,10,11,12,0.000000013,0.14,15,2019-01-08
 ---- TYPES
-INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # predicate on non-key, nothing is deleted
@@ -198,17 +198,17 @@ delete from tdata where vals = -100
 NumModifiedRows: 0
 NumRowErrors: 0
 ---- LABELS
-ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2
-3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60
-6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1
-10,20,30,'ten',true,40,50,60,0.000000070,80.80,90
-1,1.0,1,'one',true,1,1,1,0.000000001,1.11,1
-11,-11,11,'eleven',false,1,11,111,0.000000011,11.00,11
-8,0,80,'NULL',true,10,11,12,0.000000013,0.14,15
+2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2,2019-01-02
+3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60,2019-01-03
+6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1,2019-01-06
+10,20,30,'ten',true,40,50,60,0.000000070,80.80,90,2019-01-10
+1,1.0,1,'one',true,1,1,1,0.000000001,1.11,1,2019-01-01
+11,-11,11,'eleven',false,1,11,111,0.000000011,11.00,11,2019-01-11
+8,0,80,'NULL',true,10,11,12,0.000000013,0.14,15,2019-01-08
 ---- TYPES
-INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # predicate on non-key, compound predicate
@@ -217,16 +217,16 @@ delete from tdata where valf = 0 and vali = 80
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2
-3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60
-6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1
-10,20,30,'ten',true,40,50,60,0.000000070,80.80,90
-1,1.0,1,'one',true,1,1,1,0.000000001,1.11,1
-11,-11,11,'eleven',false,1,11,111,0.000000011,11.00,11
+2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2,2019-01-02
+3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60,2019-01-03
+6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1,2019-01-06
+10,20,30,'ten',true,40,50,60,0.000000070,80.80,90,2019-01-10
+1,1.0,1,'one',true,1,1,1,0.000000001,1.11,1,2019-01-01
+11,-11,11,'eleven',false,1,11,111,0.000000011,11.00,11,2019-01-11
 ---- TYPES
-INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # predicate on non-key, multiple rows
@@ -235,14 +235,14 @@ delete from tdata where vals % 10 = 0
 NumModifiedRows: 2
 NumRowErrors: 0
 ---- LABELS
-ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2
-6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1
-1,1.0,1,'one',true,1,1,1,0.000000001,1.11,1
-11,-11,11,'eleven',false,1,11,111,0.000000011,11.00,11
+2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2,2019-01-02
+6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1,2019-01-06
+1,1.0,1,'one',true,1,1,1,0.000000001,1.11,1,2019-01-01
+11,-11,11,'eleven',false,1,11,111,0.000000011,11.00,11,2019-01-11
 ---- TYPES
-INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # 'from' syntax - the join results in four deletes, 3 of which fail
@@ -251,13 +251,13 @@ delete a from tdata a, tdata b where a.id = 11
 NumModifiedRows: 1
 NumRowErrors: 3
 ---- LABELS
-ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2
-6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1
-1,1.0,1,'one',true,1,1,1,0.000000001,1.11,1
+2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2,2019-01-02
+6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1,2019-01-06
+1,1.0,1,'one',true,1,1,1,0.000000001,1.11,1,2019-01-01
 ---- TYPES
-INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # Try to delete a row with a primary key value that is not covered by the existing range
@@ -267,20 +267,20 @@ delete from tdata where id = 10001
 NumModifiedRows: 0
 NumRowErrors: 0
 ---- LABELS
-ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2
-6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1
-1,1.0,1,'one',true,1,1,1,0.000000001,1.11,1
+2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2,2019-01-02
+6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1,2019-01-06
+1,1.0,1,'one',true,1,1,1,0.000000001,1.11,1,2019-01-01
 ---- TYPES
-INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # Add a couple more rows back
 insert into table tdata values
-(3, 0, NULL, 'three', false, 10, 20, 30, 0.000000040, 50.00, 60),
-(4, 5, 6, 'four', true, 7, 8, 9, 0.000000010, 11.11, 12),
-(5, 0, 10, 'five', NULL, 15, 20, 25, 0.000000030, 35.35, 40)
+(3, 0, NULL, 'three', false, 10, 20, 30, 0.000000040, 50.00, 60, DATE '2019-01-03'),
+(4, 5, 6, 'four', true, 7, 8, 9, 0.000000010, 11.11, 12, DATE '2019-01-04'),
+(5, 0, 10, 'five', NULL, 15, 20, 25, 0.000000030, 35.35, 40, DATE '2019-01-05')
 ---- RESULTS
 : 3
 ====
@@ -291,13 +291,13 @@ delete from tdata where valdec8 < 11.11
 NumModifiedRows: 3
 NumRowErrors: 0
 ---- LABELS
-ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60
-4,5,6,'four',true,7,8,9,0.000000010,11.11,12
-5,0,10,'five',NULL,15,20,25,0.000000030,35.35,40
+3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60,2019-01-03
+4,5,6,'four',true,7,8,9,0.000000010,11.11,12,2019-01-04
+5,0,10,'five',NULL,15,20,25,0.000000030,35.35,40,2019-01-05
 ---- TYPES
-INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # predicate on decimal, single row
@@ -306,17 +306,17 @@ delete from tdata where valdec4 = 0.000000030
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60
-4,5,6,'four',true,7,8,9,0.000000010,11.11,12
+3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60,2019-01-03
+4,5,6,'four',true,7,8,9,0.000000010,11.11,12,2019-01-04
 ---- TYPES
-INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 insert into tdata
 select cast(id + 100 as int), float_col, bigint_col, string_col, bool_col, tinyint_col,
-smallint_col, double_col, NULL, NULL, NULL
+smallint_col, double_col, NULL, NULL, NULL, NULL
 from functional_kudu.alltypes
 ---- RESULTS
 : 7300
@@ -331,10 +331,10 @@ delete from tdata where id > -1
 NumModifiedRows: 7302
 NumRowErrors: 0
 ---- LABELS
-ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
 ---- TYPES
-INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 create table multiple_key_cols
diff --git a/testdata/workloads/functional-query/queries/QueryTest/kudu_describe.test b/testdata/workloads/functional-query/queries/QueryTest/kudu_describe.test
index 4884e64..9c8c376 100644
--- a/testdata/workloads/functional-query/queries/QueryTest/kudu_describe.test
+++ b/testdata/workloads/functional-query/queries/QueryTest/kudu_describe.test
@@ -87,3 +87,21 @@ NAME,TYPE,COMMENT,PRIMARY_KEY,NULLABLE,DEFAULT_VALUE,ENCODING,COMPRESSION,BLOCK_
 ---- TYPES
 STRING,STRING,STRING,STRING,STRING,STRING,STRING,STRING,STRING
 ====
+---- QUERY
+# Test date columns and primary key
+create table describe_date_test
+(
+ date_pk date PRIMARY KEY,
+ date_val date not null,
+ date_null date null)
+stored as kudu;
+describe describe_date_test;
+---- LABELS
+NAME,TYPE,COMMENT,PRIMARY_KEY,NULLABLE,DEFAULT_VALUE,ENCODING,COMPRESSION,BLOCK_SIZE
+---- RESULTS
+'date_pk','date','','true','false','','AUTO_ENCODING','DEFAULT_COMPRESSION','0'
+'date_val','date','','false','false','','AUTO_ENCODING','DEFAULT_COMPRESSION','0'
+'date_null','date','','false','true','','AUTO_ENCODING','DEFAULT_COMPRESSION','0'
+---- TYPES
+STRING,STRING,STRING,STRING,STRING,STRING,STRING,STRING,STRING
+====
diff --git a/testdata/workloads/functional-query/queries/QueryTest/kudu_insert.test b/testdata/workloads/functional-query/queries/QueryTest/kudu_insert.test
index d2b734e..ef7b8ec 100644
--- a/testdata/workloads/functional-query/queries/QueryTest/kudu_insert.test
+++ b/testdata/workloads/functional-query/queries/QueryTest/kudu_insert.test
@@ -4,7 +4,7 @@ create table tdata
   (id int primary key, valf float null, vali bigint null, valv string null,
    valb boolean null, valt tinyint null, vals smallint null, vald double null,
    ts timestamp, decimal4 decimal(9,9) null, decimal8 decimal(18,2) null,
-   decimal16 decimal(38, 0) null)
+   decimal16 decimal(38, 0) null, valdate date null)
   PARTITION BY RANGE (PARTITION VALUES < 10, PARTITION 10 <= VALUES < 30,
   PARTITION 30 <= VALUES) STORED AS KUDU
 ---- RESULTS
@@ -13,30 +13,30 @@ create table tdata
 ---- QUERY
 # VALUES, single row, all target cols, no errors
 insert into tdata values (1, 1, 1, 'one', true, 1, 1, 1,
-  cast('1987-05-19 00:00:00' as timestamp), 0.000000001, 1.00, 1)
+  cast('1987-05-19 00:00:00' as timestamp), 0.000000001, 1.00, 1, DATE '1970-01-01')
 ---- RUNTIME_PROFILE
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, TS, DECIMAL4, DECIMAL8, DECIMAL16
+ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, TS, DECIMAL4, DECIMAL8, DECIMAL16, VALDATE
 ---- DML_RESULTS: tdata
-1,1,1,'one',true,1,1,1,1987-05-19 00:00:00,0.000000001,1.00,1
+1,1,1,'one',true,1,1,1,1987-05-19 00:00:00,0.000000001,1.00,1,1970-01-01
 ---- TYPES
-INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,TIMESTAMP,DECIMAL,DECIMAL,DECIMAL
+INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,TIMESTAMP,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # VALUES, single row, all target cols, NULL
-insert into tdata values (2, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
+insert into tdata values (2, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
 ---- RUNTIME_PROFILE
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, TS, DECIMAL4, DECIMAL8, DECIMAL16
+ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, TS, DECIMAL4, DECIMAL8, DECIMAL16, VALDATE
 ---- DML_RESULTS: tdata
-1,1,1,'one',true,1,1,1,1987-05-19 00:00:00,0.000000001,1.00,1
-2,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
+1,1,1,'one',true,1,1,1,1987-05-19 00:00:00,0.000000001,1.00,1,1970-01-01
+2,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
 ---- TYPES
-INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,TIMESTAMP,DECIMAL,DECIMAL,DECIMAL
+INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,TIMESTAMP,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # VALUES, single row, all target cols, boundary values. The timestamp value is the max
@@ -46,18 +46,18 @@ insert into tdata values
 (3, cast('nan' as float), max_bigint(), '', true, min_tinyint(), max_smallint(),
   cast('-inf' as double),
   nanoseconds_add(cast('9999-12-31 23:59:59' as timestamp), 999999999),
-  0.999999999, 9999999999999999.99, 99999999999999999999999999999999999999)
+  0.999999999, 9999999999999999.99, 99999999999999999999999999999999999999, DATE '9999-12-31')
 ---- RUNTIME_PROFILE
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, TS, DECIMAL4, DECIMAL8, DECIMAL16
+ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, TS, DECIMAL4, DECIMAL8, DECIMAL16, VALDATE
 ---- DML_RESULTS: tdata
-1,1,1,'one',true,1,1,1,1987-05-19 00:00:00,0.000000001,1.00,1
-2,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
-3,NaN,9223372036854775807,'',true,-128,32767,-Infinity,9999-12-31 23:59:59.999999000,0.999999999,9999999999999999.99,99999999999999999999999999999999999999
+1,1,1,'one',true,1,1,1,1987-05-19 00:00:00,0.000000001,1.00,1,1970-01-01
+2,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
+3,NaN,9223372036854775807,'',true,-128,32767,-Infinity,9999-12-31 23:59:59.999999000,0.999999999,9999999999999999.99,99999999999999999999999999999999999999,9999-12-31
 ---- TYPES
-INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,TIMESTAMP,DECIMAL,DECIMAL,DECIMAL
+INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,TIMESTAMP,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # VALUES, single row, subset of target cols
@@ -66,36 +66,36 @@ insert into tdata (valb, vald, id) values (true, 0, 4)
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, TS, DECIMAL4, DECIMAL8, DECIMAL16
+ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, TS, DECIMAL4, DECIMAL8, DECIMAL16, VALDATE
 ---- DML_RESULTS: tdata
-1,1,1,'one',true,1,1,1,1987-05-19 00:00:00,0.000000001,1.00,1
-2,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
-3,NaN,9223372036854775807,'',true,-128,32767,-Infinity,9999-12-31 23:59:59.999999000,0.999999999,9999999999999999.99,99999999999999999999999999999999999999
-4,NULL,NULL,'NULL',true,NULL,NULL,0,NULL,NULL,NULL,NULL
+1,1,1,'one',true,1,1,1,1987-05-19 00:00:00,0.000000001,1.00,1,1970-01-01
+2,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
+3,NaN,9223372036854775807,'',true,-128,32767,-Infinity,9999-12-31 23:59:59.999999000,0.999999999,9999999999999999.99,99999999999999999999999999999999999999,9999-12-31
+4,NULL,NULL,'NULL',true,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL
 ---- TYPES
-INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,TIMESTAMP,DECIMAL,DECIMAL,DECIMAL
+INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,TIMESTAMP,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # VALUES, multiple rows, all target cols
 insert into tdata values
-(5, 5.0, 5, 'five', false, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
-(6, 16, 60, '', true, 0, -1, -6, cast('2010-12-31 23:59:59' as timestamp), -0.000000001, -1.00, -1),
-(7, NULL, 10, NULL, false, max_tinyint(), -7, 2, cast('1400-01-01 00:00:00' as timestamp), 0.000000000, 0.00, 0)
+(5, 5.0, 5, 'five', false, NULL, NULL, NULL, NULL, NULL, NULL, NULL,NULL),
+(6, 16, 60, '', true, 0, -1, -6, cast('2010-12-31 23:59:59' as timestamp), -0.000000001, -1.00, -1, DATE '1970-01-01'),
+(7, NULL, 10, NULL, false, max_tinyint(), -7, 2, cast('1400-01-01 00:00:00' as timestamp), 0.000000000, 0.00, 0, DATE '1970-01-01')
 ---- RUNTIME_PROFILE
 NumModifiedRows: 3
 NumRowErrors: 0
 ---- LABELS
-ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, TS, DECIMAL4, DECIMAL8, DECIMAL16
+ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, TS, DECIMAL4, DECIMAL8, DECIMAL16, VALDATE
 ---- DML_RESULTS: tdata
-1,1,1,'one',true,1,1,1,1987-05-19 00:00:00,0.000000001,1.00,1
-2,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
-3,NaN,9223372036854775807,'',true,-128,32767,-Infinity,9999-12-31 23:59:59.999999000,0.999999999,9999999999999999.99,99999999999999999999999999999999999999
-4,NULL,NULL,'NULL',true,NULL,NULL,0,NULL,NULL,NULL,NULL
-5,5.0,5,'five',false,NULL,NULL,NULL,NULL,NULL,NULL,NULL
-6,16,60,'',true,0,-1,-6,2010-12-31 23:59:59,-0.000000001,-1.00,-1
-7,NULL,10,'NULL',false,127,-7,2,1400-01-01 00:00:00,0.000000000,0.00,0
+1,1,1,'one',true,1,1,1,1987-05-19 00:00:00,0.000000001,1.00,1,1970-01-01
+2,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
+3,NaN,9223372036854775807,'',true,-128,32767,-Infinity,9999-12-31 23:59:59.999999000,0.999999999,9999999999999999.99,99999999999999999999999999999999999999,9999-12-31
+4,NULL,NULL,'NULL',true,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL
+5,5.0,5,'five',false,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
+6,16,60,'',true,0,-1,-6,2010-12-31 23:59:59,-0.000000001,-1.00,-1,1970-01-01
+7,NULL,10,'NULL',false,127,-7,2,1400-01-01 00:00:00,0.000000000,0.00,0,1970-01-01
 ---- TYPES
-INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,TIMESTAMP,DECIMAL,DECIMAL,DECIMAL
+INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,TIMESTAMP,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # VALUES, multiple rows, subset of cols
@@ -106,44 +106,44 @@ insert into tdata (valv, valf, vali, id) values
 NumModifiedRows: 2
 NumRowErrors: 0
 ---- LABELS
-ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, TS, DECIMAL4, DECIMAL8, DECIMAL16
+ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, TS, DECIMAL4, DECIMAL8, DECIMAL16, VALDATE
 ---- DML_RESULTS: tdata
-1,1,1,'one',true,1,1,1,1987-05-19 00:00:00,0.000000001,1.00,1
-2,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
-3,NaN,9223372036854775807,'',true,-128,32767,-Infinity,9999-12-31 23:59:59.999999000,0.999999999,9999999999999999.99,99999999999999999999999999999999999999
-4,NULL,NULL,'NULL',true,NULL,NULL,0,NULL,NULL,NULL,NULL
-5,5.0,5,'five',false,NULL,NULL,NULL,NULL,NULL,NULL,NULL
-6,16,60,'',true,0,-1,-6,2010-12-31 23:59:59,-0.000000001,-1.00,-1
-7,NULL,10,'NULL',false,127,-7,2,1400-01-01 00:00:00,0.000000000,0.00,0
-8,88,888,'eight',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
-9,-9,-99,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
+1,1,1,'one',true,1,1,1,1987-05-19 00:00:00,0.000000001,1.00,1,1970-01-01
+2,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
+3,NaN,9223372036854775807,'',true,-128,32767,-Infinity,9999-12-31 23:59:59.999999000,0.999999999,9999999999999999.99,99999999999999999999999999999999999999,9999-12-31
+4,NULL,NULL,'NULL',true,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL
+5,5.0,5,'five',false,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
+6,16,60,'',true,0,-1,-6,2010-12-31 23:59:59,-0.000000001,-1.00,-1,1970-01-01
+7,NULL,10,'NULL',false,127,-7,2,1400-01-01 00:00:00,0.000000000,0.00,0,1970-01-01
+8,88,888,'eight',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
+9,-9,-99,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
 ---- TYPES
-INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,TIMESTAMP,DECIMAL,DECIMAL,DECIMAL
+INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,TIMESTAMP,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # SELECT, single row, all target cols
 insert into tdata
 select id, float_col, bigint_col, string_col, bool_col, tinyint_col, smallint_col,
-double_col, timestamp_col, NULL, NULL, NULL
+double_col, timestamp_col, NULL, NULL, NULL, NULL
 from functional.alltypes where id = 10
 ---- RUNTIME_PROFILE
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, TS, DECIMAL4, DECIMAL8, DECIMAL16
+ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, TS, DECIMAL4, DECIMAL8, DECIMAL16, VALDATE
 ---- DML_RESULTS: tdata
-1,1,1,'one',true,1,1,1,1987-05-19 00:00:00,0.000000001,1.00,1
-2,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
-3,NaN,9223372036854775807,'',true,-128,32767,-Infinity,9999-12-31 23:59:59.999999000,0.999999999,9999999999999999.99,99999999999999999999999999999999999999
-4,NULL,NULL,'NULL',true,NULL,NULL,0,NULL,NULL,NULL,NULL
-5,5.0,5,'five',false,NULL,NULL,NULL,NULL,NULL,NULL,NULL
-6,16,60,'',true,0,-1,-6,2010-12-31 23:59:59,-0.000000001,-1.00,-1
-7,NULL,10,'NULL',false,127,-7,2,1400-01-01 00:00:00,0.000000000,0.00,0
-8,88,888,'eight',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
-9,-9,-99,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
-10,0,0,'0',true,0,0,0,2009-01-02 00:10:00.450000000,NULL,NULL,NULL
+1,1,1,'one',true,1,1,1,1987-05-19 00:00:00,0.000000001,1.00,1,1970-01-01
+2,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
+3,NaN,9223372036854775807,'',true,-128,32767,-Infinity,9999-12-31 23:59:59.999999000,0.999999999,9999999999999999.99,99999999999999999999999999999999999999,9999-12-31
+4,NULL,NULL,'NULL',true,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL
+5,5.0,5,'five',false,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
+6,16,60,'',true,0,-1,-6,2010-12-31 23:59:59,-0.000000001,-1.00,-1,1970-01-01
+7,NULL,10,'NULL',false,127,-7,2,1400-01-01 00:00:00,0.000000000,0.00,0,1970-01-01
+8,88,888,'eight',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
+9,-9,-99,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
+10,0,0,'0',true,0,0,0,2009-01-02 00:10:00.450000000,NULL,NULL,NULL,NULL
 ---- TYPES
-INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,TIMESTAMP,DECIMAL,DECIMAL,DECIMAL
+INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,TIMESTAMP,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # SELECT, single row, subset of cols
@@ -154,21 +154,21 @@ from functional.alltypes where id = 11
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, TS, DECIMAL4, DECIMAL8, DECIMAL16
+ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, TS, DECIMAL4, DECIMAL8, DECIMAL16, VALDATE
 ---- DML_RESULTS: tdata
-1,1,1,'one',true,1,1,1,1987-05-19 00:00:00,0.000000001,1.00,1
-2,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
-3,NaN,9223372036854775807,'',true,-128,32767,-Infinity,9999-12-31 23:59:59.999999000,0.999999999,9999999999999999.99,99999999999999999999999999999999999999
-4,NULL,NULL,'NULL',true,NULL,NULL,0,NULL,NULL,NULL,NULL
-5,5.0,5,'five',false,NULL,NULL,NULL,NULL,NULL,NULL,NULL
-6,16,60,'',true,0,-1,-6,2010-12-31 23:59:59,-0.000000001,-1.00,-1
-7,NULL,10,'NULL',false,127,-7,2,1400-01-01 00:00:00,0.000000000,0.00,0
-8,88,888,'eight',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
-9,-9,-99,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
-10,0,0,'0',true,0,0,0,2009-01-02 00:10:00.450000000,NULL,NULL,NULL
-11,NULL,10,'NULL',false,NULL,NULL,10.1,2009-01-02 00:11:00.450000000,NULL,NULL,NULL
+1,1,1,'one',true,1,1,1,1987-05-19 00:00:00,0.000000001,1.00,1,1970-01-01
+2,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
+3,NaN,9223372036854775807,'',true,-128,32767,-Infinity,9999-12-31 23:59:59.999999000,0.999999999,9999999999999999.99,99999999999999999999999999999999999999,9999-12-31
+4,NULL,NULL,'NULL',true,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL
+5,5.0,5,'five',false,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
+6,16,60,'',true,0,-1,-6,2010-12-31 23:59:59,-0.000000001,-1.00,-1,1970-01-01
+7,NULL,10,'NULL',false,127,-7,2,1400-01-01 00:00:00,0.000000000,0.00,0,1970-01-01
+8,88,888,'eight',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
+9,-9,-99,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
+10,0,0,'0',true,0,0,0,2009-01-02 00:10:00.450000000,NULL,NULL,NULL,NULL
+11,NULL,10,'NULL',false,NULL,NULL,10.1,2009-01-02 00:11:00.450000000,NULL,NULL,NULL,NULL
 ---- TYPES
-INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,TIMESTAMP,DECIMAL,DECIMAL,DECIMAL
+INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,TIMESTAMP,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 delete tdata
@@ -178,18 +178,18 @@ delete tdata
 # SELECT, multiple rows, all target cols
 insert into tdata
 select id, float_col, bigint_col, string_col, bool_col, tinyint_col, smallint_col,
-double_col, timestamp_col, NULL, NULL, NULL
+double_col, timestamp_col, NULL, NULL, NULL, NULL
 from functional.alltypes where id < 2
 ---- RUNTIME_PROFILE
 NumModifiedRows: 2
 NumRowErrors: 0
 ---- LABELS
-ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, TS, DECIMAL4, DECIMAL8, DECIMAL16
+ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, TS, DECIMAL4, DECIMAL8, DECIMAL16, VALDATE
 ---- DML_RESULTS: tdata
-0,0,0,'0',true,0,0,0,2009-01-01 00:00:00,NULL,NULL,NULL
-1,1.100000023841858,10,'1',false,1,1,10.1,2009-01-01 00:01:00,NULL,NULL,NULL
+0,0,0,'0',true,0,0,0,2009-01-01 00:00:00,NULL,NULL,NULL,NULL
+1,1.100000023841858,10,'1',false,1,1,10.1,2009-01-01 00:01:00,NULL,NULL,NULL,NULL
 ---- TYPES
-INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,TIMESTAMP,DECIMAL,DECIMAL,DECIMAL
+INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,TIMESTAMP,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # SELECT, multiple rows, subset of cols
@@ -200,20 +200,20 @@ from functional.alltypes where id > 2 and id < 6
 NumModifiedRows: 3
 NumRowErrors: 0
 ---- LABELS
-ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, TS, DECIMAL4, DECIMAL8, DECIMAL16
+ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, TS, DECIMAL4, DECIMAL8, DECIMAL16, VALDATE
 ---- DML_RESULTS: tdata
-0,0,0,'0',true,0,0,0,2009-01-01 00:00:00,NULL,NULL,NULL
-1,1.100000023841858,10,'1',false,1,1,10.1,2009-01-01 00:01:00,NULL,NULL,NULL
-3,NULL,NULL,'NULL',NULL,3,3,30.3,2009-01-01 00:03:00.300000000,NULL,NULL,NULL
-4,NULL,NULL,'NULL',NULL,4,4,40.4,2009-01-01 00:04:00.600000000,NULL,NULL,NULL
-5,NULL,NULL,'NULL',NULL,5,5,50.5,2009-01-01 00:05:00.100000000,NULL,NULL,NULL
+0,0,0,'0',true,0,0,0,2009-01-01 00:00:00,NULL,NULL,NULL,NULL
+1,1.100000023841858,10,'1',false,1,1,10.1,2009-01-01 00:01:00,NULL,NULL,NULL,NULL
+3,NULL,NULL,'NULL',NULL,3,3,30.3,2009-01-01 00:03:00.300000000,NULL,NULL,NULL,NULL
+4,NULL,NULL,'NULL',NULL,4,4,40.4,2009-01-01 00:04:00.600000000,NULL,NULL,NULL,NULL
+5,NULL,NULL,'NULL',NULL,5,5,50.5,2009-01-01 00:05:00.100000000,NULL,NULL,NULL,NULL
 ---- TYPES
-INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,TIMESTAMP,DECIMAL,DECIMAL,DECIMAL
+INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,TIMESTAMP,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # Make sure we can insert empty strings into string columns and that we can scan them
 # back.
-insert into tdata values (320, 2.0, 932, cast('' as string), false, 0, 0, 0, NULL, NULL, NULL, NULL)
+insert into tdata values (320, 2.0, 932, cast('' as string), false, 0, 0, 0, NULL, NULL, NULL, NULL, NULL)
 ---- RESULTS
 : 1
 ---- RUNTIME_PROFILE
@@ -229,7 +229,7 @@ INT,STRING,BOOLEAN
 ====
 ---- QUERY
 insert into tdata values
-(666, cast(1.2 as float), 43, cast('z' as string), true, 0, 0, 0, NULL, NULL, NULL, NULL)
+(666, cast(1.2 as float), 43, cast('z' as string), true, 0, 0, 0, NULL, NULL, NULL, NULL, NULL)
 ---- RESULTS
 : 1
 ---- RUNTIME_PROFILE
@@ -239,7 +239,7 @@ NumRowErrors: 0
 ---- QUERY
 # insert row with primary key that already exists
 insert into tdata values
-(666, cast(1.2 as float), 43, cast('z' as VARCHAR(20)), true, 0, 0, 0, NULL, NULL, NULL, NULL)
+(666, cast(1.2 as float), 43, cast('z' as VARCHAR(20)), true, 0, 0, 0, NULL, NULL, NULL, NULL, NULL)
 ---- RESULTS
 : 0
 ---- RUNTIME_PROFILE
@@ -464,3 +464,27 @@ insert into multiple_partition_cols select bigint_col, null, string_col
 NumModifiedRows: 0
 NumRowErrors: 1
 ====
+---- QUERY
+create table dates (valdate date primary key) stored as kudu
+---- RESULTS
+'Table has been created.'
+---- ERRORS
+Unpartitioned Kudu tables are inefficient for large data sizes.
+====
+---- QUERY
+insert into dates values
+(date '1970-01-01'),
+(date '0001-01-01'),
+(date '9999-12-31')
+---- RUNTIME_PROFILE
+NumModifiedRows: 3
+NumRowErrors: 0
+---- LABELS
+VALDATE
+---- DML_RESULTS: dates
+1970-01-01
+0001-01-01
+9999-12-31
+---- TYPES
+DATE
+====
diff --git a/testdata/workloads/functional-query/queries/QueryTest/kudu_update.test b/testdata/workloads/functional-query/queries/QueryTest/kudu_update.test
index 8b7759b..91c571a 100644
--- a/testdata/workloads/functional-query/queries/QueryTest/kudu_update.test
+++ b/testdata/workloads/functional-query/queries/QueryTest/kudu_update.test
@@ -4,7 +4,7 @@ create table tdata
   (id int primary key, name string null, valf float null, vali bigint null,
    valv string null, valb boolean null, valt tinyint null, vals smallint null,
    vald double null, valdec4 decimal(9,9) null, valdec8 decimal(18,2) null,
-   valdec16 decimal(38, 0) null)
+   valdec16 decimal(38, 0) null, valdate date null)
   PARTITION BY RANGE (PARTITION VALUES < 10, PARTITION 10 <= VALUES < 30,
   PARTITION 30 <= VALUES <= 10000) STORED AS KUDU
 ---- RESULTS
@@ -12,11 +12,11 @@ create table tdata
 ====
 ---- QUERY
 insert into tdata values
-(1, "martin", 1.0, 232232323, cast('a' as string), true, 1, 2, 3, 0.000000001, 2.22, 3),
-(2, "david", cast(1.0 as float), 99398493939, cast('b' as string), false, 4, 5, 6, 0.000000004, 5.55, 6),
-(3, "todd", cast(1.0 as float), 993393939, "c", true, 7, 8, 9, 0.000000007, 8.88, 9),
-(40, "he", cast(0.0 as float), 43, cast('e' as string), false, 50, 60, 70, 0.000000050, 66.60, 70),
-(120, "she", cast(0.0 as float), 99, cast('f' as string), true, -1, 0, 1, -0.000000001, 0.00, 1)
+(1, "martin", 1.0, 232232323, cast('a' as string), true, 1, 2, 3, 0.000000001, 2.22, 3, DATE '1970-01-01'),
+(2, "david", cast(1.0 as float), 99398493939, cast('b' as string), false, 4, 5, 6, 0.000000004, 5.55, 6, DATE '1970-01-02'),
+(3, "todd", cast(1.0 as float), 993393939, "c", true, 7, 8, 9, 0.000000007, 8.88, 9,DATE '1970-01-03'),
+(40, "he", cast(0.0 as float), 43, cast('e' as string), false, 50, 60, 70, 0.000000050, 66.60, 70, DATE '1970-01-04'),
+(120, "she", cast(0.0 as float), 99, cast('f' as string), true, -1, 0, 1, -0.000000001, 0.00, 1, DATE '1970-01-05')
 ---- RESULTS
 : 5
 ---- RUNTIME_PROFILE
@@ -32,15 +32,15 @@ update tdata set vali=43 where id = 1
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-1,'martin',1.0,43,'a',true,1,2,3,0.000000001,2.22,3
-2,'david',1.0,99398493939,'b',false,4,5,6,0.000000004,5.55,6
-3,'todd',1.0,993393939,'c',true,7,8,9,0.000000007,8.88,9
-40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70
-120,'she',0.0,99,'f',true,-1,0,1,-0.000000001,0.00,1
+1,'martin',1.0,43,'a',true,1,2,3,0.000000001,2.22,3,1970-01-01
+2,'david',1.0,99398493939,'b',false,4,5,6,0.000000004,5.55,6,1970-01-02
+3,'todd',1.0,993393939,'c',true,7,8,9,0.000000007,8.88,9,1970-01-03
+40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70,1970-01-04
+120,'she',0.0,99,'f',true,-1,0,1,-0.000000001,0.00,1,1970-01-05
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # single row, equality on key, string
@@ -51,15 +51,15 @@ update tdata set valv=cast('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' as varchar(20)) wh
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-1,'martin',1.0,43,'aaaaaaaaaaaaaaaaaaaa',true,1,2,3,0.000000001,2.22,3
-2,'david',1.0,99398493939,'b',false,4,5,6,0.000000004,5.55,6
-3,'todd',1.0,993393939,'c',true,7,8,9,0.000000007,8.88,9
-40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70
-120,'she',0.0,99,'f',true,-1,0,1,-0.000000001,0.00,1
+1,'martin',1.0,43,'aaaaaaaaaaaaaaaaaaaa',true,1,2,3,0.000000001,2.22,3,1970-01-01
+2,'david',1.0,99398493939,'b',false,4,5,6,0.000000004,5.55,6,1970-01-02
+3,'todd',1.0,993393939,'c',true,7,8,9,0.000000007,8.88,9,1970-01-03
+40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70,1970-01-04
+120,'she',0.0,99,'f',true,-1,0,1,-0.000000001,0.00,1,1970-01-05
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # single row, equality on key, boolean
@@ -68,15 +68,15 @@ update tdata set valb=false where id = 1
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-1,'martin',1.0,43,'aaaaaaaaaaaaaaaaaaaa',false,1,2,3,0.000000001,2.22,3
-2,'david',1.0,99398493939,'b',false,4,5,6,0.000000004,5.55,6
-3,'todd',1.0,993393939,'c',true,7,8,9,0.000000007,8.88,9
-40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70
-120,'she',0.0,99,'f',true,-1,0,1,-0.000000001,0.00,1
+1,'martin',1.0,43,'aaaaaaaaaaaaaaaaaaaa',false,1,2,3,0.000000001,2.22,3,1970-01-01
+2,'david',1.0,99398493939,'b',false,4,5,6,0.000000004,5.55,6,1970-01-02
+3,'todd',1.0,993393939,'c',true,7,8,9,0.000000007,8.88,9,1970-01-03
+40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70,1970-01-04
+120,'she',0.0,99,'f',true,-1,0,1,-0.000000001,0.00,1,1970-01-05
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # single row, equality on key, set to NULL
@@ -85,15 +85,15 @@ update tdata set name=null where id = 40
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-1,'martin',1.0,43,'aaaaaaaaaaaaaaaaaaaa',false,1,2,3,0.000000001,2.22,3
-2,'david',1.0,99398493939,'b',false,4,5,6,0.000000004,5.55,6
-3,'todd',1.0,993393939,'c',true,7,8,9,0.000000007,8.88,9
-40,'NULL',0.0,43,'e',false,50,60,70,0.000000050,66.60,70
-120,'she',0.0,99,'f',true,-1,0,1,-0.000000001,0.00,1
+1,'martin',1.0,43,'aaaaaaaaaaaaaaaaaaaa',false,1,2,3,0.000000001,2.22,3,1970-01-01
+2,'david',1.0,99398493939,'b',false,4,5,6,0.000000004,5.55,6,1970-01-02
+3,'todd',1.0,993393939,'c',true,7,8,9,0.000000007,8.88,9,1970-01-03
+40,'NULL',0.0,43,'e',false,50,60,70,0.000000050,66.60,70,1970-01-04
+120,'she',0.0,99,'f',true,-1,0,1,-0.000000001,0.00,1,1970-01-05
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # single row, equlity on key, set from NULL
@@ -102,15 +102,15 @@ update tdata set name='he' where id = 40
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-1,'martin',1.0,43,'aaaaaaaaaaaaaaaaaaaa',false,1,2,3,0.000000001,2.22,3
-2,'david',1.0,99398493939,'b',false,4,5,6,0.000000004,5.55,6
-3,'todd',1.0,993393939,'c',true,7,8,9,0.000000007,8.88,9
-40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70
-120,'she',0.0,99,'f',true,-1,0,1,-0.000000001,0.00,1
+1,'martin',1.0,43,'aaaaaaaaaaaaaaaaaaaa',false,1,2,3,0.000000001,2.22,3,1970-01-01
+2,'david',1.0,99398493939,'b',false,4,5,6,0.000000004,5.55,6,1970-01-02
+3,'todd',1.0,993393939,'c',true,7,8,9,0.000000007,8.88,9,1970-01-03
+40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70,1970-01-04
+120,'she',0.0,99,'f',true,-1,0,1,-0.000000001,0.00,1,1970-01-05
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # single row, equality on key, boundary value
@@ -119,15 +119,15 @@ update tdata set vali = max_bigint() where id = 120
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-1,'martin',1.0,43,'aaaaaaaaaaaaaaaaaaaa',false,1,2,3,0.000000001,2.22,3
-2,'david',1.0,99398493939,'b',false,4,5,6,0.000000004,5.55,6
-3,'todd',1.0,993393939,'c',true,7,8,9,0.000000007,8.88,9
-40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70
-120,'she',0.0,9223372036854775807,'f',true,-1,0,1,-0.000000001,0.00,1
+1,'martin',1.0,43,'aaaaaaaaaaaaaaaaaaaa',false,1,2,3,0.000000001,2.22,3,1970-01-01
+2,'david',1.0,99398493939,'b',false,4,5,6,0.000000004,5.55,6,1970-01-02
+3,'todd',1.0,993393939,'c',true,7,8,9,0.000000007,8.88,9,1970-01-03
+40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70,1970-01-04
+120,'she',0.0,9223372036854775807,'f',true,-1,0,1,-0.000000001,0.00,1,1970-01-05
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # single row, inequality on key, float
@@ -136,15 +136,15 @@ update tdata set valf = -1 where id > 2 and id < 4
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-1,'martin',1.0,43,'aaaaaaaaaaaaaaaaaaaa',false,1,2,3,0.000000001,2.22,3
-2,'david',1.0,99398493939,'b',false,4,5,6,0.000000004,5.55,6
-3,'todd',-1.0,993393939,'c',true,7,8,9,0.000000007,8.88,9
-40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70
-120,'she',0.0,9223372036854775807,'f',true,-1,0,1,-0.000000001,0.00,1
+1,'martin',1.0,43,'aaaaaaaaaaaaaaaaaaaa',false,1,2,3,0.000000001,2.22,3,1970-01-01
+2,'david',1.0,99398493939,'b',false,4,5,6,0.000000004,5.55,6,1970-01-02
+3,'todd',-1.0,993393939,'c',true,7,8,9,0.000000007,8.88,9,1970-01-03
+40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70,1970-01-04
+120,'she',0.0,9223372036854775807,'f',true,-1,0,1,-0.000000001,0.00,1,1970-01-05
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # single row, inequality on key, tinyint
@@ -153,15 +153,15 @@ update tdata set valt = 10 where id > 100
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-1,'martin',1.0,43,'aaaaaaaaaaaaaaaaaaaa',false,1,2,3,0.000000001,2.22,3
-2,'david',1.0,99398493939,'b',false,4,5,6,0.000000004,5.55,6
-3,'todd',-1.0,993393939,'c',true,7,8,9,0.000000007,8.88,9
-40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70
-120,'she',0.0,9223372036854775807,'f',true,10,0,1,-0.000000001,0.00,1
+1,'martin',1.0,43,'aaaaaaaaaaaaaaaaaaaa',false,1,2,3,0.000000001,2.22,3,1970-01-01
+2,'david',1.0,99398493939,'b',false,4,5,6,0.000000004,5.55,6,1970-01-02
+3,'todd',-1.0,993393939,'c',true,7,8,9,0.000000007,8.88,9,1970-01-03
+40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70,1970-01-04
+120,'she',0.0,9223372036854775807,'f',true,10,0,1,-0.000000001,0.00,1,1970-01-05
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # single row, equality on non-key, string
@@ -170,15 +170,15 @@ update tdata set name='unknown' where name = 'martin'
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-1,'unknown',1.0,43,'aaaaaaaaaaaaaaaaaaaa',false,1,2,3,0.000000001,2.22,3
-2,'david',1.0,99398493939,'b',false,4,5,6,0.000000004,5.55,6
-3,'todd',-1.0,993393939,'c',true,7,8,9,0.000000007,8.88,9
-40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70
-120,'she',0.0,9223372036854775807,'f',true,10,0,1,-0.000000001,0.00,1
+1,'unknown',1.0,43,'aaaaaaaaaaaaaaaaaaaa',false,1,2,3,0.000000001,2.22,3,1970-01-01
+2,'david',1.0,99398493939,'b',false,4,5,6,0.000000004,5.55,6,1970-01-02
+3,'todd',-1.0,993393939,'c',true,7,8,9,0.000000007,8.88,9,1970-01-03
+40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70,1970-01-04
+120,'she',0.0,9223372036854775807,'f',true,10,0,1,-0.000000001,0.00,1,1970-01-05
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # single row, inequality on non-key, double
@@ -187,15 +187,15 @@ update tdata set vald = 0 where valf < 0
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-1,'unknown',1.0,43,'aaaaaaaaaaaaaaaaaaaa',false,1,2,3,0.000000001,2.22,3
-2,'david',1.0,99398493939,'b',false,4,5,6,0.000000004,5.55,6
-3,'todd',-1.0,993393939,'c',true,7,8,0,0.000000007,8.88,9
-40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70
-120,'she',0.0,9223372036854775807,'f',true,10,0,1,-0.000000001,0.00,1
+1,'unknown',1.0,43,'aaaaaaaaaaaaaaaaaaaa',false,1,2,3,0.000000001,2.22,3,1970-01-01
+2,'david',1.0,99398493939,'b',false,4,5,6,0.000000004,5.55,6,1970-01-02
+3,'todd',-1.0,993393939,'c',true,7,8,0,0.000000007,8.88,9,1970-01-03
+40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70,1970-01-04
+120,'she',0.0,9223372036854775807,'f',true,10,0,1,-0.000000001,0.00,1,1970-01-05
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # single row, inequality on non-key, decimal
@@ -204,15 +204,15 @@ update tdata set valdec4 = 0.000000001, valdec16 = -1 where valdec4 < 0
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-1,'unknown',1.0,43,'aaaaaaaaaaaaaaaaaaaa',false,1,2,3,0.000000001,2.22,3
-2,'david',1.0,99398493939,'b',false,4,5,6,0.000000004,5.55,6
-3,'todd',-1.0,993393939,'c',true,7,8,0,0.000000007,8.88,9
-40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70
-120,'she',0.0,9223372036854775807,'f',true,10,0,1,0.000000001,0.00,-1
+1,'unknown',1.0,43,'aaaaaaaaaaaaaaaaaaaa',false,1,2,3,0.000000001,2.22,3,1970-01-01
+2,'david',1.0,99398493939,'b',false,4,5,6,0.000000004,5.55,6,1970-01-02
+3,'todd',-1.0,993393939,'c',true,7,8,0,0.000000007,8.88,9,1970-01-03
+40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70,1970-01-04
+120,'she',0.0,9223372036854775807,'f',true,10,0,1,0.000000001,0.00,-1,1970-01-05
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # multiple rows, predicate on key
@@ -221,15 +221,15 @@ update tdata set vali=43 where id > 1 and id < 10
 NumModifiedRows: 2
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-1,'unknown',1.0,43,'aaaaaaaaaaaaaaaaaaaa',false,1,2,3,0.000000001,2.22,3
-2,'david',1.0,43,'b',false,4,5,6,0.000000004,5.55,6
-3,'todd',-1.0,43,'c',true,7,8,0,0.000000007,8.88,9
-40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70
-120,'she',0.0,9223372036854775807,'f',true,10,0,1,0.000000001,0.00,-1
+1,'unknown',1.0,43,'aaaaaaaaaaaaaaaaaaaa',false,1,2,3,0.000000001,2.22,3,1970-01-01
+2,'david',1.0,43,'b',false,4,5,6,0.000000004,5.55,6,1970-01-02
+3,'todd',-1.0,43,'c',true,7,8,0,0.000000007,8.88,9,1970-01-03
+40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70,1970-01-04
+120,'she',0.0,9223372036854775807,'f',true,10,0,1,0.000000001,0.00,-1,1970-01-05
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # multiple rows, predicate on non-key
@@ -238,15 +238,15 @@ update tdata set valb=false where name LIKE '%he'
 NumModifiedRows: 2
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-1,'unknown',1.0,43,'aaaaaaaaaaaaaaaaaaaa',false,1,2,3,0.000000001,2.22,3
-2,'david',1.0,43,'b',false,4,5,6,0.000000004,5.55,6
-3,'todd',-1.0,43,'c',true,7,8,0,0.000000007,8.88,9
-40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70
-120,'she',0.0,9223372036854775807,'f',false,10,0,1,0.000000001,0.00,-1
+1,'unknown',1.0,43,'aaaaaaaaaaaaaaaaaaaa',false,1,2,3,0.000000001,2.22,3,1970-01-01
+2,'david',1.0,43,'b',false,4,5,6,0.000000004,5.55,6,1970-01-02
+3,'todd',-1.0,43,'c',true,7,8,0,0.000000007,8.88,9,1970-01-03
+40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70,1970-01-04
+120,'she',0.0,9223372036854775807,'f',false,10,0,1,0.000000001,0.00,-1,1970-01-05
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # update the same row multiple times: cross join produces 5 identical updates
@@ -255,15 +255,15 @@ update a set a.name='they' from tdata a, tdata b where a.id = 1
 NumModifiedRows: 5
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-1,'they',1.0,43,'aaaaaaaaaaaaaaaaaaaa',false,1,2,3,0.000000001,2.22,3
-2,'david',1.0,43,'b',false,4,5,6,0.000000004,5.55,6
-3,'todd',-1.0,43,'c',true,7,8,0,0.000000007,8.88,9
-40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70
-120,'she',0.0,9223372036854775807,'f',false,10,0,1,0.000000001,0.00,-1
+1,'they',1.0,43,'aaaaaaaaaaaaaaaaaaaa',false,1,2,3,0.000000001,2.22,3,1970-01-01
+2,'david',1.0,43,'b',false,4,5,6,0.000000004,5.55,6,1970-01-02
+3,'todd',-1.0,43,'c',true,7,8,0,0.000000007,8.88,9,1970-01-03
+40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70,1970-01-04
+120,'she',0.0,9223372036854775807,'f',false,10,0,1,0.000000001,0.00,-1,1970-01-05
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # value of update is a constant expression
@@ -272,15 +272,15 @@ update tdata set valf = 1 + 2 where id = 1
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-1,'they',3,43,'aaaaaaaaaaaaaaaaaaaa',false,1,2,3,0.000000001,2.22,3
-2,'david',1.0,43,'b',false,4,5,6,0.000000004,5.55,6
-3,'todd',-1.0,43,'c',true,7,8,0,0.000000007,8.88,9
-40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70
-120,'she',0.0,9223372036854775807,'f',false,10,0,1,0.000000001,0.00,-1
+1,'they',3,43,'aaaaaaaaaaaaaaaaaaaa',false,1,2,3,0.000000001,2.22,3,1970-01-01
+2,'david',1.0,43,'b',false,4,5,6,0.000000004,5.55,6,1970-01-02
+3,'todd',-1.0,43,'c',true,7,8,0,0.000000007,8.88,9,1970-01-03
+40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70,1970-01-04
+120,'she',0.0,9223372036854775807,'f',false,10,0,1,0.000000001,0.00,-1,1970-01-05
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # value of update is a non-constant expression
@@ -289,15 +289,15 @@ update tdata set name = concat(name, name) where id % 2 = 1
 NumModifiedRows: 2
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-1,'theythey',3,43,'aaaaaaaaaaaaaaaaaaaa',false,1,2,3,0.000000001,2.22,3
-2,'david',1.0,43,'b',false,4,5,6,0.000000004,5.55,6
-3,'toddtodd',-1.0,43,'c',true,7,8,0,0.000000007,8.88,9
-40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70
-120,'she',0.0,9223372036854775807,'f',false,10,0,1,0.000000001,0.00,-1
+1,'theythey',3,43,'aaaaaaaaaaaaaaaaaaaa',false,1,2,3,0.000000001,2.22,3,1970-01-01
+2,'david',1.0,43,'b',false,4,5,6,0.000000004,5.55,6,1970-01-02
+3,'toddtodd',-1.0,43,'c',true,7,8,0,0.000000007,8.88,9,1970-01-03
+40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70,1970-01-04
+120,'she',0.0,9223372036854775807,'f',false,10,0,1,0.000000001,0.00,-1,1970-01-05
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # error - update key column
@@ -312,15 +312,15 @@ update tdata set name = 'none' where id = 10
 NumModifiedRows: 0
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-1,'theythey',3,43,'aaaaaaaaaaaaaaaaaaaa',false,1,2,3,0.000000001,2.22,3
-2,'david',1.0,43,'b',false,4,5,6,0.000000004,5.55,6
-3,'toddtodd',-1.0,43,'c',true,7,8,0,0.000000007,8.88,9
-40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70
-120,'she',0.0,9223372036854775807,'f',false,10,0,1,0.000000001,0.00,-1
+1,'theythey',3,43,'aaaaaaaaaaaaaaaaaaaa',false,1,2,3,0.000000001,2.22,3,1970-01-01
+2,'david',1.0,43,'b',false,4,5,6,0.000000004,5.55,6,1970-01-02
+3,'toddtodd',-1.0,43,'c',true,7,8,0,0.000000007,8.88,9,1970-01-03
+40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70,1970-01-04
+120,'she',0.0,9223372036854775807,'f',false,10,0,1,0.000000001,0.00,-1,1970-01-05
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 # Try to update a row with a primary key value that is not covered by the existing range
@@ -330,20 +330,20 @@ update tdata set vali = 10 where id = 10001
 NumModifiedRows: 0
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE
 ---- DML_RESULTS: tdata
-1,'theythey',3,43,'aaaaaaaaaaaaaaaaaaaa',false,1,2,3,0.000000001,2.22,3
-2,'david',1.0,43,'b',false,4,5,6,0.000000004,5.55,6
-3,'toddtodd',-1.0,43,'c',true,7,8,0,0.000000007,8.88,9
-40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70
-120,'she',0.0,9223372036854775807,'f',false,10,0,1,0.000000001,0.00,-1
+1,'theythey',3,43,'aaaaaaaaaaaaaaaaaaaa',false,1,2,3,0.000000001,2.22,3,1970-01-01
+2,'david',1.0,43,'b',false,4,5,6,0.000000004,5.55,6,1970-01-02
+3,'toddtodd',-1.0,43,'c',true,7,8,0,0.000000007,8.88,9,1970-01-03
+40,'he',0.0,43,'e',false,50,60,70,0.000000050,66.60,70,1970-01-04
+120,'she',0.0,9223372036854775807,'f',false,10,0,1,0.000000001,0.00,-1,1970-01-05
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE
 ====
 ---- QUERY
 insert into tdata
 select id, string_col, float_col, bigint_col, string_col, bool_col, tinyint_col,
-smallint_col, double_col, NULL, NULL, NULL from functional_kudu.alltypes
+smallint_col, double_col, NULL, NULL, NULL, NULL from functional_kudu.alltypes
 ---- RESULTS
 : 7295
 ---- RUNTIME_PROFILE
diff --git a/testdata/workloads/functional-query/queries/QueryTest/kudu_upsert.test b/testdata/workloads/functional-query/queries/QueryTest/kudu_upsert.test
index 5cdfef2..1a26eea 100644
--- a/testdata/workloads/functional-query/queries/QueryTest/kudu_upsert.test
+++ b/testdata/workloads/functional-query/queries/QueryTest/kudu_upsert.test
@@ -3,7 +3,7 @@
 create table tdata
   (id int primary key, name string null, valf float null, vali bigint null,
    valv string null, valb boolean null, valt tinyint null, vals smallint null,
-   vald double null, valdec decimal(9, 0) null)
+   vald double null, valdec decimal(9, 0) null, valdate date null)
   PARTITION BY RANGE (PARTITION VALUES < 10, PARTITION 10 <= VALUES < 30,
   PARTITION 30 <= VALUES) STORED AS KUDU
 ---- RESULTS
@@ -11,142 +11,142 @@ create table tdata
 ====
 ---- QUERY
 insert into table tdata values
-(40,'he',0,43,'e',false,35,36,1.2,37),
-(1,'unknown',1,43,'aaaaaaaaaaaaaaaaaaaa',false,-1,-2,0,-3),
-(2,'david',1,43,'b',false,0,0,0,0),
-(3,'todd',1,43,'c',true,3,3,3,3)
+(40,'he',0,43,'e',false,35,36,1.2,37,DATE '1970-01-05'),
+(1,'unknown',1,43,'aaaaaaaaaaaaaaaaaaaa',false,-1,-2,0,-3,DATE '1970-01-01'),
+(2,'david',1,43,'b',false,0,0,0,0,DATE '1970-01-02'),
+(3,'todd',1,43,'c',true,3,3,3,3,DATE '1970-01-03')
 ---- RESULTS
 : 4
 ====
 ---- QUERY
 # VALUES, single row, all cols, results in insert
-upsert into table tdata values (4, 'a', 0, 1, 'b', false, 1, 2, 1.5, 4)
+upsert into table tdata values (4, 'a', 0, 1, 'b', false, 1, 2, 1.5, 4,DATE '1970-01-04')
 ---- RUNTIME_PROFILE
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC, VALDATE
 ---- DML_RESULTS: tdata
-40,'he',0,43,'e',false,35,36,1.2,37
-1,'unknown',1,43,'aaaaaaaaaaaaaaaaaaaa',false,-1,-2,0,-3
-2,'david',1,43,'b',false,0,0,0,0
-3,'todd',1,43,'c',true,3,3,3,3
-4,'a',0,1,'b',false,1,2,1.5,4
+40,'he',0,43,'e',false,35,36,1.2,37,1970-01-05
+1,'unknown',1,43,'aaaaaaaaaaaaaaaaaaaa',false,-1,-2,0,-3,1970-01-01
+2,'david',1,43,'b',false,0,0,0,0,1970-01-02
+3,'todd',1,43,'c',true,3,3,3,3,1970-01-03
+4,'a',0,1,'b',false,1,2,1.5,4,1970-01-04
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DATE
 ====
 ---- QUERY
 # VALUES, single row, all cols, results in update
-upsert into table tdata values (4, 'b', -1, 1, 'a', true, 2, 3, 2.5, 5)
+upsert into table tdata values (4, 'b', -1, 1, 'a', true, 2, 3, 2.5, 5, DATE '1970-01-04')
 ---- RUNTIME_PROFILE
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC, VALDATE
 ---- DML_RESULTS: tdata
-40,'he',0,43,'e',false,35,36,1.2,37
-1,'unknown',1,43,'aaaaaaaaaaaaaaaaaaaa',false,-1,-2,0,-3
-2,'david',1,43,'b',false,0,0,0,0
-3,'todd',1,43,'c',true,3,3,3,3
-4,'b',-1,1,'a',true,2,3,2.5,5
+40,'he',0,43,'e',false,35,36,1.2,37,1970-01-05
+1,'unknown',1,43,'aaaaaaaaaaaaaaaaaaaa',false,-1,-2,0,-3,1970-01-01
+2,'david',1,43,'b',false,0,0,0,0,1970-01-02
+3,'todd',1,43,'c',true,3,3,3,3,1970-01-03
+4,'b',-1,1,'a',true,2,3,2.5,5,1970-01-04
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DATE
 ====
 ---- QUERY
 # VALUES, single row, all cols, insert NULL all types
-upsert into table tdata values (10, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
+upsert into table tdata values (10, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
 ---- RUNTIME_PROFILE
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC, VALDATE
 ---- DML_RESULTS: tdata
-40,'he',0,43,'e',false,35,36,1.2,37
-1,'unknown',1,43,'aaaaaaaaaaaaaaaaaaaa',false,-1,-2,0,-3
-2,'david',1,43,'b',false,0,0,0,0
-3,'todd',1,43,'c',true,3,3,3,3
-4,'b',-1,1,'a',true,2,3,2.5,5
-10,'NULL',NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL
+40,'he',0,43,'e',false,35,36,1.2,37,1970-01-05
+1,'unknown',1,43,'aaaaaaaaaaaaaaaaaaaa',false,-1,-2,0,-3,1970-01-01
+2,'david',1,43,'b',false,0,0,0,0,1970-01-02
+3,'todd',1,43,'c',true,3,3,3,3,1970-01-03
+4,'b',-1,1,'a',true,2,3,2.5,5,1970-01-04
+10,'NULL',NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DATE
 ====
 ---- QUERY
 # VALUES, single row, all cols, update NULL all types
-upsert into table tdata values (4, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
+upsert into table tdata values (4, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
 ---- RUNTIME_PROFILE
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC, VALDATE
 ---- DML_RESULTS: tdata
-40,'he',0,43,'e',false,35,36,1.2,37
-1,'unknown',1,43,'aaaaaaaaaaaaaaaaaaaa',false,-1,-2,0,-3
-2,'david',1,43,'b',false,0,0,0,0
-3,'todd',1,43,'c',true,3,3,3,3
-4,'NULL',NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL
-10,'NULL',NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL
+40,'he',0,43,'e',false,35,36,1.2,37,1970-01-05
+1,'unknown',1,43,'aaaaaaaaaaaaaaaaaaaa',false,-1,-2,0,-3,1970-01-01
+2,'david',1,43,'b',false,0,0,0,0,1970-01-02
+3,'todd',1,43,'c',true,3,3,3,3,1970-01-03
+4,'NULL',NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL
+10,'NULL',NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DATE
 ====
 ---- QUERY
 # VALUES, single row, all cols, update from NULL all types
-upsert into table tdata values (4, 'four', 5, 6, 'f', true, 7, 8, 7.5, 9)
+upsert into table tdata values (4, 'four', 5, 6, 'f', true, 7, 8, 7.5, 9, DATE '1970-01-04')
 ---- RUNTIME_PROFILE
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC, VALDATE
 ---- DML_RESULTS: tdata
-40,'he',0,43,'e',false,35,36,1.2,37
-1,'unknown',1,43,'aaaaaaaaaaaaaaaaaaaa',false,-1,-2,0,-3
-2,'david',1,43,'b',false,0,0,0,0
-3,'todd',1,43,'c',true,3,3,3,3
-4,'four',5,6,'f',true,7,8,7.5,9
-10,'NULL',NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL
+40,'he',0,43,'e',false,35,36,1.2,37,1970-01-05
+1,'unknown',1,43,'aaaaaaaaaaaaaaaaaaaa',false,-1,-2,0,-3,1970-01-01
+2,'david',1,43,'b',false,0,0,0,0,1970-01-02
+3,'todd',1,43,'c',true,3,3,3,3,1970-01-03
+4,'four',5,6,'f',true,7,8,7.5,9,1970-01-04
+10,'NULL',NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DATE
 ====
 ---- QUERY
 # VALUES, single row, all cols, insert boundary values
 upsert into table tdata values
 (max_int(), '', cast('nan' as float), min_bigint(), '', true, max_tinyint(),
-  min_smallint(), cast('inf' as double), cast(999999999 as decimal(9, 0)))
+  min_smallint(), cast('inf' as double), cast(999999999 as decimal(9, 0)), DATE '9999-12-31')
 ---- RUNTIME_PROFILE
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC, VALDATE
 ---- DML_RESULTS: tdata
-40,'he',0,43,'e',false,35,36,1.2,37
-1,'unknown',1,43,'aaaaaaaaaaaaaaaaaaaa',false,-1,-2,0,-3
-2,'david',1,43,'b',false,0,0,0,0
-3,'todd',1,43,'c',true,3,3,3,3
-4,'four',5,6,'f',true,7,8,7.5,9
-10,'NULL',NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL
-2147483647,'',NaN,-9223372036854775808,'',true,127,-32768,Infinity,999999999
+40,'he',0,43,'e',false,35,36,1.2,37,1970-01-05
+1,'unknown',1,43,'aaaaaaaaaaaaaaaaaaaa',false,-1,-2,0,-3,1970-01-01
+2,'david',1,43,'b',false,0,0,0,0,1970-01-02
+3,'todd',1,43,'c',true,3,3,3,3,1970-01-03
+4,'four',5,6,'f',true,7,8,7.5,9,1970-01-04
+10,'NULL',NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL
+2147483647,'',NaN,-9223372036854775808,'',true,127,-32768,Infinity,999999999,9999-12-31
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DATE
 ====
 ---- QUERY
 # VALUES, single row, all cols, update boundary values
 upsert into table tdata values
 (max_int(), '', cast('-inf' as float), max_bigint(), '', true, min_tinyint(),
-  max_smallint(), cast('nan' as double), cast(-999999999 as decimal(9, 0)))
+  max_smallint(), cast('nan' as double), cast(-999999999 as decimal(9, 0)), DATE '0001-01-01')
 ---- RUNTIME_PROFILE
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC, VALDATE
 ---- DML_RESULTS: tdata
-40,'he',0,43,'e',false,35,36,1.2,37
-1,'unknown',1,43,'aaaaaaaaaaaaaaaaaaaa',false,-1,-2,0,-3
-2,'david',1,43,'b',false,0,0,0,0
-3,'todd',1,43,'c',true,3,3,3,3
-4,'four',5,6,'f',true,7,8,7.5,9
-10,'NULL',NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL
-2147483647,'',-Infinity,9223372036854775807,'',true,-128,32767,NaN,-999999999
+40,'he',0,43,'e',false,35,36,1.2,37,1970-01-05
+1,'unknown',1,43,'aaaaaaaaaaaaaaaaaaaa',false,-1,-2,0,-3,1970-01-01
+2,'david',1,43,'b',false,0,0,0,0,1970-01-02
+3,'todd',1,43,'c',true,3,3,3,3,1970-01-03
+4,'four',5,6,'f',true,7,8,7.5,9,1970-01-04
+10,'NULL',NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL
+2147483647,'',-Infinity,9223372036854775807,'',true,-128,32767,NaN,-999999999,0001-01-01
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DATE
 ====
 ---- QUERY
 # VALUES, single row, subset of cols, results in insert
@@ -155,18 +155,18 @@ upsert into table tdata (id, name, vali, valb, vald) values (5, 'five', -5, NULL
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC, VALDATE
 ---- DML_RESULTS: tdata
-40,'he',0,43,'e',false,35,36,1.2,37
-1,'unknown',1,43,'aaaaaaaaaaaaaaaaaaaa',false,-1,-2,0,-3
-2,'david',1,43,'b',false,0,0,0,0
-3,'todd',1,43,'c',true,3,3,3,3
-4,'four',5,6,'f',true,7,8,7.5,9
-10,'NULL',NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL
-2147483647,'',-Infinity,9223372036854775807,'',true,-128,32767,NaN,-999999999
-5,'five',NULL,-5,'NULL',NULL,NULL,NULL,0.5,NULL
+40,'he',0,43,'e',false,35,36,1.2,37,1970-01-05
+1,'unknown',1,43,'aaaaaaaaaaaaaaaaaaaa',false,-1,-2,0,-3,1970-01-01
+2,'david',1,43,'b',false,0,0,0,0,1970-01-02
+3,'todd',1,43,'c',true,3,3,3,3,1970-01-03
+4,'four',5,6,'f',true,7,8,7.5,9,1970-01-04
+10,'NULL',NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL
+2147483647,'',-Infinity,9223372036854775807,'',true,-128,32767,NaN,-999999999,0001-01-01
+5,'five',NULL,-5,'NULL',NULL,NULL,NULL,0.5,NULL,NULL
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DATE
 ====
 ---- QUERY
 # VALUES, single row, subset of cols, results in update
@@ -175,44 +175,44 @@ upsert into table tdata (id, name, valf, valv, valb) values (5, NULL, 0, 'six',
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC, VALDATE
 ---- DML_RESULTS: tdata
-40,'he',0,43,'e',false,35,36,1.2,37
-1,'unknown',1,43,'aaaaaaaaaaaaaaaaaaaa',false,-1,-2,0,-3
-2,'david',1,43,'b',false,0,0,0,0
-3,'todd',1,43,'c',true,3,3,3,3
-4,'four',5,6,'f',true,7,8,7.5,9
-10,'NULL',NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL
-2147483647,'',-Infinity,9223372036854775807,'',true,-128,32767,NaN,-999999999
-5,'NULL',0,-5,'six',false,NULL,NULL,0.5,NULL
+40,'he',0,43,'e',false,35,36,1.2,37,1970-01-05
+1,'unknown',1,43,'aaaaaaaaaaaaaaaaaaaa',false,-1,-2,0,-3,1970-01-01
+2,'david',1,43,'b',false,0,0,0,0,1970-01-02
+3,'todd',1,43,'c',true,3,3,3,3,1970-01-03
+4,'four',5,6,'f',true,7,8,7.5,9,1970-01-04
+10,'NULL',NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL
+2147483647,'',-Infinity,9223372036854775807,'',true,-128,32767,NaN,-999999999,0001-01-01
+5,'NULL',0,-5,'six',false,NULL,NULL,0.5,NULL,NULL
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DATE
 ====
 ---- QUERY
 # VALUES, multiple rows, all cols, no errors
 upsert into table tdata values
-(1, 'one', NULL, 44, 'a', true, -1, -2, 0, 0),
-(6, '', -6, 40, 'b', NULL, 0, 0, 10, 11),
-(7, 'seven', 0, min_bigint(), NULL, true, 7, 1, 2, 3),
-(2, 'you', cast('inf' as float), 0, 't', false, NULL, min_smallint(), 0, 0)
+(1, 'one', NULL, 44, 'a', true, -1, -2, 0, 0, DATE '1970-01-01'),
+(6, '', -6, 40, 'b', NULL, 0, 0, 10, 11, DATE '1970-01-06'),
+(7, 'seven', 0, min_bigint(), NULL, true, 7, 1, 2, 3, DATE '1970-01-07'),
+(2, 'you', cast('inf' as float), 0, 't', false, NULL, min_smallint(), 0, 0, DATE '1970-01-02')
 ---- RUNTIME_PROFILE
 NumModifiedRows: 4
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC, VALDATE
 ---- DML_RESULTS: tdata
-40,'he',0,43,'e',false,35,36,1.2,37
-1,'one',NULL,44,'a',true,-1,-2,0,0
-2,'you',Infinity,0,'t',false,NULL,-32768,0,0
-3,'todd',1,43,'c',true,3,3,3,3
-4,'four',5,6,'f',true,7,8,7.5,9
-10,'NULL',NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL
-2147483647,'',-Infinity,9223372036854775807,'',true,-128,32767,NaN,-999999999
-5,'NULL',0,-5,'six',false,NULL,NULL,0.5,NULL
-6,'',-6,40,'b',NULL,0,0,10,11
-7,'seven',0,-9223372036854775808,'NULL',true,7,1,2,3
+40,'he',0,43,'e',false,35,36,1.2,37,1970-01-05
+1,'one',NULL,44,'a',true,-1,-2,0,0,1970-01-01
+2,'you',Infinity,0,'t',false,NULL,-32768,0,0,1970-01-02
+3,'todd',1,43,'c',true,3,3,3,3,1970-01-03
+4,'four',5,6,'f',true,7,8,7.5,9,1970-01-04
+10,'NULL',NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL
+2147483647,'',-Infinity,9223372036854775807,'',true,-128,32767,NaN,-999999999,0001-01-01
+5,'NULL',0,-5,'six',false,NULL,NULL,0.5,NULL,NULL
+6,'',-6,40,'b',NULL,0,0,10,11,1970-01-06
+7,'seven',0,-9223372036854775808,'NULL',true,7,1,2,3,1970-01-07
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DATE
 ====
 ---- QUERY
 # VALUES, multiple rows, subset of cols, no errors
@@ -225,72 +225,72 @@ upsert into table tdata (id, valb, name, vali) values
 NumModifiedRows: 4
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC, VALDATE
 ---- DML_RESULTS: tdata
-40,'he',0,43,'e',false,35,36,1.2,37
-1,'NULL',NULL,1,'a',true,-1,-2,0,0
-2,'you',Infinity,0,'t',false,NULL,-32768,0,0
-3,'todd',1,43,'c',true,3,3,3,3
-4,'four',5,6,'f',true,7,8,7.5,9
-10,'NULL',NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL
-2147483647,'',-Infinity,9223372036854775807,'',true,-128,32767,NaN,-999999999
-5,'five',0,10,'six',NULL,NULL,NULL,0.5,NULL
-6,'',-6,40,'b',NULL,0,0,10,11
-7,'seven',0,-9223372036854775808,'NULL',true,7,1,2,3
-8,'hello',NULL,2,'NULL',false,NULL,NULL,NULL,NULL
-9,'nine',NULL,9,'NULL',true,NULL,NULL,NULL,NULL
+40,'he',0,43,'e',false,35,36,1.2,37,1970-01-05
+1,'NULL',NULL,1,'a',true,-1,-2,0,0,1970-01-01
+2,'you',Infinity,0,'t',false,NULL,-32768,0,0,1970-01-02
+3,'todd',1,43,'c',true,3,3,3,3,1970-01-03
+4,'four',5,6,'f',true,7,8,7.5,9,1970-01-04
+10,'NULL',NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL
+2147483647,'',-Infinity,9223372036854775807,'',true,-128,32767,NaN,-999999999,0001-01-01
+5,'five',0,10,'six',NULL,NULL,NULL,0.5,NULL,NULL
+6,'',-6,40,'b',NULL,0,0,10,11,1970-01-06
+7,'seven',0,-9223372036854775808,'NULL',true,7,1,2,3,1970-01-07
+8,'hello',NULL,2,'NULL',false,NULL,NULL,NULL,NULL,NULL
+9,'nine',NULL,9,'NULL',true,NULL,NULL,NULL,NULL,NULL
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DATE
 ====
 ---- QUERY
 # SELECT, all cols, single row, no errors
 upsert into table tdata
-select id, 'a', valf, vali, valv, NULL, valt, vals, 3, valdec from tdata where id = 1
+select id, 'a', valf, vali, valv, NULL, valt, vals, 3, valdec, valdate from tdata where id = 1
 ---- RUNTIME_PROFILE
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC, VALDATE
 ---- DML_RESULTS: tdata
-40,'he',0,43,'e',false,35,36,1.2,37
-1,'a',NULL,1,'a',NULL,-1,-2,3,0
-2,'you',Infinity,0,'t',false,NULL,-32768,0,0
-3,'todd',1,43,'c',true,3,3,3,3
-4,'four',5,6,'f',true,7,8,7.5,9
-10,'NULL',NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL
-2147483647,'',-Infinity,9223372036854775807,'',true,-128,32767,NaN,-999999999
-5,'five',0,10,'six',NULL,NULL,NULL,0.5,NULL
-6,'',-6,40,'b',NULL,0,0,10,11
-7,'seven',0,-9223372036854775808,'NULL',true,7,1,2,3
-8,'hello',NULL,2,'NULL',false,NULL,NULL,NULL,NULL
-9,'nine',NULL,9,'NULL',true,NULL,NULL,NULL,NULL
+40,'he',0,43,'e',false,35,36,1.2,37,1970-01-05
+1,'a',NULL,1,'a',NULL,-1,-2,3,0,1970-01-01
+2,'you',Infinity,0,'t',false,NULL,-32768,0,0,1970-01-02
+3,'todd',1,43,'c',true,3,3,3,3,1970-01-03
+4,'four',5,6,'f',true,7,8,7.5,9,1970-01-04
+10,'NULL',NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL
+2147483647,'',-Infinity,9223372036854775807,'',true,-128,32767,NaN,-999999999,0001-01-01
+5,'five',0,10,'six',NULL,NULL,NULL,0.5,NULL,NULL
+6,'',-6,40,'b',NULL,0,0,10,11,1970-01-06
+7,'seven',0,-9223372036854775808,'NULL',true,7,1,2,3,1970-01-07
+8,'hello',NULL,2,'NULL',false,NULL,NULL,NULL,NULL,NULL
+9,'nine',NULL,9,'NULL',true,NULL,NULL,NULL,NULL,NULL
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DATE
 ====
 ---- QUERY
 # SELECT, all cols, multiple rows, no errors
 upsert into table tdata
-select id, valv, valf, vali, name, valb, valt, vals, vald, valdec from tdata where id % 2 = 0
+select id, valv, valf, vali, name, valb, valt, vals, vald, valdec, valdate from tdata where id % 2 = 0
 ---- RUNTIME_PROFILE
 NumModifiedRows: 6
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC, VALDATE
 ---- DML_RESULTS: tdata
-40,'e',0,43,'he',false,35,36,1.2,37
-1,'a',NULL,1,'a',NULL,-1,-2,3,0
-2,'t',Infinity,0,'you',false,NULL,-32768,0,0
-3,'todd',1,43,'c',true,3,3,3,3
-4,'f',5,6,'four',true,7,8,7.5,9
-10,'NULL',NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL
-2147483647,'',-Infinity,9223372036854775807,'',true,-128,32767,NaN,-999999999
-5,'five',0,10,'six',NULL,NULL,NULL,0.5,NULL
-6,'b',-6,40,'',NULL,0,0,10,11
-7,'seven',0,-9223372036854775808,'NULL',true,7,1,2,3
-8,'NULL',NULL,2,'hello',false,NULL,NULL,NULL,NULL
-9,'nine',NULL,9,'NULL',true,NULL,NULL,NULL,NULL
+40,'e',0,43,'he',false,35,36,1.2,37,1970-01-05
+1,'a',NULL,1,'a',NULL,-1,-2,3,0,1970-01-01
+2,'t',Infinity,0,'you',false,NULL,-32768,0,0,1970-01-02
+3,'todd',1,43,'c',true,3,3,3,3,1970-01-03
+4,'f',5,6,'four',true,7,8,7.5,9,1970-01-04
+10,'NULL',NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL
+2147483647,'',-Infinity,9223372036854775807,'',true,-128,32767,NaN,-999999999,0001-01-01
+5,'five',0,10,'six',NULL,NULL,NULL,0.5,NULL,NULL
+6,'b',-6,40,'',NULL,0,0,10,11,1970-01-06
+7,'seven',0,-9223372036854775808,'NULL',true,7,1,2,3,1970-01-07
+8,'NULL',NULL,2,'hello',false,NULL,NULL,NULL,NULL,NULL
+9,'nine',NULL,9,'NULL',true,NULL,NULL,NULL,NULL,NULL
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DATE
 ====
 ---- QUERY
 # SELECT, subset of cols, single row, no errors
@@ -300,23 +300,23 @@ select int_col, string_col, bigint_col from functional.alltypes where id = 0
 NumModifiedRows: 1
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC, VALDATE
 ---- DML_RESULTS: tdata
-40,'e',0,43,'he',false,35,36,1.2,37
-1,'a',NULL,1,'a',NULL,-1,-2,3,0
-2,'t',Infinity,0,'you',false,NULL,-32768,0,0
-3,'todd',1,43,'c',true,3,3,3,3
-4,'f',5,6,'four',true,7,8,7.5,9
-10,'NULL',NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL
-2147483647,'',-Infinity,9223372036854775807,'',true,-128,32767,NaN,-999999999
-5,'five',0,10,'six',NULL,NULL,NULL,0.5,NULL
-6,'b',-6,40,'',NULL,0,0,10,11
-7,'seven',0,-9223372036854775808,'NULL',true,7,1,2,3
-8,'NULL',NULL,2,'hello',false,NULL,NULL,NULL,NULL
-9,'nine',NULL,9,'NULL',true,NULL,NULL,NULL,NULL
-0,'NULL',NULL,0,'0',NULL,NULL,NULL,NULL,NULL
+40,'e',0,43,'he',false,35,36,1.2,37,1970-01-05
+1,'a',NULL,1,'a',NULL,-1,-2,3,0,1970-01-01
+2,'t',Infinity,0,'you',false,NULL,-32768,0,0,1970-01-02
+3,'todd',1,43,'c',true,3,3,3,3,1970-01-03
+4,'f',5,6,'four',true,7,8,7.5,9,1970-01-04
+10,'NULL',NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL
+2147483647,'',-Infinity,9223372036854775807,'',true,-128,32767,NaN,-999999999,0001-01-01
+5,'five',0,10,'six',NULL,NULL,NULL,0.5,NULL,NULL
+6,'b',-6,40,'',NULL,0,0,10,11,1970-01-06
+7,'seven',0,-9223372036854775808,'NULL',true,7,1,2,3,1970-01-07
+8,'NULL',NULL,2,'hello',false,NULL,NULL,NULL,NULL,NULL
+9,'nine',NULL,9,'NULL',true,NULL,NULL,NULL,NULL,NULL
+0,'NULL',NULL,0,'0',NULL,NULL,NULL,NULL,NULL,NULL
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DATE
 ====
 ---- QUERY
 # SELECT, subset of cols, multiple rows, no errors
@@ -326,23 +326,23 @@ select int_col, bool_col, string_col, tinyint_col from functional.alltypes where
 NumModifiedRows: 4
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC, VALDATE
 ---- DML_RESULTS: tdata
-40,'e',0,43,'he',false,35,36,1.2,37
-1,'1',NULL,1,'a',false,1,-2,3,0
-2,'2',Infinity,0,'you',true,2,-32768,0,0
-3,'3',1,43,'c',false,3,3,3,3
-4,'f',5,6,'four',true,7,8,7.5,9
-10,'NULL',NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL
-2147483647,'',-Infinity,9223372036854775807,'',true,-128,32767,NaN,-999999999
-5,'five',0,10,'six',NULL,NULL,NULL,0.5,NULL
-6,'b',-6,40,'',NULL,0,0,10,11
-7,'seven',0,-9223372036854775808,'NULL',true,7,1,2,3
-8,'NULL',NULL,2,'hello',false,NULL,NULL,NULL,NULL
-9,'nine',NULL,9,'NULL',true,NULL,NULL,NULL,NULL
-0,'0',NULL,0,'0',true,0,NULL,NULL,NULL
+40,'e',0,43,'he',false,35,36,1.2,37,1970-01-05
+1,'1',NULL,1,'a',false,1,-2,3,0,1970-01-01
+2,'2',Infinity,0,'you',true,2,-32768,0,0,1970-01-02
+3,'3',1,43,'c',false,3,3,3,3,1970-01-03
+4,'f',5,6,'four',true,7,8,7.5,9,1970-01-04
+10,'NULL',NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL
+2147483647,'',-Infinity,9223372036854775807,'',true,-128,32767,NaN,-999999999,0001-01-01
+5,'five',0,10,'six',NULL,NULL,NULL,0.5,NULL,NULL
+6,'b',-6,40,'',NULL,0,0,10,11,1970-01-06
+7,'seven',0,-9223372036854775808,'NULL',true,7,1,2,3,1970-01-07
+8,'NULL',NULL,2,'hello',false,NULL,NULL,NULL,NULL,NULL
+9,'nine',NULL,9,'NULL',true,NULL,NULL,NULL,NULL,NULL
+0,'0',NULL,0,'0',true,0,NULL,NULL,NULL,NULL
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DATE
 ====
 ---- QUERY
 # SELECT, decimal column, multiple rows, no errors
@@ -352,27 +352,27 @@ select id, cast((valdec * 2) as decimal(9,0)) from tdata where valdec > 0
 NumModifiedRows: 5
 NumRowErrors: 0
 ---- LABELS
-ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC
+ID, NAME, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC, VALDATE
 ---- DML_RESULTS: tdata
-40,'e',0,43,'he',false,35,36,1.2,74
-1,'1',NULL,1,'a',false,1,-2,3,0
-2,'2',Infinity,0,'you',true,2,-32768,0,0
-3,'3',1,43,'c',false,3,3,3,6
-4,'f',5,6,'four',true,7,8,7.5,18
-10,'NULL',NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL
-2147483647,'',-Infinity,9223372036854775807,'',true,-128,32767,NaN,-999999999
-5,'five',0,10,'six',NULL,NULL,NULL,0.5,NULL
-6,'b',-6,40,'',NULL,0,0,10,22
-7,'seven',0,-9223372036854775808,'NULL',true,7,1,2,6
-8,'NULL',NULL,2,'hello',false,NULL,NULL,NULL,NULL
-9,'nine',NULL,9,'NULL',true,NULL,NULL,NULL,NULL
-0,'0',NULL,0,'0',true,0,NULL,NULL,NULL
+40,'e',0,43,'he',false,35,36,1.2,74,1970-01-05
+1,'1',NULL,1,'a',false,1,-2,3,0,1970-01-01
+2,'2',Infinity,0,'you',true,2,-32768,0,0,1970-01-02
+3,'3',1,43,'c',false,3,3,3,6,1970-01-03
+4,'f',5,6,'four',true,7,8,7.5,18,1970-01-04
+10,'NULL',NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL
+2147483647,'',-Infinity,9223372036854775807,'',true,-128,32767,NaN,-999999999,0001-01-01
+5,'five',0,10,'six',NULL,NULL,NULL,0.5,NULL,NULL
+6,'b',-6,40,'',NULL,0,0,10,22,1970-01-06
+7,'seven',0,-9223372036854775808,'NULL',true,7,1,2,6,1970-01-07
+8,'NULL',NULL,2,'hello',false,NULL,NULL,NULL,NULL,NULL
+9,'nine',NULL,9,'NULL',true,NULL,NULL,NULL,NULL,NULL
+0,'0',NULL,0,'0',true,0,NULL,NULL,NULL,NULL
 ---- TYPES
-INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL
+INT,STRING,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DATE
 ====
 ---- QUERY
 # VALUES, single row, all cols, null for non-nullable column
-upsert into table tdata values (null, '', 0, 0, cast('' as VARCHAR(20)), false, 0, 0, 0, null)
+upsert into table tdata values (null, '', 0, 0, cast('' as VARCHAR(20)), false, 0, 0, 0, null, null)
 ---- RUNTIME_PROFILE
 NumModifiedRows: 0
 NumRowErrors: 1
@@ -387,10 +387,10 @@ NumRowErrors: 1
 ---- QUERY
 # VALUES, multiple rows, all cols, null for non-nullable column
 upsert into table tdata values
-(3,'todd',1,43,'c',true,3,3,3,null),
-(4,'four',5,6,'f',true,7,8,7.5,null),
-(6,'',-6,40,'b',NULL,0,0,10,null),
-(NULL,'seven',0,0,'NULL',true,7,1,2,null)
+(3,'todd',1,43,'c',true,3,3,3,null,null),
+(4,'four',5,6,'f',true,7,8,7.5,null,null),
+(6,'',-6,40,'b',NULL,0,0,10,null,null),
+(NULL,'seven',0,0,'NULL',true,7,1,2,null,null)
 ---- RUNTIME_PROFILE
 NumModifiedRows: 3
 NumRowErrors: 1
diff --git a/tests/query_test/test_kudu.py b/tests/query_test/test_kudu.py
index 1de184a..d31859a 100644
--- a/tests/query_test/test_kudu.py
+++ b/tests/query_test/test_kudu.py
@@ -34,7 +34,7 @@ import random
 import textwrap
 import threading
 import time
-from datetime import datetime
+from datetime import datetime, date
 from pytz import utc
 
 from tests.common.environ import ImpalaTestClusterProperties, HIVE_MAJOR_VERSION
@@ -409,7 +409,7 @@ class TestKuduOperations(KuduTestSuite):
       pytest.skip("Only runs in exhaustive to reduce core time.")
     table_name = "%s.storage_attrs" % unique_database
     types = ['boolean', 'tinyint', 'smallint', 'int', 'bigint', 'float', 'double', \
-        'string', 'timestamp', 'decimal']
+        'string', 'timestamp', 'decimal', 'date']
     cursor.execute("set kudu_read_mode=READ_AT_SNAPSHOT")
     create_query = "create table %s (id int primary key" % table_name
     for t in types:
@@ -430,10 +430,12 @@ class TestKuduOperations(KuduTestSuite):
           except Exception as err:
             assert "encoding %s not supported for type" % e in str(err)
         cursor.execute("""insert into %s values (%s, true, 0, 0, 0, 0, 0, 0, '0',
-            cast('2009-01-01' as timestamp), cast(0 as decimal))""" % (table_name, i))
+            cast('2009-01-01' as timestamp), cast(0 as decimal),
+            cast('2010-01-01' as date))""" % (table_name, i))
         cursor.execute("select * from %s where id = %s" % (table_name, i))
         assert cursor.fetchall() == \
-            [(i, True, 0, 0, 0, 0, 0.0, 0.0, '0', datetime(2009, 1, 1, 0, 0), 0)]
+            [(i, True, 0, 0, 0, 0, 0.0, 0.0, '0', datetime(2009, 1, 1, 0, 0), 0,
+                 date(2010, 1, 1))]
         i += 1
     cursor.execute("select count(*) from %s" % table_name)
     print cursor.fetchall() == [(i, )]