You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by we...@apache.org on 2017/05/17 15:52:02 UTC

arrow git commit: ARROW-997: [Java] Implementing transferPair for FixedSizeListVector

Repository: arrow
Updated Branches:
  refs/heads/master bed019743 -> c4086febd


ARROW-997: [Java] Implementing transferPair for FixedSizeListVector

Author: Emilio Lahr-Vivaz <el...@ccri.com>

Closes #672 from elahrvivaz/ARROW-997 and squashes the following commits:

68be6a56 [Emilio Lahr-Vivaz] ARROW-997: [Java] Implementing transferPair for FixedSizeListVector


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

Branch: refs/heads/master
Commit: c4086febd2d2ce976100d6e65029a7b213583b39
Parents: bed0197
Author: Emilio Lahr-Vivaz <el...@ccri.com>
Authored: Wed May 17 11:51:57 2017 -0400
Committer: Wes McKinney <we...@twosigma.com>
Committed: Wed May 17 11:51:57 2017 -0400

----------------------------------------------------------------------
 .../vector/complex/FixedSizeListVector.java     | 16 +++--
 .../arrow/vector/TestFixedSizeListVector.java   | 66 ++++++++++++++++++++
 2 files changed, 77 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/arrow/blob/c4086feb/java/vector/src/main/java/org/apache/arrow/vector/complex/FixedSizeListVector.java
