Repository: arrow Updated Branches: refs/heads/master 0f9c88f71 -> 30e03a907
ARROW-703: Fix issue where setValueCount(0) doesnât work in the case that weâve shipped vectors across the wire Author: Julien Le Dem <jul...@dremio.com> Closes #428 from julienledem/arrow_703 and squashes the following commits: 72b0f79 [Julien Le Dem] ARROW-703: Fix issue where setValueCount(0) doesnât work in the case that weâve shipped vectors across the wire Project: http://git-wip-us.apache.org/repos/asf/arrow/repo Commit: http://git-wip-us.apache.org/repos/asf/arrow/commit/30e03a90 Tree: http://git-wip-us.apache.org/repos/asf/arrow/tree/30e03a90 Diff: http://git-wip-us.apache.org/repos/asf/arrow/diff/30e03a90 Branch: refs/heads/master Commit: 30e03a90718971c2a1d773145fb042d0c2857036 Parents: 0f9c88f Author: Julien Le Dem <jul...@dremio.com> Authored: Sat Apr 15 18:26:19 2017 -0400 Committer: Wes McKinney <wes.mckin...@twosigma.com> Committed: Sat Apr 15 18:26:19 2017 -0400 ---------------------------------------------------------------------- .../templates/VariableLengthVectors.java | 23 ++++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/arrow/blob/30e03a90/java/vector/src/main/codegen/templates/VariableLengthVectors.java ---------------------------------------------------------------------- diff --git a/java/vector/src/main/codegen/templates/VariableLengthVectors.java b/java/vector/src/main/codegen/templates/VariableLengthVectors.java index bcd639a..4a460c5 100644 --- a/java/vector/src/main/codegen/templates/VariableLengthVectors.java +++ b/java/vector/src/main/codegen/templates/VariableLengthVectors.java @@ -613,16 +613,21 @@ public final class ${minor.class}Vector extends BaseDataValueVector implements V @Override public void setValueCount(int valueCount) { - final int currentByteCapacity = getByteCapacity(); - final int idx = offsetVector.getAccessor().get(valueCount); - data.writerIndex(idx); - if (valueCount > 0 && currentByteCapacity > idx * 2) { - incrementAllocationMonitor(); - } else if (allocationMonitor > 0) { - allocationMonitor = 0; + if (valueCount == 0) { + // if no values in vector, don't try to retrieve the current value count. + offsetVector.getMutator().setValueCount(0); + } else { + final int currentByteCapacity = getByteCapacity(); + final int idx = offsetVector.getAccessor().get(valueCount); + data.writerIndex(idx); + if (currentByteCapacity > idx * 2) { + incrementAllocationMonitor(); + } else if (allocationMonitor > 0) { + allocationMonitor = 0; + } + VectorTrimmer.trim(data, idx); + offsetVector.getMutator().setValueCount(valueCount+1); } - VectorTrimmer.trim(data, idx); - offsetVector.getMutator().setValueCount(valueCount == 0 ? 0 : valueCount+1); } @Override