From 2e16f05a701ce6c1ea378d345dbe63eb05902fb5 Mon Sep 17 00:00:00 2001 From: Robin Bygrave Date: Thu, 18 Mar 2021 10:03:35 +1300 Subject: [PATCH] #2199 - ScalarTypeWrapper doesn't handle "nullValue" correctly Handles the case for ScalarTypeConverter with custom null value and binding the custom null value (via query parameter, CallableSql parameter etc) --- .../server/type/ScalarTypeWrapper.java | 3 -- .../server/type/ScalarTypeWrapperOidTest.java | 29 +++++++++++++++++++ .../model/ivo/converter/OidTypeConverter.java | 9 +++--- 3 files changed, 33 insertions(+), 8 deletions(-) create mode 100644 ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeWrapperOidTest.java diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeWrapper.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeWrapper.java index 8adee19d3..1ef378e03 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeWrapper.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeWrapper.java @@ -177,9 +177,6 @@ public class ScalarTypeWrapper implements ScalarType { @SuppressWarnings("unchecked") public Object toJdbcType(Object value) { Object sv = converter.unwrapValue((B) value); - if (sv == null) { - return nullValue; - } return scalarType.toJdbcType(sv); } diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeWrapperOidTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeWrapperOidTest.java new file mode 100644 index 000000000..cb602e7f2 --- /dev/null +++ b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeWrapperOidTest.java @@ -0,0 +1,29 @@ +package io.ebeaninternal.server.type; + +import org.junit.Test; +import org.tests.model.ivo.Oid; +import org.tests.model.ivo.converter.OidTypeConverter; + +import static org.assertj.core.api.Assertions.assertThat; + + +@SuppressWarnings({"rawtypes", "unchecked"}) +public class ScalarTypeWrapperOidTest { + + private final OidTypeConverter oidTypeConverter = new OidTypeConverter(); + private final ScalarTypeLong longType = new ScalarTypeLong(); + private final ScalarTypeWrapper,Long> wrapper = new ScalarTypeWrapper(Oid.class, longType, oidTypeConverter); + + @Test + public void toJdbcType() { + + assertThat(wrapper.toJdbcType(new Oid(42))).isEqualTo(42L); + assertThat(wrapper.toJdbcType(new Oid(98))).isEqualTo(98L); + } + + @Test + public void toJdbcType_when_nullValue() { + assertThat(wrapper.toJdbcType(OidTypeConverter.NULL_VALUE)).isNull(); + } + +} diff --git a/ebean-core/src/test/java/org/tests/model/ivo/converter/OidTypeConverter.java b/ebean-core/src/test/java/org/tests/model/ivo/converter/OidTypeConverter.java index a4f7fd782..73e67e206 100644 --- a/ebean-core/src/test/java/org/tests/model/ivo/converter/OidTypeConverter.java +++ b/ebean-core/src/test/java/org/tests/model/ivo/converter/OidTypeConverter.java @@ -5,22 +5,21 @@ import org.tests.model.ivo.Oid; public class OidTypeConverter implements ScalarTypeConverter,Long> { + public static final Oid NULL_VALUE = new Oid<>(0); + @Override public Oid getNullValue() { - return null; + return NULL_VALUE; } @Override public Oid wrapValue(Long scalarType) { - if (scalarType == null) { - return null; - } return new Oid<>(scalarType); } @Override public Long unwrapValue(Oid beanType) { - if (beanType == null) { + if (NULL_VALUE.equals(beanType)) { return null; } return beanType.getValue();