DRILL-749: Zero-fill the Offset Vectors buffer contents
Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/98edd626 Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/98edd626 Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/98edd626 Branch: refs/heads/master Commit: 98edd62697b52906562599a468c41a77615f1ce5 Parents: 616cc5e Author: Aditya Kishore <[email protected]> Authored: Wed May 14 17:43:10 2014 -0700 Committer: Aditya Kishore <[email protected]> Committed: Wed May 14 19:17:33 2014 -0700 ---------------------------------------------------------------------- .../main/codegen/templates/FixedValueVectors.java | 15 +++++++++++---- .../codegen/templates/NullableValueVectors.java | 9 ++++++++- .../codegen/templates/RepeatedValueVectors.java | 5 ++++- .../codegen/templates/VariableLengthVectors.java | 4 ++-- .../org/apache/drill/exec/vector/BitVector.java | 16 ++++++++++------ .../apache/drill/exec/vector/FixedWidthVector.java | 5 +++++ 6 files changed, 40 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/98edd626/exec/java-exec/src/main/codegen/templates/FixedValueVectors.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/codegen/templates/FixedValueVectors.java b/exec/java-exec/src/main/codegen/templates/FixedValueVectors.java index 7193c29..ca96e32 100644 --- a/exec/java-exec/src/main/codegen/templates/FixedValueVectors.java +++ b/exec/java-exec/src/main/codegen/templates/FixedValueVectors.java @@ -94,16 +94,23 @@ public final class ${minor.class}Vector extends BaseDataValueVector implements F return true; } - /** - * Allocate a new buffer that supports setting at least the provided number of values. May actually be sized bigger depending on underlying buffer rounding size. Must be called prior to using the ValueVector. - * @param valueCount + /** + * Allocate a new buffer that supports setting at least the provided number of values. May actually be sized bigger depending on underlying buffer rounding size. Must be called prior to using the ValueVector. + * @param valueCount */ public void allocateNew(int valueCount) { clear(); this.data = allocator.buffer(valueCount * ${type.width}); this.data.readerIndex(0); } - + + /** + * {@inheritDoc} + */ + public void zeroVector() { + data.setZero(0, data.capacity()); + } + @Override public SerializedField getMetadata() { return getMetadataBuilder() http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/98edd626/exec/java-exec/src/main/codegen/templates/NullableValueVectors.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/codegen/templates/NullableValueVectors.java b/exec/java-exec/src/main/codegen/templates/NullableValueVectors.java index 08eea6e..6086c60 100644 --- a/exec/java-exec/src/main/codegen/templates/NullableValueVectors.java +++ b/exec/java-exec/src/main/codegen/templates/NullableValueVectors.java @@ -176,7 +176,14 @@ public final class ${className} extends BaseValueVector implements <#if type.maj mutator.reset(); accessor.reset(); } - + + /** + * {@inheritDoc} + */ + public void zeroVector() { + this.values.zeroVector(); + } + @Override public int load(int valueCount, ByteBuf buf){ clear(); http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/98edd626/exec/java-exec/src/main/codegen/templates/RepeatedValueVectors.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/codegen/templates/RepeatedValueVectors.java b/exec/java-exec/src/main/codegen/templates/RepeatedValueVectors.java index cac87c5..6570113 100644 --- a/exec/java-exec/src/main/codegen/templates/RepeatedValueVectors.java +++ b/exec/java-exec/src/main/codegen/templates/RepeatedValueVectors.java @@ -164,6 +164,7 @@ package org.apache.drill.exec.vector; public boolean allocateNewSafe(){ if(!offsets.allocateNewSafe()) return false; + offsets.zeroVector(); if(!values.allocateNewSafe()) return false; mutator.reset(); accessor.reset(); @@ -173,6 +174,7 @@ package org.apache.drill.exec.vector; public void allocateNew() { offsets.allocateNew(); + offsets.zeroVector(); values.allocateNew(); mutator.reset(); accessor.reset(); @@ -192,7 +194,7 @@ package org.apache.drill.exec.vector; public void allocateNew(int totalBytes, int parentValueCount, int childValueCount) { offsets.allocateNew(parentValueCount+1); - offsets.getMutator().set(0,0); + offsets.zeroVector(); values.allocateNew(totalBytes, childValueCount); mutator.reset(); accessor.reset(); @@ -235,6 +237,7 @@ package org.apache.drill.exec.vector; public void allocateNew(int parentValueCount, int childValueCount) { clear(); offsets.allocateNew(parentValueCount+1); + offsets.zeroVector(); values.allocateNew(childValueCount); mutator.reset(); accessor.reset(); http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/98edd626/exec/java-exec/src/main/codegen/templates/VariableLengthVectors.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/codegen/templates/VariableLengthVectors.java b/exec/java-exec/src/main/codegen/templates/VariableLengthVectors.java index c2effbd..990ae1d 100644 --- a/exec/java-exec/src/main/codegen/templates/VariableLengthVectors.java +++ b/exec/java-exec/src/main/codegen/templates/VariableLengthVectors.java @@ -238,7 +238,7 @@ public final class ${minor.class}Vector extends BaseDataValueVector implements V if(!offsetVector.allocateNewSafe()){ return false; } - offsetVector.getMutator().set(0,0); + offsetVector.zeroVector(); return true; } @@ -248,7 +248,7 @@ public final class ${minor.class}Vector extends BaseDataValueVector implements V data = allocator.buffer(totalBytes); data.readerIndex(0); offsetVector.allocateNew(valueCount+1); - offsetVector.getMutator().set(0,0); + offsetVector.zeroVector(); } public Accessor getAccessor(){ http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/98edd626/exec/java-exec/src/main/java/org/apache/drill/exec/vector/BitVector.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/vector/BitVector.java b/exec/java-exec/src/main/java/org/apache/drill/exec/vector/BitVector.java index 597b0f1..323eae7 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/vector/BitVector.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/vector/BitVector.java @@ -84,9 +84,7 @@ public final class BitVector extends BaseDataValueVector implements FixedWidthVe int valueSize = getSizeFromCount(allocationValueCount); data = allocator.buffer(valueSize); if(data == null) return false; - for (int i = 0; i < valueSize; i++) { - data.setByte(i, 0); - } + zeroVector(); return true; } @@ -101,9 +99,15 @@ public final class BitVector extends BaseDataValueVector implements FixedWidthVe valueCapacity = valueCount; int valueSize = getSizeFromCount(valueCount); data = allocator.buffer(valueSize); - for (int i = 0; i < valueSize; i++) { - data.setByte(i, 0); - } + zeroVector(); + } + + /** + * {@inheritDoc} + */ + @Override + public void zeroVector() { + data.setZero(0, data.capacity()); } @Override http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/98edd626/exec/java-exec/src/main/java/org/apache/drill/exec/vector/FixedWidthVector.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/vector/FixedWidthVector.java b/exec/java-exec/src/main/java/org/apache/drill/exec/vector/FixedWidthVector.java index d085a0b..c5e1ae7 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/vector/FixedWidthVector.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/vector/FixedWidthVector.java @@ -38,4 +38,9 @@ public interface FixedWidthVector extends ValueVector{ public abstract Mutator getMutator(); + + /** + * Zero out the underlying buffer backing this vector. + */ + public void zeroVector(); }
