From f466d254d08c8599eb6db7711a9ea72b4f833793 Mon Sep 17 00:00:00 2001 From: James Henderson Date: Thu, 18 Jul 2024 11:09:16 +0100 Subject: [PATCH] fix for SchemaChangeRuntimeException in FixedSizeListVector.TransferImpl., resolves apache/arrow#43320 --- .../vector/complex/FixedSizeListVector.java | 4 +++- .../arrow/vector/TestFixedSizeListVector.java | 24 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) 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 7a88eaf162314..cb4550848088c 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 @@ -602,7 +602,9 @@ public TransferImpl(Field field, BufferAllocator allocator, CallBack callBack) { public TransferImpl(FixedSizeListVector to) { this.to = to; - to.addOrGetVector(vector.getField().getFieldType()); + if (!(vector instanceof ZeroVector)) { + to.addOrGetVector(vector.getField().getFieldType()); + } dataPair = vector.makeTransferPair(to.vector); } 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 fc220e0f05a14..cedcb372eae15 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 @@ -26,6 +26,7 @@ import java.math.BigDecimal; import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.apache.arrow.memory.BufferAllocator; @@ -243,6 +244,29 @@ public void testTransferPair() { } } + @Test + public void testTransferEmptyVector() throws Exception { + // #43320 + try (FixedSizeListVector src = new FixedSizeListVector("src", allocator, FieldType.nullable(new ArrowType.FixedSizeList(2)), null); + FixedSizeListVector dest = new FixedSizeListVector("dest", allocator, FieldType.nullable(new ArrowType.FixedSizeList(2)), null)) { + src.makeTransferPair(dest).transfer(); + + IntVector els = (IntVector) dest.addOrGetVector(FieldType.nullable(MinorType.INT.getType())).getVector(); + + dest.allocateNew(); + dest.startNewValue(0); + els.setSafe(0, 1); + els.setSafe(1, 2); + dest.setValueCount(1); + + List expected = new ArrayList<>(2); + expected.add(1); + expected.add(2); + + assertEquals(expected, dest.getObject(0)); + } + } + @Test public void testConsistentChildName() throws Exception { try (FixedSizeListVector listVector =