From 933b2f125df7fc9c49a4bbc6e5bcc8add3f7daa6 Mon Sep 17 00:00:00 2001 From: Jens Schauder Date: Mon, 13 Sep 2021 13:11:01 +0200 Subject: [PATCH] Add the appropriate SQL type representation for floats in Postgres arrays. Note that there is a separate problem with loading arrays of floats. Original pull request #1037 See #1046 --- .../core/dialect/JdbcPostgresDialect.java | 10 ++++++- ...JdbcAggregateTemplateIntegrationTests.java | 27 +++++++++++++++++++ ...bcAggregateTemplateIntegrationTests-h2.sql | 6 +++++ ...AggregateTemplateIntegrationTests-hsql.sql | 6 +++++ ...egateTemplateIntegrationTests-postgres.sql | 6 +++++ 5 files changed, 54 insertions(+), 1 deletion(-) diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/dialect/JdbcPostgresDialect.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/dialect/JdbcPostgresDialect.java index 839f8ff79..c17b51ef3 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/dialect/JdbcPostgresDialect.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/dialect/JdbcPostgresDialect.java @@ -38,7 +38,15 @@ public class JdbcPostgresDialect extends PostgresDialect implements JdbcDialect static class JdbcPostgresArrayColumns extends PostgresArrayColumns implements JdbcArrayColumns { @Override public String getSqlTypeRepresentation(JDBCType jdbcType) { - return jdbcType == JDBCType.DOUBLE ? "FLOAT8" : jdbcType.getName(); + + if (jdbcType == JDBCType.DOUBLE) { + return "FLOAT8"; + } + if (jdbcType == JDBCType.REAL) { + return "FLOAT4"; + } + + return jdbcType.getName(); } } } 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 334dca890..52d848a8f 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 @@ -573,6 +573,25 @@ public class JdbcAggregateTemplateIntegrationTests { assertThat(reloaded.digits).isEqualTo(Arrays.asList(1.2, 1.3, 1.4)); } + @Test // GH-1033 + @EnabledOnFeature(SUPPORTS_ARRAYS) + public void saveAndLoadAnEntityWithListOfFloat() { + + FloatListOwner floatListOwner = new FloatListOwner(); + final List values = Arrays.asList(1.2f, 1.3f, 1.4f); + floatListOwner.digits.addAll(values); + + FloatListOwner saved = template.save(floatListOwner); + + assertThat(saved.id).isNotNull(); + + FloatListOwner reloaded = template.findById(saved.id, FloatListOwner.class); + + assertThat(reloaded).isNotNull(); + assertThat(reloaded.id).isEqualTo(saved.id); + + } + @Test // DATAJDBC-259 @EnabledOnFeature(SUPPORTS_ARRAYS) public void saveAndLoadAnEntityWithSet() { @@ -929,6 +948,7 @@ public class JdbcAggregateTemplateIntegrationTests { List digits = new ArrayList<>(); } + @Table("ARRAY_OWNER") private static class SetOwner { @Id Long id; @@ -943,6 +963,13 @@ public class JdbcAggregateTemplateIntegrationTests { List digits = new ArrayList<>(); } + private static class FloatListOwner { + + @Id Long id; + + List digits = new ArrayList<>(); + } + @Data static class LegoSet { 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 8add25c8e..5a1f6002d 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 @@ -58,6 +58,12 @@ CREATE TABLE DOUBLE_LIST_OWNER DIGITS ARRAY[10] ); +CREATE TABLE FLOAT_LIST_OWNER +( + ID SERIAL PRIMARY KEY, + DIGITS ARRAY[10] +); + CREATE TABLE CHAIN4 ( FOUR SERIAL PRIMARY KEY, diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-hsql.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-hsql.sql index 96c5145e2..d0846a089 100644 --- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-hsql.sql +++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-hsql.sql @@ -60,6 +60,12 @@ CREATE TABLE DOUBLE_LIST_OWNER DIGITS DOUBLE PRECISION ARRAY[10] ); +CREATE TABLE FLOAT_LIST_OWNER +( + ID BIGINT GENERATED BY DEFAULT AS IDENTITY (START WITH 1) PRIMARY KEY, + DIGITS FLOAT ARRAY[10] +); + CREATE TABLE CHAIN4 ( FOUR BIGINT GENERATED BY DEFAULT AS IDENTITY (START WITH 40) PRIMARY KEY, 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 e1990584a..8a8c7f11e 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 @@ -67,6 +67,12 @@ CREATE TABLE DOUBLE_LIST_OWNER DIGITS DOUBLE PRECISION[10] ); +CREATE TABLE FLOAT_LIST_OWNER +( + ID SERIAL PRIMARY KEY, + DIGITS FLOAT[10] +); + CREATE TABLE BYTE_ARRAY_OWNER ( ID SERIAL PRIMARY KEY,