From 2188b5d6cf76d2060b17b2e7ca5f0e360248aa8b Mon Sep 17 00:00:00 2001 From: Jens Schauder Date: Wed, 9 Dec 2020 09:03:46 +0100 Subject: [PATCH] DATAJDBC-637 - Fix tests for all databases. Adds SQL scripts for all databases. Separates tests for all databases vs. those that actually support nanosecond precision. Original pull request: #255. --- .../JdbcAggregateTemplateIntegrationTests.java | 17 ++++++++++++++++- .../data/jdbc/testing/TestDatabaseFeatures.java | 6 ++++++ ...dbcAggregateTemplateIntegrationTests-db2.sql | 8 ++++++++ ...JdbcAggregateTemplateIntegrationTests-h2.sql | 2 +- ...ggregateTemplateIntegrationTests-mariadb.sql | 7 +++++++ ...cAggregateTemplateIntegrationTests-mssql.sql | 9 +++++++++ ...cAggregateTemplateIntegrationTests-mysql.sql | 7 +++++++ ...AggregateTemplateIntegrationTests-oracle.sql | 8 ++++++++ ...gregateTemplateIntegrationTests-postgres.sql | 6 ++++++ 9 files changed, 68 insertions(+), 2 deletions(-) diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/JdbcAggregateTemplateIntegrationTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/JdbcAggregateTemplateIntegrationTests.java index dbbb5bae1..7248d14ac 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/JdbcAggregateTemplateIntegrationTests.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/JdbcAggregateTemplateIntegrationTests.java @@ -823,11 +823,26 @@ public class JdbcAggregateTemplateIntegrationTests { } @Test // DATAJDBC-637 + @EnabledOnFeature(SUPPORTS_NANOSECOND_PRECISION) public void saveAndLoadDateTimeWithFullPrecision() { WithLocalDateTime entity = new WithLocalDateTime(); entity.id = 23L; - entity.testTime = LocalDateTime.of(5, 5, 5, 5, 5, 5, 123456789); + entity.testTime = LocalDateTime.of(2005, 5, 5, 5, 5, 5, 123456789); + + template.insert(entity); + + WithLocalDateTime loaded = template.findById(23L, WithLocalDateTime.class); + + assertThat(loaded.testTime).isEqualTo(entity.testTime); + } + + @Test // DATAJDBC-637 + public void saveAndLoadDateTimeWithMicrosecondPrecision() { + + WithLocalDateTime entity = new WithLocalDateTime(); + entity.id = 23L; + entity.testTime = LocalDateTime.of(2005, 5, 5, 5, 5, 5, 123456000); template.insert(entity); diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/testing/TestDatabaseFeatures.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/testing/TestDatabaseFeatures.java index 20a6c2e9c..21a02f95b 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/testing/TestDatabaseFeatures.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/testing/TestDatabaseFeatures.java @@ -72,6 +72,11 @@ public class TestDatabaseFeatures { assumeThat(database).isNotIn(Database.MySql, Database.MariaDb, Database.SqlServer, Database.Db2, Database.Oracle); } + private void supportsNanosecondPrecision() { + + assumeThat(database).isNotIn(Database.MySql, Database.PostgreSql, Database.MariaDb, Database.SqlServer); + } + private void supportsMultiDimensionalArrays() { supportsArrays(); @@ -109,6 +114,7 @@ public class TestDatabaseFeatures { SUPPORTS_HUGE_NUMBERS(TestDatabaseFeatures::supportsHugeNumbers), // SUPPORTS_ARRAYS(TestDatabaseFeatures::supportsArrays), // SUPPORTS_GENERATED_IDS_IN_REFERENCED_ENTITIES(TestDatabaseFeatures::supportsGeneratedIdsInReferencedEntities), // + SUPPORTS_NANOSECOND_PRECISION(TestDatabaseFeatures::supportsNanosecondPrecision), // IS_HSQL(f -> f.databaseIs(Database.Hsql)); private final Consumer featureMethod; diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-db2.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-db2.sql index 0332be5ec..7b2b8d63e 100644 --- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-db2.sql +++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-db2.sql @@ -35,6 +35,7 @@ DROP TABLE NO_ID_LIST_CHAIN4; DROP TABLE WITH_READ_ONLY; DROP TABLE VERSIONED_AGGREGATE; +DROP TABLE WITH_LOCAL_DATE_TIME; CREATE TABLE LEGO_SET ( @@ -343,3 +344,10 @@ CREATE TABLE VERSIONED_AGGREGATE ID BIGINT GENERATED BY DEFAULT AS IDENTITY (START WITH 1) PRIMARY KEY, VERSION BIGINT ); + + +CREATE TABLE WITH_LOCAL_DATE_TIME +( + ID BIGINT NOT NULL PRIMARY KEY, + TEST_TIME TIMESTAMP(9) +); \ No newline at end of file diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-h2.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-h2.sql index c37a60036..63294ab7d 100644 --- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-h2.sql +++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-h2.sql @@ -307,6 +307,6 @@ CREATE TABLE WITH_READ_ONLY CREATE TABLE WITH_LOCAL_DATE_TIME ( - ID SERIAL PRIMARY KEY, + ID BIGINT PRIMARY KEY, TEST_TIME TIMESTAMP(9) WITHOUT TIME ZONE ); \ No newline at end of file diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-mariadb.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-mariadb.sql index 31bf495f8..31f000fc7 100644 --- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-mariadb.sql +++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-mariadb.sql @@ -290,3 +290,10 @@ CREATE TABLE VERSIONED_AGGREGATE ID BIGINT AUTO_INCREMENT PRIMARY KEY, VERSION BIGINT ); + + +CREATE TABLE WITH_LOCAL_DATE_TIME +( + ID BIGINT PRIMARY KEY, + TEST_TIME TIMESTAMP(6) +); \ No newline at end of file diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-mssql.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-mssql.sql index 3f37da782..ba982ac9e 100644 --- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-mssql.sql +++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-mssql.sql @@ -316,3 +316,12 @@ CREATE TABLE VERSIONED_AGGREGATE ID BIGINT IDENTITY PRIMARY KEY, VERSION BIGINT ); + + +DROP TABLE IF EXISTS WITH_LOCAL_DATE_TIME; + +CREATE TABLE WITH_LOCAL_DATE_TIME +( + ID BIGINT PRIMARY KEY, + TEST_TIME datetime2(7) +); \ No newline at end of file diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-mysql.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-mysql.sql index 9d8ba80f3..4df794b78 100644 --- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-mysql.sql +++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-mysql.sql @@ -295,3 +295,10 @@ CREATE TABLE WITH_READ_ONLY NAME VARCHAR(200), READ_ONLY VARCHAR(200) DEFAULT 'from-db' ); + + +CREATE TABLE WITH_LOCAL_DATE_TIME +( + ID BIGINT PRIMARY KEY, + TEST_TIME TIMESTAMP(6) +); \ No newline at end of file diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-oracle.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-oracle.sql index 655928596..b1a97093b 100644 --- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-oracle.sql +++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-oracle.sql @@ -27,6 +27,7 @@ DROP TABLE NO_ID_MAP_CHAIN3 CASCADE CONSTRAINTS PURGE; DROP TABLE NO_ID_MAP_CHAIN4 CASCADE CONSTRAINTS PURGE; DROP TABLE VERSIONED_AGGREGATE CASCADE CONSTRAINTS PURGE; DROP TABLE WITH_READ_ONLY CASCADE CONSTRAINTS PURGE; +DROP TABLE WITH_LOCAL_DATE_TIME CASCADE CONSTRAINTS PURGE; CREATE TABLE LEGO_SET ( @@ -325,3 +326,10 @@ CREATE TABLE WITH_READ_ONLY NAME VARCHAR(200), READ_ONLY VARCHAR(200) DEFAULT 'from-db' ); + + +CREATE TABLE WITH_LOCAL_DATE_TIME +( + ID NUMBER PRIMARY KEY, + TEST_TIME TIMESTAMP(9) +); \ No newline at end of file diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-postgres.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-postgres.sql index 30b158fc3..47c6841e6 100644 --- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-postgres.sql +++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-postgres.sql @@ -318,3 +318,9 @@ CREATE TABLE WITH_READ_ONLY NAME VARCHAR(200), READ_ONLY VARCHAR(200) DEFAULT 'from-db' ); + +CREATE TABLE WITH_LOCAL_DATE_TIME +( + ID BIGINT PRIMARY KEY, + TEST_TIME TIMESTAMP(9) WITHOUT TIME ZONE +); \ No newline at end of file