This is an automated email from the ASF dual-hosted git repository.

amansinha pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/drill.git

commit 2aede3a1cd1532fbcd0a622b49a3b9fce69979ef
Author: Bohdan Kazydub <bohdan.kazy...@gmail.com>
AuthorDate: Mon Oct 8 16:50:22 2018 +0300

    DRILL-6783: CAST string literal as INTERVAL MONTH/YEAR works inconsistently 
when selecting from a table with multiple rows
    
    close apache/drill#1496
---
 .../drill/exec/fn/impl/TestCastFunctions.java      | 38 +++++++++++++++++++++-
 .../main/codegen/templates/FixedValueVectors.java  |  3 +-
 2 files changed, 39 insertions(+), 2 deletions(-)

diff --git 
a/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestCastFunctions.java
 
b/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestCastFunctions.java
index cb0d022..7768909 100644
--- 
a/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestCastFunctions.java
+++ 
b/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestCastFunctions.java
@@ -19,14 +19,21 @@ package org.apache.drill.exec.fn.impl;
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import org.apache.drill.categories.SqlFunctionTest;
 import org.apache.drill.categories.UnlikelyTest;
 import org.apache.drill.common.exceptions.UserRemoteException;
+import org.apache.drill.common.expression.SchemaPath;
 import org.apache.drill.exec.planner.physical.PlannerSettings;
+import org.apache.drill.exec.record.RecordBatchLoader;
+import org.apache.drill.exec.rpc.user.QueryDataBatch;
+import org.apache.drill.exec.vector.IntervalYearVector;
 import org.apache.drill.test.BaseTestQuery;
+import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
@@ -39,6 +46,7 @@ import 
org.apache.drill.shaded.guava.com.google.common.collect.Maps;
 import mockit.integration.junit4.JMockit;
 
 import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.CoreMatchers.hasItem;
 
 @RunWith(JMockit.class)
 @Category({UnlikelyTest.class, SqlFunctionTest.class})
@@ -664,4 +672,32 @@ public class TestCastFunctions extends BaseTestQuery {
 
     test(query);
   }
-}
\ No newline at end of file
+
+  @Test // DRILL-6783
+  public void testCastVarCharIntervalYear() throws Exception {
+    String query = "select cast('P31M' as interval month) as i from 
cp.`employee.json` limit 10";
+    List<QueryDataBatch> result = testSqlWithResults(query);
+    RecordBatchLoader loader = new 
RecordBatchLoader(getDrillbitContext().getAllocator());
+
+    QueryDataBatch b = result.get(0);
+    loader.load(b.getHeader().getDef(), b.getData());
+
+    IntervalYearVector vector = (IntervalYearVector) 
loader.getValueAccessorById(
+          IntervalYearVector.class,
+          
loader.getValueVectorId(SchemaPath.getCompoundPath("i")).getFieldIds())
+        .getValueVector();
+
+    Set<String> resultSet = new HashSet<>();
+    for (int i = 0; i < loader.getRecordCount(); i++) {
+      String displayValue = 
vector.getAccessor().getAsStringBuilder(i).toString();
+      resultSet.add(displayValue);
+    }
+
+    Assert.assertEquals(
+        "Casting literal string as INTERVAL should yield the same result for 
each row", 1, resultSet.size());
+    Assert.assertThat(resultSet, hasItem("2 years 7 months"));
+
+    b.release();
+    loader.clear();
+  }
+}
diff --git a/exec/vector/src/main/codegen/templates/FixedValueVectors.java 
b/exec/vector/src/main/codegen/templates/FixedValueVectors.java
index a98aa66..508e484 100644
--- a/exec/vector/src/main/codegen/templates/FixedValueVectors.java
+++ b/exec/vector/src/main/codegen/templates/FixedValueVectors.java
@@ -532,7 +532,8 @@ public final class ${minor.class}Vector extends 
BaseDataValueVector implements F
     }
 
     public StringBuilder getAsStringBuilder(int index) {
-      return DateUtilities.intervalYearStringBuilder(data.getInt(index));
+      int value = get(index);
+      return DateUtilities.intervalYearStringBuilder(value);
     }
     <#elseif minor.class == "Time">
 

Reply via email to