Skip to content

Commit 51d0427

Browse files
committed
DATACASS-594 code review
1 parent e42f72e commit 51d0427

File tree

2 files changed

+28
-14
lines changed

2 files changed

+28
-14
lines changed

spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/CassandraSchemaValidator.java spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/convert/CassandraSchemaValidator.java

+23-11
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.springframework.data.cassandra.config;
1+
package org.springframework.data.cassandra.core.convert;
22

33
import java.util.Collection;
44
import java.util.LinkedList;
@@ -12,6 +12,7 @@
1212
import org.springframework.data.cassandra.CassandraKeyspaceDoesNotExistsException;
1313
import org.springframework.data.cassandra.CassandraNoActiveKeyspaceSetForCqlSessionException;
1414
import org.springframework.data.cassandra.CassandraSchemaValidationException;
15+
import org.springframework.data.cassandra.config.CassandraSchemaValidationProfile;
1516
import org.springframework.data.cassandra.core.mapping.BasicCassandraPersistentEntity;
1617
import org.springframework.data.cassandra.core.mapping.CassandraMappingContext;
1718
import org.springframework.data.cassandra.core.mapping.CassandraPersistentEntity;
@@ -36,20 +37,28 @@ public class CassandraSchemaValidator implements SmartInitializingSingleton {
3637

3738
private static final Log logger = LogFactory.getLog(CassandraSchemaValidator.class);
3839

39-
private final CqlSessionFactoryBean cqlSessionFactoryBean;
40+
private final CqlSession cqlSession;
4041

4142
private final CassandraMappingContext cassandraMappingContext;
4243

44+
private final ColumnTypeResolver columnTypeResolver;
45+
4346
private final boolean strictValidation;
4447

4548
public CassandraSchemaValidator(
46-
CqlSessionFactoryBean cqlSessionFactoryBean,
47-
CassandraMappingContext cassandraMappingContext,
49+
CqlSession cqlSession,
50+
CassandraConverter cassandraConverter,
4851
boolean strictValidation
4952
) {
5053
this.strictValidation = strictValidation;
51-
this.cqlSessionFactoryBean = cqlSessionFactoryBean;
52-
this.cassandraMappingContext = cassandraMappingContext;
54+
this.cqlSession = cqlSession;
55+
this.cassandraMappingContext = cassandraConverter.getMappingContext();
56+
this.columnTypeResolver = new DefaultColumnTypeResolver(
57+
cassandraMappingContext,
58+
SchemaFactory.ShallowUserTypeResolver.INSTANCE,
59+
cassandraConverter::getCodecRegistry,
60+
cassandraConverter::getCustomConversions
61+
);
5362
}
5463

5564
/**
@@ -60,13 +69,11 @@ public CassandraSchemaValidator(
6069
*/
6170
@Override
6271
public void afterSingletonsInstantiated() {
63-
CqlSession session = cqlSessionFactoryBean.getSession();
64-
65-
CqlIdentifier activeKeyspace = session
72+
CqlIdentifier activeKeyspace = cqlSession
6673
.getKeyspace()
6774
.orElseThrow(CassandraNoActiveKeyspaceSetForCqlSessionException::new);
6875

69-
KeyspaceMetadata keyspaceMetadata = session
76+
KeyspaceMetadata keyspaceMetadata = cqlSession
7077
.getMetadata()
7178
.getKeyspace(activeKeyspace)
7279
.orElseThrow(() -> new CassandraKeyspaceDoesNotExistsException(activeKeyspace.asInternal()));
@@ -131,6 +138,11 @@ private List<String> validateProperties(TableMetadata tableMetadata, BasicCassan
131138
List<String> validationErrors = new LinkedList<>();
132139

133140
entity.doWithProperties((PropertyHandler<CassandraPersistentProperty>) persistentProperty -> {
141+
142+
if (persistentProperty.isTransient()) {
143+
return;
144+
}
145+
134146
CqlIdentifier expectedColumnName = persistentProperty.getColumnName();
135147

136148
Assert.notNull(expectedColumnName, "Column cannot not be null at this point");
@@ -139,7 +151,7 @@ private List<String> validateProperties(TableMetadata tableMetadata, BasicCassan
139151

140152
if (column.isPresent()) {
141153
ColumnMetadata columnMetadata = column.get();
142-
DataType dataTypeExpected = CassandraSimpleTypeHolder.getDataTypeFor(persistentProperty.getRawType());
154+
DataType dataTypeExpected = columnTypeResolver.resolve(persistentProperty).getDataType();
143155

144156
if (dataTypeExpected == null) {
145157
validationErrors.add(

spring-data-cassandra/src/test/java/org/springframework/data/cassandra/config/CassandraSchemaValidatorTest.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
import org.springframework.context.annotation.Configuration;
1414
import org.springframework.data.annotation.Id;
1515
import org.springframework.data.cassandra.CassandraSchemaValidationException;
16+
import org.springframework.data.cassandra.core.convert.CassandraConverter;
17+
import org.springframework.data.cassandra.core.convert.CassandraSchemaValidator;
1618
import org.springframework.data.cassandra.core.mapping.CassandraMappingContext;
1719
import org.springframework.data.cassandra.core.mapping.Column;
1820
import org.springframework.data.cassandra.core.mapping.Table;
@@ -36,12 +38,12 @@ static class Config extends IntegrationTestConfig {
3638
@Bean("cassandraSchemaValidator")
3739
CassandraSchemaValidator cassandraSchemaValidator(
3840
CqlSessionFactoryBean cqlSessionFactoryBean,
39-
CassandraMappingContext cassandraMappingContext,
41+
CassandraConverter cassandraConverter,
4042
@Value("${validation.mode.strict:true}") Boolean validationModeStrict
4143
) {
4244
return new CassandraSchemaValidator(
43-
cqlSessionFactoryBean,
44-
cassandraMappingContext,
45+
cqlSessionFactoryBean.getSession(),
46+
cassandraConverter,
4547
validationModeStrict
4648
);
4749
}

0 commit comments

Comments
 (0)