diff --git a/src/main/java/net/hydromatic/optiq/impl/csv/CsvEnumerator.java b/src/main/java/net/hydromatic/optiq/impl/csv/CsvEnumerator.java
index f1f3fac..bceb8c3 100644
--- a/src/main/java/net/hydromatic/optiq/impl/csv/CsvEnumerator.java
+++ b/src/main/java/net/hydromatic/optiq/impl/csv/CsvEnumerator.java
@@ -40,7 +40,6 @@ class CsvEnumerator implements Enumerator<Object> {
   private static final FastDateFormat TIME_FORMAT_TIMESTAMP;
 
   static {
-
     TimeZone gmt = TimeZone.getTimeZone("GMT");
     TIME_FORMAT_DATE = FastDateFormat.getInstance("yyyy-MM-dd", gmt);
     TIME_FORMAT_TIME = FastDateFormat.getInstance("hh:mm:ss", gmt);
@@ -112,9 +111,6 @@ protected Object convert(CsvFieldType fieldType, String string) {
         return string;
       }
       switch (fieldType) {
-      default:
-      case STRING:
-        return string;
       case BOOLEAN:
         if (string.length() == 0) {
           return null;
@@ -154,26 +150,22 @@ protected Object convert(CsvFieldType fieldType, String string) {
         if (string.length() == 0) {
           return null;
         }
-
         try {
           Date date = TIME_FORMAT_DATE.parse(string);
           return new java.sql.Date(date.getTime());
         } catch (ParseException e) {
           return null;
         }
-
       case TIME:
         if (string.length() == 0) {
           return null;
         }
-
         try {
           Date date = TIME_FORMAT_TIME.parse(string);
           return new java.sql.Time(date.getTime());
         } catch (ParseException e) {
           return null;
         }
-
       case TIMESTAMP:
         if (string.length() == 0) {
           return null;
@@ -184,12 +176,14 @@ protected Object convert(CsvFieldType fieldType, String string) {
         } catch (ParseException e) {
           return null;
         }
+      case STRING:
+      default:
+        return string;
       }
     }
   }
 
   private static class ArrayRowConverter extends RowConverter {
-
     private final CsvFieldType[] fieldTypes;
     private final int[] fields;
 
@@ -209,7 +203,6 @@ public Object convertRow(String[] strings) {
   }
 
   private static class SingleColumnRowConverter extends RowConverter {
-
     private final CsvFieldType fieldType;
     private final int fieldIndex;
 
@@ -222,7 +215,6 @@ public Object convertRow(String[] strings) {
       return convert(fieldType, strings[fieldIndex]);
     }
   }
-
 }
 
 // End CsvEnumerator.java
diff --git a/src/main/java/net/hydromatic/optiq/impl/csv/CsvFieldType.java b/src/main/java/net/hydromatic/optiq/impl/csv/CsvFieldType.java
index 12e94d2..bbcf361 100644
--- a/src/main/java/net/hydromatic/optiq/impl/csv/CsvFieldType.java
+++ b/src/main/java/net/hydromatic/optiq/impl/csv/CsvFieldType.java
@@ -34,7 +34,7 @@
  * makes it easier to write SQL.</p>
  */
 enum CsvFieldType {
-  STRING(null, String.class, "string"),
+  STRING(String.class, "string"),
   BOOLEAN(Primitive.BOOLEAN),
   BYTE(Primitive.BYTE),
   CHAR(Primitive.CHAR),
@@ -43,11 +43,10 @@ enum CsvFieldType {
   LONG(Primitive.LONG),
   FLOAT(Primitive.FLOAT),
   DOUBLE(Primitive.DOUBLE),
-  DATE(null, java.sql.Date.class, "date"),
-  TIME(null, java.sql.Time.class, "time"),
-  TIMESTAMP(null, java.sql.Timestamp.class, "timestamp");
+  DATE(java.sql.Date.class, "date"),
+  TIME(java.sql.Time.class, "time"),
+  TIMESTAMP(java.sql.Timestamp.class, "timestamp");
 
-  private final Primitive primitive;
   private final Class clazz;
   private final String simpleName;
 
@@ -61,12 +60,10 @@ enum CsvFieldType {
   }
 
   CsvFieldType(Primitive primitive) {
-    this(primitive, primitive.boxClass,
-      primitive.primitiveClass.getSimpleName());
+    this(primitive.boxClass, primitive.primitiveClass.getSimpleName());
   }
 
-  CsvFieldType(Primitive primitive, Class clazz, String simpleName) {
-    this.primitive = primitive;
+  CsvFieldType(Class clazz, String simpleName) {
     this.clazz = clazz;
     this.simpleName = simpleName;
   }
diff --git a/src/test/java/net/hydromatic/optiq/test/CsvTest.java b/src/test/java/net/hydromatic/optiq/test/CsvTest.java
index 5847c8b..6c5bbe2 100644
--- a/src/test/java/net/hydromatic/optiq/test/CsvTest.java
+++ b/src/test/java/net/hydromatic/optiq/test/CsvTest.java
@@ -222,7 +222,7 @@ private static void collect(List<String> result, ResultSet resultSet)
         buf.append(sep)
             .append(resultSet.getMetaData().getColumnLabel(i))
             .append("=")
-            .append(resultSet.getObject(i));
+            .append(resultSet.getString(i));
         sep = "; ";
       }
       result.add(toLinux(buf.toString()));
@@ -268,17 +268,13 @@ private void output(ResultSet resultSet, PrintStream out)
         "EMPNO=100; SLACKER=true");
   }
 
-  @Test
-  public void testDateType() throws SQLException {
-
+  @Test public void testDateType() throws SQLException {
     Properties info = new Properties();
     info.put("model", "target/test-classes/bug.json");
 
-    Connection connection = DriverManager
-        .getConnection("jdbc:optiq:", info);
+    Connection connection = DriverManager.getConnection("jdbc:optiq:", info);
 
     try {
-
       ResultSet res = connection.getMetaData().getColumns(null, null,
           "DATE", "JOINEDAT");
       res.next();
@@ -318,8 +314,6 @@ public void testDateType() throws SQLException {
     } finally {
       connection.close();
     }
-
-
   }
 }
 
