Skip to content

Commit 3ed198a

Browse files
committed
Undo breaking change for ArrowFlightJdbcTimeStampVectorAccessor.getTimestamp
1 parent 2439197 commit 3ed198a

File tree

3 files changed

+22
-30
lines changed

3 files changed

+22
-30
lines changed

flight/flight-sql-jdbc-core/src/main/java/org/apache/arrow/driver/jdbc/accessor/impl/calendar/ArrowFlightJdbcTimeStampVectorAccessor.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,8 +179,19 @@ public Timestamp getTimestamp(Calendar calendar) {
179179
if (localDateTime == null) {
180180
return null;
181181
}
182+
// to prevent breaking changes for those using this, apply the offset that was previously
183+
// applied in getLocalDateTime
184+
if (calendar != null && !isZoned) {
185+
TimeZone timeZone = calendar.getTimeZone();
186+
long millis = Timestamp.valueOf(localDateTime).getTime();
187+
localDateTime =
188+
localDateTime.minus(
189+
timeZone.getOffset(millis) - this.timeZone.getOffset(millis), ChronoUnit.MILLIS);
182190

183-
return Timestamp.valueOf(localDateTime);
191+
return Timestamp.valueOf(localDateTime);
192+
} else {
193+
return Timestamp.valueOf(localDateTime);
194+
}
184195
}
185196

186197
protected static TimeUnit getTimeUnitForVector(TimeStampVector vector) {

flight/flight-sql-jdbc-core/src/main/java/org/apache/arrow/driver/jdbc/utils/SqlTypes.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,13 @@
1616
*/
1717
package org.apache.arrow.driver.jdbc.utils;
1818

19+
import com.google.common.base.Strings;
1920
import java.sql.Types;
2021
import java.util.HashMap;
2122
import java.util.Map;
2223
import org.apache.arrow.vector.types.FloatingPointPrecision;
2324
import org.apache.arrow.vector.types.pojo.ArrowType;
2425

25-
import com.google.common.base.Strings;
26-
2726
/** SQL Types utility functions. */
2827
public class SqlTypes {
2928
private static final Map<Integer, String> typeIdToName = new HashMap<>();

flight/flight-sql-jdbc-core/src/test/java/org/apache/arrow/driver/jdbc/accessor/impl/calendar/ArrowFlightJdbcTimeStampVectorAccessorTest.java

Lines changed: 9 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -182,22 +182,16 @@ public void testShouldGetTimestampReturnValidTimestampWithCalendar(
182182
Calendar calendar = Calendar.getInstance(timeZone);
183183

184184
TimeZone timeZoneForVector = getTimeZoneForVector(vector);
185-
boolean hasTz = getVectorIsZoned(vector);
186185

187186
accessorIterator.iterate(
188187
vector,
189188
(accessor, currentRow) -> {
190189
final Timestamp resultWithoutCalendar = accessor.getTimestamp(null);
191190
final Timestamp result = accessor.getTimestamp(calendar);
192191

193-
long offset;
194-
if (hasTz) {
195-
offset =
196-
(long) timeZone.getOffset(resultWithoutCalendar.getTime())
197-
- timeZoneForVector.getOffset(resultWithoutCalendar.getTime());
198-
} else {
199-
offset = 0;
200-
}
192+
long offset =
193+
(long) timeZone.getOffset(resultWithoutCalendar.getTime())
194+
- timeZoneForVector.getOffset(resultWithoutCalendar.getTime());
201195

202196
assertThat(resultWithoutCalendar.getTime() - result.getTime(), is(offset));
203197
assertThat(accessor.wasNull(), is(false));
@@ -236,22 +230,16 @@ public void testShouldGetDateReturnValidDateWithCalendar(Supplier<TimeStampVecto
236230
Calendar calendar = Calendar.getInstance(timeZone);
237231

238232
TimeZone timeZoneForVector = getTimeZoneForVector(vector);
239-
boolean hasTz = getVectorIsZoned(vector);
240233

241234
accessorIterator.iterate(
242235
vector,
243236
(accessor, currentRow) -> {
244237
final Date resultWithoutCalendar = accessor.getDate(null);
245238
final Date result = accessor.getDate(calendar);
246239

247-
long offset;
248-
if (hasTz) {
249-
offset =
250-
(long) timeZone.getOffset(resultWithoutCalendar.getTime())
251-
- timeZoneForVector.getOffset(resultWithoutCalendar.getTime());
252-
} else {
253-
offset = 0;
254-
}
240+
long offset =
241+
(long) timeZone.getOffset(resultWithoutCalendar.getTime())
242+
- timeZoneForVector.getOffset(resultWithoutCalendar.getTime());
255243

256244
assertThat(resultWithoutCalendar.getTime() - result.getTime(), is(offset));
257245
assertThat(accessor.wasNull(), is(false));
@@ -290,22 +278,16 @@ public void testShouldGetTimeReturnValidTimeWithCalendar(Supplier<TimeStampVecto
290278
Calendar calendar = Calendar.getInstance(timeZone);
291279

292280
TimeZone timeZoneForVector = getTimeZoneForVector(vector);
293-
boolean hasTz = getVectorIsZoned(vector);
294281

295282
accessorIterator.iterate(
296283
vector,
297284
(accessor, currentRow) -> {
298285
final Time resultWithoutCalendar = accessor.getTime(null);
299286
final Time result = accessor.getTime(calendar);
300287

301-
long offset;
302-
if (hasTz) {
303-
offset =
304-
(long) timeZone.getOffset(resultWithoutCalendar.getTime())
305-
- timeZoneForVector.getOffset(resultWithoutCalendar.getTime());
306-
} else {
307-
offset = 0;
308-
}
288+
long offset =
289+
(long) timeZone.getOffset(resultWithoutCalendar.getTime())
290+
- timeZoneForVector.getOffset(resultWithoutCalendar.getTime());
309291

310292
assertThat(resultWithoutCalendar.getTime() - result.getTime(), is(offset));
311293
assertThat(accessor.wasNull(), is(false));

0 commit comments

Comments
 (0)