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

Reply via email to