Skip to content

Commit eea8b79

Browse files
committed
[ARROW-7301][Java] Sql type DATE should correspond to DateDayVector
Change-Id: I604a6b2db3b0816aec6bc7c117e8172507dbdddd
1 parent 9197f01 commit eea8b79

15 files changed

Lines changed: 90 additions & 81 deletions

java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowUtils.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
import org.apache.arrow.util.Preconditions;
6060
import org.apache.arrow.vector.BigIntVector;
6161
import org.apache.arrow.vector.BitVector;
62-
import org.apache.arrow.vector.DateMilliVector;
62+
import org.apache.arrow.vector.DateDayVector;
6363
import org.apache.arrow.vector.DecimalVector;
6464
import org.apache.arrow.vector.FieldVector;
6565
import org.apache.arrow.vector.Float4Vector;
@@ -265,7 +265,7 @@ public static ArrowType getArrowTypeForJdbcField(JdbcFieldInfo fieldInfo, Calend
265265
case Types.CLOB:
266266
return new ArrowType.Utf8();
267267
case Types.DATE:
268-
return new ArrowType.Date(DateUnit.MILLISECOND);
268+
return new ArrowType.Date(DateUnit.DAY);
269269
case Types.TIME:
270270
return new ArrowType.Time(TimeUnit.MILLISECOND, 32);
271271
case Types.TIMESTAMP:
@@ -402,7 +402,7 @@ static JdbcConsumer getConsumer(ResultSet resultSet, int columnIndex, int jdbcCo
402402
case Types.LONGNVARCHAR:
403403
return VarCharConsumer.createConsumer((VarCharVector) vector, columnIndex, nullable);
404404
case Types.DATE:
405-
return DateConsumer.createConsumer((DateMilliVector) vector, columnIndex, nullable, calendar);
405+
return DateConsumer.createConsumer((DateDayVector) vector, columnIndex, nullable, calendar);
406406
case Types.TIME:
407407
return TimeConsumer.createConsumer((TimeMilliVector) vector, columnIndex, nullable, calendar);
408408
case Types.TIMESTAMP:

java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/consumer/DateConsumer.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.Calendar;
2323
import java.util.Date;
2424

25+
import org.apache.arrow.vector.DateDayVector;
2526
import org.apache.arrow.vector.DateMilliVector;
2627

2728
/**
@@ -33,8 +34,8 @@ public class DateConsumer {
3334
/**
3435
* Creates a consumer for {@link DateMilliVector}.
3536
*/
36-
public static JdbcConsumer<DateMilliVector> createConsumer(
37-
DateMilliVector vector, int index, boolean nullable, Calendar calendar) {
37+
public static JdbcConsumer<DateDayVector> createConsumer(
38+
DateDayVector vector, int index, boolean nullable, Calendar calendar) {
3839
if (nullable) {
3940
return new NullableDateConsumer(vector, index, calendar);
4041
} else {
@@ -45,21 +46,21 @@ public static JdbcConsumer<DateMilliVector> createConsumer(
4546
/**
4647
* Nullable consumer for date.
4748
*/
48-
static class NullableDateConsumer extends BaseConsumer<DateMilliVector> {
49+
static class NullableDateConsumer extends BaseConsumer<DateDayVector> {
4950

5051
protected final Calendar calendar;
5152

5253
/**
5354
* Instantiate a DateConsumer.
5455
*/
55-
public NullableDateConsumer(DateMilliVector vector, int index) {
56+
public NullableDateConsumer(DateDayVector vector, int index) {
5657
this(vector, index, /* calendar */null);
5758
}
5859

5960
/**
6061
* Instantiate a DateConsumer.
6162
*/
62-
public NullableDateConsumer(DateMilliVector vector, int index, Calendar calendar) {
63+
public NullableDateConsumer(DateDayVector vector, int index, Calendar calendar) {
6364
super(vector, index);
6465
this.calendar = calendar;
6566
}
@@ -69,7 +70,7 @@ public void consume(ResultSet resultSet) throws SQLException {
6970
Date date = calendar == null ? resultSet.getDate(columnIndexInResultSet) :
7071
resultSet.getDate(columnIndexInResultSet, calendar);
7172
if (!resultSet.wasNull()) {
72-
vector.setSafe(currentIndex, date.getTime());
73+
vector.setSafe(currentIndex, (int) (date.getTime() / DateDayVector.MILLIS_PER_DAY));
7374
}
7475
currentIndex++;
7576
}
@@ -78,21 +79,21 @@ public void consume(ResultSet resultSet) throws SQLException {
7879
/**
7980
* Non-nullable consumer for date.
8081
*/
81-
static class NonNullableDateConsumer extends BaseConsumer<DateMilliVector> {
82+
static class NonNullableDateConsumer extends BaseConsumer<DateDayVector> {
8283

8384
protected final Calendar calendar;
8485

8586
/**
8687
* Instantiate a DateConsumer.
8788
*/
88-
public NonNullableDateConsumer(DateMilliVector vector, int index) {
89+
public NonNullableDateConsumer(DateDayVector vector, int index) {
8990
this(vector, index, /* calendar */null);
9091
}
9192

9293
/**
9394
* Instantiate a DateConsumer.
9495
*/
95-
public NonNullableDateConsumer(DateMilliVector vector, int index, Calendar calendar) {
96+
public NonNullableDateConsumer(DateDayVector vector, int index, Calendar calendar) {
9697
super(vector, index);
9798
this.calendar = calendar;
9899
}
@@ -101,7 +102,7 @@ public NonNullableDateConsumer(DateMilliVector vector, int index, Calendar calen
101102
public void consume(ResultSet resultSet) throws SQLException {
102103
Date date = calendar == null ? resultSet.getDate(columnIndexInResultSet) :
103104
resultSet.getDate(columnIndexInResultSet, calendar);
104-
vector.setSafe(currentIndex, date.getTime());
105+
vector.setSafe(currentIndex, (int) (date.getTime() / DateDayVector.MILLIS_PER_DAY));
105106
currentIndex++;
106107
}
107108
}

java/adapter/jdbc/src/test/java/org/apache/arrow/adapter/jdbc/JdbcToArrowTestHelper.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
import org.apache.arrow.vector.BaseValueVector;
3333
import org.apache.arrow.vector.BigIntVector;
3434
import org.apache.arrow.vector.BitVector;
35-
import org.apache.arrow.vector.DateMilliVector;
35+
import org.apache.arrow.vector.DateDayVector;
3636
import org.apache.arrow.vector.DecimalVector;
3737
import org.apache.arrow.vector.Float4Vector;
3838
import org.apache.arrow.vector.Float8Vector;
@@ -173,14 +173,14 @@ public static void assertTimeVectorValues(TimeMilliVector timeMilliVector, int r
173173
}
174174
}
175175

176-
public static void assertDateVectorValues(DateMilliVector dateMilliVector, int rowCount, Long[] values) {
177-
assertEquals(rowCount, dateMilliVector.getValueCount());
176+
public static void assertDateVectorValues(DateDayVector dateDayVector, int rowCount, Integer[] values) {
177+
assertEquals(rowCount, dateDayVector.getValueCount());
178178

179-
for (int j = 0; j < dateMilliVector.getValueCount(); j++) {
179+
for (int j = 0; j < dateDayVector.getValueCount(); j++) {
180180
if (values[j] == null) {
181-
assertTrue(dateMilliVector.isNull(j));
181+
assertTrue(dateDayVector.isNull(j));
182182
} else {
183-
assertEquals(values[j].longValue(), dateMilliVector.get(j));
183+
assertEquals(values[j].longValue(), dateDayVector.get(j));
184184
}
185185
}
186186
}

java/adapter/jdbc/src/test/java/org/apache/arrow/adapter/jdbc/h2/JdbcToArrowDataTypesTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
import org.apache.arrow.memory.RootAllocator;
5151
import org.apache.arrow.vector.BigIntVector;
5252
import org.apache.arrow.vector.BitVector;
53-
import org.apache.arrow.vector.DateMilliVector;
53+
import org.apache.arrow.vector.DateDayVector;
5454
import org.apache.arrow.vector.DecimalVector;
5555
import org.apache.arrow.vector.Float4Vector;
5656
import org.apache.arrow.vector.Float8Vector;
@@ -202,8 +202,8 @@ public void testDataSets(VectorSchemaRoot root) {
202202
table.getCharValues());
203203
break;
204204
case DATE:
205-
assertDateVectorValues((DateMilliVector) root.getVector(table.getVector()), table.getValues().length,
206-
table.getLongValues());
205+
assertDateVectorValues((DateDayVector) root.getVector(table.getVector()), table.getValues().length,
206+
table.getIntValues());
207207
break;
208208
case TIME:
209209
assertTimeVectorValues((TimeMilliVector) root.getVector(table.getVector()), table.getValues().length,

java/adapter/jdbc/src/test/java/org/apache/arrow/adapter/jdbc/h2/JdbcToArrowNullTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
import org.apache.arrow.memory.RootAllocator;
5959
import org.apache.arrow.vector.BigIntVector;
6060
import org.apache.arrow.vector.BitVector;
61-
import org.apache.arrow.vector.DateMilliVector;
61+
import org.apache.arrow.vector.DateDayVector;
6262
import org.apache.arrow.vector.DecimalVector;
6363
import org.apache.arrow.vector.Float4Vector;
6464
import org.apache.arrow.vector.Float8Vector;
@@ -206,8 +206,8 @@ private void testAllVectorValues(VectorSchemaRoot root) {
206206
assertBooleanVectorValues((BitVector) root.getVector(BOOL), table.getRowCount(),
207207
getBooleanValues(table.getValues(), BOOL));
208208

209-
assertDateVectorValues((DateMilliVector) root.getVector(DATE), table.getRowCount(),
210-
getLongValues(table.getValues(), DATE));
209+
assertDateVectorValues((DateDayVector) root.getVector(DATE), table.getRowCount(),
210+
getIntValues(table.getValues(), DATE));
211211

212212
assertTimeVectorValues((TimeMilliVector) root.getVector(TIME), table.getRowCount(),
213213
getLongValues(table.getValues(), TIME));
@@ -242,7 +242,7 @@ public void sqlToArrowTestNullValues(String[] vectors, VectorSchemaRoot root, in
242242
assertNullValues((Float8Vector) root.getVector(vectors[6]), rowCount);
243243
assertNullValues((Float4Vector) root.getVector(vectors[7]), rowCount);
244244
assertNullValues((TimeMilliVector) root.getVector(vectors[8]), rowCount);
245-
assertNullValues((DateMilliVector) root.getVector(vectors[9]), rowCount);
245+
assertNullValues((DateDayVector) root.getVector(vectors[9]), rowCount);
246246
assertNullValues((TimeStampVector) root.getVector(vectors[10]), rowCount);
247247
assertNullValues((VarBinaryVector) root.getVector(vectors[11]), rowCount);
248248
assertNullValues((VarCharVector) root.getVector(vectors[12]), rowCount);
@@ -265,7 +265,7 @@ public void sqlToArrowTestSelectedNullColumnsValues(String[] vectors, VectorSche
265265
assertNullValues((Float8Vector) root.getVector(vectors[2]), rowCount);
266266
assertNullValues((Float4Vector) root.getVector(vectors[3]), rowCount);
267267
assertNullValues((TimeMilliVector) root.getVector(vectors[4]), rowCount);
268-
assertNullValues((DateMilliVector) root.getVector(vectors[5]), rowCount);
268+
assertNullValues((DateDayVector) root.getVector(vectors[5]), rowCount);
269269
assertNullValues((TimeStampVector) root.getVector(vectors[6]), rowCount);
270270
assertNullValues((VarBinaryVector) root.getVector(vectors[7]), rowCount);
271271
assertNullValues((VarCharVector) root.getVector(vectors[8]), rowCount);

java/adapter/jdbc/src/test/java/org/apache/arrow/adapter/jdbc/h2/JdbcToArrowTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@
7979
import org.apache.arrow.memory.RootAllocator;
8080
import org.apache.arrow.vector.BigIntVector;
8181
import org.apache.arrow.vector.BitVector;
82-
import org.apache.arrow.vector.DateMilliVector;
82+
import org.apache.arrow.vector.DateDayVector;
8383
import org.apache.arrow.vector.DecimalVector;
8484
import org.apache.arrow.vector.Float4Vector;
8585
import org.apache.arrow.vector.Float8Vector;
@@ -202,8 +202,8 @@ public void testDataSets(VectorSchemaRoot root) {
202202
assertBooleanVectorValues((BitVector) root.getVector(BOOL), table.getRowCount(),
203203
getBooleanValues(table.getValues(), BOOL));
204204

205-
assertDateVectorValues((DateMilliVector) root.getVector(DATE), table.getRowCount(),
206-
getLongValues(table.getValues(), DATE));
205+
assertDateVectorValues((DateDayVector) root.getVector(DATE), table.getRowCount(),
206+
getIntValues(table.getValues(), DATE));
207207

208208
assertTimeVectorValues((TimeMilliVector) root.getVector(TIME), table.getRowCount(),
209209
getLongValues(table.getValues(), TIME));

java/adapter/jdbc/src/test/java/org/apache/arrow/adapter/jdbc/h2/JdbcToArrowTimeZoneTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
import org.apache.arrow.adapter.jdbc.JdbcToArrowUtils;
3838
import org.apache.arrow.adapter.jdbc.Table;
3939
import org.apache.arrow.memory.RootAllocator;
40-
import org.apache.arrow.vector.DateMilliVector;
40+
import org.apache.arrow.vector.DateDayVector;
4141
import org.apache.arrow.vector.TimeMilliVector;
4242
import org.apache.arrow.vector.TimeStampVector;
4343
import org.apache.arrow.vector.VectorSchemaRoot;
@@ -145,8 +145,8 @@ public void testDataSets(VectorSchemaRoot root) {
145145
case EST_DATE:
146146
case GMT_DATE:
147147
case PST_DATE:
148-
assertDateVectorValues((DateMilliVector) root.getVector(table.getVector()), table.getValues().length,
149-
table.getLongValues());
148+
assertDateVectorValues((DateDayVector) root.getVector(table.getVector()), table.getValues().length,
149+
table.getIntValues());
150150
break;
151151
case EST_TIME:
152152
case GMT_TIME:

java/adapter/jdbc/src/test/java/org/apache/arrow/adapter/jdbc/h2/JdbcToArrowVectorIteratorTest.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
import org.apache.arrow.memory.RootAllocator;
3939
import org.apache.arrow.vector.BigIntVector;
4040
import org.apache.arrow.vector.BitVector;
41-
import org.apache.arrow.vector.DateMilliVector;
41+
import org.apache.arrow.vector.DateDayVector;
4242
import org.apache.arrow.vector.DecimalVector;
4343
import org.apache.arrow.vector.Float4Vector;
4444
import org.apache.arrow.vector.Float8Vector;
@@ -51,6 +51,7 @@
5151
import org.apache.arrow.vector.VarBinaryVector;
5252
import org.apache.arrow.vector.VarCharVector;
5353
import org.apache.arrow.vector.VectorSchemaRoot;
54+
import org.junit.Test;
5455
import org.junit.runner.RunWith;
5556
import org.junit.runners.Parameterized;
5657

@@ -66,6 +67,7 @@ public JdbcToArrowVectorIteratorTest(Table table) {
6667
super(table);
6768
}
6869

70+
@Test
6971
@Override
7072
public void testJdbcToArrowValues() throws SQLException, IOException {
7173

@@ -91,7 +93,7 @@ private void validate(ArrowVectorIterator iterator) throws SQLException, IOExcep
9193
List<VarCharVector> vectorsForChar = new ArrayList<>();
9294
List<BitVector> vectorsForBit = new ArrayList<>();
9395
List<BitVector> vectorsForBool = new ArrayList<>();
94-
List<DateMilliVector> dateMilliVectors = new ArrayList<>();
96+
List<DateDayVector> dateDayVectors = new ArrayList<>();
9597
List<TimeMilliVector> timeMilliVectors = new ArrayList<>();
9698
List<TimeStampVector> timeStampVectors = new ArrayList<>();
9799
List<DecimalVector> decimalVectors = new ArrayList<>();
@@ -115,7 +117,7 @@ private void validate(ArrowVectorIterator iterator) throws SQLException, IOExcep
115117
vectorsForChar.add((VarCharVector) root.getVector(CHAR));
116118
vectorsForBit.add((BitVector) root.getVector(BIT));
117119
vectorsForBool.add((BitVector) root.getVector(BOOL));
118-
dateMilliVectors.add((DateMilliVector) root.getVector(DATE));
120+
dateDayVectors.add((DateDayVector) root.getVector(DATE));
119121
timeMilliVectors.add((TimeMilliVector) root.getVector(TIME));
120122
timeStampVectors.add((TimeStampVector) root.getVector(TIMESTAMP));
121123
decimalVectors.add((DecimalVector) root.getVector(DECIMAL));
@@ -134,7 +136,7 @@ private void validate(ArrowVectorIterator iterator) throws SQLException, IOExcep
134136
assertVarCharVectorValues(vectorsForChar, table.getRowCount(), getCharArray(table.getValues(), CHAR));
135137
assertBitVectorValues(vectorsForBit, table.getRowCount(), getIntValues(table.getValues(), BIT));
136138
assertBooleanVectorValues(vectorsForBool, table.getRowCount(), getBooleanValues(table.getValues(), BOOL));
137-
assertDateMilliVectorValues(dateMilliVectors, table.getRowCount(), getLongValues(table.getValues(), DATE));
139+
assertDateDayVectorValues(dateDayVectors, table.getRowCount(), getLongValues(table.getValues(), DATE));
138140
assertTimeMilliVectorValues(timeMilliVectors, table.getRowCount(), getLongValues(table.getValues(), TIME));
139141
assertTimeStampVectorValues(timeStampVectors, table.getRowCount(), getLongValues(table.getValues(), TIMESTAMP));
140142
assertDecimalVectorValues(decimalVectors, table.getRowCount(), getDecimalValues(table.getValues(), DECIMAL));
@@ -205,12 +207,12 @@ private void assertTimeMilliVectorValues(List<TimeMilliVector> vectors, int rowC
205207
}
206208
}
207209

208-
private void assertDateMilliVectorValues(List<DateMilliVector> vectors, int rowCount, Long[] values) {
210+
private void assertDateDayVectorValues(List<DateDayVector> vectors, int rowCount, Long[] values) {
209211
int valueCount = vectors.stream().mapToInt(ValueVector::getValueCount).sum();
210212
assertEquals(rowCount, valueCount);
211213

212214
int index = 0;
213-
for (DateMilliVector vector : vectors) {
215+
for (DateDayVector vector : vectors) {
214216
for (int i = 0; i < vector.getValueCount(); i++) {
215217
assertEquals(values[index++].longValue(), vector.get(i));
216218
}

java/adapter/jdbc/src/test/resources/h2/test1_all_datatypes_h2.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ values:
8585
- 'DECIMAL_FIELD6=17345667789.23,17345667789.23,17345667789.23,17345667789.23,17345667789.23,17345667789.23,17345667789.23,17345667789.23,17345667789.23,17345667789.23'
8686
- 'DOUBLE_FIELD7=56478356785.345,56478356785.345,56478356785.345,56478356785.345,56478356785.345,56478356785.345,56478356785.345,56478356785.345,56478356785.345,56478356785.345'
8787
- 'TIME_FIELD9=45935000,45935000,45935000,45935000,45935000,45935000,45935000,45935000,45935000,45935000'
88-
- 'DATE_FIELD10=1518393600000,1518393600000,1518393600000,1518393600000,1518393600000,1518393600000,1518393600000,1518393600000,1518393600000,1518393600000'
88+
- 'DATE_FIELD10=17574,17574,17574,17574,17574,17574,17574,17574,17574,17574'
8989
- 'TIMESTAMP_FIELD11=1518439535000,1518439535000,1518439535000,1518439535000,1518439535000,1518439535000,1518439535000,1518439535000,1518439535000,1518439535000'
9090
- 'CHAR_FIELD16=some char text,some char text,some char text,some char text,some char text,
9191
some char text,some char text,some char text,some char text,some char text'

java/adapter/jdbc/src/test/resources/h2/test1_all_datatypes_selected_null_rows_h2.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ values:
7171
- 'DECIMAL_FIELD6=null,17345667789.23,null,17345667789.23,null'
7272
- 'DOUBLE_FIELD7=null,56478356785.345,null,56478356785.345,null'
7373
- 'TIME_FIELD9=null,45935000,null,45935000,null'
74-
- 'DATE_FIELD10=null,1518393600000,null,1518393600000,null'
74+
- 'DATE_FIELD10=null,17574,null,17574,null'
7575
- 'TIMESTAMP_FIELD11=null,1518439535000,null,1518439535000,null'
7676
- 'CHAR_FIELD16=null,some char text,null,some char text,null'
7777
- 'VARCHAR_FIELD13=null,some text that needs to be converted to varchar,null,

0 commit comments

Comments
 (0)