You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2014/07/02 20:48:26 UTC

[1/3] git commit: Upgrade to optiq-0.8, optiq-avatica-0.8, linq4j-0.4.

Repository: incubator-optiq-csv
Updated Branches:
  refs/heads/master 88224ccaf -> 3018d18cc


Upgrade to optiq-0.8, optiq-avatica-0.8, linq4j-0.4.


Project: http://git-wip-us.apache.org/repos/asf/incubator-optiq-csv/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-optiq-csv/commit/0b7a0089
Tree: http://git-wip-us.apache.org/repos/asf/incubator-optiq-csv/tree/0b7a0089
Diff: http://git-wip-us.apache.org/repos/asf/incubator-optiq-csv/diff/0b7a0089

Branch: refs/heads/master
Commit: 0b7a008964595fa5da95f17546af26df1473efea
Parents: 88224cc
Author: Julian Hyde <jh...@apache.org>
Authored: Wed Jul 2 10:36:31 2014 -0700
Committer: Julian Hyde <jh...@apache.org>
Committed: Wed Jul 2 10:36:31 2014 -0700

----------------------------------------------------------------------
 pom.xml | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-optiq-csv/blob/0b7a0089/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 687beda..73c5b21 100644
--- a/pom.xml
+++ b/pom.xml
@@ -83,17 +83,17 @@
     <dependency>
       <groupId>net.hydromatic</groupId>
       <artifactId>optiq-core</artifactId>
-      <version>0.6</version>
+      <version>0.8</version>
     </dependency>
     <dependency>
       <groupId>net.hydromatic</groupId>
       <artifactId>optiq-avatica</artifactId>
-      <version>0.6</version>
+      <version>0.8</version>
     </dependency>
     <dependency>
       <groupId>net.hydromatic</groupId>
       <artifactId>linq4j</artifactId>
-      <version>0.2</version>
+      <version>0.4</version>
     </dependency>
     <dependency>
       <groupId>net.sf.opencsv</groupId>


[2/3] git commit: Added support for date types (date, time, timestamp).

Posted by jh...@apache.org.
Added support for date types (date, time, timestamp).

With this change, .getMetadata() reports the correct java.sql.Date
type for columns marked as date. The .getDate() on a row also returns a
java.sql.Date object. Since jdbc expects dates to be in the GMT
timezone, the dates are converted first.


Project: http://git-wip-us.apache.org/repos/asf/incubator-optiq-csv/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-optiq-csv/commit/dd1b946c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-optiq-csv/tree/dd1b946c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-optiq-csv/diff/dd1b946c

Branch: refs/heads/master
Commit: dd1b946c03a9b872284236c2c02d840008f07ff1
Parents: 0b7a008
Author: Martijn van den Broek <ma...@basesoft.com>
Authored: Fri Jun 6 12:55:24 2014 +0200
Committer: Julian Hyde <jh...@apache.org>
Committed: Wed Jul 2 10:39:08 2014 -0700

----------------------------------------------------------------------
 pom.xml                                         |  5 ++
 .../optiq/impl/csv/CsvEnumerator.java           | 53 +++++++++++++++++++
 .../hydromatic/optiq/impl/csv/CsvFieldType.java | 20 ++++----
 .../java/net/hydromatic/optiq/test/CsvTest.java | 54 ++++++++++++++++++++
 src/test/resources/bug/DATE.csv                 |  6 +++
 5 files changed, 128 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-optiq-csv/blob/dd1b946c/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 73c5b21..51a6e0c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -111,6 +111,11 @@
       <version>1.1.7</version>
       <scope>test</scope>
     </dependency>
+	<dependency>
+	    <groupId>org.apache.commons</groupId>
+	    <artifactId>commons-lang3</artifactId>
+	    <version>3.2</version>
+	</dependency>
   </dependencies>
 
   <reporting>

http://git-wip-us.apache.org/repos/asf/incubator-optiq-csv/blob/dd1b946c/src/main/java/net/hydromatic/optiq/impl/csv/CsvEnumerator.java
----------------------------------------------------------------------
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 b632b26..f1f3fac 100644
--- a/src/main/java/net/hydromatic/optiq/impl/csv/CsvEnumerator.java
+++ b/src/main/java/net/hydromatic/optiq/impl/csv/CsvEnumerator.java
@@ -21,7 +21,13 @@ import net.hydromatic.linq4j.Enumerator;
 
 import au.com.bytecode.opencsv.CSVReader;
 
+import org.apache.commons.lang3.time.FastDateFormat;
+
 import java.io.*;
