DRILL-411: Fix Optiq to Drill conversion of varchar literals.
Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/6804b525 Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/6804b525 Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/6804b525 Branch: refs/heads/master Commit: 6804b525535c3cfe39d1319c9c7377595402f333 Parents: 5a94bf1 Author: vkorukanti <[email protected]> Authored: Sat Mar 22 10:02:01 2014 -0700 Committer: Jacques Nadeau <[email protected]> Committed: Sat Mar 22 10:02:01 2014 -0700 ---------------------------------------------------------------------- .../apache/drill/exec/planner/logical/DrillOptiq.java | 5 +++-- .../java/org/apache/drill/jdbc/test/TestJdbcQuery.java | 13 ++++++++++++- 2 files changed, 15 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/6804b525/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillOptiq.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillOptiq.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillOptiq.java index 4fb9a01..b39b230 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillOptiq.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillOptiq.java @@ -47,6 +47,7 @@ import org.eigenbase.sql.SqlSyntax; import org.eigenbase.sql.fun.SqlStdOperatorTable; import com.google.common.collect.Lists; +import org.eigenbase.util.NlsString; /** * Utilities for Drill's planner. @@ -190,7 +191,7 @@ public class DrillOptiq { case BOOLEAN: return ValueExpressions.getBit(((Boolean) literal.getValue())); case CHAR: - return ValueExpressions.getChar(((String) literal.getValue())); + return ValueExpressions.getChar(((NlsString)literal.getValue()).getValue()); case DOUBLE: double d = ((BigDecimal) literal.getValue()).doubleValue(); return ValueExpressions.getFloat8(d); @@ -202,7 +203,7 @@ public class DrillOptiq { int i = ((BigDecimal) literal.getValue()).intValue(); return ValueExpressions.getInt(i); case VARCHAR: - return ValueExpressions.getChar(((String) literal.getValue())); + return ValueExpressions.getChar(((NlsString)literal.getValue()).getValue()); default: throw new UnsupportedOperationException(String.format("Unable to convert the value of %s and type %s to a Drill constant expression.", literal, literal.getTypeName())); } http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/6804b525/sqlparser/src/test/java/org/apache/drill/jdbc/test/TestJdbcQuery.java ---------------------------------------------------------------------- diff --git a/sqlparser/src/test/java/org/apache/drill/jdbc/test/TestJdbcQuery.java b/sqlparser/src/test/java/org/apache/drill/jdbc/test/TestJdbcQuery.java index 1d678cc..8ea758d 100644 --- a/sqlparser/src/test/java/org/apache/drill/jdbc/test/TestJdbcQuery.java +++ b/sqlparser/src/test/java/org/apache/drill/jdbc/test/TestJdbcQuery.java @@ -94,7 +94,18 @@ public class TestJdbcQuery { public void testWildcard() throws Exception{ testQuery(String.format("select * from dfs.`%s/../sample-data/region.parquet`", WORKING_PATH)); } - + + @Test + public void testCharLiteral() throws Exception { + testQuery(String.format("select 'test literal' from INFORMATION_SCHEMA.TABLES LIMIT 1")); + } + + @Test + @Ignore // failing due to a bug in cast to varchar function + public void testVarCharLiteral() throws Exception { + testQuery(String.format("select cast('test literal' as VARCHAR) from INFORMATION_SCHEMA.TABLES LIMIT 1")); + } + @Test public void testLogicalExplain() throws Exception{ testQuery(String.format("EXPLAIN PLAN WITHOUT IMPLEMENTATION FOR select * from dfs.`%s/../sample-data/region.parquet`", WORKING_PATH));
