From d98ef188dd72af85060957db6c767e17e85aa224 Mon Sep 17 00:00:00 2001 From: Jens Schauder Date: Wed, 9 Jul 2025 15:43:08 +0200 Subject: [PATCH] Polishing. Fix Oracle test setup. Formatting. Restructure some code Author tags. Original pull request #2079 See #2007 --- .../query/StringBasedJdbcQuery.java | 12 ++--- .../JdbcRepositoryIntegrationTests.java | 23 ++++---- .../query/StringBasedJdbcQueryUnitTests.java | 54 ++++++++----------- .../JdbcRepositoryIntegrationTests-db2.sql | 5 +- .../JdbcRepositoryIntegrationTests-h2.sql | 5 +- .../JdbcRepositoryIntegrationTests-hsql.sql | 5 +- ...JdbcRepositoryIntegrationTests-mariadb.sql | 5 +- .../JdbcRepositoryIntegrationTests-mssql.sql | 5 +- .../JdbcRepositoryIntegrationTests-mysql.sql | 7 +-- .../JdbcRepositoryIntegrationTests-oracle.sql | 5 +- ...dbcRepositoryIntegrationTests-postgres.sql | 3 +- 11 files changed, 58 insertions(+), 71 deletions(-) diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/StringBasedJdbcQuery.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/StringBasedJdbcQuery.java index 454ad7bbd..c6808b093 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/StringBasedJdbcQuery.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/StringBasedJdbcQuery.java @@ -15,7 +15,7 @@ */ package org.springframework.data.jdbc.repository.query; -import static org.springframework.data.jdbc.repository.query.JdbcQueryExecution.ResultProcessingConverter; +import static org.springframework.data.jdbc.repository.query.JdbcQueryExecution.*; import java.lang.reflect.Array; import java.lang.reflect.Constructor; @@ -186,11 +186,8 @@ public class StringBasedJdbcQuery extends AbstractJdbcQuery { return this.query; } - private static void addEvaluatedParameterToParameterSource( - MapSqlParameterSource parameterMap, - String paramName, - ValueExpression valueExpression, - ValueEvaluationContext evaluationContext) { + private static void addEvaluatedParameterToParameterSource(MapSqlParameterSource parameterMap, String paramName, + ValueExpression valueExpression, ValueEvaluationContext evaluationContext) { Object evaluatedValue = valueExpression.evaluate(evaluationContext); Class valueType = valueExpression.getValueType(evaluationContext); @@ -215,8 +212,7 @@ public class StringBasedJdbcQuery extends AbstractJdbcQuery { } private static SQLType getSqlType(Class valueType) { - Class resolvedPrimitiveType = JdbcColumnTypes.INSTANCE.resolvePrimitiveType(valueType); - return JdbcUtil.targetSqlTypeFor(resolvedPrimitiveType); + return JdbcUtil.targetSqlTypeFor(JdbcColumnTypes.INSTANCE.resolvePrimitiveType(valueType)); } private JdbcQueryExecution createJdbcQueryExecution(RelationalParameterAccessor accessor, diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryIntegrationTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryIntegrationTests.java index 49eac7e56..fe2df745e 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryIntegrationTests.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryIntegrationTests.java @@ -44,7 +44,6 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.EnumSource; import org.junit.jupiter.params.provider.MethodSource; import org.junit.jupiter.params.provider.NullSource; -import org.junit.jupiter.params.provider.ValueSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.PropertiesFactoryBean; import org.springframework.context.ApplicationListener; @@ -352,16 +351,15 @@ public class JdbcRepositoryIntegrationTests { @ParameterizedTest @NullSource - @EnumSource(value = EnumClass.class) + @EnumSource(value = EnumClass.class) // GH-2007 void shouldSaveWithCustomSpellExpressions(EnumClass value) { + expressionSqlTypePropagationRepository.saveWithSpel(new ExpressionSqlTypePropagation(1L, value)); - var found = expressionSqlTypePropagationRepository.findById(1L); + ExpressionSqlTypePropagation reloaded = expressionSqlTypePropagationRepository.findById(1L).orElseThrow(); - assertThat(found).isPresent().hasValueSatisfying(entity -> { - assertThat(entity.getIdentifier()).isEqualTo(1L); - assertThat(entity.getEnumClass()).isEqualTo(value); - }); + assertThat(reloaded.getIdentifier()).isEqualTo(1L); + assertThat(reloaded.getEnumClass()).isEqualTo(value); } @Test // DATAJDBC-98 @@ -1596,13 +1594,12 @@ public class JdbcRepositoryIntegrationTests { // language=sql @Modifying @Query(value = """ - INSERT INTO EXPRESSION_SQL_TYPE_PROPAGATION(identifier, enum_class) + INSERT INTO EXPRESSION_SQL_TYPE_PROPAGATION(identifier, enum_class) VALUES(:#{#expressionSqlTypePropagation.identifier}, :#{#expressionSqlTypePropagation.enumClass}) - """) + """) void saveWithSpel(@Param("expressionSqlTypePropagation") ExpressionSqlTypePropagation expressionSqlTypePropagation); } - interface DummyProjection { String getName(); } @@ -1930,8 +1927,7 @@ public class JdbcRepositoryIntegrationTests { static class ExpressionSqlTypePropagation { - @Id - Long identifier; + @Id Long identifier; EnumClass enumClass; @@ -1950,8 +1946,7 @@ public class JdbcRepositoryIntegrationTests { } enum EnumClass { - ACTIVE, - DELETE + ACTIVE, DELETE } static class EntityWithSequence { diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/query/StringBasedJdbcQueryUnitTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/query/StringBasedJdbcQueryUnitTests.java index d8e26ccbf..5dd1e8b10 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/query/StringBasedJdbcQueryUnitTests.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/query/StringBasedJdbcQueryUnitTests.java @@ -15,17 +15,8 @@ */ package org.springframework.data.jdbc.repository.query; -import static org.assertj.core.api.Assertions.LIST; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; -import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.mockito.Mockito.RETURNS_DEEP_STUBS; -import static org.mockito.Mockito.any; -import static org.mockito.Mockito.anyString; -import static org.mockito.Mockito.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; import java.lang.reflect.Method; import java.sql.JDBCType; @@ -40,8 +31,10 @@ import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; +import java.util.stream.Collectors; import java.util.stream.Stream; +import org.assertj.core.groups.Tuple; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; @@ -92,6 +85,7 @@ import org.springframework.util.ReflectionUtils; * @author Chirag Tailor * @author Christopher Klein * @author Marcin Grzejszczak + * @author Mikhail Polivakha */ class StringBasedJdbcQueryUnitTests { @@ -322,23 +316,17 @@ class StringBasedJdbcQueryUnitTests { SqlParameterSource sqlParameterSource = forMethod("spelContainingQuery", ComplexEntity.class) .withArguments(expressionRootObject).extractParameterSource(); - var expectedSqlTypes = Map.of( - type, Types.VARCHAR, - score, Types.INTEGER, - creationDate, Types.TIMESTAMP, - dayOfWeek, Types.VARCHAR - ); + Set valueTypePairs = Arrays.stream(sqlParameterSource.getParameterNames()) // + .filter(n -> !n.equalsIgnoreCase("complexEntity")) // + .map(n -> tuple(sqlParameterSource.getValue(n), sqlParameterSource.getSqlType(n))) // + .collect(Collectors.toSet()); - assertThat(sqlParameterSource.getParameterNames()).hasSize(5); // 1 root + 4 expressions - assertThat(sqlParameterSource.getParameterNames()).satisfies(parameterNames -> { - for (var paramName : parameterNames) { - if (paramName.equalsIgnoreCase("complexEntity")) { - continue; // do not check root for sqlType - } - Object value = sqlParameterSource.getValue(paramName); - assertThat(sqlParameterSource.getSqlType(paramName)).isEqualTo(expectedSqlTypes.get(value)); - } - }); + assertThat(valueTypePairs).containsExactlyInAnyOrder( + tuple(type, Types.VARCHAR), + tuple(score, Types.INTEGER), + tuple(creationDate, Types.TIMESTAMP), + tuple(dayOfWeek, Types.VARCHAR) + ); } @Test // GH-1212 @@ -549,12 +537,12 @@ class StringBasedJdbcQueryUnitTests { List findByEnumTypeIn(Set directions); @Query(value = """ - SELECT * FROM my_table - WHERE t = :#{#complexEntity.type} - AND s = :#{#complexEntity.score} - AND cd = :#{#complexEntity.creationDate} - AND dow = :#{#complexEntity.dayOfWeek} - """) + SELECT * FROM my_table + WHERE t = :#{#complexEntity.type} + AND s = :#{#complexEntity.score} + AND cd = :#{#complexEntity.creationDate} + AND dow = :#{#complexEntity.dayOfWeek} + """) List spelContainingQuery(ComplexEntity complexEntity); @Query(value = "some sql statement") diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIntegrationTests-db2.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIntegrationTests-db2.sql index f274e8bdd..4387911c7 100644 --- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIntegrationTests-db2.sql +++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIntegrationTests-db2.sql @@ -65,7 +65,8 @@ CREATE TABLE PROVIDED_ID_ENTITY NAME VARCHAR(30) ); -CREATE TABLE EXPRESSION_SQL_TYPE_PROPAGATION( - IDENTIFIER BIGINT NOT NULL PRIMARY KEY, +CREATE TABLE EXPRESSION_SQL_TYPE_PROPAGATION +( + IDENTIFIER BIGINT NOT NULL PRIMARY KEY, ENUM_CLASS VARCHAR(30) ); diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIntegrationTests-h2.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIntegrationTests-h2.sql index 4704b4210..58b1c2921 100644 --- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIntegrationTests-h2.sql +++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIntegrationTests-h2.sql @@ -55,7 +55,8 @@ CREATE TABLE PROVIDED_ID_ENTITY NAME VARCHAR(30) ); -CREATE TABLE EXPRESSION_SQL_TYPE_PROPAGATION( - IDENTIFIER BIGINT PRIMARY KEY, +CREATE TABLE EXPRESSION_SQL_TYPE_PROPAGATION +( + IDENTIFIER BIGINT PRIMARY KEY, ENUM_CLASS VARCHAR(30) ); diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIntegrationTests-hsql.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIntegrationTests-hsql.sql index 4704b4210..58b1c2921 100644 --- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIntegrationTests-hsql.sql +++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIntegrationTests-hsql.sql @@ -55,7 +55,8 @@ CREATE TABLE PROVIDED_ID_ENTITY NAME VARCHAR(30) ); -CREATE TABLE EXPRESSION_SQL_TYPE_PROPAGATION( - IDENTIFIER BIGINT PRIMARY KEY, +CREATE TABLE EXPRESSION_SQL_TYPE_PROPAGATION +( + IDENTIFIER BIGINT PRIMARY KEY, ENUM_CLASS VARCHAR(30) ); diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIntegrationTests-mariadb.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIntegrationTests-mariadb.sql index 2479ce21e..3791fc4d6 100644 --- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIntegrationTests-mariadb.sql +++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIntegrationTests-mariadb.sql @@ -55,7 +55,8 @@ CREATE TABLE PROVIDED_ID_ENTITY NAME VARCHAR(30) ); -CREATE TABLE EXPRESSION_SQL_TYPE_PROPAGATION( - IDENTIFIER BIGINT PRIMARY KEY, +CREATE TABLE EXPRESSION_SQL_TYPE_PROPAGATION +( + IDENTIFIER BIGINT PRIMARY KEY, ENUM_CLASS VARCHAR(30) ); diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIntegrationTests-mssql.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIntegrationTests-mssql.sql index 6de31ac54..18504fe87 100644 --- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIntegrationTests-mssql.sql +++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIntegrationTests-mssql.sql @@ -65,7 +65,8 @@ CREATE TABLE PROVIDED_ID_ENTITY NAME VARCHAR(30) ); -CREATE TABLE EXPRESSION_SQL_TYPE_PROPAGATION( - IDENTIFIER BIGINT PRIMARY KEY, +CREATE TABLE EXPRESSION_SQL_TYPE_PROPAGATION +( + IDENTIFIER BIGINT PRIMARY KEY, ENUM_CLASS VARCHAR(30) ); diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIntegrationTests-mysql.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIntegrationTests-mysql.sql index 717afd961..4a6c53ca1 100644 --- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIntegrationTests-mysql.sql +++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIntegrationTests-mysql.sql @@ -1,5 +1,5 @@ SET - SQL_MODE = 'ALLOW_INVALID_DATES'; +SQL_MODE = 'ALLOW_INVALID_DATES'; CREATE TABLE DUMMY_ENTITY ( @@ -50,7 +50,8 @@ CREATE TABLE PROVIDED_ID_ENTITY NAME VARCHAR(30) ); -CREATE TABLE EXPRESSION_SQL_TYPE_PROPAGATION( - IDENTIFIER BIGINT PRIMARY KEY, +CREATE TABLE EXPRESSION_SQL_TYPE_PROPAGATION +( + IDENTIFIER BIGINT PRIMARY KEY, ENUM_CLASS VARCHAR(30) ); diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIntegrationTests-oracle.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIntegrationTests-oracle.sql index a81c96d34..e6ea80243 100644 --- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIntegrationTests-oracle.sql +++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIntegrationTests-oracle.sql @@ -65,7 +65,8 @@ CREATE TABLE PROVIDED_ID_ENTITY NAME VARCHAR2(30) ); -CREATE TABLE EXPRESSION_SQL_TYPE_PROPAGATION( - IDENTIFIER BIGINT PRIMARY KEY, +CREATE TABLE EXPRESSION_SQL_TYPE_PROPAGATION +( + IDENTIFIER NUMBER PRIMARY KEY, ENUM_CLASS VARCHAR2(30) ); diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIntegrationTests-postgres.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIntegrationTests-postgres.sql index fcf877a9b..15fe02747 100644 --- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIntegrationTests-postgres.sql +++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/JdbcRepositoryIntegrationTests-postgres.sql @@ -65,7 +65,8 @@ CREATE TABLE PROVIDED_ID_ENTITY NAME VARCHAR(30) ); -CREATE TABLE EXPRESSION_SQL_TYPE_PROPAGATION( +CREATE TABLE EXPRESSION_SQL_TYPE_PROPAGATION +( IDENTIFIER BIGINT PRIMARY KEY, ENUM_CLASS VARCHAR(30) );