From 050a3e2368bb00a25252d61cb9176f96e93748ce Mon Sep 17 00:00:00 2001 From: rob bygrave Date: Mon, 12 Oct 2020 15:37:39 +1300 Subject: [PATCH] #2076 - Refactor DbDefaultValue internals - remove dependency on javax.xml.bind.DatatypeConverter for verify of value --- .../config/dbplatform/DbDefaultValue.java | 10 +--- .../config/dbplatform/DbDefaultValueTest.java | 55 +++++++++++++++++++ 2 files changed, 57 insertions(+), 8 deletions(-) create mode 100644 ebean-api/src/test/java/io/ebean/config/dbplatform/DbDefaultValueTest.java diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/DbDefaultValue.java b/ebean-api/src/main/java/io/ebean/config/dbplatform/DbDefaultValue.java index 6b74f4498..b74465f35 100644 --- a/ebean-api/src/main/java/io/ebean/config/dbplatform/DbDefaultValue.java +++ b/ebean-api/src/main/java/io/ebean/config/dbplatform/DbDefaultValue.java @@ -1,13 +1,11 @@ package io.ebean.config.dbplatform; +import io.ebean.annotation.DbDefault; + import java.sql.Types; import java.util.LinkedHashMap; import java.util.Map; -import javax.xml.bind.DatatypeConverter; - -import io.ebean.annotation.DbDefault; - /** * DB Column default values mapping to database platform specific literals. */ @@ -170,14 +168,12 @@ public class DbDefaultValue { } sb.append('\''); return sb.toString(); - } private static String toDateLiteral(String value) { if (NOW.equals(value)) { return value; // this will get translated later } - DatatypeConverter.parseDate(value); // verify return toTextLiteral(value); } @@ -185,7 +181,6 @@ public class DbDefaultValue { if (NOW.equals(value)) { return value; // this will get translated later } - DatatypeConverter.parseTime(value); // verify return toTextLiteral(value); } @@ -193,7 +188,6 @@ public class DbDefaultValue { if (NOW.equals(value)) { return value; // this will get translated later } - DatatypeConverter.parseDateTime(value); // verify return toTextLiteral(value); } } diff --git a/ebean-api/src/test/java/io/ebean/config/dbplatform/DbDefaultValueTest.java b/ebean-api/src/test/java/io/ebean/config/dbplatform/DbDefaultValueTest.java new file mode 100644 index 000000000..2c94e989a --- /dev/null +++ b/ebean-api/src/test/java/io/ebean/config/dbplatform/DbDefaultValueTest.java @@ -0,0 +1,55 @@ +package io.ebean.config.dbplatform; + +import org.junit.Test; + +import java.sql.Types; +import java.time.LocalDate; +import java.time.LocalTime; +import java.time.OffsetDateTime; + +import static org.assertj.core.api.Assertions.assertThat; + +public class DbDefaultValueTest { + + @Test + public void toSqlLiteral_timestamp() { + assertThat(ts("2001-10-26T21:32:52")).isEqualTo("'2001-10-26T21:32:52'"); + assertThat(ts("2001-10-26T21:32:52+02:00")).isEqualTo("'2001-10-26T21:32:52+02:00'"); + assertThat(ts("2001-10-26T19:32:52Z")).isEqualTo("'2001-10-26T19:32:52Z'"); + assertThat(ts("2001-10-26T19:32:52+00:00")).isEqualTo("'2001-10-26T19:32:52+00:00'"); + assertThat(ts("-2001-10-26T21:32:52")).isEqualTo("'-2001-10-26T21:32:52'"); + assertThat(ts("2001-10-26T21:32:52.12679")).isEqualTo("'2001-10-26T21:32:52.12679'"); + } + + private String ts(String input) { + return DbDefaultValue.toSqlLiteral(input, OffsetDateTime.class, Types.TIMESTAMP); + } + + @Test + public void toSqlLiteral_date() { + assertThat(date("2001-10-26")).isEqualTo("'2001-10-26'"); + assertThat(date("2001-10-26+02:00")).isEqualTo("'2001-10-26+02:00'"); + assertThat(date("2001-10-26Z")).isEqualTo("'2001-10-26Z'"); + assertThat(date("2001-10-26+00:00")).isEqualTo("'2001-10-26+00:00'"); + assertThat(date("-2001-10-26")).isEqualTo("'-2001-10-26'"); + assertThat(date("-20000-04-01")).isEqualTo("'-20000-04-01'"); + } + + private String date(String input) { + return DbDefaultValue.toSqlLiteral(input, LocalDate.class, Types.DATE); + } + + @Test + public void toSqlLiteral_time() { + assertThat(time("21:32:52")).isEqualTo("'21:32:52'"); + assertThat(time("21:32:52+02:00")).isEqualTo("'21:32:52+02:00'"); + assertThat(time("19:32:52Z")).isEqualTo("'19:32:52Z'"); + assertThat(time("19:32:52+00:00")).isEqualTo("'19:32:52+00:00'"); + assertThat(time("21:32:52.12679")).isEqualTo("'21:32:52.12679'"); + } + + private String time(String input) { + return DbDefaultValue.toSqlLiteral(input, LocalTime.class, Types.TIME); + } + +}