Skip to content

Commit e2c2fc3

Browse files
committed
Extraneous warnings related to JdbcSqlServerDialect.
Add tests for R2DBC types as well. Closes #2147
1 parent 1326eec commit e2c2fc3

File tree

8 files changed

+147
-9
lines changed

8 files changed

+147
-9
lines changed

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/JdbcCustomConversions.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@
2222
import org.springframework.core.convert.converter.GenericConverter.ConvertiblePair;
2323
import org.springframework.data.convert.CustomConversions;
2424
import org.springframework.data.jdbc.core.mapping.JdbcSimpleTypes;
25+
import org.springframework.data.mapping.model.SimpleTypeHolder;
26+
import org.springframework.data.relational.core.dialect.Dialect;
27+
import org.springframework.lang.Contract;
28+
import org.springframework.util.Assert;
2529

2630
/**
2731
* Value object to capture custom conversion. {@link JdbcCustomConversions} also act as factory for

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/dialect/JdbcSqlServerDialect.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.ArrayList;
2323
import java.util.Collection;
2424
import java.util.List;
25+
import java.util.Set;
2526

2627
import org.springframework.core.convert.converter.Converter;
2728
import org.springframework.data.convert.ReadingConverter;
@@ -33,12 +34,20 @@
3334
* @author Jens Schauder
3435
* @author Christoph Strobl
3536
* @author Mikhail Polivakha
37+
* @author Mark Paluch
3638
* @since 2.3
3739
*/
3840
public class JdbcSqlServerDialect extends SqlServerDialect {
3941

4042
public static JdbcSqlServerDialect INSTANCE = new JdbcSqlServerDialect();
4143

44+
private static final Set<Class<?>> SIMPLE_TYPES = Set.of(DateTimeOffset.class);
45+
46+
@Override
47+
public Set<Class<?>> simpleTypes() {
48+
return SIMPLE_TYPES;
49+
}
50+
4251
@Override
4352
public Collection<Object> getConverters() {
4453

spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/dialect/JdbcPostgresDialectUnitTests.java

Lines changed: 41 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,12 @@
1717

1818
import static org.assertj.core.api.Assertions.*;
1919

20+
import java.util.ArrayList;
21+
import java.util.List;
22+
2023
import org.junit.jupiter.api.Test;
24+
import org.junit.jupiter.params.ParameterizedTest;
25+
import org.junit.jupiter.params.provider.MethodSource;
2126
import org.postgresql.geometric.PGbox;
2227
import org.postgresql.geometric.PGcircle;
2328
import org.postgresql.geometric.PGlseg;
@@ -26,28 +31,58 @@
2631
import org.postgresql.geometric.PGpolygon;
2732
import org.postgresql.util.PGobject;
2833

34+
import org.springframework.data.convert.CustomConversions;
35+
import org.springframework.data.jdbc.core.convert.JdbcCustomConversions;
36+
import org.springframework.data.jdbc.core.mapping.JdbcSimpleTypes;
37+
import org.springframework.data.mapping.model.SimpleTypeHolder;
38+
import org.springframework.data.relational.core.dialect.Dialect;
39+
2940
/**
3041
* Unit tests for {@link JdbcPostgresDialect}.
3142
*
3243
* @author Jens Schauder
44+
* @author Mark Paluch
3345
*/
34-
public class JdbcPostgresDialectUnitTests {
46+
class JdbcPostgresDialectUnitTests {
3547

3648
@Test // GH-1065
3749
void pgobjectIsConsideredSimple() {
3850
assertThat(JdbcPostgresDialect.INSTANCE.simpleTypes()).contains(PGobject.class);
3951
}
4052

41-
@Test // GH-1065
42-
void geometricalTypesAreConsideredSimple() {
53+
@ParameterizedTest // GH-1065, GH-2147
54+
@MethodSource("simpleTypes")
55+
void simpleTypesAreConsideredSimple(Class<?> type) {
56+
57+
JdbcCustomConversions conversions = createCustomConversions(JdbcPostgresDialect.INSTANCE);
58+
59+
assertThat(conversions.isSimpleType(type)).isTrue();
60+
assertThat(conversions.getSimpleTypeHolder().isSimpleType(type)).isTrue();
61+
}
4362

44-
assertThat(JdbcPostgresDialect.INSTANCE.simpleTypes()).contains( //
45-
PGpoint.class, //
63+
static List<Class<?>> simpleTypes() {
64+
return List.of(PGpoint.class, //
4665
PGbox.class, //
4766
PGcircle.class, //
4867
org.postgresql.geometric.PGline.class, //
4968
PGpath.class, //
5069
PGpolygon.class, //
51-
PGlseg.class);
70+
PGlseg.class, //
71+
PGobject.class);
72+
}
73+
74+
private static JdbcCustomConversions createCustomConversions(Dialect dialect) {
75+
76+
SimpleTypeHolder simpleTypeHolder = new SimpleTypeHolder(dialect.simpleTypes(), JdbcSimpleTypes.HOLDER);
77+
return new JdbcCustomConversions(CustomConversions.StoreConversions.of(simpleTypeHolder, storeConverters(dialect)),
78+
List.of());
79+
}
80+
81+
private static List<Object> storeConverters(Dialect dialect) {
82+
83+
List<Object> converters = new ArrayList<>();
84+
converters.addAll(dialect.getConverters());
85+
converters.addAll(JdbcCustomConversions.storeConverters());
86+
return converters;
5287
}
5388
}

spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/dialect/JdbcSqlServerDialectTest.java

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,26 +17,58 @@
1717

1818
import static org.assertj.core.api.Assertions.*;
1919

20+
import microsoft.sql.DateTimeOffset;
21+
2022
import java.time.Instant;
23+
import java.util.ArrayList;
2124
import java.util.List;
2225

2326
import org.junit.jupiter.api.Test;
2427

28+
import org.springframework.data.convert.CustomConversions;
2529
import org.springframework.data.jdbc.core.convert.JdbcCustomConversions;
30+
import org.springframework.data.jdbc.core.mapping.JdbcSimpleTypes;
31+
import org.springframework.data.mapping.model.SimpleTypeHolder;
32+
import org.springframework.data.relational.core.dialect.Dialect;
2633

2734
/**
2835
* Tests for {@link JdbcSqlServerDialect}
2936
*
3037
* @author Mikhail Polivakha
38+
* @author Mark Paluch
3139
*/
3240
class JdbcSqlServerDialectTest {
3341

3442
@Test // GH-1873
3543
void testCustomConversions() {
3644

37-
JdbcCustomConversions conversions = JdbcCustomConversions.of(JdbcSqlServerDialect.INSTANCE, List.of());
45+
JdbcCustomConversions conversions = createCustomConversions(JdbcSqlServerDialect.INSTANCE);
3846

39-
assertThat(conversions.hasCustomReadTarget(microsoft.sql.DateTimeOffset.class, Instant.class))
47+
assertThat(conversions.hasCustomReadTarget(DateTimeOffset.class, Instant.class))
4048
.isTrue();
4149
}
50+
51+
@Test // GH-2147
52+
void shouldReportSimpleTypes() {
53+
54+
JdbcCustomConversions conversions = createCustomConversions(JdbcSqlServerDialect.INSTANCE);
55+
56+
assertThat(conversions.isSimpleType(DateTimeOffset.class)).isTrue();
57+
assertThat(conversions.getSimpleTypeHolder().isSimpleType(DateTimeOffset.class)).isTrue();
58+
}
59+
60+
private static JdbcCustomConversions createCustomConversions(Dialect dialect) {
61+
62+
SimpleTypeHolder simpleTypeHolder = new SimpleTypeHolder(dialect.simpleTypes(), JdbcSimpleTypes.HOLDER);
63+
return new JdbcCustomConversions(CustomConversions.StoreConversions.of(simpleTypeHolder, storeConverters(dialect)),
64+
List.of());
65+
}
66+
67+
private static List<Object> storeConverters(Dialect dialect) {
68+
69+
List<Object> converters = new ArrayList<>();
70+
converters.addAll(dialect.getConverters());
71+
converters.addAll(JdbcCustomConversions.storeConverters());
72+
return converters;
73+
}
4274
}

spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/convert/R2dbcCustomConversions.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,18 @@
1+
/*
2+
* Copyright 2018-2025 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
116
package org.springframework.data.r2dbc.convert;
217

318
import java.util.ArrayList;

spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/dialect/R2dbcDialect.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ default SimpleTypeHolder getSimpleTypeHolder() {
4949
Set<Class<?>> simpleTypes = new HashSet<>(getSimpleTypes());
5050
simpleTypes.addAll(R2dbcSimpleTypeHolder.R2DBC_SIMPLE_TYPES);
5151

52-
return new SimpleTypeHolder(simpleTypes, true);
52+
return new SimpleTypeHolder(simpleTypes, R2dbcSimpleTypeHolder.HOLDER);
5353
}
5454

5555
/**
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/*
2+
* Copyright 2025 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.springframework.data.r2dbc.convert;
17+
18+
import static org.assertj.core.api.Assertions.*;
19+
20+
import io.r2dbc.spi.Blob;
21+
22+
import org.junit.jupiter.api.Test;
23+
24+
import org.springframework.data.r2dbc.dialect.H2Dialect;
25+
26+
/**
27+
* Unit tests for {@link R2dbcCustomConversions}.
28+
*
29+
* @author Mark Paluch
30+
*/
31+
class R2dbcCustomConversionsUnitTests {
32+
33+
@Test // GH-2147
34+
void shouldReportR2dbcSimpleTypes() {
35+
36+
R2dbcCustomConversions conversions = R2dbcCustomConversions.of(H2Dialect.INSTANCE);
37+
38+
assertThat(conversions.isSimpleType(Blob.class)).isTrue();
39+
}
40+
}

spring-data-r2dbc/src/test/java/org/springframework/data/r2dbc/dialect/PostgresDialectUnitTests.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
import static org.assertj.core.api.Assertions.*;
1919
import static org.assertj.core.api.SoftAssertions.*;
2020

21+
import io.r2dbc.postgresql.codec.Box;
22+
2123
import java.util.List;
2224

2325
import org.junit.jupiter.api.Test;
@@ -55,6 +57,7 @@ void shouldConsiderSimpleTypes() {
5557
it.assertThat(holder.isSimpleType(String.class)).isTrue();
5658
it.assertThat(holder.isSimpleType(int.class)).isTrue();
5759
it.assertThat(holder.isSimpleType(Integer.class)).isTrue();
60+
it.assertThat(holder.isSimpleType(Box.class)).isTrue();
5861
});
5962
}
6063

0 commit comments

Comments
 (0)