DRILL-585: Switch getObject in SQL accessors to return java.sql.* types.
Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/0648c9e9 Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/0648c9e9 Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/0648c9e9 Branch: refs/heads/master Commit: 0648c9e9fb3c6fa607e8b46f4062ff6453b6a634 Parents: 2b5ae07 Author: Cliff Buchanan <[email protected]> Authored: Mon Jun 16 08:14:13 2014 -0700 Committer: Jacques Nadeau <[email protected]> Committed: Mon Jun 16 12:43:55 2014 -0700 ---------------------------------------------------------------------- .../src/main/codegen/includes/vv_imports.ftl | 1 + .../main/codegen/templates/SqlAccessors.java | 22 ++++++++++++++++++++ .../vector/accessor/AbstractSqlAccessor.java | 2 +- .../jdbc/test/TestAggregateFunctionsQuery.java | 11 ++++++---- 4 files changed, 31 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/0648c9e9/exec/java-exec/src/main/codegen/includes/vv_imports.ftl ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/codegen/includes/vv_imports.ftl b/exec/java-exec/src/main/codegen/includes/vv_imports.ftl index 114ecbe..9e16116 100644 --- a/exec/java-exec/src/main/codegen/includes/vv_imports.ftl +++ b/exec/java-exec/src/main/codegen/includes/vv_imports.ftl @@ -22,6 +22,7 @@ import io.netty.buffer.ByteBufInputStream; import org.apache.commons.lang3.ArrayUtils; +import org.apache.drill.exec.expr.fn.impl.StringFunctionUtil; import org.apache.drill.exec.memory.AccountingByteBuf; import org.apache.drill.exec.memory.BufferAllocator; import org.apache.drill.exec.proto.SchemaDefProtos; http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/0648c9e9/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 b7207f9..d05b7fd 100644 --- a/exec/java-exec/src/main/codegen/templates/SqlAccessors.java +++ b/exec/java-exec/src/main/codegen/templates/SqlAccessors.java @@ -45,9 +45,11 @@ public class ${name}Accessor extends AbstractSqlAccessor{ this.ac = vector.getAccessor(); } + <#if minor.class != "TimeStampTZ" && minor.class != "TimeStamp" && minor.class != "Time" && minor.class != "Date"> public Object getObject(int index){ return ac.getObject(index); } + </#if> <#if type.major == "VarLen"> @@ -65,6 +67,10 @@ public class ${name}Accessor extends AbstractSqlAccessor{ <#switch minor.class> <#case "VarBinary"> + public String getString(int index) { + byte [] b = ac.get(index); + return StringFunctionUtil.toBinaryString(io.netty.buffer.Unpooled.wrappedBuffer(b), 0, b.length); + } <#break> <#case "VarChar"> @Override @@ -98,6 +104,10 @@ public class ${name}Accessor extends AbstractSqlAccessor{ <#else> <#if minor.class == "TimeStampTZ"> + public Object getObject(int index) { + return getTimestamp(index); + } + @Override public Timestamp getTimestamp(int index) { return new Timestamp(ac.getObject(index).getMillis()); @@ -113,6 +123,10 @@ public class ${name}Accessor extends AbstractSqlAccessor{ return ac.getObject(index); } <#elseif minor.class == "Date"> + public Object getObject(int index) { + return getDate(index); + } + @Override public Date getDate(int index) { org.joda.time.DateTime date = new org.joda.time.DateTime(ac.get(index), org.joda.time.DateTimeZone.UTC); @@ -120,6 +134,10 @@ public class ${name}Accessor extends AbstractSqlAccessor{ return new Date(date.getMillis()); } <#elseif minor.class == "TimeStamp"> + public Object getObject(int index) { + return getTimestamp(index); + } + @Override public Timestamp getTimestamp(int index) { org.joda.time.DateTime date = new org.joda.time.DateTime(ac.get(index), org.joda.time.DateTimeZone.UTC); @@ -127,6 +145,10 @@ public class ${name}Accessor extends AbstractSqlAccessor{ return new Timestamp(date.getMillis()); } <#elseif minor.class == "Time"> + public Object getObject(int index) { + return getTime(index); + } + @Override public Time getTime(int index) { org.joda.time.DateTime time = new org.joda.time.DateTime(ac.get(index), org.joda.time.DateTimeZone.UTC); http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/0648c9e9/exec/java-exec/src/main/java/org/apache/drill/exec/vector/accessor/AbstractSqlAccessor.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/vector/accessor/AbstractSqlAccessor.java b/exec/java-exec/src/main/java/org/apache/drill/exec/vector/accessor/AbstractSqlAccessor.java index 93089e7..9884612 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/vector/accessor/AbstractSqlAccessor.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/vector/accessor/AbstractSqlAccessor.java @@ -99,7 +99,7 @@ abstract class AbstractSqlAccessor implements SqlAccessor { @Override public String getString(int index) throws InvalidAccessException{ - throw new InvalidAccessException("String"); + return getObject(index).toString(); } @Override http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/0648c9e9/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestAggregateFunctionsQuery.java ---------------------------------------------------------------------- diff --git a/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestAggregateFunctionsQuery.java b/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestAggregateFunctionsQuery.java index 5c5a218..812ee40 100644 --- a/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestAggregateFunctionsQuery.java +++ b/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestAggregateFunctionsQuery.java @@ -19,6 +19,7 @@ package org.apache.drill.jdbc.test; import java.nio.file.Paths; import java.sql.Connection; +import java.sql.Date; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; @@ -29,6 +30,7 @@ import org.apache.drill.common.util.TestTools; import org.apache.drill.exec.store.hive.HiveTestDataGenerator; import org.apache.drill.jdbc.Driver; import org.apache.drill.jdbc.JdbcTest; +import org.joda.time.chrono.ISOChronology; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Ignore; @@ -36,11 +38,10 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.TestRule; -import org.joda.time.DateTime; - import com.google.common.base.Function; import com.google.common.base.Stopwatch; + public class TestAggregateFunctionsQuery { public static final String WORKING_PATH; @@ -55,8 +56,10 @@ public class TestAggregateFunctionsQuery { " FROM `employee.json`"); - String t = new DateTime(1998, 1, 1, 0, 0, 0, 0).toString(); - String t1 = new DateTime(1993, 5, 1, 0, 0, 0, 0).toString(); + String t = new Date(ISOChronology.getInstance().getDateTimeMillis(1998, 1, 1, 0)).toString(); + String t1 = new Date(ISOChronology.getInstance().getDateTimeMillis(1993, 5, 1, 0)).toString(); + //String t = new Date(1998, 1, 1).toString(); + //String t1 = new Date(1993, 5, 1).toString(); String result = String.format("MAX_DATE="+ t + "; " + "MIN_DATE=" + t1 + "\n");