+import java.text.ParseException;
+import java.util.Date;
+import java.util.TimeZone;
+
 
 /** Enumerator that reads from a CSV file. */
 class CsvEnumerator implements Enumerator<Object> {
@@ -29,6 +35,19 @@ class CsvEnumerator implements Enumerator<Object> {
   private final RowConverter rowConverter;
   private Object current;
 
+  private static final FastDateFormat TIME_FORMAT_DATE;
+  private static final FastDateFormat TIME_FORMAT_TIME;
+  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);
+    TIME_FORMAT_TIMESTAMP = FastDateFormat.getInstance(
+        "yyyy-MM-dd hh:mm:ss", gmt);
+  }
+
   public CsvEnumerator(File file, CsvFieldType[] fieldTypes) {
     this(file, fieldTypes, identityList(fieldTypes.length));
   }
@@ -131,6 +150,40 @@ class CsvEnumerator implements Enumerator<Object> {
           return null;
         }
         return Double.parseDouble(string);
+      case DATE:
+        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;
+        }
+        try {
+          Date date = TIME_FORMAT_TIMESTAMP.parse(string);
+          return new java.sql.Timestamp(date.getTime());
+        } catch (ParseException e) {
+          return null;
+        }
       }
     }
   }

http://git-wip-us.apache.org/repos/asf/incubator-optiq-csv/blob/dd1b946c/src/main/java/net/hydromatic/optiq/impl/csv/CsvFieldType.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 1e4569b..12e94d2 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 @@ import java.util.Map;
  * makes it easier to write SQL.</p>
  */
 enum CsvFieldType {
-  STRING(null, String.class),
+  STRING(null, String.class, "string"),
   BOOLEAN(Primitive.BOOLEAN),
   BYTE(Primitive.BYTE),
   CHAR(Primitive.CHAR),
@@ -43,32 +43,32 @@ enum CsvFieldType {
   LONG(Primitive.LONG),
   FLOAT(Primitive.FLOAT),
   DOUBLE(Primitive.DOUBLE),
-  DATE(null, java.sql.Date.class),
-  TIME(null, java.sql.Time.class),
-  TIMESTAMP(null, java.sql.Timestamp.class);
+  DATE(null, java.sql.Date.class, "date"),
+  TIME(null, java.sql.Time.class, "time"),
+  TIMESTAMP(null, java.sql.Timestamp.class, "timestamp");
 
   private final Primitive primitive;
   private final Class clazz;
+  private final String simpleName;
 
   private static final Map<String, CsvFieldType> MAP =
     new HashMap<String, CsvFieldType>();
 
   static {
     for (CsvFieldType value : values()) {
-      MAP.put(value.clazz.getSimpleName(), value);
-      if (value.primitive != null) {
-        MAP.put(value.primitive.primitiveClass.getSimpleName(), value);
-      }
+      MAP.put(value.simpleName, value);
     }
   }
 
   CsvFieldType(Primitive primitive) {
-    this(primitive, primitive.boxClass);
+    this(primitive, primitive.boxClass,
+      primitive.primitiveClass.getSimpleName());
   }
 
-  CsvFieldType(Primitive primitive, Class clazz) {
+  CsvFieldType(Primitive primitive, Class clazz, String simpleName) {
     this.primitive = primitive;
     this.clazz = clazz;
+    this.simpleName = simpleName;
   }
 
   public RelDataType toType(JavaTypeFactory typeFactory) {

http://git-wip-us.apache.org/repos/asf/incubator-optiq-csv/blob/dd1b946c/src/test/java/net/hydromatic/optiq/test/CsvTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/net/hydromatic/optiq/test/CsvTest.java b/src/test/java/net/hydromatic/optiq/test/CsvTest.java
index a4749fd..5847c8b 100644
--- a/src/test/java/net/hydromatic/optiq/test/CsvTest.java
+++ b/src/test/java/net/hydromatic/optiq/test/CsvTest.java
@@ -267,6 +267,60 @@ public class CsvTest {
         "select empno, slacker from emps where slacker",
         "EMPNO=100; SLACKER=true");
   }
+
+  @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);
+
+    try {
+
+      ResultSet res = connection.getMetaData().getColumns(null, null,
+          "DATE", "JOINEDAT");
+      res.next();
+      Assert.assertEquals(res.getInt("DATA_TYPE"), java.sql.Types.DATE);
+
+      res = connection.getMetaData().getColumns(null, null,
+          "DATE", "JOINTIME");
+      res.next();
+      Assert.assertEquals(res.getInt("DATA_TYPE"), java.sql.Types.TIME);
+
+      res = connection.getMetaData().getColumns(null, null,
+          "DATE", "JOINTIMES");
+      res.next();
+      Assert.assertEquals(res.getInt("DATA_TYPE"), java.sql.Types.TIMESTAMP);
+
+      Statement statement = connection.createStatement();
+      ResultSet resultSet = statement.executeQuery(
+          "select \"JOINEDAT\", \"JOINTIME\", \"JOINTIMES\" from \"DATE\" where EMPNO = 100");
+      resultSet.next();
+
+      // date
+      Assert.assertEquals(java.sql.Date.class, resultSet.getDate(1).getClass());
+      Assert.assertEquals(java.sql.Date.valueOf("1996-08-03"),
+          resultSet.getDate(1));
+
+      // time
+      Assert.assertEquals(java.sql.Time.class, resultSet.getTime(2).getClass());
+      Assert.assertEquals(java.sql.Time.valueOf("00:01:02"),
+          resultSet.getTime(2));
+
+      // timestamp
+      Assert.assertEquals(java.sql.Timestamp.class,
+          resultSet.getTimestamp(3).getClass());
+      Assert.assertEquals(java.sql.Timestamp.valueOf("1996-08-03 00:01:02"),
+          resultSet.getTimestamp(3));
+
+    } finally {
+      connection.close();
+    }
+
+
+  }
 }
 
 // End CsvTest.java

