Browse Source

Guard `JdbcSqlServerDialect` against absence of SQL Server JDBC driver.

Check for presence of microsoft.sql.DateTimeOffset class before returning it as type and associated converters.

Closes #2153
pull/2100/head
Mark Paluch 2 months ago
parent
commit
ed7844cd30
No known key found for this signature in database
GPG Key ID: 55BC6374BAA9D973
  1. 22
      spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/dialect/JdbcSqlServerDialect.java

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

@ -24,9 +24,12 @@ import java.util.Collection; @@ -24,9 +24,12 @@ import java.util.Collection;
import java.util.List;
import java.util.Set;
import org.jspecify.annotations.Nullable;
import org.springframework.core.convert.converter.Converter;
import org.springframework.data.convert.ReadingConverter;
import org.springframework.data.relational.core.dialect.SqlServerDialect;
import org.springframework.data.util.ClassUtils;
/**
* {@link SqlServerDialect} that registers JDBC specific converters.
@ -41,7 +44,21 @@ public class JdbcSqlServerDialect extends SqlServerDialect implements JdbcDialec @@ -41,7 +44,21 @@ public class JdbcSqlServerDialect extends SqlServerDialect implements JdbcDialec
public static final JdbcSqlServerDialect INSTANCE = new JdbcSqlServerDialect();
private static final Set<Class<?>> SIMPLE_TYPES = Set.of(DateTimeOffset.class);
private static final @Nullable Class<?> DATE_TIME_OFFSET_CLASS = ClassUtils
.loadIfPresent("microsoft.sql.DateTimeOffset", JdbcSqlServerDialect.class.getClassLoader());
private static final Set<Class<?>> SIMPLE_TYPES;
private static final List<Object> CONVERTERS;
static {
if (DATE_TIME_OFFSET_CLASS != null) {
SIMPLE_TYPES = Set.of(DATE_TIME_OFFSET_CLASS);
CONVERTERS = List.of(DateTimeOffsetToOffsetDateTimeConverter.INSTANCE, DateTimeOffsetToInstantConverter.INSTANCE);
} else {
SIMPLE_TYPES = Set.of();
CONVERTERS = List.of();
}
}
@Override
public Set<Class<?>> simpleTypes() {
@ -52,8 +69,7 @@ public class JdbcSqlServerDialect extends SqlServerDialect implements JdbcDialec @@ -52,8 +69,7 @@ public class JdbcSqlServerDialect extends SqlServerDialect implements JdbcDialec
public Collection<Object> getConverters() {
List<Object> converters = new ArrayList<>(super.getConverters());
converters.add(DateTimeOffsetToOffsetDateTimeConverter.INSTANCE);
converters.add(DateTimeOffsetToInstantConverter.INSTANCE);
converters.addAll(CONVERTERS);
return converters;
}

Loading…
Cancel
Save