From 16f71293140e090f6f8545cc4345bbaebee035bf Mon Sep 17 00:00:00 2001 From: Steven Phillips Date: Tue, 6 Jun 2017 15:19:00 -0700 Subject: [PATCH] ARROW-1111: [JAVA] Make aligning buffers optional, and allow -1 for unknown null count --- .../java/org/apache/arrow/vector/VectorUnloader.java | 12 ++++++++++-- .../apache/arrow/vector/schema/ArrowRecordBatch.java | 8 ++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/java/vector/src/main/java/org/apache/arrow/vector/VectorUnloader.java b/java/vector/src/main/java/org/apache/arrow/vector/VectorUnloader.java index 8e9ff6d462c..996524521cb 100644 --- a/java/vector/src/main/java/org/apache/arrow/vector/VectorUnloader.java +++ b/java/vector/src/main/java/org/apache/arrow/vector/VectorUnloader.java @@ -29,9 +29,17 @@ public class VectorUnloader { private final VectorSchemaRoot root; + private final boolean includeNullCount; + private final boolean alignBuffers; public VectorUnloader(VectorSchemaRoot root) { + this(root, true, true); + } + + public VectorUnloader(VectorSchemaRoot root, boolean includeNullCount, boolean alignBuffers) { this.root = root; + this.includeNullCount = includeNullCount; + this.alignBuffers = alignBuffers; } public ArrowRecordBatch getRecordBatch() { @@ -40,12 +48,12 @@ public ArrowRecordBatch getRecordBatch() { for (FieldVector vector : root.getFieldVectors()) { appendNodes(vector, nodes, buffers); } - return new ArrowRecordBatch(root.getRowCount(), nodes, buffers); + return new ArrowRecordBatch(root.getRowCount(), nodes, buffers, alignBuffers); } private void appendNodes(FieldVector vector, List nodes, List buffers) { Accessor accessor = vector.getAccessor(); - nodes.add(new ArrowFieldNode(accessor.getValueCount(), accessor.getNullCount())); + nodes.add(new ArrowFieldNode(accessor.getValueCount(), includeNullCount ? accessor.getNullCount() : -1)); List fieldBuffers = vector.getFieldBuffers(); List expectedBuffers = vector.getField().getTypeLayout().getVectorTypes(); if (fieldBuffers.size() != expectedBuffers.size()) { diff --git a/java/vector/src/main/java/org/apache/arrow/vector/schema/ArrowRecordBatch.java b/java/vector/src/main/java/org/apache/arrow/vector/schema/ArrowRecordBatch.java index 6ef514e568d..6a716fa138a 100644 --- a/java/vector/src/main/java/org/apache/arrow/vector/schema/ArrowRecordBatch.java +++ b/java/vector/src/main/java/org/apache/arrow/vector/schema/ArrowRecordBatch.java @@ -48,12 +48,16 @@ public class ArrowRecordBatch implements ArrowMessage { private boolean closed = false; + public ArrowRecordBatch(int length, List nodes, List buffers) { + this(length, nodes, buffers, true); + } + /** * @param length how many rows in this batch * @param nodes field level info * @param buffers will be retained until this recordBatch is closed */ - public ArrowRecordBatch(int length, List nodes, List buffers) { + public ArrowRecordBatch(int length, List nodes, List buffers, boolean alignBuffers) { super(); this.length = length; this.nodes = nodes; @@ -66,7 +70,7 @@ public ArrowRecordBatch(int length, List nodes, List b arrowBuffers.add(new ArrowBuffer(0, offset, size)); LOGGER.debug(String.format("Buffer in RecordBatch at %d, length: %d", offset, size)); offset += size; - if (offset % 8 != 0) { // align on 8 byte boundaries + if (alignBuffers && offset % 8 != 0) { // align on 8 byte boundaries offset += 8 - (offset % 8); } }