You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by pa...@apache.org on 2018/07/02 22:52:10 UTC

[drill] 02/03: DRILL-6530: JVM crash with a query involving multiple json files with one file having a schema change of one column from string to list

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

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

commit 208733b52ec40fd49e6bd424782f7c71aabef7e3
Author: Sorabh Hamirwasia <sh...@maprtech.com>
AuthorDate: Tue Jun 26 10:53:53 2018 -0700

    DRILL-6530: JVM crash with a query involving multiple json files with one file having a schema change of one column from string to list
    
    This closes #1343
---
 .../vector/src/main/codegen/templates/ListWriters.java | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/exec/vector/src/main/codegen/templates/ListWriters.java b/exec/vector/src/main/codegen/templates/ListWriters.java
index cab8772..4300857 100644
--- a/exec/vector/src/main/codegen/templates/ListWriters.java
+++ b/exec/vector/src/main/codegen/templates/ListWriters.java
@@ -107,11 +107,13 @@ public class ${mode}ListWriter extends AbstractFieldWriter {
   public MapWriter map() {
     switch (mode) {
     case INIT:
-      int vectorCount = container.size();
+      final ValueVector oldVector = container.getChild(name);
       final RepeatedMapVector vector = container.addOrGet(name, RepeatedMapVector.TYPE, RepeatedMapVector.class);
       innerVector = vector;
       writer = new RepeatedMapWriter(vector, this);
-      if(vectorCount != container.size()) {
+      // oldVector will be null if it's first batch being created and it might not be same as newly added vector
+      // if new batch has schema change
+      if (oldVector == null || oldVector != vector) {
         writer.allocate();
       }
       writer.setPosition(${index});
@@ -131,11 +133,13 @@ public class ${mode}ListWriter extends AbstractFieldWriter {
   public ListWriter list() {
     switch (mode) {
     case INIT:
-      final int vectorCount = container.size();
+      final ValueVector oldVector = container.getChild(name);
       final RepeatedListVector vector = container.addOrGet(name, RepeatedListVector.TYPE, RepeatedListVector.class);
       innerVector = vector;
       writer = new RepeatedListWriter(null, vector, this);
-      if (vectorCount != container.size()) {
+      // oldVector will be null if it's first batch being created and it might not be same as newly added vector
+      // if new batch has schema change
+      if (oldVector == null || oldVector != vector) {
         writer.allocate();
       }
       writer.setPosition(${index});
@@ -176,11 +180,13 @@ public class ${mode}ListWriter extends AbstractFieldWriter {
   </#if>
     switch (mode) {
     case INIT:
-      final int vectorCount = container.size();
+      final ValueVector oldVector = container.getChild(name);
       final Repeated${capName}Vector vector = container.addOrGet(name, ${upperName}_TYPE, Repeated${capName}Vector.class);
       innerVector = vector;
       writer = new Repeated${capName}WriterImpl(vector, this);
-      if(vectorCount != container.size()) {
+      // oldVector will be null if it's first batch being created and it might not be same as newly added vector
+      // if new batch has schema change
+      if (oldVector == null || oldVector != vector) {
         writer.allocate();
       }
       writer.setPosition(${index});