Skip to content

Commit 69bc00c

Browse files
committed
Fixed bug in null-handling for java.time converters
1 parent 537d73e commit 69bc00c

10 files changed

Lines changed: 73 additions & 2 deletions

core/src/main/java/org/sql2o/converters/InstantConverter.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
public class InstantConverter extends ConverterBase<Instant> {
88
@Override
99
public Instant convert(Object val) throws ConverterException {
10+
if (val == null) {
11+
return null;
12+
}
1013
if (val instanceof Timestamp) {
1114
return ((Timestamp)val).toInstant();
1215
}

core/src/main/java/org/sql2o/converters/LocalDateConverter.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
public class LocalDateConverter extends ConverterBase<LocalDate> {
88
@Override
99
public LocalDate convert(Object val) throws ConverterException {
10+
if (val == null) {
11+
return null;
12+
}
1013
if (val instanceof java.sql.Date) {
1114
return ((java.sql.Date) val).toLocalDate();
1215
}

core/src/main/java/org/sql2o/converters/LocalDateTimeConverter.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
public class LocalDateTimeConverter extends ConverterBase<LocalDateTime> {
88
@Override
99
public LocalDateTime convert(Object val) throws ConverterException {
10+
if (val == null) {
11+
return null;
12+
}
1013
if (val instanceof java.sql.Timestamp) {
1114
return ((java.sql.Timestamp) val).toLocalDateTime();
1215
}

core/src/main/java/org/sql2o/converters/LocalTimeConverter.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ public class LocalTimeConverter extends ConverterBase<LocalTime> {
66

77
@Override
88
public LocalTime convert(Object val) throws ConverterException {
9+
if (val == null) {
10+
return null;
11+
}
912
if (val instanceof java.sql.Time) {
1013
return ((java.sql.Time) val).toLocalTime();
1114
}

core/src/main/java/org/sql2o/converters/OffsetDateTimeConverter.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
public class OffsetDateTimeConverter extends ConverterBase<OffsetDateTime>{
88
@Override
99
public OffsetDateTime convert(Object val) throws ConverterException {
10+
if (val == null) {
11+
return null;
12+
}
1013
if (val instanceof OffsetDateTime) {
1114
return (OffsetDateTime) val;
1215
}

core/src/test/java/org/sql2o/converters/InstantConverterTest.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@
1111
import java.time.ZoneOffset;
1212
import java.time.ZonedDateTime;
1313

14-
import static org.junit.jupiter.api.Assertions.assertEquals;
15-
import static org.junit.jupiter.api.Assertions.assertThrows;
14+
import static org.junit.jupiter.api.Assertions.*;
1615

1716
public class InstantConverterTest {
1817

@@ -107,4 +106,16 @@ void insertAndFetch_usingInstantType_isSuccessfull(String dbName, String url, St
107106
// Assert
108107
assertEquals(instantToInsert, result);
109108
}
109+
110+
@Test
111+
void convert_null_returnsNull() throws ConverterException {
112+
// Arrange
113+
InstantConverter converter = new InstantConverter();
114+
115+
// Act
116+
Instant result = converter.convert(null);
117+
118+
// Assert
119+
assertNull(result);
120+
}
110121
}

core/src/test/java/org/sql2o/converters/LocalDateConverterTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,15 @@ public void insertAndFetch_usingLocalDateType_isSuccessfull(String dbName, Strin
9292
assertEquals(dateToInsert, pojo.getDate());
9393
}
9494

95+
@Test
96+
public void convert_null_returns_null() throws ConverterException {
97+
// setup
98+
final var converter = new LocalDateConverter();
99+
100+
// test
101+
final var convertedDate = converter.convert(null);
102+
assertNull(convertedDate);
103+
}
95104

96105
private Sql2o setupDatabase(String url, String user, String pass) {
97106

core/src/test/java/org/sql2o/converters/LocalDateTimeConverterTest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,18 @@ void convert_invalidTimeString_throwsException() {
6868
assertThrows(ConverterException.class, () -> converter.convert("invalid"));
6969
}
7070

71+
@Test
72+
void convert_null_returns_null() throws ConverterException {
73+
// setup
74+
final var converter = new LocalDateTimeConverter();
75+
76+
// test
77+
final var convertedTime = converter.convert(null);
78+
79+
// assert
80+
assertNull(convertedTime);
81+
}
82+
7183
@ParameterizedTest(name = "{0}")
7284
@ArgumentsSource(TestDatabasesArgumentSourceProvider.class)
7385
void insertAndFetch_usingLocalDateTimeType_isSuccessfull(String dbName, String url, String user, String pass) {

core/src/test/java/org/sql2o/converters/LocalTimeConverterTest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,18 @@ void insertAndFetch_usingLocalTimeConverter_isSuccessfull(String dbName, String
109109
assertEquals(targetTime, pojo.getTime());
110110
}
111111

112+
@Test
113+
void convert_null_returns_null() throws ConverterException {
114+
// setup
115+
final var converter = new LocalTimeConverter();
116+
117+
// test
118+
final var convertedTime = converter.convert(null);
119+
120+
// assert
121+
assertNull(convertedTime);
122+
}
123+
112124
static class LocalTimePojo {
113125
private int id;
114126
private LocalTime time;

core/src/test/java/org/sql2o/converters/OffsetDateTimeConverterTest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,4 +145,16 @@ void insertAndFetch_usingOffsetDateTimeWithGivenTimeZone_isSuccessfull(String db
145145
// Assert
146146
assertEquals(targetTime.toInstant(), resultTime.toInstant());
147147
}
148+
149+
@Test
150+
void convert_null_returnsNull() throws ConverterException {
151+
// Arrange
152+
final var converter = new OffsetDateTimeConverter();
153+
154+
// Act
155+
final var convertedTime = converter.convert(null);
156+
157+
// Assert
158+
assertNull(convertedTime);
159+
}
148160
}

0 commit comments

Comments
 (0)