Skip to content

Commit

Permalink
DX-100503:added tests and missed classes
Browse files Browse the repository at this point in the history
  • Loading branch information
xxlaykxx committed Feb 13, 2025
1 parent c3c97ea commit e87f922
Show file tree
Hide file tree
Showing 10 changed files with 165 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,11 @@ public static Stream<Arguments> data() {
() -> rootAllocatorTestExtension.createTimeStampMilliTZVector(ASIA_BANGKOK),
"TimeStampMilliTZVector",
ASIA_BANGKOK),
Arguments.of(
(Supplier<TimeStampVector>)
() -> rootAllocatorTestExtension.createTimeStampWithPrecisionVector(),
"TimeStampWithPrecisionVector",
null),
Arguments.of(
(Supplier<TimeStampVector>) () -> rootAllocatorTestExtension.createTimeStampSecVector(),
"TimeStampSecVector",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
import org.apache.arrow.vector.TimeStampNanoVector;
import org.apache.arrow.vector.TimeStampSecTZVector;
import org.apache.arrow.vector.TimeStampSecVector;
import org.apache.arrow.vector.TimeStampWithPrecisionVector;
import org.apache.arrow.vector.TinyIntVector;
import org.apache.arrow.vector.UInt1Vector;
import org.apache.arrow.vector.UInt2Vector;
Expand All @@ -60,6 +61,8 @@
import org.apache.arrow.vector.complex.impl.UnionFixedSizeListWriter;
import org.apache.arrow.vector.complex.impl.UnionLargeListWriter;
import org.apache.arrow.vector.complex.impl.UnionListWriter;
import org.apache.arrow.vector.types.pojo.ArrowType.TimestampWithPrecision;
import org.apache.arrow.vector.types.pojo.FieldType;
import org.junit.jupiter.api.extension.AfterAllCallback;
import org.junit.jupiter.api.extension.BeforeAllCallback;
import org.junit.jupiter.api.extension.ExtensionContext;
Expand Down Expand Up @@ -630,6 +633,18 @@ public TimeStampMilliTZVector createTimeStampMilliTZVector(String timeZone) {
return valueVector;
}

public TimeStampWithPrecisionVector createTimeStampWithPrecisionVector() {
TimeStampWithPrecisionVector valueVector =
new TimeStampWithPrecisionVector(
"", FieldType.nullable(new TimestampWithPrecision(9, null)), this.getRootAllocator());
valueVector.allocateNew(2);
valueVector.setSafe(0, TimeUnit.MILLISECONDS.toNanos(1625702400000L));
valueVector.setSafe(1, TimeUnit.MILLISECONDS.toNanos(1625788800000L));
valueVector.setValueCount(2);

return valueVector;
}

public TimeStampSecVector createTimeStampSecVector() {
TimeStampSecVector valueVector = new TimeStampSecVector("", this.getRootAllocator());
valueVector.allocateNew(2);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,8 @@ public static void generateTestData(final ValueVector vector, final int valueCou
writeTimeStampData((TimeStampMilliVector) vector, valueCount);
} else if (vector instanceof TimeStampNanoVector) {
writeTimeStampData((TimeStampNanoVector) vector, valueCount);
} else if (vector instanceof TimeStampWithPrecisionVector) {
writeTimeStampData((TimeStampWithPrecisionVector) vector, valueCount);
} else if (vector instanceof TimeStampSecTZVector) {
writeTimeStampData((TimeStampSecTZVector) vector, valueCount);
} else if (vector instanceof TimeStampMicroTZVector) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -808,6 +808,7 @@ private List<ArrowBuf> readIntoBuffer(
case TIMENANO:
reader = helper.INT8;
break;
case TIMESTAMPWITHPRECISION:
case TIMESTAMPNANO:
case TIMESTAMPMICRO:
case TIMESTAMPMILLI:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@
import org.apache.arrow.vector.TimeStampNanoVector;
import org.apache.arrow.vector.TimeStampSecTZVector;
import org.apache.arrow.vector.TimeStampSecVector;
import org.apache.arrow.vector.TimeStampWithPrecisionVector;
import org.apache.arrow.vector.TinyIntVector;
import org.apache.arrow.vector.TypeLayout;
import org.apache.arrow.vector.UInt1Vector;
Expand Down Expand Up @@ -507,6 +508,9 @@ private void writeValueToGenerator(
case TIMESTAMPNANO:
generator.writeNumber(TimeStampNanoVector.get(buffer, index));
break;
case TIMESTAMPWITHPRECISION:
generator.writeNumber(TimeStampWithPrecisionVector.get(buffer, index));
break;
case TIMESTAMPSECTZ:
generator.writeNumber(TimeStampSecTZVector.get(buffer, index));
break;
Expand Down
70 changes: 70 additions & 0 deletions java/vector/src/main/java/org/apache/arrow/vector/table/Row.java
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
import org.apache.arrow.vector.TimeStampNanoVector;
import org.apache.arrow.vector.TimeStampSecTZVector;
import org.apache.arrow.vector.TimeStampSecVector;
import org.apache.arrow.vector.TimeStampWithPrecisionVector;
import org.apache.arrow.vector.TinyIntVector;
import org.apache.arrow.vector.UInt1Vector;
import org.apache.arrow.vector.UInt2Vector;
Expand Down Expand Up @@ -93,6 +94,7 @@
import org.apache.arrow.vector.holders.NullableTimeStampNanoTZHolder;
import org.apache.arrow.vector.holders.NullableTimeStampSecHolder;
import org.apache.arrow.vector.holders.NullableTimeStampSecTZHolder;
import org.apache.arrow.vector.holders.NullableTimeStampWithPrecisionHolder;
import org.apache.arrow.vector.holders.NullableTinyIntHolder;
import org.apache.arrow.vector.holders.NullableUInt1Holder;
import org.apache.arrow.vector.holders.NullableUInt2Holder;
Expand Down Expand Up @@ -1100,6 +1102,74 @@ public void getTimeStampSecTZ(int columnIndex, NullableTimeStampSecTZHolder hold
vector.get(rowNumber, holder);
}

/**
* Returns a long from the column of the given name at the current row. An
* IllegalArgumentException is thrown if the column is not present, and a ClassCastException is
* thrown if it is present but has a different type
*/
public long getTimeStampWithPrecision(String columnName) {
TimeStampWithPrecisionVector vector =
(TimeStampWithPrecisionVector) table.getVector(columnName);
return vector.get(rowNumber);
}

/**
* Returns a long from the column with the given index at the current row. An
* IllegalArgumentException is thrown if the column is not present, and a ClassCastException is
* thrown if it is present but has a different type
*/
public long getTimeStampWithPrecision(int columnIndex) {
TimeStampWithPrecisionVector vector =
(TimeStampWithPrecisionVector) table.getVector(columnIndex);
return vector.get(rowNumber);
}

/**
* Updates the holder with the value from the column of the given name at the current row. An
* IllegalArgumentException is thrown if the column is not present, and a ClassCastException is
* thrown if it is present but has a different type
*/
public void getTimeStampWithPrecision(
String columnName, NullableTimeStampWithPrecisionHolder holder) {
TimeStampWithPrecisionVector vector =
(TimeStampWithPrecisionVector) table.getVector(columnName);
vector.get(rowNumber, holder);
}

/**
* Updates the holder with the value from the column with the given index at the current row. An
* IllegalArgumentException is thrown if the column is not present, and a ClassCastException is
* thrown if it is present but has a different type
*/
public void getTimeStampWithPrecision(
int columnIndex, NullableTimeStampWithPrecisionHolder holder) {
TimeStampWithPrecisionVector vector =
(TimeStampWithPrecisionVector) table.getVector(columnIndex);
vector.get(rowNumber, holder);
}

/**
* Returns a LocalDateTime from the column of the given name at the current row. An
* IllegalArgumentException is thrown if the column is not present, and a ClassCastException is
* thrown if it is present but has a different type
*/
public LocalDateTime getTimeStampWithPrecisionObj(String columnName) {
TimeStampWithPrecisionVector vector =
(TimeStampWithPrecisionVector) table.getVector(columnName);
return vector.getObject(rowNumber);
}

/**
* Returns a LocalDateTime from the column with the given index at the current row. An
* IllegalArgumentException is thrown if the column is not present, and a ClassCastException is
* thrown if it is present but has a different type
*/
public LocalDateTime getTimeStampWithPrecisionObj(int columnIndex) {
TimeStampWithPrecisionVector vector =
(TimeStampWithPrecisionVector) table.getVector(columnIndex);
return vector.getObject(rowNumber);
}

/**
* Returns a long from the column of the given name at the current row. An
* IllegalArgumentException is thrown if the column is not present, and a ClassCastException is
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@
import org.apache.arrow.vector.holders.NullableTimeStampNanoTZHolder;
import org.apache.arrow.vector.holders.NullableTimeStampSecHolder;
import org.apache.arrow.vector.holders.NullableTimeStampSecTZHolder;
import org.apache.arrow.vector.holders.NullableTimeStampWithPrecisionHolder;
import org.apache.arrow.vector.holders.NullableTinyIntHolder;
import org.apache.arrow.vector.holders.NullableUInt1Holder;
import org.apache.arrow.vector.holders.NullableUInt2Holder;
Expand Down Expand Up @@ -549,21 +550,30 @@ void fixedWidthVectorTest() {
assertEquals(c.getTimeStampMilli("timeStampMilli_vector"), c.getTimeStampMilli(15));
assertEquals(c.getTimeStampMicro("timeStampMicro_vector"), c.getTimeStampMicro(16));
assertEquals(c.getTimeStampNano("timeStampNano_vector"), c.getTimeStampNano(17));
assertEquals(
c.getTimeStampWithPrecision("timeStampPrecision_vector"),
c.getTimeStampWithPrecision(18));

// time stamp tests using Nullable Holders
NullableTimeStampSecHolder timeStampSecHolder = new NullableTimeStampSecHolder();
NullableTimeStampMilliHolder timeStampMilliHolder = new NullableTimeStampMilliHolder();
NullableTimeStampMicroHolder timeStampMicroHolder = new NullableTimeStampMicroHolder();
NullableTimeStampNanoHolder timeStampNanoHolder = new NullableTimeStampNanoHolder();
NullableTimeStampWithPrecisionHolder timeStampWithPrecisionHolder =
new NullableTimeStampWithPrecisionHolder();
// fill the holders using vector index and test
c.getTimeStampSec(14, timeStampSecHolder);
c.getTimeStampMilli(15, timeStampMilliHolder);
c.getTimeStampMicro(16, timeStampMicroHolder);
c.getTimeStampNano(17, timeStampNanoHolder);
c.getTimeStampWithPrecision(18, timeStampWithPrecisionHolder);
assertEquals(c.getTimeStampSec("timeStampSec_vector"), timeStampSecHolder.value);
assertEquals(c.getTimeStampMilli("timeStampMilli_vector"), timeStampMilliHolder.value);
assertEquals(c.getTimeStampMicro("timeStampMicro_vector"), timeStampMicroHolder.value);
assertEquals(c.getTimeStampNano("timeStampNano_vector"), timeStampNanoHolder.value);
assertEquals(
c.getTimeStampWithPrecision("timeStampPrecision_vector"),
timeStampWithPrecisionHolder.value);

LocalDateTime secDT = c.getTimeStampSecObj(14);
assertNotNull(secDT);
Expand All @@ -581,15 +591,24 @@ void fixedWidthVectorTest() {
assertNotNull(nanoDT);
assertEquals(nanoDT, c.getTimeStampNanoObj("timeStampNano_vector"));

LocalDateTime nanoPrecisionDT = c.getTimeStampWithPrecisionObj(18);
assertNotNull(nanoPrecisionDT);
assertEquals(nanoPrecisionDT, c.getTimeStampWithPrecisionObj("timeStampPrecision_vector"));

// refill the holders using vector name and retest
c.getTimeStampSec("timeStampSec_vector", timeStampSecHolder);
c.getTimeStampMilli("timeStampMilli_vector", timeStampMilliHolder);
c.getTimeStampMicro("timeStampMicro_vector", timeStampMicroHolder);
c.getTimeStampNano("timeStampNano_vector", timeStampNanoHolder);
c.getTimeStampWithPrecision("timeStampPrecision_vector", timeStampWithPrecisionHolder);

assertEquals(c.getTimeStampSec("timeStampSec_vector"), timeStampSecHolder.value);
assertEquals(c.getTimeStampMilli("timeStampMilli_vector"), timeStampMilliHolder.value);
assertEquals(c.getTimeStampMicro("timeStampMicro_vector"), timeStampMicroHolder.value);
assertEquals(c.getTimeStampNano("timeStampNano_vector"), timeStampNanoHolder.value);
assertEquals(
c.getTimeStampWithPrecision("timeStampPrecision_vector"),
timeStampWithPrecisionHolder.value);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
import org.apache.arrow.vector.TimeStampNanoVector;
import org.apache.arrow.vector.TimeStampSecTZVector;
import org.apache.arrow.vector.TimeStampSecVector;
import org.apache.arrow.vector.TimeStampWithPrecisionVector;
import org.apache.arrow.vector.TinyIntVector;
import org.apache.arrow.vector.UInt1Vector;
import org.apache.arrow.vector.UInt2Vector;
Expand All @@ -74,6 +75,7 @@
import org.apache.arrow.vector.types.TimeUnit;
import org.apache.arrow.vector.types.Types;
import org.apache.arrow.vector.types.pojo.ArrowType;
import org.apache.arrow.vector.types.pojo.ArrowType.TimestampWithPrecision;
import org.apache.arrow.vector.types.pojo.Field;
import org.apache.arrow.vector.types.pojo.FieldType;

Expand Down Expand Up @@ -257,6 +259,11 @@ static List<FieldVector> simpleTemporalVectors(
vectors.add(new TimeStampMilliVector("timeStampMilli_vector", allocator));
vectors.add(new TimeStampMicroVector("timeStampMicro_vector", allocator));
vectors.add(new TimeStampNanoVector("timeStampNano_vector", allocator));
vectors.add(
new TimeStampWithPrecisionVector(
"timeStampPrecision_vector",
FieldType.nullable(new TimestampWithPrecision(9, null)),
allocator));

vectors.add(new DateMilliVector("dateMilli_vector", allocator));
vectors.add(new DateDayVector("dateDay_vector", allocator));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
import org.apache.arrow.vector.TimeStampMilliVector;
import org.apache.arrow.vector.TimeStampNanoVector;
import org.apache.arrow.vector.TimeStampSecVector;
import org.apache.arrow.vector.TimeStampWithPrecisionVector;
import org.apache.arrow.vector.TinyIntVector;
import org.apache.arrow.vector.UInt1Vector;
import org.apache.arrow.vector.UInt2Vector;
Expand All @@ -52,6 +53,7 @@
import org.apache.arrow.vector.compare.VectorEqualsVisitor;
import org.apache.arrow.vector.types.TimeUnit;
import org.apache.arrow.vector.types.pojo.ArrowType;
import org.apache.arrow.vector.types.pojo.ArrowType.TimestampWithPrecision;
import org.apache.arrow.vector.types.pojo.FieldType;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
Expand Down Expand Up @@ -457,6 +459,29 @@ public void testPopulateTimeStampNanoVector() {
}
}

@Test
public void testPopulateTimeStampPrecisionVector() {
try (final TimeStampWithPrecisionVector vector1 =
new TimeStampWithPrecisionVector(
"vector", FieldType.nullable(new TimestampWithPrecision(9, null)), allocator);
final TimeStampWithPrecisionVector vector2 =
new TimeStampWithPrecisionVector(
"vector", FieldType.nullable(new TimestampWithPrecision(9, null)), allocator)) {

vector1.allocateNew(10);
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
vector1.setNull(i);
} else {
vector1.set(i, i * 10000);
}
}
vector1.setValueCount(10);
setVector(vector2, null, 10000L, null, 30000L, null, 50000L, null, 70000L, null, 90000L);
assertTrue(VectorEqualsVisitor.vectorEquals(vector1, vector2));
}
}

@Test
public void testPopulateTimeStampSecVector() {
try (final TimeStampSecVector vector1 = new TimeStampSecVector("vector", allocator);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
import org.apache.arrow.vector.TimeStampNanoVector;
import org.apache.arrow.vector.TimeStampSecTZVector;
import org.apache.arrow.vector.TimeStampSecVector;
import org.apache.arrow.vector.TimeStampWithPrecisionVector;
import org.apache.arrow.vector.TinyIntVector;
import org.apache.arrow.vector.UInt1Vector;
import org.apache.arrow.vector.UInt2Vector;
Expand Down Expand Up @@ -453,6 +454,22 @@ public static void setVector(TimeStampNanoVector vector, Long... values) {
vector.setValueCount(length);
}

/**
* Populate values for TimeStampNanoVector.
*
* @param values numbers of nanoseconds since UNIX epoch
*/
public static void setVector(TimeStampWithPrecisionVector vector, Long... values) {
final int length = values.length;
vector.allocateNew(length);
for (int i = 0; i < length; i++) {
if (values[i] != null) {
vector.set(i, values[i]);
}
}
vector.setValueCount(length);
}

/**
* Populate values for TimeStampSecTZVector.
*
Expand Down

0 comments on commit e87f922

Please sign in to comment.