diff --git a/format/Message.fbs b/format/Message.fbs index 657904a7032..07da862c32d 100644 --- a/format/Message.fbs +++ b/format/Message.fbs @@ -63,10 +63,9 @@ table Timestamp { timezone: string; } -table IntervalDay { -} - -table IntervalYear { +enum IntervalUnit: short { YEAR_MONTH, DAY_TIME} +table Interval { + unit: IntervalUnit; } table JSONScalar { @@ -88,8 +87,7 @@ union Type { Date, Time, Timestamp, - IntervalDay, - IntervalYear, + Interval, List, Struct_, Union, diff --git a/java/vector/src/main/codegen/data/ArrowTypes.tdd b/java/vector/src/main/codegen/data/ArrowTypes.tdd index 5cb43bed2b6..9f81f0e3800 100644 --- a/java/vector/src/main/codegen/data/ArrowTypes.tdd +++ b/java/vector/src/main/codegen/data/ArrowTypes.tdd @@ -69,12 +69,8 @@ fields: [{name: "timezone", type: "String"}] }, { - name: "IntervalDay", - fields: [] - }, - { - name: "IntervalYear", - fields: [] + name: "Interval", + fields: [{name: "unit", type: short}] } ] } diff --git a/java/vector/src/main/codegen/templates/NullableValueVectors.java b/java/vector/src/main/codegen/templates/NullableValueVectors.java index 486cfeefc7a..8f325afad39 100644 --- a/java/vector/src/main/codegen/templates/NullableValueVectors.java +++ b/java/vector/src/main/codegen/templates/NullableValueVectors.java @@ -105,9 +105,9 @@ public final class ${className} extends BaseDataValueVector implements <#if type <#elseif minor.class == "TimeStamp"> field = new Field(name, true, new org.apache.arrow.vector.types.pojo.ArrowType.Timestamp(""), null); <#elseif minor.class == "IntervalDay"> - field = new Field(name, true, new IntervalDay(), null); + field = new Field(name, true, new Interval(org.apache.arrow.flatbuf.IntervalUnit.DAY_TIME), null); <#elseif minor.class == "IntervalYear"> - field = new Field(name, true, new IntervalYear(), null); + field = new Field(name, true, new Interval(org.apache.arrow.flatbuf.IntervalUnit.YEAR_MONTH), null); <#elseif minor.class == "VarChar"> field = new Field(name, true, new Utf8(), null); <#elseif minor.class == "VarBinary"> diff --git a/java/vector/src/main/java/org/apache/arrow/vector/schema/TypeLayout.java b/java/vector/src/main/java/org/apache/arrow/vector/schema/TypeLayout.java index 885ac2ac3d7..072385a2155 100644 --- a/java/vector/src/main/java/org/apache/arrow/vector/schema/TypeLayout.java +++ b/java/vector/src/main/java/org/apache/arrow/vector/schema/TypeLayout.java @@ -31,6 +31,7 @@ import java.util.Collections; import java.util.List; +import org.apache.arrow.flatbuf.IntervalUnit; import org.apache.arrow.flatbuf.UnionMode; import org.apache.arrow.vector.types.pojo.ArrowType; import org.apache.arrow.vector.types.pojo.ArrowType.ArrowTypeVisitor; @@ -40,12 +41,11 @@ import org.apache.arrow.vector.types.pojo.ArrowType.Decimal; import org.apache.arrow.vector.types.pojo.ArrowType.FloatingPoint; import org.apache.arrow.vector.types.pojo.ArrowType.Int; -import org.apache.arrow.vector.types.pojo.ArrowType.IntervalDay; -import org.apache.arrow.vector.types.pojo.ArrowType.IntervalYear; +import org.apache.arrow.vector.types.pojo.ArrowType.Interval; import org.apache.arrow.vector.types.pojo.ArrowType.Null; +import org.apache.arrow.vector.types.pojo.ArrowType.Struct_; import org.apache.arrow.vector.types.pojo.ArrowType.Time; import org.apache.arrow.vector.types.pojo.ArrowType.Timestamp; -import org.apache.arrow.vector.types.pojo.ArrowType.Struct_; import org.apache.arrow.vector.types.pojo.ArrowType.Union; import org.apache.arrow.vector.types.pojo.ArrowType.Utf8; @@ -167,14 +167,17 @@ public TypeLayout visit(Time type) { } @Override - public TypeLayout visit(IntervalDay type) { // TODO: check size - return newFixedWidthTypeLayout(dataVector(64)); + public TypeLayout visit(Interval type) { // TODO: check size + switch (type.getUnit()) { + case IntervalUnit.DAY_TIME: + return newFixedWidthTypeLayout(dataVector(64)); + case IntervalUnit.YEAR_MONTH: + return newFixedWidthTypeLayout(dataVector(64)); + default: + throw new UnsupportedOperationException("Unknown unit " + type.getUnit()); + } } - @Override - public TypeLayout visit(IntervalYear type) { // TODO: check size - return newFixedWidthTypeLayout(dataVector(64)); - } }); return layout; } diff --git a/java/vector/src/main/java/org/apache/arrow/vector/types/Types.java b/java/vector/src/main/java/org/apache/arrow/vector/types/Types.java index 66ef7562ced..181d8353682 100644 --- a/java/vector/src/main/java/org/apache/arrow/vector/types/Types.java +++ b/java/vector/src/main/java/org/apache/arrow/vector/types/Types.java @@ -20,6 +20,7 @@ import java.util.HashMap; import java.util.Map; +import org.apache.arrow.flatbuf.IntervalUnit; import org.apache.arrow.flatbuf.Precision; import org.apache.arrow.flatbuf.Type; import org.apache.arrow.flatbuf.UnionMode; @@ -78,13 +79,12 @@ import org.apache.arrow.vector.types.pojo.ArrowType.Date; import org.apache.arrow.vector.types.pojo.ArrowType.FloatingPoint; import org.apache.arrow.vector.types.pojo.ArrowType.Int; -import org.apache.arrow.vector.types.pojo.ArrowType.IntervalDay; -import org.apache.arrow.vector.types.pojo.ArrowType.IntervalYear; +import org.apache.arrow.vector.types.pojo.ArrowType.Interval; import org.apache.arrow.vector.types.pojo.ArrowType.List; import org.apache.arrow.vector.types.pojo.ArrowType.Null; +import org.apache.arrow.vector.types.pojo.ArrowType.Struct_; import org.apache.arrow.vector.types.pojo.ArrowType.Time; import org.apache.arrow.vector.types.pojo.ArrowType.Timestamp; -import org.apache.arrow.vector.types.pojo.ArrowType.Struct_; import org.apache.arrow.vector.types.pojo.ArrowType.Union; import org.apache.arrow.vector.types.pojo.ArrowType.Utf8; import org.apache.arrow.vector.types.pojo.Field; @@ -104,8 +104,8 @@ public class Types { public static final Field DATE_FIELD = new Field("", true, Date.INSTANCE, null); public static final Field TIME_FIELD = new Field("", true, Time.INSTANCE, null); public static final Field TIMESTAMP_FIELD = new Field("", true, new Timestamp(""), null); - public static final Field INTERVALDAY_FIELD = new Field("", true, IntervalDay.INSTANCE, null); - public static final Field INTERVALYEAR_FIELD = new Field("", true, IntervalYear.INSTANCE, null); + public static final Field INTERVALDAY_FIELD = new Field("", true, new Interval(IntervalUnit.DAY_TIME), null); + public static final Field INTERVALYEAR_FIELD = new Field("", true, new Interval(IntervalUnit.YEAR_MONTH), null); public static final Field FLOAT4_FIELD = new Field("", true, new FloatingPoint(Precision.SINGLE), null); public static final Field FLOAT8_FIELD = new Field("", true, new FloatingPoint(Precision.DOUBLE), null); public static final Field LIST_FIELD = new Field("", true, List.INSTANCE, null); @@ -260,7 +260,7 @@ public FieldWriter getNewFieldWriter(ValueVector vector) { return new TimeStampWriterImpl((NullableTimeStampVector) vector); } }, - INTERVALDAY(IntervalDay.INSTANCE) { + INTERVALDAY(new Interval(IntervalUnit.DAY_TIME)) { @Override public Field getField() { return INTERVALDAY_FIELD; @@ -276,7 +276,7 @@ public FieldWriter getNewFieldWriter(ValueVector vector) { return new IntervalDayWriterImpl((NullableIntervalDayVector) vector); } }, - INTERVALYEAR(IntervalYear.INSTANCE) { + INTERVALYEAR(new Interval(IntervalUnit.YEAR_MONTH)) { @Override public Field getField() { return INTERVALYEAR_FIELD;