Skip to content

Commit

Permalink
Oracle Database platform fixes (#2356)
Browse files Browse the repository at this point in the history
This change contains following fixes related with tests against Oracle DB:

- `java.util.Date` to `java.time.LocalDate` conversion fix - from #1255
- Correctly handle times after noon - from #1733

(cherry picked from commit 81e79a1)
Signed-off-by: Radek Felcman <[email protected]>

---------

Signed-off-by: Radek Felcman <[email protected]>
Co-authored-by: Onno Molenkamp <[email protected]>
  • Loading branch information
rfelcman and omolenkamp authored Feb 4, 2025
1 parent 8a70630 commit 609470a
Show file tree
Hide file tree
Showing 16 changed files with 114 additions and 102 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ public void test() {
assertFalse("Clone should not be the same instance", policy == policyClone);
assertEquals("Clone should be of the same type", policy.getClass(), policyClone.getClass());
assertEquals("Clone's expiry time should be the same", policy.getExpiryTime().getTimeInMillis(), policyClone.getExpiryTime().getTimeInMillis());
assertEquals("Clone's expiry time should be 01:02:03.004 - hour", 1, policyClone.getExpiryTime().get(Calendar.HOUR));
assertEquals("Clone's expiry time should be 01:02:03.004 - hour", 1, policyClone.getExpiryTime().get(Calendar.HOUR_OF_DAY));
assertEquals("Clone's expiry time should be 01:02:03.004 - minute", 2, policyClone.getExpiryTime().get(Calendar.MINUTE));
assertEquals("Clone's expiry time should be 01:02:03.004 - second", 3, policyClone.getExpiryTime().get(Calendar.SECOND));
assertEquals("Clone's expiry time should be 01:02:03.004 - millisecond", 4, policyClone.getExpiryTime().get(Calendar.MILLISECOND));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public void test() {
writer.write(String.valueOf(calendar.get(Calendar.YEAR)));
writer.write(String.valueOf(calendar.get(Calendar.DATE)));
writer.write(String.valueOf(calendar.get(Calendar.MONTH)));
writer.write(String.valueOf(calendar.get(Calendar.HOUR)));
writer.write(String.valueOf(calendar.get(Calendar.HOUR_OF_DAY)));
writer.write(String.valueOf(calendar.get(Calendar.MINUTE)));
writer.write(String.valueOf(calendar.get(Calendar.SECOND)));
writer.toString();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public TimeDateTester(String nameOfTest, int year, int month, int date, int hrs,
}

public TimeDateTester(String nameOfTest, Calendar dateTime) {
this(nameOfTest, dateTime.get(Calendar.YEAR), dateTime.get(Calendar.MONTH), dateTime.get(Calendar.DATE), dateTime.get(Calendar.HOUR), dateTime.get(Calendar.MINUTE), dateTime.get(Calendar.SECOND), 0);
this(nameOfTest, dateTime.get(Calendar.YEAR), dateTime.get(Calendar.MONTH), dateTime.get(Calendar.DATE), dateTime.get(Calendar.HOUR_OF_DAY), dateTime.get(Calendar.MINUTE), dateTime.get(Calendar.SECOND), 0);
}

public static RelationalDescriptor descriptor() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1998, 2025 Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1998, 2020 IBM Corporation and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
Expand Down Expand Up @@ -856,9 +856,8 @@ protected java.time.LocalDate convertObjectToLocalDate(Object sourceObject) thro
} else if (sourceObject instanceof java.sql.Timestamp) {
localDate = ((java.sql.Timestamp) sourceObject).toLocalDateTime().toLocalDate();
} else if (sourceObject instanceof java.util.Date) {
// handles sql.Time
java.util.Date date = (java.util.Date) sourceObject;
localDate = java.time.LocalDate.ofEpochDay(date.toInstant().getEpochSecond() / (60 * 60 * 24)); // Conv sec to day
// handles sql.Time too
localDate = ((java.util.Date) sourceObject).toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
} else if (sourceObject instanceof Calendar) {
Calendar cal = (Calendar) sourceObject;
localDate = java.time.LocalDate.of(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH));
Expand Down Expand Up @@ -897,12 +896,12 @@ protected java.time.LocalTime convertObjectToLocalTime(Object sourceObject) thro
Calendar cal = Helper.allocateCalendar();
cal.setTime((java.util.Date) sourceObject);
localTime = java.time.LocalTime.of(
cal.get(Calendar.HOUR), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), cal.get(Calendar.MILLISECOND));
cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), cal.get(Calendar.MILLISECOND));
Helper.releaseCalendar(cal);
} else if (sourceObject instanceof Calendar) {
Calendar cal = (Calendar) sourceObject;
localTime = java.time.LocalTime.of(
cal.get(Calendar.HOUR), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), cal.get(Calendar.MILLISECOND));
cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), cal.get(Calendar.MILLISECOND));
} else if (sourceObject instanceof Long) {
localTime = java.time.LocalTime.ofSecondOfDay((Long) sourceObject);
} else {
Expand Down Expand Up @@ -937,13 +936,13 @@ protected java.time.LocalDateTime convertObjectToLocalDateTime(Object sourceObje
cal.setTime((java.util.Date) sourceObject);
localDateTime = java.time.LocalDateTime.of(
cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH),
cal.get(Calendar.HOUR), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), cal.get(Calendar.MILLISECOND));
cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), cal.get(Calendar.MILLISECOND));
Helper.releaseCalendar(cal);
} else if (sourceObject instanceof Calendar) {
Calendar cal = (Calendar) sourceObject;
localDateTime = java.time.LocalDateTime.of(
cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH),
cal.get(Calendar.HOUR), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), cal.get(Calendar.MILLISECOND));
cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), cal.get(Calendar.MILLISECOND));
} else if (sourceObject instanceof Long) {
localDateTime = java.time.LocalDateTime.ofInstant(
java.time.Instant.ofEpochSecond((Long) sourceObject), getDefaultZoneOffset());
Expand Down Expand Up @@ -978,14 +977,14 @@ protected java.time.OffsetDateTime convertObjectToOffsetDateTime(Object sourceOb
cal.setTime((java.util.Date) sourceObject);
offsetDateTime = java.time.OffsetDateTime.of(
cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH),
cal.get(Calendar.HOUR), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), cal.get(Calendar.MILLISECOND) * 1000000,
cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), cal.get(Calendar.MILLISECOND) * 1000000,
java.time.ZoneOffset.ofTotalSeconds((cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET)) / 1000));
Helper.releaseCalendar(cal);
} else if (sourceObject instanceof Calendar) {
Calendar cal = (Calendar) sourceObject;
offsetDateTime = java.time.OffsetDateTime.of(
cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH),
cal.get(Calendar.HOUR), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), cal.get(Calendar.MILLISECOND) * 1000000,
cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), cal.get(Calendar.MILLISECOND) * 1000000,
java.time.ZoneOffset.ofTotalSeconds((cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET)) / 1000));
} else if (sourceObject instanceof Long) {
offsetDateTime = java.time.OffsetDateTime.ofInstant(
Expand Down Expand Up @@ -1024,13 +1023,13 @@ protected java.time.OffsetTime convertObjectToOffsetTime(Object sourceObject) th
Calendar cal = Helper.allocateCalendar();
cal.setTime((java.util.Date) sourceObject);
offsetTime = java.time.OffsetTime.of(
cal.get(Calendar.HOUR), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), cal.get(Calendar.MILLISECOND),
cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), cal.get(Calendar.MILLISECOND),
java.time.ZoneOffset.ofTotalSeconds((cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET)) / 1000));
Helper.releaseCalendar(cal);
} else if (sourceObject instanceof Calendar) {
Calendar cal = (Calendar) sourceObject;
offsetTime = java.time.OffsetTime.of(
cal.get(Calendar.HOUR), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), cal.get(Calendar.MILLISECOND),
cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), cal.get(Calendar.MILLISECOND),
java.time.ZoneOffset.ofTotalSeconds((cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET)) / 1000));
} else if (sourceObject instanceof Long) {
offsetTime = java.time.OffsetTime.ofInstant(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1186,7 +1186,7 @@ private String truncateMillis(String xmlFormat) {
}

private String stringFromCalendar(Calendar sourceCalendar) {
if (!(sourceCalendar.isSet(Calendar.HOUR) || sourceCalendar.isSet(Calendar.MINUTE) || sourceCalendar.isSet(Calendar.SECOND) || sourceCalendar.isSet(Calendar.MILLISECOND))) {
if (!(sourceCalendar.isSet(Calendar.HOUR_OF_DAY) || sourceCalendar.isSet(Calendar.MINUTE) || sourceCalendar.isSet(Calendar.SECOND) || sourceCalendar.isSet(Calendar.MILLISECOND))) {
return stringFromCalendar(sourceCalendar, Constants.DATE_QNAME);
} else if (!(sourceCalendar.isSet(Calendar.YEAR) || sourceCalendar.isSet(Calendar.MONTH) || sourceCalendar.isSet(Calendar.DATE))) {
return stringFromCalendar(sourceCalendar, Constants.TIME_QNAME);
Expand Down
Loading

0 comments on commit 609470a

Please sign in to comment.