Repository: incubator-drill
Updated Branches:
  refs/heads/master 786096659 -> 0ed4fadfe


DRILL-1581: Fix overflow check in casting from varchar to int


Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/0ed4fadf
Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/0ed4fadf
Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/0ed4fadf

Branch: refs/heads/master
Commit: 0ed4fadfec3e8cf8ea79f46b841c76394bb00153
Parents: 7860966
Author: Mehant Baid <meha...@gmail.com>
Authored: Wed Oct 29 14:25:27 2014 -0700
Committer: Mehant Baid <meha...@gmail.com>
Committed: Thu Oct 30 16:24:50 2014 -0700

----------------------------------------------------------------------
 .../drill/exec/expr/fn/impl/StringFunctionHelpers.java   | 11 ++++-------
 .../test/java/org/apache/drill/TestExampleQueries.java   |  5 +++++
 2 files changed, 9 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/0ed4fadf/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/StringFunctionHelpers.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/StringFunctionHelpers.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/StringFunctionHelpers.java
index 3219a9c..c746b7f 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/StringFunctionHelpers.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/StringFunctionHelpers.java
@@ -108,23 +108,21 @@ public class StringFunctionHelpers {
       return nfeI(start, end, buffer);
     }
 
-    int radix = 10;
-    int max = MAX_INT / radix;
     int result = 0;
     int digit;
 
     while (readIndex < end) {
-      digit = Character.digit(buffer.getByte(readIndex++),radix);
+      digit = Character.digit(buffer.getByte(readIndex++), RADIX);
       //not valid digit.
       if (digit == -1) {
         return nfeI(start, end, buffer);
       }
       //overflow
-      if (max > result) {
+      if (MAX_INT > result) {
         return nfeI(start, end, buffer);
       }
 
-      int next = result * radix - digit;
+      int next = result * RADIX - digit;
 
       //overflow
       if (next > result) {
@@ -199,7 +197,6 @@ public class StringFunctionHelpers {
     long index = memoryAddress + start;
     final long endIndex = memoryAddress + end;
     int digit = 0;
-    int radix = 10; // Base 10 digits
 
     // Stores three fields (year, month, day)
     int[] dateFields = new int[3];
@@ -207,7 +204,7 @@ public class StringFunctionHelpers {
     int value = 0;
 
     while (dateIndex < 3 && index < endIndex) {
-      digit = Character.digit(PlatformDependent.getByte(index++), radix);
+      digit = Character.digit(PlatformDependent.getByte(index++), RADIX);
 
       if (digit == -1) {
         dateFields[dateIndex++] = value;

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/0ed4fadf/exec/java-exec/src/test/java/org/apache/drill/TestExampleQueries.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/java/org/apache/drill/TestExampleQueries.java 
b/exec/java-exec/src/test/java/org/apache/drill/TestExampleQueries.java
index 7c7800d..5a4cdd0 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/TestExampleQueries.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/TestExampleQueries.java
@@ -507,4 +507,9 @@ public class TestExampleQueries extends BaseTestQuery{
     assertEquals(String.format("Received unexepcted number of rows in output: 
expected=%d, received=%s",
         expectedRecordCount, actualRecordCount), expectedRecordCount, 
actualRecordCount);
   }
+
+  @Test
+  public void testTextQueries() throws Exception {
+    test("select cast('285572516' as int) from cp.`tpch/nation.parquet` limit 
1");
+  }
 }

Reply via email to