From 2ca7139a1aaff5ee7697b4cda1f252e94bff38f2 Mon Sep 17 00:00:00 2001 From: Dazai Osamu Date: Tue, 10 Jun 2025 17:46:25 +0300 Subject: [PATCH 1/3] fix: handle null values in IntervalConverter and TimestampConverter --- .../src/main/java/tech/ydb/jooq/binding/IntervalBinding.java | 3 +++ .../src/main/java/tech/ydb/jooq/binding/TimestampBinding.java | 3 +++ 2 files changed, 6 insertions(+) diff --git a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/IntervalBinding.java b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/IntervalBinding.java index a8345c6..0f7f99a 100644 --- a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/IntervalBinding.java +++ b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/IntervalBinding.java @@ -39,6 +39,9 @@ public void get(BindingGetResultSetContext ctx) throws SQLException { private static class IntervalConverter implements Converter { @Override public Duration from(YearToSecond databaseObject) { + if (databaseObject == null) { + return null; + } return databaseObject.toDuration(); } diff --git a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/TimestampBinding.java b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/TimestampBinding.java index a685f57..db2072e 100644 --- a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/TimestampBinding.java +++ b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/TimestampBinding.java @@ -39,6 +39,9 @@ public void get(BindingGetResultSetContext ctx) throws SQLException { private static class TimestampConverter implements Converter { @Override public Instant from(LocalDateTime databaseObject) { + if (databaseObject == null) { + return null; + } return databaseObject.toInstant(ZoneOffset.UTC); } From 1af6f56d833660d018542736ba2daaa4619877b8 Mon Sep 17 00:00:00 2001 From: Andrew Khairnasov Date: Mon, 16 Jun 2025 13:03:14 +0000 Subject: [PATCH 2/3] fix: handle null values in Interval64Binding, IntervalBinding, TimestampBinding, and YsonBinding --- .../main/java/tech/ydb/jooq/binding/Interval64Binding.java | 2 +- .../src/main/java/tech/ydb/jooq/binding/IntervalBinding.java | 5 +---- .../main/java/tech/ydb/jooq/binding/TimestampBinding.java | 5 +---- .../src/main/java/tech/ydb/jooq/binding/YsonBinding.java | 2 +- 4 files changed, 4 insertions(+), 10 deletions(-) diff --git a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Interval64Binding.java b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Interval64Binding.java index e1000c7..d98040b 100644 --- a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Interval64Binding.java +++ b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Interval64Binding.java @@ -44,7 +44,7 @@ private static class IntervalConverter implements Converter { @Override public Duration from(ULong databaseObject) { - return Duration.of(databaseObject.longValue(), ChronoUnit.MICROS); + return databaseObject == null ? null : Duration.of(databaseObject.longValue(), ChronoUnit.MICROS); } @Override diff --git a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/IntervalBinding.java b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/IntervalBinding.java index 0f7f99a..4da1e61 100644 --- a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/IntervalBinding.java +++ b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/IntervalBinding.java @@ -39,10 +39,7 @@ public void get(BindingGetResultSetContext ctx) throws SQLException { private static class IntervalConverter implements Converter { @Override public Duration from(YearToSecond databaseObject) { - if (databaseObject == null) { - return null; - } - return databaseObject.toDuration(); + return databaseObject == null ? null : databaseObject.toDuration(); } @Override diff --git a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/TimestampBinding.java b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/TimestampBinding.java index db2072e..8a32686 100644 --- a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/TimestampBinding.java +++ b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/TimestampBinding.java @@ -39,10 +39,7 @@ public void get(BindingGetResultSetContext ctx) throws SQLException { private static class TimestampConverter implements Converter { @Override public Instant from(LocalDateTime databaseObject) { - if (databaseObject == null) { - return null; - } - return databaseObject.toInstant(ZoneOffset.UTC); + return databaseObject == null ? null : databaseObject.toInstant(ZoneOffset.UTC); } @Override diff --git a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/YsonBinding.java b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/YsonBinding.java index bf90e04..abac59d 100644 --- a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/YsonBinding.java +++ b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/YsonBinding.java @@ -39,7 +39,7 @@ public void get(BindingGetResultSetContext ctx) throws SQLException { private static class YsonConverter implements Converter { @Override public YSON from(Object databaseObject) { - return (YSON) databaseObject; + return databaseObject == null ? null : (YSON) databaseObject; } @Override From 8bf0651c49f444db9b1396aae7becd1dbd29b615 Mon Sep 17 00:00:00 2001 From: Andrew Khairnasov Date: Mon, 16 Jun 2025 13:11:33 +0000 Subject: [PATCH 3/3] fix: handle null values in method to Interval64Binding, IntervalBinding, TimestampBinding, and YsonBinding --- .../src/main/java/tech/ydb/jooq/binding/Interval64Binding.java | 2 +- .../src/main/java/tech/ydb/jooq/binding/IntervalBinding.java | 2 +- .../src/main/java/tech/ydb/jooq/binding/TimestampBinding.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Interval64Binding.java b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Interval64Binding.java index d98040b..fbc36e5 100644 --- a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Interval64Binding.java +++ b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Interval64Binding.java @@ -49,7 +49,7 @@ public Duration from(ULong databaseObject) { @Override public ULong to(Duration userObject) { - return ULong.valueOf(TimeUnit.NANOSECONDS.toMicros(userObject.toNanos())); + return userObject == null ? null : ULong.valueOf(TimeUnit.NANOSECONDS.toMicros(userObject.toNanos())); } @Override diff --git a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/IntervalBinding.java b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/IntervalBinding.java index 4da1e61..d7bcfbb 100644 --- a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/IntervalBinding.java +++ b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/IntervalBinding.java @@ -44,7 +44,7 @@ public Duration from(YearToSecond databaseObject) { @Override public YearToSecond to(Duration userObject) { - return YearToSecond.valueOf(userObject); + return userObject == null ? null : YearToSecond.valueOf(userObject); } @Override diff --git a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/TimestampBinding.java b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/TimestampBinding.java index 8a32686..6b08e8e 100644 --- a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/TimestampBinding.java +++ b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/TimestampBinding.java @@ -44,7 +44,7 @@ public Instant from(LocalDateTime databaseObject) { @Override public LocalDateTime to(Instant userObject) { - return LocalDateTime.ofInstant(userObject, ZoneOffset.UTC); + return userObject == null ? null : LocalDateTime.ofInstant(userObject, ZoneOffset.UTC); } @Override