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"); + } }