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();
}
-
-
}
}