You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by ju...@apache.org on 2017/04/25 18:25:07 UTC

arrow git commit: ARROW-895: Fix lastSet in fillEmpties() and copyFrom()

Repository: arrow
Updated Branches:
  refs/heads/master f00e2ab59 -> 1a73c352d


ARROW-895: Fix lastSet in fillEmpties() and copyFrom()

Author: Steven Phillips <st...@dremio.com>

Closes #601 from StevenMPhillips/fillEmpties4 and squashes the following commits:

4707673 [Steven Phillips] ARROW-895: Fix lastSet in fillEmpties() and copyFrom()


Project: http://git-wip-us.apache.org/repos/asf/arrow/repo
Commit: http://git-wip-us.apache.org/repos/asf/arrow/commit/1a73c352
Tree: http://git-wip-us.apache.org/repos/asf/arrow/tree/1a73c352
Diff: http://git-wip-us.apache.org/repos/asf/arrow/diff/1a73c352

Branch: refs/heads/master
Commit: 1a73c352d023dfa0e8aca4c16f3e421745524ea8
Parents: f00e2ab
Author: Steven Phillips <st...@dremio.com>
Authored: Tue Apr 25 11:25:03 2017 -0700
Committer: Julien Le Dem <ju...@apache.org>
Committed: Tue Apr 25 11:25:03 2017 -0700

----------------------------------------------------------------------
 .../codegen/templates/NullableValueVectors.java |  5 ++-
 .../apache/arrow/vector/TestValueVector.java    | 38 ++++++++++++++++++++
 2 files changed, 42 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/arrow/blob/1a73c352/java/vector/src/main/codegen/templates/NullableValueVectors.java
----------------------------------------------------------------------
diff --git a/java/vector/src/main/codegen/templates/NullableValueVectors.java b/java/vector/src/main/codegen/templates/NullableValueVectors.java
index 178d5bd..31adc2b 100644
--- a/java/vector/src/main/codegen/templates/NullableValueVectors.java
+++ b/java/vector/src/main/codegen/templates/NullableValueVectors.java
@@ -393,6 +393,7 @@ public final class ${className} extends BaseDataValueVector implements <#if type
     if (!fromAccessor.isNull(fromIndex)) {
       mutator.set(thisIndex, fromAccessor.get(fromIndex));
     }
+    <#if type.major == "VarLen">mutator.lastSet = thisIndex;</#if>
   }
 
   public void copyFromSafe(int fromIndex, int thisIndex, ${valuesName} from){
@@ -401,6 +402,7 @@ public final class ${className} extends BaseDataValueVector implements <#if type
     </#if>
     values.copyFromSafe(fromIndex, thisIndex, from);
     bits.getMutator().setSafeToOne(thisIndex);
+    <#if type.major == "VarLen">mutator.lastSet = thisIndex;</#if>
   }
 
   public void copyFromSafe(int fromIndex, int thisIndex, ${className} from){
@@ -409,6 +411,7 @@ public final class ${className} extends BaseDataValueVector implements <#if type
     </#if>
     bits.copyFromSafe(fromIndex, thisIndex, from.bits);
     values.copyFromSafe(fromIndex, thisIndex, from.values);
+    <#if type.major == "VarLen">mutator.lastSet = thisIndex;</#if>
   }
 
   public final class Accessor extends BaseDataValueVector.BaseAccessor <#if type.major = "VarLen">implements VariableWidthVector.VariableWidthAccessor</#if> {
@@ -532,7 +535,7 @@ public final class ${className} extends BaseDataValueVector implements <#if type
       while(index > bits.getValueCapacity()) {
         bits.reAlloc();
       }
-      lastSet = index;
+      lastSet = index - 1;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/arrow/blob/1a73c352/java/vector/src/test/java/org/apache/arrow/vector/TestValueVector.java
----------------------------------------------------------------------
diff --git a/java/vector/src/test/java/org/apache/arrow/vector/TestValueVector.java b/java/vector/src/test/java/org/apache/arrow/vector/TestValueVector.java
index e6e49ab..63543b0 100644
--- a/java/vector/src/test/java/org/apache/arrow/vector/TestValueVector.java
+++ b/java/vector/src/test/java/org/apache/arrow/vector/TestValueVector.java
@@ -21,6 +21,7 @@ import static org.apache.arrow.vector.TestUtils.newNullableVarCharVector;
 import static org.apache.arrow.vector.TestUtils.newVector;
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
 import java.nio.charset.Charset;
@@ -473,9 +474,46 @@ public class TestValueVector {
 
       vector.getMutator().setSafe(4094, "hello".getBytes(), 0, 5);
       vector.getMutator().setValueCount(4095);
+
       assertEquals(4096 * 4, vector.getFieldBuffers().get(1).capacity());
     }
   }
 
+  @Test
+  public void testCopyFromWithNulls() {
+    try (final NullableVarCharVector vector = newVector(NullableVarCharVector.class, EMPTY_SCHEMA_PATH, MinorType.VARCHAR, allocator);
+          final NullableVarCharVector vector2 = newVector(NullableVarCharVector.class, EMPTY_SCHEMA_PATH, MinorType.VARCHAR, allocator)) {
+      vector.allocateNew();
+
+      for (int i = 0; i < 4095; i++) {
+        if (i % 3 == 0) {
+          continue;
+        }
+        byte[] b = Integer.toString(i).getBytes();
+        vector.getMutator().setSafe(i, b, 0, b.length);
+      }
+
+      vector.getMutator().setValueCount(4095);
+
+      vector2.allocateNew();
+
+      for (int i = 0; i < 4095; i++) {
+        vector2.copyFromSafe(i, i, vector);
+      }
+
+      vector2.getMutator().setValueCount(4095);
+
+      for (int i = 0; i < 4095; i++) {
+        if (i % 3 == 0) {
+          assertNull(vector2.getAccessor().getObject(i));
+        } else {
+          assertEquals(Integer.toString(i), vector2.getAccessor().getObject(i).toString());
+        }
+
+      }
+
+
+    }
+  }
 
 }