You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@drill.apache.org by ja...@apache.org on 2014/05/14 02:26:51 UTC
[3/4] git commit: DRILL-700: Extend AvaticaDrillSqlAccessor to
support getDate(), getTime() and getTimestamp()
DRILL-700: Extend AvaticaDrillSqlAccessor to support getDate(), getTime() and getTimestamp()
+ Added accessor methods for getDate(), getTime() and getTimeStamp() in each of the data type's accessor class.
Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/4b57652f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/4b57652f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/4b57652f
Branch: refs/heads/master
Commit: 4b57652f1ea0b9d6b68826b5f07d624eabf043f3
Parents: 8e1865c
Author: Mehant Baid <me...@gmail.com>
Authored: Mon May 12 12:48:28 2014 -0700
Committer: Aditya Kishore <ad...@maprtech.com>
Committed: Tue May 13 16:05:59 2014 -0700
----------------------------------------------------------------------
.../codegen/templates/FixedValueVectors.java | 17 ++++++++++-
.../codegen/templates/NullableValueVectors.java | 10 ++++++
.../main/codegen/templates/SqlAccessors.java | 27 +++++++++++++++--
.../drill/jdbc/AvaticaDrillSqlAccessor.java | 6 ++--
.../apache/drill/jdbc/test/TestJdbcQuery.java | 32 ++++++++++++++++++++
5 files changed, 85 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/4b57652f/exec/java-exec/src/main/codegen/templates/FixedValueVectors.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/codegen/templates/FixedValueVectors.java b/exec/java-exec/src/main/codegen/templates/FixedValueVectors.java
index 8c6c037..7193c29 100644
--- a/exec/java-exec/src/main/codegen/templates/FixedValueVectors.java
+++ b/exec/java-exec/src/main/codegen/templates/FixedValueVectors.java
@@ -272,7 +272,7 @@ public final class ${minor.class}Vector extends BaseDataValueVector implements F
return p.plusMonths(months).plusDays(days).plusMillis(millis);
}
- public StringBuilder getAsString(int index) {
+ public StringBuilder getAsStringBuilder(int index) {
int offsetIndex = index * ${type.width};
@@ -469,6 +469,21 @@ public final class ${minor.class}Vector extends BaseDataValueVector implements F
Period p = new Period();
return p.plusYears(years).plusMonths(months);
}
+
+ public StringBuilder getAsStringBuilder(int index) {
+
+ int months = data.getInt(index);
+
+ int years = (months / org.apache.drill.exec.expr.fn.impl.DateUtility.yearsToMonths);
+ months = (months % org.apache.drill.exec.expr.fn.impl.DateUtility.yearsToMonths);
+
+ String yearString = (Math.abs(years) == 1) ? " year " : " years ";
+ String monthString = (Math.abs(months) == 1) ? " month " : " months ";
+
+ return(new StringBuilder().
+ append(years).append(yearString).
+ append(months).append(monthString));
+ }
<#elseif minor.class == "Time">
@Override
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/4b57652f/exec/java-exec/src/main/codegen/templates/NullableValueVectors.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/codegen/templates/NullableValueVectors.java b/exec/java-exec/src/main/codegen/templates/NullableValueVectors.java
index 403ba4f..08eea6e 100644
--- a/exec/java-exec/src/main/codegen/templates/NullableValueVectors.java
+++ b/exec/java-exec/src/main/codegen/templates/NullableValueVectors.java
@@ -350,6 +350,16 @@ public final class ${className} extends BaseValueVector implements <#if type.maj
}
}
+ <#if minor.class == "Interval" || minor.class == "IntervalDay" || minor.class == "IntervalYear">
+ public StringBuilder getAsStringBuilder(int index) {
+ if (isNull(index)) {
+ return null;
+ }else{
+ return values.getAccessor().getAsStringBuilder(index);
+ }
+ }
+ </#if>
+
public int getValueCount(){
return valueCount;
}
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/4b57652f/exec/java-exec/src/main/codegen/templates/SqlAccessors.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/codegen/templates/SqlAccessors.java b/exec/java-exec/src/main/codegen/templates/SqlAccessors.java
index 74ee9ed..b7207f9 100644
--- a/exec/java-exec/src/main/codegen/templates/SqlAccessors.java
+++ b/exec/java-exec/src/main/codegen/templates/SqlAccessors.java
@@ -102,16 +102,37 @@ public class ${name}Accessor extends AbstractSqlAccessor{
public Timestamp getTimestamp(int index) {
return new Timestamp(ac.getObject(index).getMillis());
}
- <#elseif minor.class == "Interval" || minor.class == "IntervalDay">
+ <#elseif minor.class == "Interval" || minor.class == "IntervalDay" || minor.class == "IntervalYear">
@Override
- public byte[] getBytes(int index) {
- return null;
+ public String getString(int index) {
+ return String.valueOf(ac.getAsStringBuilder(index));
}
<#elseif minor.class.startsWith("Decimal")>
@Override
public BigDecimal getBigDecimal(int index) {
return ac.getObject(index);
}
+ <#elseif minor.class == "Date">
+ @Override
+ public Date getDate(int index) {
+ org.joda.time.DateTime date = new org.joda.time.DateTime(ac.get(index), org.joda.time.DateTimeZone.UTC);
+ date = date.withZoneRetainFields(org.joda.time.DateTimeZone.getDefault());
+ return new Date(date.getMillis());
+ }
+ <#elseif minor.class == "TimeStamp">
+ @Override
+ public Timestamp getTimestamp(int index) {
+ org.joda.time.DateTime date = new org.joda.time.DateTime(ac.get(index), org.joda.time.DateTimeZone.UTC);
+ date = date.withZoneRetainFields(org.joda.time.DateTimeZone.getDefault());
+ return new Timestamp(date.getMillis());
+ }
+ <#elseif minor.class == "Time">
+ @Override
+ public Time getTime(int index) {
+ org.joda.time.DateTime time = new org.joda.time.DateTime(ac.get(index), org.joda.time.DateTimeZone.UTC);
+ time = time.withZoneRetainFields(org.joda.time.DateTimeZone.getDefault());
+ return new Time(time.getMillis());
+ }
<#else>
@Override
public ${javaType} get${javaType?cap_first}(int index){
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/4b57652f/exec/jdbc/src/main/java/org/apache/drill/jdbc/AvaticaDrillSqlAccessor.java
----------------------------------------------------------------------
diff --git a/exec/jdbc/src/main/java/org/apache/drill/jdbc/AvaticaDrillSqlAccessor.java b/exec/jdbc/src/main/java/org/apache/drill/jdbc/AvaticaDrillSqlAccessor.java
index 48fb6fd..d06c420 100644
--- a/exec/jdbc/src/main/java/org/apache/drill/jdbc/AvaticaDrillSqlAccessor.java
+++ b/exec/jdbc/src/main/java/org/apache/drill/jdbc/AvaticaDrillSqlAccessor.java
@@ -168,17 +168,17 @@ public class AvaticaDrillSqlAccessor implements Accessor{
@Override
public Date getDate(Calendar calendar) throws SQLException {
- throw new SQLFeatureNotSupportedException();
+ return a.getDate(row());
}
@Override
public Time getTime(Calendar calendar) throws SQLException {
- throw new SQLFeatureNotSupportedException();
+ return a.getTime(row());
}
@Override
public Timestamp getTimestamp(Calendar calendar) throws SQLException {
- throw new SQLFeatureNotSupportedException();
+ return a.getTimestamp(row());
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/4b57652f/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestJdbcQuery.java
----------------------------------------------------------------------
diff --git a/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestJdbcQuery.java b/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestJdbcQuery.java
index 2d26b17..2fd23d3 100644
--- a/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestJdbcQuery.java
+++ b/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestJdbcQuery.java
@@ -20,6 +20,7 @@ package org.apache.drill.jdbc.test;
import java.lang.Exception;
import java.lang.RuntimeException;
import java.nio.file.Paths;
+import java.sql.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
@@ -751,6 +752,37 @@ public class TestJdbcQuery extends JdbcTest{
});
}
+
+ @Test
+ public void testDateTimeAccessors() throws Exception{
+ JdbcAssert.withNoDefaultSchema().withConnection(new Function<Connection, Void>() {
+ public Void apply(Connection connection) {
+ try {
+ Statement statement = connection.createStatement();
+
+ // show tables on view
+ ResultSet resultSet = statement.executeQuery("select date '2008-2-23', time '12:23:34', timestamp '2008-2-23 12:23:34.456', " +
+ "interval '1' year, interval '2' day " +
+ "from cp.`employee.json` limit 1");
+
+ java.sql.Date date = resultSet.getDate(1);
+ java.sql.Time time = resultSet.getTime(2);
+ java.sql.Timestamp ts = resultSet.getTimestamp(3);
+ String intervalYear = resultSet.getString(4);
+ String intervalDay = resultSet.getString(5);
+
+ System.out.println("Date: " + date.toString() + " time: " + time.toString() + " timestamp: " + ts.toString() +
+ "\ninterval year: " + intervalYear + " intervalDay: " + intervalDay);
+
+ statement.close();
+ return null;
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+ });
+ }
+
@Test
public void testShowFiles() throws Exception {
testQuery("show files from dfs.`/tmp`");