From 9de06ae09de71512f81ce42f86ad20e6fae12f3f Mon Sep 17 00:00:00 2001 From: Chao Sun Date: Fri, 3 Mar 2023 09:55:37 -0800 Subject: [PATCH] Fix valueCount when loading NullVector We should set `valueCount` when loading `NullVector`. Unfortunately there's no `nullCount` field. --- .../org/apache/arrow/c/RoundtripTest.java | 7 ++++++ .../org/apache/arrow/vector/NullVector.java | 23 ++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/java/c/src/test/java/org/apache/arrow/c/RoundtripTest.java b/java/c/src/test/java/org/apache/arrow/c/RoundtripTest.java index 6a2b476b0c395..b9ea67b7190ed 100644 --- a/java/c/src/test/java/org/apache/arrow/c/RoundtripTest.java +++ b/java/c/src/test/java/org/apache/arrow/c/RoundtripTest.java @@ -462,6 +462,13 @@ public void testUInt8Vector() { } } + @Test + public void testNullVector() { + try (final NullVector vector = new NullVector("v", 1024)) { + assertTrue(roundtrip(vector, NullVector.class)); + } + } + @Test public void testVarBinaryVector() { try (final VarBinaryVector vector = new VarBinaryVector("v", allocator)) { diff --git a/java/vector/src/main/java/org/apache/arrow/vector/NullVector.java b/java/vector/src/main/java/org/apache/arrow/vector/NullVector.java index 1010d8d475f05..203b53895fafc 100644 --- a/java/vector/src/main/java/org/apache/arrow/vector/NullVector.java +++ b/java/vector/src/main/java/org/apache/arrow/vector/NullVector.java @@ -57,6 +57,16 @@ public NullVector(String name) { this(name, FieldType.nullable(Types.MinorType.NULL.getType())); } + /** + * Instantiate a NullVector with the given number of values + * + * @param name name of the vector + * @param valueCount number of values (i.e., nulls) in this vector + */ + public NullVector(String name, int valueCount) { + this(new Field(name, FieldType.nullable(Types.MinorType.NULL.getType()), null), valueCount); + } + /** * Instantiate a NullVector. * @@ -73,8 +83,18 @@ public NullVector(String name, FieldType fieldType) { * @param field field materialized by this vector. */ public NullVector(Field field) { - this.valueCount = 0; + this(field, 0); + } + + /** + * Instantiate a NullVector with the given number of values + * + * @param field field materialized by this vector. + * @param valueCount number of values (i.e., nulls) in this vector + */ + public NullVector(Field field, int valueCount) { this.field = field; + this.valueCount = valueCount; } @Deprecated @@ -192,6 +212,7 @@ public List getChildrenFromFields() { @Override public void loadFieldBuffers(ArrowFieldNode fieldNode, List ownBuffers) { Preconditions.checkArgument(ownBuffers.isEmpty(), "Null vector has no buffers"); + this.valueCount = fieldNode.getLength(); } @Override