You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by em...@apache.org on 2019/07/16 03:10:16 UTC

[arrow] branch master updated: ARROW-5884: [Java] Fix the get method of StructVector

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 462e04b  ARROW-5884: [Java] Fix the get method of StructVector
462e04b is described below

commit 462e04bac84cd1b6e49491e646fb7a63c1c66e51
Author: liyafan82 <fa...@foxmail.com>
AuthorDate: Sat Jul 13 01:08:32 2019 -0700

    ARROW-5884: [Java] Fix the get method of StructVector
    
    When the data at the specified location is null, there is no need to call the method from super to set the reader
    
     holder.isSet = isSet(index);
     super.get(index, holder);
    
    Author: liyafan82 <fa...@foxmail.com>
    
    Closes #4831 from liyafan82/fly_0709_strnull and squashes the following commits:
    
    0b8f79886 <liyafan82>  Force the reader to be null
    49148aad2 <liyafan82>  Fix the get method of StructVector
---
 .../apache/arrow/vector/complex/StructVector.java  |  4 +++
 .../org/apache/arrow/vector/TestStructVector.java  | 32 ++++++++++++++++++++++
 2 files changed, 36 insertions(+)

diff --git a/java/vector/src/main/java/org/apache/arrow/vector/complex/StructVector.java b/java/vector/src/main/java/org/apache/arrow/vector/complex/StructVector.java
index 35f50ef..a07e0d2 100644
--- a/java/vector/src/main/java/org/apache/arrow/vector/complex/StructVector.java
+++ b/java/vector/src/main/java/org/apache/arrow/vector/complex/StructVector.java
@@ -482,6 +482,10 @@ public class StructVector extends NonNullableStructVector implements FieldVector
   @Override
   public void get(int index, ComplexHolder holder) {
     holder.isSet = isSet(index);
+    if (holder.isSet == 0) {
+      holder.reader = null;
+      return;
+    }
     super.get(index, holder);
   }
 
diff --git a/java/vector/src/test/java/org/apache/arrow/vector/TestStructVector.java b/java/vector/src/test/java/org/apache/arrow/vector/TestStructVector.java
index 7706be4..9d156eb 100644
--- a/java/vector/src/test/java/org/apache/arrow/vector/TestStructVector.java
+++ b/java/vector/src/test/java/org/apache/arrow/vector/TestStructVector.java
@@ -18,15 +18,20 @@
 package org.apache.arrow.vector;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 
 import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.arrow.memory.BufferAllocator;
 import org.apache.arrow.vector.complex.StructVector;
+import org.apache.arrow.vector.holders.ComplexHolder;
 import org.apache.arrow.vector.types.Types.MinorType;
 import org.apache.arrow.vector.types.pojo.ArrowType.Struct;
 import org.apache.arrow.vector.types.pojo.FieldType;
+
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
@@ -100,4 +105,31 @@ public class TestStructVector {
       Assert.assertEquals(vector.getValueCapacity(), savedValueCapacity);
     }
   }
+
+  @Test
+  public void testReadNullValue() {
+    Map<String, String> metadata = new HashMap<>();
+    metadata.put("k1", "v1");
+    FieldType type = new FieldType(true, Struct.INSTANCE, null, metadata);
+    try (StructVector vector = new StructVector("struct", allocator, type, null)) {
+      MinorType childtype = MinorType.INT;
+      vector.addOrGet("intchild", FieldType.nullable(childtype.getType()), IntVector.class);
+      vector.setValueCount(2);
+
+      IntVector intVector = (IntVector) vector.getChild("intchild");
+      intVector.setSafe(0, 100);
+      vector.setIndexDefined(0);
+      intVector.setNull(1);
+      vector.setNull(1);
+
+      ComplexHolder holder = new ComplexHolder();
+      vector.get(0, holder);
+      assertNotEquals(0, holder.isSet);
+      assertNotNull(holder.reader);
+
+      vector.get(1, holder);
+      assertEquals(0, holder.isSet);
+      assertNull(holder.reader);
+    }
+  }
 }