----------------------------------------------------------------------
diff --git a/java/vector/src/main/java/org/apache/arrow/vector/complex/FixedSizeListVector.java b/java/vector/src/main/java/org/apache/arrow/vector/complex/FixedSizeListVector.java
index ee22fbe..b6d938f 100644
--- a/java/vector/src/main/java/org/apache/arrow/vector/complex/FixedSizeListVector.java
+++ b/java/vector/src/main/java/org/apache/arrow/vector/complex/FixedSizeListVector.java
@@ -259,7 +259,7 @@ public class FixedSizeListVector extends BaseValueVector implements FieldVector,
   @SuppressWarnings("unchecked")
   public <T extends ValueVector> AddOrGetResult<T> addOrGetVector(FieldType type) {
     boolean created = false;
-    if (vector instanceof ZeroVector) {
+    if (vector == ZeroVector.INSTANCE) {
       vector = type.createNewSingleVector(DATA_VECTOR_NAME, allocator, null);
       this.reader = new UnionFixedSizeListReader(this);
       created = true;
@@ -278,8 +278,9 @@ public class FixedSizeListVector extends BaseValueVector implements FieldVector,
     copyFrom(inIndex, outIndex, from);
   }
 
-  public void copyFrom(int inIndex, int outIndex, FixedSizeListVector from) {
-    throw new UnsupportedOperationException("FixedSizeListVector.copyFrom");
+  public void copyFrom(int fromIndex, int thisIndex, FixedSizeListVector from) {
+    TransferPair pair = from.makeTransferPair(this);
+    pair.copyValueSafe(fromIndex, thisIndex);
   }
 
   @Override
@@ -367,7 +368,7 @@ public class FixedSizeListVector extends BaseValueVector implements FieldVector,
       this.to = to;
       to.addOrGetVector(vector.getField().getFieldType());
       pairs[0] = bits.makeTransferPair(to.bits);
-      pairs[1] = getDataVector().makeTransferPair(to.getDataVector());
+      pairs[1] = vector.makeTransferPair(to.vector);
     }
 
     @Override
@@ -392,7 +393,12 @@ public class FixedSizeListVector extends BaseValueVector implements FieldVector,
 
     @Override
     public void copyValueSafe(int from, int to) {
-      this.to.copyFrom(from, to, FixedSizeListVector.this);
+      pairs[0].copyValueSafe(from, to);
+      int fromOffset = from * listSize;
+      int toOffset = to * listSize;
+      for (int i = 0; i < listSize; i++) {
+        pairs[1].copyValueSafe(fromOffset + i, toOffset + i);
+      }
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/arrow/blob/c4086feb/java/vector/src/test/java/org/apache/arrow/vector/TestFixedSizeListVector.java
----------------------------------------------------------------------
diff --git a/java/vector/src/test/java/org/apache/arrow/vector/TestFixedSizeListVector.java b/java/vector/src/test/java/org/apache/arrow/vector/TestFixedSizeListVector.java
index f35ab54..304db9d 100644
--- a/java/vector/src/test/java/org/apache/arrow/vector/TestFixedSizeListVector.java
+++ b/java/vector/src/test/java/org/apache/arrow/vector/TestFixedSizeListVector.java
@@ -28,6 +28,7 @@ import org.apache.arrow.vector.complex.reader.FieldReader;
 import org.apache.arrow.vector.types.Types.MinorType;
 import org.apache.arrow.vector.types.pojo.ArrowType;
 import org.apache.arrow.vector.types.pojo.FieldType;
+import org.apache.arrow.vector.util.TransferPair;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
@@ -153,4 +154,69 @@ public class TestFixedSizeListVector {
       }
     }
   }
+
+  @Test
+  public void testTransferPair() {
+    try (FixedSizeListVector from = new FixedSizeListVector("from", allocator, 2, null, null);
+         FixedSizeListVector to = new FixedSizeListVector("to", allocator, 2, null, null)) {
+      NullableFloat4Vector nested = (NullableFloat4Vector) from.addOrGetVector(FieldType.nullable(MinorType.FLOAT4.getType())).getVector();
+      NullableFloat4Vector.Mutator mutator = nested.getMutator();
+      from.allocateNew();
+
+      for (int i = 0; i < 10; i++) {
+        if (i % 2 == 0) {
+          from.getMutator().setNotNull(i);
+          mutator.set(i * 2, i + 0.1f);
+          mutator.set(i * 2 + 1, i + 10.1f);
+        }
+      }
+      from.getMutator().setValueCount(10);
+
+      TransferPair pair = from.makeTransferPair(to);
+
+      pair.copyValueSafe(0, 1);
+      pair.copyValueSafe(2, 2);
+      to.copyFromSafe(4, 3, from);
+      to.getMutator().setValueCount(10);
+
+      UnionFixedSizeListReader reader = to.getReader();
+
+      reader.setPosition(0);
+      Assert.assertFalse(reader.isSet());
+      Assert.assertNull(reader.readObject());
+
+      reader.setPosition(1);
+      Assert.assertTrue(reader.isSet());
+      Assert.assertTrue(reader.next());
+      Assert.assertEquals(0.1f, reader.reader().readFloat(), 0.00001);
+      Assert.assertTrue(reader.next());
+      Assert.assertEquals(10.1f, reader.reader().readFloat(), 0.00001);
+      Assert.assertFalse(reader.next());
+      Assert.assertEquals(Lists.newArrayList(0.1f, 10.1f), reader.readObject());
+
+      reader.setPosition(2);
+      Assert.assertTrue(reader.isSet());
+      Assert.assertTrue(reader.next());
+      Assert.assertEquals(2.1f, reader.reader().readFloat(), 0.00001);
+      Assert.assertTrue(reader.next());
+      Assert.assertEquals(12.1f, reader.reader().readFloat(), 0.00001);
+      Assert.assertFalse(reader.next());
+      Assert.assertEquals(Lists.newArrayList(2.1f, 12.1f), reader.readObject());
+
+      reader.setPosition(3);
+      Assert.assertTrue(reader.isSet());
+      Assert.assertTrue(reader.next());
+      Assert.assertEquals(4.1f, reader.reader().readFloat(), 0.00001);
+      Assert.assertTrue(reader.next());
+      Assert.assertEquals(14.1f, reader.reader().readFloat(), 0.00001);
+      Assert.assertFalse(reader.next());
+      Assert.assertEquals(Lists.newArrayList(4.1f, 14.1f), reader.readObject());
+
+      for (int i = 4; i < 10; i++) {
+        reader.setPosition(i);
+        Assert.assertFalse(reader.isSet());
+        Assert.assertNull(reader.readObject());
+      }
+    }
+  }
 }