Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
.classpath
.factorypath
.idea/
.vscode/
.cursor/
.project
.settings/
/*-build/
Expand Down
4 changes: 3 additions & 1 deletion vector/src/main/codegen/templates/DenseUnionWriter.java
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,9 @@ public DenseUnionWriter(DenseUnionVector vector, NullableStructWriterFactory nul
public void setPosition(int index) {
super.setPosition(index);
for (BaseWriter writer : writers) {
writer.setPosition(index);
if (writer != null) {
writer.setPosition(index);
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2530,4 +2530,47 @@ public void extensionWriterReader() throws Exception {
}
}
}

@Test
void testListOfDenseUnionWriterNPE() {
// Regression test for https://github.com/apache/arrow-java/issues/399
try (ListVector listVector = ListVector.empty("list", allocator)) {
listVector.addOrGetVector(FieldType.nullable(MinorType.DENSEUNION.getType()));
UnionListWriter listWriter = listVector.getWriter();

listWriter.startList();
listWriter.endList();
}
}

@Test
void testListOfDenseUnionWriterWithData() {
try (ListVector listVector = ListVector.empty("list", allocator)) {
listVector.addOrGetVector(FieldType.nullable(MinorType.DENSEUNION.getType()));

UnionListWriter listWriter = listVector.getWriter();
listWriter.startList();
listWriter.writeInt(100);
listWriter.writeBigInt(200L);
listWriter.endList();

listWriter.startList();
listWriter.writeFloat4(3.14f);
listWriter.endList();

listVector.setValueCount(2);

assertEquals(2, listVector.getValueCount());

List<?> value0 = (List<?>) listVector.getObject(0);
List<?> value1 = (List<?>) listVector.getObject(1);

assertEquals(2, value0.size());
assertEquals(100, value0.get(0));
assertEquals(200L, value0.get(1));

assertEquals(1, value1.size());
assertEquals(3.14f, value1.get(0));
}
}
}
Loading