http://git-wip-us.apache.org/repos/asf/incubator-optiq-csv/blob/dd1b946c/src/test/resources/bug/DATE.csv
----------------------------------------------------------------------
diff --git a/src/test/resources/bug/DATE.csv b/src/test/resources/bug/DATE.csv
new file mode 100644
index 0000000..ea5ef35
--- /dev/null
+++ b/src/test/resources/bug/DATE.csv
@@ -0,0 +1,6 @@
+EMPNO:int,JOINEDAT:date,JOINTIME:time,JOINTIMES:timestamp
+100,"1996-08-03","00:01:02","1996-08-03 00:01:02"
+110,"2001-01-01","00:00:00","2001-01-01 00:00:00"
+110,"2002-05-03","00:00:00","2002-05-03 00:00:00"
+120,"2005-09-07","00:00:00","2005-09-07 00:00:00"
+130,"2007-01-01","00:00:00","2007-01-01 00:00:00"


[3/3] git commit: Cleanup, and fix minor timezone issue in a test.

Posted by jh...@apache.org.
Cleanup, and fix minor timezone issue in a test.


Project: http://git-wip-us.apache.org/repos/asf/incubator-optiq-csv/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-optiq-csv/commit/3018d18c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-optiq-csv/tree/3018d18c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-optiq-csv/diff/3018d18c

Branch: refs/heads/master
Commit: 3018d18cc92815a9218eda1c77e30f43a4bf6630
Parents: dd1b946
Author: Julian Hyde <jh...@apache.org>
Authored: Wed Jul 2 11:26:27 2014 -0700
Committer: Julian Hyde <jh...@apache.org>
Committed: Wed Jul 2 11:26:27 2014 -0700

----------------------------------------------------------------------
 .../net/hydromatic/optiq/impl/csv/CsvEnumerator.java | 14 +++-----------
 .../net/hydromatic/optiq/impl/csv/CsvFieldType.java  | 15 ++++++---------
 src/test/java/net/hydromatic/optiq/test/CsvTest.java | 12 +++---------
 3 files changed, 12 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-optiq-csv/blob/3018d18c/src/main/java/net/hydromatic/optiq/impl/csv/CsvEnumerator.java
----------------------------------------------------------------------
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 @@ class CsvEnumerator implements Enumerator<Object> {
         return string;
       }
       switch (fieldType) {
-      default:
-      case STRING:
-        return string;
       case BOOLEAN:
         if (string.length() == 0) {
           return null;
@@ -154,26 +150,22 @@ class CsvEnumerator implements Enumerator<Object> {
         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 @@ class CsvEnumerator implements Enumerator<Object> {
         } 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 @@ class CsvEnumerator implements Enumerator<Object> {
   }
 
   private static class SingleColumnRowConverter extends RowConverter {
-
     private final CsvFieldType fieldType;
     private final int fieldIndex;
 
@@ -222,7 +215,6 @@ class CsvEnumerator implements Enumerator<Object> {
       return convert(fieldType, strings[fieldIndex]);
     }
   }
-
 }
 
 // End CsvEnumerator.java

http://git-wip-us.apache.org/repos/asf/incubator-optiq-csv/blob/3018d18c/src/main/java/net/hydromatic/optiq/impl/csv/CsvFieldType.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 @@ import java.util.Map;
  * 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;
   }

http://git-wip-us.apache.org/repos/asf/incubator-optiq-csv/blob/3018d18c/src/test/java/net/hydromatic/optiq/test/CsvTest.java
----------------------------------------------------------------------
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 @@ public class CsvTest {
         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 @@ public class CsvTest {
         "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 class CsvTest {
     } finally {
       connection.close();
     }
-
-
   }
 }