Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 9602D200C8C for ; Tue, 23 May 2017 01:06:41 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 94663160BD4; Mon, 22 May 2017 23:06:41 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id E0B17160BBF for ; Tue, 23 May 2017 01:06:39 +0200 (CEST) Received: (qmail 82950 invoked by uid 500); 22 May 2017 23:06:39 -0000 Mailing-List: contact commits-help@arrow.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@arrow.apache.org Delivered-To: mailing list commits@arrow.apache.org Received: (qmail 82939 invoked by uid 99); 22 May 2017 23:06:38 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 22 May 2017 23:06:38 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 4195CDFC2E; Mon, 22 May 2017 23:06:38 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: julien@apache.org To: commits@arrow.apache.org Message-Id: X-Mailer: ASF-Git Admin Mailer Subject: arrow git commit: ARROW-1049: [java] vector template cleanup Date: Mon, 22 May 2017 23:06:38 +0000 (UTC) archived-at: Mon, 22 May 2017 23:06:41 -0000 Repository: arrow Updated Branches: refs/heads/master 9d9ffa886 -> d1671e63e ARROW-1049: [java] vector template cleanup Author: Julien Le Dem Closes #703 from julienledem/template_cleanup and squashes the following commits: d67cb7e [Julien Le Dem] remove duplicated code f17e8cd [Julien Le Dem] template cleanup Project: http://git-wip-us.apache.org/repos/asf/arrow/repo Commit: http://git-wip-us.apache.org/repos/asf/arrow/commit/d1671e63 Tree: http://git-wip-us.apache.org/repos/asf/arrow/tree/d1671e63 Diff: http://git-wip-us.apache.org/repos/asf/arrow/diff/d1671e63 Branch: refs/heads/master Commit: d1671e63e03946f39340c7ae62e65daac5ced395 Parents: 9d9ffa8 Author: Julien Le Dem Authored: Mon May 22 16:06:33 2017 -0700 Committer: Julien Le Dem Committed: Mon May 22 16:06:33 2017 -0700 ---------------------------------------------------------------------- .../src/main/codegen/data/ValueVectorTypes.tdd | 2 +- .../codegen/templates/AbstractFieldWriter.java | 6 - .../AbstractPromotableFieldWriter.java | 6 - .../main/codegen/templates/ComplexWriters.java | 11 - .../codegen/templates/FixedValueVectors.java | 224 ++++--------------- .../codegen/templates/HolderReaderImpl.java | 134 +++-------- .../codegen/templates/NullableValueVectors.java | 31 +-- .../main/codegen/templates/UnionListWriter.java | 35 ++- .../src/main/codegen/templates/UnionReader.java | 41 ++-- .../src/main/codegen/templates/UnionVector.java | 68 +++--- .../src/main/codegen/templates/UnionWriter.java | 32 +-- .../main/codegen/templates/ValueHolders.java | 2 +- .../templates/VariableLengthVectors.java | 11 +- 13 files changed, 185 insertions(+), 418 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/arrow/blob/d1671e63/java/vector/src/main/codegen/data/ValueVectorTypes.tdd ---------------------------------------------------------------------- diff --git a/java/vector/src/main/codegen/data/ValueVectorTypes.tdd b/java/vector/src/main/codegen/data/ValueVectorTypes.tdd index 4d8c99e..970d887 100644 --- a/java/vector/src/main/codegen/data/ValueVectorTypes.tdd +++ b/java/vector/src/main/codegen/data/ValueVectorTypes.tdd @@ -118,7 +118,7 @@ maxPrecisionDigits: 38, nDecimalDigits: 4, friendlyType: "BigDecimal", typeParams: [ {name: "scale", type: "int"}, { name: "precision", type: "int"}], arrowType: "org.apache.arrow.vector.types.pojo.ArrowType.Decimal", - fields: [{name: "start", type: "int"}, {name: "buffer", type: "ArrowBuf"}, {name: "scale", type: "int", include: false}, {name: "precision", type: "int", include: false}] + fields: [{name: "start", type: "int"}, {name: "buffer", type: "ArrowBuf"}] } ] }, http://git-wip-us.apache.org/repos/asf/arrow/blob/d1671e63/java/vector/src/main/codegen/templates/AbstractFieldWriter.java ---------------------------------------------------------------------- diff --git a/java/vector/src/main/codegen/templates/AbstractFieldWriter.java b/java/vector/src/main/codegen/templates/AbstractFieldWriter.java index 65bcc05..da8e4f5 100644 --- a/java/vector/src/main/codegen/templates/AbstractFieldWriter.java +++ b/java/vector/src/main/codegen/templates/AbstractFieldWriter.java @@ -58,15 +58,9 @@ abstract class AbstractFieldWriter extends AbstractBaseWriter implements FieldWr fail("${name}"); } - <#if minor.class == "Decimal"> - public void write${minor.class}(int start, ArrowBuf buffer) { - fail("${name}"); - } - <#else> public void write${minor.class}(<#list fields as field>${field.type} ${field.name}<#if field_has_next>, ) { fail("${name}"); } - http://git-wip-us.apache.org/repos/asf/arrow/blob/d1671e63/java/vector/src/main/codegen/templates/AbstractPromotableFieldWriter.java ---------------------------------------------------------------------- diff --git a/java/vector/src/main/codegen/templates/AbstractPromotableFieldWriter.java b/java/vector/src/main/codegen/templates/AbstractPromotableFieldWriter.java index 636b305..228c2c5 100644 --- a/java/vector/src/main/codegen/templates/AbstractPromotableFieldWriter.java +++ b/java/vector/src/main/codegen/templates/AbstractPromotableFieldWriter.java @@ -78,15 +78,9 @@ abstract class AbstractPromotableFieldWriter extends AbstractFieldWriter { getWriter(MinorType.${name?upper_case}).write(holder); } - <#if minor.class == "Decimal"> - public void write${minor.class}(int start, ArrowBuf buffer) { - getWriter(MinorType.${name?upper_case}).write${minor.class}(start, buffer); - } - <#else> public void write${minor.class}(<#list fields as field>${field.type} ${field.name}<#if field_has_next>, ) { getWriter(MinorType.${name?upper_case}).write${minor.class}(<#list fields as field>${field.name}<#if field_has_next>, ); } - public void writeNull() { http://git-wip-us.apache.org/repos/asf/arrow/blob/d1671e63/java/vector/src/main/codegen/templates/ComplexWriters.java ---------------------------------------------------------------------- diff --git a/java/vector/src/main/codegen/templates/ComplexWriters.java b/java/vector/src/main/codegen/templates/ComplexWriters.java index c23b89d..8ebecf3 100644 --- a/java/vector/src/main/codegen/templates/ComplexWriters.java +++ b/java/vector/src/main/codegen/templates/ComplexWriters.java @@ -111,17 +111,10 @@ public class ${eName}WriterImpl extends AbstractFieldWriter { vector.getMutator().setValueCount(idx()+1); } - <#if minor.class == "Decimal"> - public void writeDecimal(int start, ArrowBuf buffer) { - mutator.setSafe(idx(), 1, start, buffer); - vector.getMutator().setValueCount(idx()+1); - } - <#else> public void write${minor.class}(<#list fields as field>${field.type} ${field.name}<#if field_has_next>, ) { mutator.setSafe(idx()<#if mode == "Nullable">, 1<#list fields as field><#if field.include!true >, ${field.name}); vector.getMutator().setValueCount(idx()+1); } - <#if mode == "Nullable"> @@ -146,11 +139,7 @@ package org.apache.arrow.vector.complex.writer; public interface ${eName}Writer extends BaseWriter { public void write(${minor.class}Holder h); - <#if minor.class == "Decimal"> - public void writeDecimal(int start, ArrowBuf buffer); - <#else> public void write${minor.class}(<#list fields as field>${field.type} ${field.name}<#if field_has_next>, ); - } http://git-wip-us.apache.org/repos/asf/arrow/blob/d1671e63/java/vector/src/main/codegen/templates/FixedValueVectors.java ---------------------------------------------------------------------- diff --git a/java/vector/src/main/codegen/templates/FixedValueVectors.java b/java/vector/src/main/codegen/templates/FixedValueVectors.java index 5d80b66..395417b 100644 --- a/java/vector/src/main/codegen/templates/FixedValueVectors.java +++ b/java/vector/src/main/codegen/templates/FixedValueVectors.java @@ -56,7 +56,7 @@ public final class ${className} extends BaseDataValueVector implements FixedWidt private int allocationMonitor = 0; <#if minor.typeParams??> - <#list minor.typeParams as typeParam> + <#list minor.typeParams as typeParam> private final ${typeParam.type} ${typeParam.name}; @@ -67,7 +67,6 @@ public final class ${className} extends BaseDataValueVector implements FixedWidt } <#else> - public ${className}(String name, BufferAllocator allocator) { super(name, allocator); } @@ -166,7 +165,7 @@ public final class ${className} extends BaseDataValueVector implements FixedWidt allocationMonitor = 0; zeroVector(); super.reset(); - } + } private void allocateBytes(final long size) { if (size > MAX_ALLOCATION_SIZE) { @@ -180,11 +179,11 @@ public final class ${className} extends BaseDataValueVector implements FixedWidt allocationSizeInBytes = curSize; } -/** - * Allocate new buffer with double capacity, and copy data into the new buffer. Replace vector's buffer with new buffer, and release old one - * - * @throws org.apache.arrow.memory.OutOfMemoryException if it can't allocate the new buffer - */ + /** + * Allocate new buffer with double capacity, and copy data into the new buffer. Replace vector's buffer with new buffer, and release old one + * + * @throws org.apache.arrow.memory.OutOfMemoryException if it can't allocate the new buffer + */ public void reAlloc() { final long newAllocationSize = allocationSizeInBytes * 2L; if (newAllocationSize > MAX_ALLOCATION_SIZE) { @@ -311,76 +310,12 @@ public final class ${className} extends BaseDataValueVector implements FixedWidt } <#if (type.width > 8 || minor.class == "IntervalDay")> - public ${minor.javaType!type.javaType} get(int index) { return data.slice(index * ${type.width}, ${type.width}); } - <#if (minor.class == "Interval")> - public void get(int index, ${minor.class}Holder holder){ - - final int offsetIndex = index * ${type.width}; - holder.months = data.getInt(offsetIndex); - holder.days = data.getInt(offsetIndex + ${minor.daysOffset}); - holder.milliseconds = data.getInt(offsetIndex + ${minor.millisecondsOffset}); - } - - public void get(int index, Nullable${minor.class}Holder holder){ - final int offsetIndex = index * ${type.width}; - holder.isSet = 1; - holder.months = data.getInt(offsetIndex); - holder.days = data.getInt(offsetIndex + ${minor.daysOffset}); - holder.milliseconds = data.getInt(offsetIndex + ${minor.millisecondsOffset}); - } - - @Override - public ${friendlyType} getObject(int index) { - final int offsetIndex = index * ${type.width}; - final int months = data.getInt(offsetIndex); - final int days = data.getInt(offsetIndex + ${minor.daysOffset}); - final int millis = data.getInt(offsetIndex + ${minor.millisecondsOffset}); - final Period p = new Period(); - return p.plusMonths(months).plusDays(days).plusMillis(millis); - } - - public StringBuilder getAsStringBuilder(int index) { - - final int offsetIndex = index * ${type.width}; - - int months = data.getInt(offsetIndex); - final int days = data.getInt(offsetIndex + ${minor.daysOffset}); - int millis = data.getInt(offsetIndex + ${minor.millisecondsOffset}); - - final int years = (months / org.apache.arrow.vector.util.DateUtility.yearsToMonths); - months = (months % org.apache.arrow.vector.util.DateUtility.yearsToMonths); - - final int hours = millis / (org.apache.arrow.vector.util.DateUtility.hoursToMillis); - millis = millis % (org.apache.arrow.vector.util.DateUtility.hoursToMillis); - - final int minutes = millis / (org.apache.arrow.vector.util.DateUtility.minutesToMillis); - millis = millis % (org.apache.arrow.vector.util.DateUtility.minutesToMillis); - - final long seconds = millis / (org.apache.arrow.vector.util.DateUtility.secondsToMillis); - millis = millis % (org.apache.arrow.vector.util.DateUtility.secondsToMillis); - - final String yearString = (Math.abs(years) == 1) ? " year " : " years "; - final String monthString = (Math.abs(months) == 1) ? " month " : " months "; - final String dayString = (Math.abs(days) == 1) ? " day " : " days "; - - - return(new StringBuilder(). - append(years).append(yearString). - append(months).append(monthString). - append(days).append(dayString). - append(hours).append(":"). - append(minutes).append(":"). - append(seconds).append("."). - append(millis)); - } - - <#elseif (minor.class == "IntervalDay")> + <#if (minor.class == "IntervalDay")> public void get(int index, ${minor.class}Holder holder){ - final int offsetIndex = index * ${type.width}; holder.days = data.getInt(offsetIndex); holder.milliseconds = data.getInt(offsetIndex + ${minor.millisecondsOffset}); @@ -402,7 +337,6 @@ public final class ${className} extends BaseDataValueVector implements FixedWidt return p.plusDays(days).plusMillis(millis); } - public StringBuilder getAsStringBuilder(int index) { final int offsetIndex = index * ${type.width}; @@ -428,8 +362,7 @@ public final class ${className} extends BaseDataValueVector implements FixedWidt append(millis)); } - <#elseif minor.class == "Decimal"> - + <#elseif minor.class == "Decimal"> public void get(int index, ${minor.class}Holder holder) { holder.start = index * ${type.width}; holder.buffer = data; @@ -450,7 +383,7 @@ public final class ${className} extends BaseDataValueVector implements FixedWidt return org.apache.arrow.vector.util.DecimalUtility.getBigDecimalFromArrowBuf(data, ${type.width} * index, scale); } - <#else> + <#else> public void get(int index, ${minor.class}Holder holder){ holder.buffer = data; holder.start = index * ${type.width}; @@ -467,44 +400,35 @@ public final class ${className} extends BaseDataValueVector implements FixedWidt return data.slice(index * ${type.width}, ${type.width}) } - + <#else> <#-- type.width <= 8 --> public ${minor.javaType!type.javaType} get(int index) { return data.get${(minor.javaType!type.javaType)?cap_first}(index * ${type.width}); } - - <#if type.width == 4> + <#if type.width == 4> public long getTwoAsLong(int index) { return data.getLong(index * ${type.width}); } - - - <#if minor.class == "DateDay" || - minor.class == "TimeSec" || - minor.class == "TimeMicro" || - minor.class == "TimeNano"> + + <#if minor.class == "DateDay" || + minor.class == "TimeSec" || + minor.class == "TimeMicro" || + minor.class == "TimeNano"> @Override public ${friendlyType} getObject(int index) { return get(index); } - <#elseif minor.class == "DateMilli"> + <#elseif minor.class == "DateMilli" || minor.class == "TimeMilli" || minor.class == "TimeStampMilli"> @Override public ${friendlyType} getObject(int index) { - org.joda.time.LocalDateTime date = new org.joda.time.LocalDateTime(get(index), org.joda.time.DateTimeZone.UTC); - return date; + org.joda.time.LocalDateTime ldt = new org.joda.time.LocalDateTime(get(index), org.joda.time.DateTimeZone.UTC); + return ldt; } - <#elseif minor.class == "TimeMilli"> - @Override - public ${friendlyType} getObject(int index) { - org.joda.time.LocalDateTime time = new org.joda.time.LocalDateTime(get(index), org.joda.time.DateTimeZone.UTC); - return time; - } - - <#elseif minor.class == "TimeStampSec"> + <#elseif minor.class == "TimeStampSec"> @Override public ${friendlyType} getObject(int index) { long secs = java.util.concurrent.TimeUnit.SECONDS.toMillis(get(index)); @@ -512,14 +436,7 @@ public final class ${className} extends BaseDataValueVector implements FixedWidt return date; } - <#elseif minor.class == "TimeStampMilli"> - @Override - public ${friendlyType} getObject(int index) { - org.joda.time.LocalDateTime date = new org.joda.time.LocalDateTime(get(index), org.joda.time.DateTimeZone.UTC); - return date; - } - - <#elseif minor.class == "TimeStampMicro"> + <#elseif minor.class == "TimeStampMicro"> @Override public ${friendlyType} getObject(int index) { // value is truncated when converting microseconds to milliseconds in order to use DateTime type @@ -528,7 +445,7 @@ public final class ${className} extends BaseDataValueVector implements FixedWidt return date; } - <#elseif minor.class == "TimeStampNano"> + <#elseif minor.class == "TimeStampNano"> @Override public ${friendlyType} getObject(int index) { // value is truncated when converting nanoseconds to milliseconds in order to use DateTime type @@ -537,7 +454,7 @@ public final class ${className} extends BaseDataValueVector implements FixedWidt return date; } - <#elseif minor.class == "IntervalYear"> + <#elseif minor.class == "IntervalYear"> @Override public ${friendlyType} getObject(int index) { @@ -550,7 +467,6 @@ public final class ${className} extends BaseDataValueVector implements FixedWidt } public StringBuilder getAsStringBuilder(int index) { - int months = data.getInt(index); final int years = (months / org.apache.arrow.vector.util.DateUtility.yearsToMonths); @@ -564,15 +480,7 @@ public final class ${className} extends BaseDataValueVector implements FixedWidt append(months).append(monthString)); } - <#elseif minor.class == "Decimal9" || minor.class == "Decimal18"> - @Override - public ${friendlyType} getObject(int index) { - - final BigInteger value = BigInteger.valueOf(((${type.boxedType})get(index)).${type.javaType}Value()); - return new BigDecimal(value, getField().getScale()); - } - - <#else> + <#else> @Override public ${friendlyType} getObject(int index) { return get(index); @@ -580,14 +488,9 @@ public final class ${className} extends BaseDataValueVector implements FixedWidt public ${minor.javaType!type.javaType} getPrimitiveObject(int index) { return get(index); } - - public void get(int index, ${minor.class}Holder holder){ - <#if minor.class.startsWith("Decimal")> - holder.scale = getField().getScale(); - holder.precision = getField().getPrecision(); - + public void get(int index, ${minor.class}Holder holder){ holder.value = data.get${(minor.javaType!type.javaType)?cap_first}(index * ${type.width}); } @@ -596,22 +499,22 @@ public final class ${className} extends BaseDataValueVector implements FixedWidt holder.value = data.get${(minor.javaType!type.javaType)?cap_first}(index * ${type.width}); } + <#-- type.width --> + } - <#-- type.width --> - } - - /** - * ${minor.class}.Mutator implements a mutable vector of fixed width values. Elements in the - * vector are accessed by position from the logical start of the vector. Values should be pushed - * onto the vector sequentially, but may be randomly accessed. - * The width of each element is ${type.width} byte(s) - * The equivalent Java primitive is '${minor.javaType!type.javaType}' - * - * NB: this class is automatically generated from ValueVectorTypes.tdd using FreeMarker. - */ + /** + * ${minor.class}.Mutator implements a mutable vector of fixed width values. Elements in the + * vector are accessed by position from the logical start of the vector. Values should be pushed + * onto the vector sequentially, but may be randomly accessed. + * The width of each element is ${type.width} byte(s) + * The equivalent Java primitive is '${minor.javaType!type.javaType}' + * + * NB: this class is automatically generated from FixedValueVectorTypes.tdd using FreeMarker. + */ public final class Mutator extends BaseDataValueVector.BaseMutator { private Mutator(){}; + /** * Set the element at the given index to the given value. Note that widths smaller than * 32 bits are handled by the ArrowBuf interface. @@ -619,7 +522,7 @@ public final class ${className} extends BaseDataValueVector implements FixedWidt * @param index position of the bit to set * @param value value to set */ - <#if (type.width > 8) || minor.class == "IntervalDay"> + <#if (type.width > 8) || minor.class == "IntervalDay"> public void set(int index, <#if (type.width > 4)>${minor.javaType!type.javaType}<#else>int value) { data.setBytes(index * ${type.width}, value, 0, ${type.width}); } @@ -631,38 +534,7 @@ public final class ${className} extends BaseDataValueVector implements FixedWidt data.setBytes(index * ${type.width}, value, 0, ${type.width}); } - <#if (minor.class == "Interval")> - public void set(int index, int months, int days, int milliseconds){ - final int offsetIndex = index * ${type.width}; - data.setInt(offsetIndex, months); - data.setInt((offsetIndex + ${minor.daysOffset}), days); - data.setInt((offsetIndex + ${minor.millisecondsOffset}), milliseconds); - } - - protected void set(int index, ${minor.class}Holder holder){ - set(index, holder.months, holder.days, holder.milliseconds); - } - - protected void set(int index, Nullable${minor.class}Holder holder){ - set(index, holder.months, holder.days, holder.milliseconds); - } - - public void setSafe(int index, int months, int days, int milliseconds){ - while(index >= getValueCapacity()) { - reAlloc(); - } - set(index, months, days, milliseconds); - } - - public void setSafe(int index, Nullable${minor.class}Holder holder){ - setSafe(index, holder.months, holder.days, holder.milliseconds); - } - - public void setSafe(int index, ${minor.class}Holder holder){ - setSafe(index, holder.months, holder.days, holder.milliseconds); - } - - <#elseif (minor.class == "IntervalDay")> + <#if (minor.class == "IntervalDay")> public void set(int index, int days, int milliseconds){ final int offsetIndex = index * ${type.width}; data.setInt(offsetIndex, days); @@ -672,6 +544,7 @@ public final class ${className} extends BaseDataValueVector implements FixedWidt protected void set(int index, ${minor.class}Holder holder){ set(index, holder.days, holder.milliseconds); } + protected void set(int index, Nullable${minor.class}Holder holder){ set(index, holder.days, holder.milliseconds); } @@ -691,8 +564,7 @@ public final class ${className} extends BaseDataValueVector implements FixedWidt setSafe(index, holder.days, holder.milliseconds); } - <#elseif minor.class == "Decimal"> - + <#elseif minor.class == "Decimal"> public void set(int index, ${minor.class}Holder holder){ set(index, holder.start, holder.buffer); } @@ -719,8 +591,7 @@ public final class ${className} extends BaseDataValueVector implements FixedWidt data.setBytes(index * ${type.width}, buffer, start, ${type.width}); } - <#else> - + <#else> protected void set(int index, ${minor.class}Holder holder){ set(index, holder.start, holder.buffer); } @@ -736,6 +607,7 @@ public final class ${className} extends BaseDataValueVector implements FixedWidt public void setSafe(int index, ${minor.class}Holder holder){ setSafe(index, holder.start, holder.buffer); } + public void setSafe(int index, Nullable${minor.class}Holder holder){ setSafe(index, holder.start, holder.buffer); } @@ -750,7 +622,7 @@ public final class ${className} extends BaseDataValueVector implements FixedWidt public void set(int index, Nullable${minor.class}Holder holder){ data.setBytes(index * ${type.width}, holder.buffer, holder.start, ${type.width}); } - + @Override public void generateTestData(int count) { @@ -765,7 +637,7 @@ public final class ${className} extends BaseDataValueVector implements FixedWidt } } - <#else> <#-- type.width <= 8 --> + <#else> <#-- type.width <= 8 --> public void set(int index, <#if (type.width >= 4)>${minor.javaType!type.javaType}<#else>int value) { data.set${(minor.javaType!type.javaType)?cap_first}(index * ${type.width}, value); } @@ -826,7 +698,7 @@ public final class ${className} extends BaseDataValueVector implements FixedWidt } } - <#-- type.width --> + <#-- type.width --> @Override public void setValueCount(int valueCount) { @@ -846,6 +718,6 @@ public final class ${className} extends BaseDataValueVector implements FixedWidt } } - <#-- type.major --> + <#-- type.major --> http://git-wip-us.apache.org/repos/asf/arrow/blob/d1671e63/java/vector/src/main/codegen/templates/HolderReaderImpl.java ---------------------------------------------------------------------- diff --git a/java/vector/src/main/codegen/templates/HolderReaderImpl.java b/java/vector/src/main/codegen/templates/HolderReaderImpl.java index e990fcc..471fe41 100644 --- a/java/vector/src/main/codegen/templates/HolderReaderImpl.java +++ b/java/vector/src/main/codegen/templates/HolderReaderImpl.java @@ -29,7 +29,7 @@ <#assign friendlyType = (minor.friendlyType!minor.boxedType!type.boxedType) /> <#assign safeType=friendlyType /> <#if safeType=="byte[]"><#assign safeType="ByteArray" /> -<#assign fields = minor.fields!type.fields /> +<#assign fields = minor.fields!type.fields + minor.typeParams![]/> <@pp.changeOutputFile name="/org/apache/arrow/vector/complex/impl/${holderMode}${name}HolderReaderImpl.java" /> <#include "/@includes/license.ftl" /> @@ -81,7 +81,6 @@ public class ${holderMode}${name}HolderReaderImpl extends AbstractFieldReader { <#else> return true; - } @Override @@ -101,121 +100,50 @@ public class ${holderMode}${name}HolderReaderImpl extends AbstractFieldReader { // read friendly type @Override - public ${friendlyType} read${safeType}(){ -<#if nullMode == "Nullable"> + public ${friendlyType} read${safeType}() { + <#if nullMode == "Nullable"> if (!isSet()) { return null; } - - -<#if type.major == "VarLen"> - - int length = holder.end - holder.start; - byte[] value = new byte [length]; - holder.buffer.getBytes(holder.start, value, 0, length); - - <#if minor.class == "VarBinary"> - return value; - <#elseif minor.class == "Var16Char"> - return new String(value); - <#elseif minor.class == "VarChar"> - Text text = new Text(); - text.set(value); - return text; -<#elseif minor.class == "Interval"> - Period p = new Period(); - return p.plusMonths(holder.months).plusDays(holder.days).plusMillis(holder.milliseconds); - -<#elseif minor.class == "IntervalDay"> - Period p = new Period(); - return p.plusDays(holder.days).plusMillis(holder.milliseconds); - -<#elseif minor.class == "Bit" > - return new Boolean(holder.value != 0); -<#elseif minor.class == "Decimal" > - return (BigDecimal) readSingleObject(); -<#else> - ${friendlyType} value = new ${friendlyType}(this.holder.value); - return value; - - + <#if type.major == "VarLen"> + int length = holder.end - holder.start; + byte[] value = new byte [length]; + holder.buffer.getBytes(holder.start, value, 0, length); + <#if minor.class == "VarBinary"> + return value; + <#elseif minor.class == "VarChar"> + Text text = new Text(); + text.set(value); + return text; + + <#elseif minor.class == "IntervalDay"> + Period p = new Period(); + return p.plusDays(holder.days).plusMillis(holder.milliseconds); + <#elseif minor.class == "Bit" > + return new Boolean(holder.value != 0); + <#elseif minor.class == "Decimal"> + byte[] bytes = new byte[${type.width}]; + holder.buffer.getBytes(holder.start, bytes, 0, ${type.width}); + ${friendlyType} value = new BigDecimal(new BigInteger(bytes), holder.scale); + return value; + <#else> + ${friendlyType} value = new ${friendlyType}(this.holder.value); + return value; + } @Override public Object readObject() { - return readSingleObject(); + return read${safeType}(); } - private Object readSingleObject() { -<#if nullMode == "Nullable"> - if (!isSet()) { - return null; - } - - -<#if type.major == "VarLen"> - <#if minor.class != "Decimal"> - int length = holder.end - holder.start; - byte[] value = new byte [length]; - holder.buffer.getBytes(holder.start, value, 0, length); - - -<#if minor.class == "VarBinary"> - return value; -<#elseif minor.class == "Var16Char"> - return new String(value); -<#elseif minor.class == "VarChar"> - Text text = new Text(); - text.set(value); - return text; -<#elseif minor.class == "Decimal" > - return org.apache.arrow.vector.util.DecimalUtility.getBigDecimalFromArrowBuf(holder.buffer, holder.start, holder.scale); - - -<#elseif minor.class == "Interval"> - Period p = new Period(); - return p.plusMonths(holder.months).plusDays(holder.days).plusMillis(holder.milliseconds); - -<#elseif minor.class == "IntervalDay"> - Period p = new Period(); - return p.plusDays(holder.days).plusMillis(holder.milliseconds); - -<#elseif minor.class == "Decimal28Dense" || - minor.class == "Decimal38Dense"> - return org.apache.arrow.vector.util.DecimalUtility.getBigDecimalFromDense(holder.buffer, - holder.start, - holder.nDecimalDigits, - holder.scale, - holder.maxPrecision, - holder.WIDTH); - -<#elseif minor.class == "Decimal28Sparse" || - minor.class == "Decimal38Sparse"> - return org.apache.arrow.vector.util.DecimalUtility.getBigDecimalFromSparse(holder.buffer, - holder.start, - holder.nDecimalDigits, - holder.scale); - -<#elseif minor.class == "Bit" > - return new Boolean(holder.value != 0); -<#elseif minor.class == "Decimal"> - byte[] bytes = new byte[${type.width}]; - holder.buffer.getBytes(holder.start, bytes, 0, ${type.width}); - ${friendlyType} value = new BigDecimal(new BigInteger(bytes), holder.scale); - return value; -<#else> - ${friendlyType} value = new ${friendlyType}(this.holder.value); - return value; - - } - -<#if nullMode != "Nullable"> + <#if nullMode != "Nullable"> public void copyAsValue(${minor.class?cap_first}Writer writer){ writer.write(holder); } - + } http://git-wip-us.apache.org/repos/asf/arrow/blob/d1671e63/java/vector/src/main/codegen/templates/NullableValueVectors.java ---------------------------------------------------------------------- diff --git a/java/vector/src/main/codegen/templates/NullableValueVectors.java b/java/vector/src/main/codegen/templates/NullableValueVectors.java index 3231c4c..dfd5755 100644 --- a/java/vector/src/main/codegen/templates/NullableValueVectors.java +++ b/java/vector/src/main/codegen/templates/NullableValueVectors.java @@ -470,11 +470,6 @@ public final class ${className} extends BaseDataValueVector implements <#if type public void get(int index, Nullable${minor.class}Holder holder){ vAccessor.get(index, holder); holder.isSet = bAccessor.get(index); - - <#if minor.class.startsWith("Decimal")> - holder.scale = scale; - holder.precision = precision; - } @Override @@ -486,7 +481,7 @@ public final class ${className} extends BaseDataValueVector implements <#if type } } - <#if minor.class == "Interval" || minor.class == "IntervalDay" || minor.class == "IntervalYear"> + <#if minor.class == "Interval" || minor.class == "IntervalDay"> public StringBuilder getAsStringBuilder(int index) { if (isNull(index)) { return null; @@ -628,7 +623,7 @@ public final class ${className} extends BaseDataValueVector implements <#if type } <#assign fields = minor.fields!type.fields /> - public void set(int index, int isSet<#list fields as field><#if field.include!true >, ${field.type} ${field.name}Field ){ + public void set(int index, int isSet<#list fields as field>, ${field.type} ${field.name}Field ){ final ${valuesName}.Mutator valuesMutator = values.getMutator(); <#if type.major == "VarLen"> for (int i = lastSet + 1; i < index; i++) { @@ -644,7 +639,6 @@ public final class ${className} extends BaseDataValueVector implements <#if type <#if type.major == "VarLen"> fillEmpties(index); - bits.getMutator().setSafe(index, isSet); values.getMutator().setSafe(index<#list fields as field><#if field.include!true >, ${field.name}Field); setCount++; @@ -653,7 +647,6 @@ public final class ${className} extends BaseDataValueVector implements <#if type public void setSafe(int index, Nullable${minor.class}Holder value) { - <#if type.major == "VarLen"> fillEmpties(index); @@ -664,7 +657,6 @@ public final class ${className} extends BaseDataValueVector implements <#if type } public void setSafe(int index, ${minor.class}Holder value) { - <#if type.major == "VarLen"> fillEmpties(index); @@ -674,18 +666,17 @@ public final class ${className} extends BaseDataValueVector implements <#if type <#if type.major == "VarLen">lastSet = index; } - <#if !(type.major == "VarLen" || minor.class == "Decimal28Sparse" || minor.class == "Decimal38Sparse" || minor.class == "Decimal28Dense" || minor.class == "Decimal38Dense" || minor.class == "Interval" || minor.class == "IntervalDay")> - public void setSafe(int index, ${minor.javaType!type.javaType} value) { - <#if type.major == "VarLen"> - fillEmpties(index); - - bits.getMutator().setSafeToOne(index); - values.getMutator().setSafe(index, value); - setCount++; - } + <#if !(type.major == "VarLen" || minor.class == "IntervalYear" || minor.class == "IntervalDay")> + public void setSafe(int index, ${minor.javaType!type.javaType} value) { + <#if type.major == "VarLen"> + fillEmpties(index); + + bits.getMutator().setSafeToOne(index); + values.getMutator().setSafe(index, value); + setCount++; + } - @Override public void setValueCount(int valueCount) { assert valueCount >= 0; http://git-wip-us.apache.org/repos/asf/arrow/blob/d1671e63/java/vector/src/main/codegen/templates/UnionListWriter.java ---------------------------------------------------------------------- diff --git a/java/vector/src/main/codegen/templates/UnionListWriter.java b/java/vector/src/main/codegen/templates/UnionListWriter.java index d019a1e..d6e2f9f 100644 --- a/java/vector/src/main/codegen/templates/UnionListWriter.java +++ b/java/vector/src/main/codegen/templates/UnionListWriter.java @@ -89,27 +89,23 @@ public class UnionListWriter extends AbstractFieldWriter { public void setPosition(int index) { super.setPosition(index); } - <#list vv.types as type><#list type.minor as minor><#assign name = minor.class?cap_first /> <#assign fields = minor.fields!type.fields /> <#assign uncappedName = name?uncap_first/> - + <#if uncappedName == "int" ><#assign uncappedName = "integer" /> <#if !minor.typeParams?? > @Override - public ${name}Writer <#if uncappedName == "int">integer<#else>${uncappedName}() { + public ${name}Writer ${uncappedName}() { return this; } @Override - public ${name}Writer <#if uncappedName == "int">integer<#else>${uncappedName}(String name) { -// assert inMap; + public ${name}Writer ${uncappedName}(String name) { mapName = name; - return writer.<#if uncappedName == "int">integer<#else>${uncappedName}(name); + return writer.${uncappedName}(name); } - - @Override @@ -149,33 +145,28 @@ public class UnionListWriter extends AbstractFieldWriter { @Override public void start() { -// assert inMap; writer.start(); } @Override public void end() { -// if (inMap) { writer.end(); inMap = false; -// } } - <#list vv.types as type><#list type.minor as minor><#assign name = minor.class?cap_first /> - <#assign fields = minor.fields!type.fields /> - <#assign uncappedName = name?uncap_first/> - - <#if !minor.class?starts_with("Decimal")> - + <#list vv.types as type> + <#list type.minor as minor> + <#assign name = minor.class?cap_first /> + <#assign fields = minor.fields!type.fields /> + <#assign uncappedName = name?uncap_first/> + <#if !minor.typeParams?? > @Override public void write${name}(<#list fields as field>${field.type} ${field.name}<#if field_has_next>, ) { -// assert !inMap; writer.write${name}(<#list fields as field>${field.name}<#if field_has_next>, ); writer.setPosition(writer.idx()+1); } - - - - + + + } http://git-wip-us.apache.org/repos/asf/arrow/blob/d1671e63/java/vector/src/main/codegen/templates/UnionReader.java ---------------------------------------------------------------------- diff --git a/java/vector/src/main/codegen/templates/UnionReader.java b/java/vector/src/main/codegen/templates/UnionReader.java index 0b5a209..2246fb3 100644 --- a/java/vector/src/main/codegen/templates/UnionReader.java +++ b/java/vector/src/main/codegen/templates/UnionReader.java @@ -79,13 +79,16 @@ public class UnionReader extends AbstractFieldReader { return (FieldReader) getMap(); case LIST: return (FieldReader) getList(); - <#list vv.types as type><#list type.minor as minor><#assign name = minor.class?cap_first /> - <#assign uncappedName = name?uncap_first/> - <#if !minor.class?starts_with("Decimal")> + <#list vv.types as type> + <#list type.minor as minor> + <#assign name = minor.class?cap_first /> + <#assign uncappedName = name?uncap_first/> + <#if !minor.typeParams?? > case ${name?upper_case}: return (FieldReader) get${name}(); - - + + + default: throw new UnsupportedOperationException("Unsupported type: " + MinorType.values()[typeValue]); } @@ -140,14 +143,16 @@ public class UnionReader extends AbstractFieldReader { return getReaderForIndex(idx()).size(); } - <#list vv.types as type><#list type.minor as minor><#assign name = minor.class?cap_first /> - <#assign uncappedName = name?uncap_first/> - <#assign boxedType = (minor.boxedType!type.boxedType) /> - <#assign javaType = (minor.javaType!type.javaType) /> - <#assign friendlyType = (minor.friendlyType!minor.boxedType!type.boxedType) /> - <#assign safeType=friendlyType /> - <#if safeType=="byte[]"><#assign safeType="ByteArray" /> - <#if !minor.class?starts_with("Decimal")> + <#list vv.types as type> + <#list type.minor as minor> + <#assign name = minor.class?cap_first /> + <#assign uncappedName = name?uncap_first/> + <#assign boxedType = (minor.boxedType!type.boxedType) /> + <#assign javaType = (minor.javaType!type.javaType) /> + <#assign friendlyType = (minor.friendlyType!minor.boxedType!type.boxedType) /> + <#assign safeType=friendlyType /> + <#if safeType=="byte[]"><#assign safeType="ByteArray" /> + <#if !minor.typeParams?? > private ${name}ReaderImpl ${uncappedName}Reader; @@ -167,8 +172,9 @@ public class UnionReader extends AbstractFieldReader { public void copyAsValue(${name}Writer writer){ getReaderForIndex(idx()).copyAsValue(writer); } - - + + + @Override public void copyAsValue(ListWriter writer) { @@ -184,7 +190,7 @@ public class UnionReader extends AbstractFieldReader { } } } - + public FieldReader reader(String name){ return getMap().reader(name); } @@ -197,6 +203,3 @@ public class UnionReader extends AbstractFieldReader { return getReaderForIndex(idx()).next(); } } - - - http://git-wip-us.apache.org/repos/asf/arrow/blob/d1671e63/java/vector/src/main/codegen/templates/UnionVector.java ---------------------------------------------------------------------- diff --git a/java/vector/src/main/codegen/templates/UnionVector.java b/java/vector/src/main/codegen/templates/UnionVector.java index ec42b12..aa9d34d 100644 --- a/java/vector/src/main/codegen/templates/UnionVector.java +++ b/java/vector/src/main/codegen/templates/UnionVector.java @@ -145,12 +145,13 @@ public class UnionVector implements FieldVector { } return mapVector; } - - <#list vv.types as type><#list type.minor as minor><#assign name = minor.class?cap_first /> - <#assign fields = minor.fields!type.fields /> - <#assign uncappedName = name?uncap_first/> - <#assign lowerCaseName = name?lower_case/> - <#if !minor.class?starts_with("Decimal")> + <#list vv.types as type> + <#list type.minor as minor> + <#assign name = minor.class?cap_first /> + <#assign fields = minor.fields!type.fields /> + <#assign uncappedName = name?uncap_first/> + <#assign lowerCaseName = name?lower_case/> + <#if !minor.typeParams?? > private Nullable${name}Vector ${uncappedName}Vector; @@ -167,10 +168,9 @@ public class UnionVector implements FieldVector { } return ${uncappedName}Vector; } - - - - + + + public ListVector getList() { if (listVector == null) { @@ -401,22 +401,23 @@ public class UnionVector implements FieldVector { public class Accessor extends BaseValueVector.BaseAccessor { - @Override public Object getObject(int index) { int type = typeVector.getAccessor().get(index); switch (MinorType.values()[type]) { case NULL: return null; - <#list vv.types as type><#list type.minor as minor><#assign name = minor.class?cap_first /> - <#assign fields = minor.fields!type.fields /> - <#assign uncappedName = name?uncap_first/> - <#if !minor.class?starts_with("Decimal")> + <#list vv.types as type> + <#list type.minor as minor> + <#assign name = minor.class?cap_first /> + <#assign fields = minor.fields!type.fields /> + <#assign uncappedName = name?uncap_first/> + <#if !minor.typeParams?? > case ${name?upper_case}: return get${name}Vector().getAccessor().getObject(index); - - - + + + case MAP: return getMap().getAccessor().getObject(index); case LIST: @@ -473,17 +474,20 @@ public class UnionVector implements FieldVector { writer.setPosition(index); MinorType type = reader.getMinorType(); switch (type) { - <#list vv.types as type><#list type.minor as minor><#assign name = minor.class?cap_first /> - <#assign fields = minor.fields!type.fields /> - <#assign uncappedName = name?uncap_first/> - <#if !minor.class?starts_with("Decimal")> + <#list vv.types as type> + <#list type.minor as minor> + <#assign name = minor.class?cap_first /> + <#assign fields = minor.fields!type.fields /> + <#assign uncappedName = name?uncap_first/> + <#if !minor.typeParams?? > case ${name?upper_case}: Nullable${name}Holder ${uncappedName}Holder = new Nullable${name}Holder(); reader.read(${uncappedName}Holder); setSafe(index, ${uncappedName}Holder); break; - - + + + case MAP: { ComplexCopier.copy(reader, writer); break; @@ -496,18 +500,20 @@ public class UnionVector implements FieldVector { throw new UnsupportedOperationException(); } } - - <#list vv.types as type><#list type.minor as minor><#assign name = minor.class?cap_first /> - <#assign fields = minor.fields!type.fields /> - <#assign uncappedName = name?uncap_first/> - <#if !minor.class?starts_with("Decimal")> + <#list vv.types as type> + <#list type.minor as minor> + <#assign name = minor.class?cap_first /> + <#assign fields = minor.fields!type.fields /> + <#assign uncappedName = name?uncap_first/> + <#if !minor.typeParams?? > public void setSafe(int index, Nullable${name}Holder holder) { setType(index, MinorType.${name?upper_case}); get${name}Vector().getMutator().setSafe(index, holder); } - - + + + public void setType(int index, MinorType type) { typeVector.getMutator().setSafe(index, (byte) type.ordinal()); http://git-wip-us.apache.org/repos/asf/arrow/blob/d1671e63/java/vector/src/main/codegen/templates/UnionWriter.java ---------------------------------------------------------------------- diff --git a/java/vector/src/main/codegen/templates/UnionWriter.java b/java/vector/src/main/codegen/templates/UnionWriter.java index 4a7c472..f892bac 100644 --- a/java/vector/src/main/codegen/templates/UnionWriter.java +++ b/java/vector/src/main/codegen/templates/UnionWriter.java @@ -117,26 +117,26 @@ public class UnionWriter extends AbstractFieldWriter implements FieldWriter { case LIST: return getListWriter(); <#list vv.types as type> - <#list type.minor as minor> - <#assign name = minor.class?cap_first /> - <#assign fields = minor.fields!type.fields /> - <#assign uncappedName = name?uncap_first/> - <#if !minor.typeParams??> + <#list type.minor as minor> + <#assign name = minor.class?cap_first /> + <#assign fields = minor.fields!type.fields /> + <#assign uncappedName = name?uncap_first/> + <#if !minor.typeParams??> case ${name?upper_case}: return get${name}Writer(); - - + + default: throw new UnsupportedOperationException("Unknown type: " + minorType); } } - - <#list vv.types as type><#list type.minor as minor><#assign name = minor.class?cap_first /> - <#assign fields = minor.fields!type.fields /> - <#assign uncappedName = name?uncap_first/> - - <#if !minor.typeParams?? > + <#list vv.types as type> + <#list type.minor as minor> + <#assign name = minor.class?cap_first /> + <#assign fields = minor.fields!type.fields /> + <#assign uncappedName = name?uncap_first/> + <#if !minor.typeParams?? > private ${name}Writer ${name?uncap_first}Writer; @@ -166,9 +166,9 @@ public class UnionWriter extends AbstractFieldWriter implements FieldWriter { get${name}Writer().setPosition(idx()); get${name}Writer().write${name}(<#list fields as field>${field.name}<#if field_has_next>, ); } - - - + + + public void writeNull() { } http://git-wip-us.apache.org/repos/asf/arrow/blob/d1671e63/java/vector/src/main/codegen/templates/ValueHolders.java ---------------------------------------------------------------------- diff --git a/java/vector/src/main/codegen/templates/ValueHolders.java b/java/vector/src/main/codegen/templates/ValueHolders.java index a474b69..b74d919 100644 --- a/java/vector/src/main/codegen/templates/ValueHolders.java +++ b/java/vector/src/main/codegen/templates/ValueHolders.java @@ -50,7 +50,7 @@ public final class ${className} implements ValueHolder{ <#if mode.name == "Optional">public int isSet; <#else>public final int isSet = 1; - <#assign fields = minor.fields!type.fields /> + <#assign fields = (minor.fields!type.fields) + (minor.typeParams![]) /> <#list fields as field> public ${field.type} ${field.name}; http://git-wip-us.apache.org/repos/asf/arrow/blob/d1671e63/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 f13291b..2ad7d20 100644 --- a/java/vector/src/main/codegen/templates/VariableLengthVectors.java +++ b/java/vector/src/main/codegen/templates/VariableLengthVectors.java @@ -421,23 +421,22 @@ public final class ${className} extends BaseDataValueVector implements VariableW holder.buffer = data; } - <#switch minor.class> - <#case "VarChar"> + <#case "VarChar"> @Override public ${friendlyType} getObject(int index) { Text text = new Text(); text.set(get(index)); return text; } - <#break> - <#case "Decimal"> + <#break> + <#case "Decimal"> @Override public ${friendlyType} getObject(int index) { return new BigDecimal(new BigInteger(get(index)), scale); } - <#break> - <#default> + <#break> + <#default> @Override public ${friendlyType} getObject(int index) { return get(index);