From 7d02a422762b03a066e40d66fafcd9959bddb7e6 Mon Sep 17 00:00:00 2001 From: rbygrave Date: Wed, 17 Jun 2015 21:13:48 +1200 Subject: [PATCH] #309 - ScalarTypeConverters for Java8 time datatypes not working --- .../server/type/ScalarTypeBaseVarchar.java | 4 +-- .../server/type/ScalarTypeInstant.java | 2 +- .../server/type/ScalarTypeLocalDateTime.java | 2 +- .../server/type/ScalarTypeOffsetDateTime.java | 2 +- .../server/type/ScalarTypeYear.java | 2 +- .../server/type/ScalarTypeZonedDateTime.java | 2 +- .../basic/type/TestExtraScalarTypes.java | 12 +++++++ .../com/avaje/tests/types/TestNewTypes.java | 32 +++++++++++++++++++ 8 files changed, 51 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBaseVarchar.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBaseVarchar.java index 5a5c94298..79c19c197 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBaseVarchar.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBaseVarchar.java @@ -80,9 +80,9 @@ public abstract class ScalarTypeBaseVarchar extends ScalarTypeBase { @Override public Object toJdbcType(Object value) { if (value instanceof String) { - return parse((String) value); + return value; } - return value; + return format(value); } @Override diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeInstant.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeInstant.java index 5e309a9c8..95f25e478 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeInstant.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeInstant.java @@ -12,7 +12,7 @@ import java.time.Instant; public class ScalarTypeInstant extends ScalarTypeBaseDateTime { public ScalarTypeInstant(JsonConfig.DateTime mode) { - super(mode, Instant.class, true, Types.TIMESTAMP); + super(mode, Instant.class, false, Types.TIMESTAMP); } @Override diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeLocalDateTime.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeLocalDateTime.java index 12f209a46..92cf21014 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeLocalDateTime.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeLocalDateTime.java @@ -14,7 +14,7 @@ import java.time.ZonedDateTime; public class ScalarTypeLocalDateTime extends ScalarTypeBaseDateTime { public ScalarTypeLocalDateTime(JsonConfig.DateTime mode) { - super(mode, LocalDateTime.class, true, Types.TIMESTAMP); + super(mode, LocalDateTime.class, false, Types.TIMESTAMP); } @Override diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeOffsetDateTime.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeOffsetDateTime.java index 9864580e6..c53a3de42 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeOffsetDateTime.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeOffsetDateTime.java @@ -14,7 +14,7 @@ import java.time.ZoneId; public class ScalarTypeOffsetDateTime extends ScalarTypeBaseDateTime { public ScalarTypeOffsetDateTime(JsonConfig.DateTime mode) { - super(mode, OffsetDateTime.class, true, Types.TIMESTAMP); + super(mode, OffsetDateTime.class, false, Types.TIMESTAMP); } @Override diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeYear.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeYear.java index dda42be1c..39a3cdcc2 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeYear.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeYear.java @@ -19,7 +19,7 @@ import java.time.Year; public class ScalarTypeYear extends ScalarTypeBase { public ScalarTypeYear() { - super(Year.class, true, Types.INTEGER); + super(Year.class, false, Types.INTEGER); } @Override diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeZonedDateTime.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeZonedDateTime.java index 5b970da4a..543f1fb60 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeZonedDateTime.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeZonedDateTime.java @@ -14,7 +14,7 @@ import java.time.ZonedDateTime; public class ScalarTypeZonedDateTime extends ScalarTypeBaseDateTime { public ScalarTypeZonedDateTime(JsonConfig.DateTime mode) { - super(mode, ZonedDateTime.class, true, Types.TIMESTAMP); + super(mode, ZonedDateTime.class, false, Types.TIMESTAMP); } @Override diff --git a/src/test/java/com/avaje/tests/basic/type/TestExtraScalarTypes.java b/src/test/java/com/avaje/tests/basic/type/TestExtraScalarTypes.java index d7aa0318a..0065845f3 100644 --- a/src/test/java/com/avaje/tests/basic/type/TestExtraScalarTypes.java +++ b/src/test/java/com/avaje/tests/basic/type/TestExtraScalarTypes.java @@ -1,6 +1,7 @@ package com.avaje.tests.basic.type; import java.util.Currency; +import java.util.List; import java.util.Locale; import java.util.TimeZone; @@ -11,6 +12,8 @@ import com.avaje.ebean.BaseTestCase; import com.avaje.ebean.Ebean; import com.avaje.tests.model.basic.ESomeType; +import static org.junit.Assert.assertTrue; + public class TestExtraScalarTypes extends BaseTestCase { @Test @@ -32,6 +35,15 @@ public class TestExtraScalarTypes extends BaseTestCase { Assert.assertNotNull(e2.getCurrency()); Assert.assertNotNull(e2.getLocale()); Assert.assertNotNull(e2.getTimeZone()); + + List list = Ebean.find(ESomeType.class) + .setAutofetch(false).where() + .eq("locale", locale) + .eq("timeZone", tz.getID()) + .eq("currency", currency) + .findList(); + + assertTrue(!list.isEmpty()); } } diff --git a/src/test/java/com/avaje/tests/types/TestNewTypes.java b/src/test/java/com/avaje/tests/types/TestNewTypes.java index 9e738879a..574d4c63e 100644 --- a/src/test/java/com/avaje/tests/types/TestNewTypes.java +++ b/src/test/java/com/avaje/tests/types/TestNewTypes.java @@ -7,9 +7,11 @@ import org.junit.Test; import java.io.IOException; import java.time.*; +import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; public class TestNewTypes extends BaseTestCase { @@ -37,6 +39,36 @@ public class TestNewTypes extends BaseTestCase { Ebean.save(bean); + List list = Ebean.find(SomeNewTypesBean.class).where().lt("instant", Instant.now()).findList(); + assertTrue(!list.isEmpty()); + + list = Ebean.find(SomeNewTypesBean.class).where().le("localDate", LocalDate.now()).findList(); + assertTrue(!list.isEmpty()); + + list = Ebean.find(SomeNewTypesBean.class).where().lt("localDateTime", LocalDateTime.now()).findList(); + assertTrue(!list.isEmpty()); + + list = Ebean.find(SomeNewTypesBean.class).where().lt("offsetDateTime", OffsetDateTime.now()).findList(); + assertTrue(!list.isEmpty()); + + list = Ebean.find(SomeNewTypesBean.class).where().lt("zonedDateTime", ZonedDateTime.now()).findList(); + assertTrue(!list.isEmpty()); + + list = Ebean.find(SomeNewTypesBean.class).where().eq("zoneId", ZoneId.systemDefault().getId()).findList(); + assertTrue(!list.isEmpty()); + + list = Ebean.find(SomeNewTypesBean.class).where().eq("zoneOffset", ZonedDateTime.now().getOffset()).findList(); + assertTrue(!list.isEmpty()); + + list = Ebean.find(SomeNewTypesBean.class).where().le("yearMonth", YearMonth.of(2014, 9)).findList(); + assertTrue(!list.isEmpty()); + + list = Ebean.find(SomeNewTypesBean.class).where().le("year", Year.now()).findList(); + assertTrue(!list.isEmpty()); + + list = Ebean.find(SomeNewTypesBean.class).where().le("month", Month.SEPTEMBER).findList(); + assertTrue(!list.isEmpty()); + SomeNewTypesBean fetched = Ebean.find(SomeNewTypesBean.class, bean.getId()); assertEquals(bean.getZoneId(), fetched.getZoneId());