Skip to content

Commit

Permalink
Refactoring.
Browse files Browse the repository at this point in the history
Clarified nullabillity for Identifier.
Removed usage of deprecated constructor for StringBasedJdbcQuery.

Original pull request #1901
  • Loading branch information
mipo256 authored and schauder committed Sep 30, 2024
1 parent 95a9f64 commit 08daf47
Show file tree
Hide file tree
Showing 5 changed files with 14 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import java.util.Objects;

import org.springframework.data.relational.core.sql.SqlIdentifier;
import org.springframework.lang.NonNull;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
Expand Down Expand Up @@ -60,17 +61,16 @@ public static Identifier empty() {
* Creates an {@link Identifier} from {@code name}, {@code value}, and a {@link Class target type}.
*
* @param name must not be {@literal null} or empty.
* @param value
* @param value must not be null
* @param targetType must not be {@literal null}.
* @return the {@link Identifier} for {@code name}, {@code value}, and a {@link Class target type}.
*/
public static Identifier of(SqlIdentifier name, Object value, Class<?> targetType) {

Assert.notNull(name, "Name must not be empty");
Assert.notNull(value, "Value must not be empty");
Assert.notNull(targetType, "Target type must not be null");

// TODO: Is value allowed to be null? SingleIdentifierValue says so, but this type doesn't allows it and
// SqlParametersFactory.lambda$forQueryByIdentifier$1 fails with a NPE.
return new Identifier(Collections.singletonList(new SingleIdentifierValue(name, value, targetType)));
}

Expand All @@ -92,7 +92,8 @@ public static Identifier from(Map<SqlIdentifier, Object> map) {

map.forEach((k, v) -> {

values.add(new SingleIdentifierValue(k, v, v != null ? ClassUtils.getUserClass(v) : Object.class));
Assert.notNull(v, "The source map for identifier cannot contain null values");
values.add(new SingleIdentifierValue(k, v, ClassUtils.getUserClass(v)));
});

return new Identifier(Collections.unmodifiableList(values));
Expand Down Expand Up @@ -199,9 +200,10 @@ static final class SingleIdentifierValue {
private final Object value;
private final Class<?> targetType;

private SingleIdentifierValue(SqlIdentifier name, @Nullable Object value, Class<?> targetType) {
private SingleIdentifierValue(SqlIdentifier name, Object value, Class<?> targetType) {

Assert.notNull(name, "Name must not be null");
Assert.notNull(value, "Name must not be null");
Assert.notNull(targetType, "TargetType must not be null");

this.name = name;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,7 @@ public static JdbcIdentifierBuilder empty() {
/**
* Creates ParentKeys with backreference for the given path and value of the parents id.
*/
public static JdbcIdentifierBuilder forBackReferences(JdbcConverter converter, AggregatePath path,
@Nullable Object value) {
public static JdbcIdentifierBuilder forBackReferences(JdbcConverter converter, AggregatePath path, Object value) {

Identifier identifier = Identifier.of( //
path.getTableInfo().reverseColumnInfo().name(), //
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ public class StringBasedJdbcQuery extends AbstractJdbcQuery {
public StringBasedJdbcQuery(JdbcQueryMethod queryMethod, NamedParameterJdbcOperations operations,
@Nullable RowMapper<?> defaultRowMapper, JdbcConverter converter,
QueryMethodEvaluationContextProvider evaluationContextProvider) {
this(queryMethod, operations, result -> (RowMapper<Object>) defaultRowMapper, converter, evaluationContextProvider);
this(queryMethod.getRequiredQuery(), queryMethod, operations, result -> (RowMapper<Object>) defaultRowMapper, converter, evaluationContextProvider);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,14 +50,16 @@ public void getParametersByName() {
public void parametersWithStringKeysUseObjectAsTypeForNull() {

HashMap<SqlIdentifier, Object> parameters = new HashMap<>();
parameters.put(unquoted("one"), null);
Object value = new Object();

parameters.put(unquoted("one"), value);

Identifier identifier = Identifier.from(parameters);

assertThat(identifier.getParts()) //
.extracting("name", "value", "targetType") //
.containsExactly( //
Assertions.tuple(unquoted("one"), null, Object.class) //
Assertions.tuple(unquoted("one"), value, Object.class) //
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -397,7 +397,7 @@ public SqlParameterSource extractParameterSource() {
mock(RelationResolver.class))
: this.converter;

StringBasedJdbcQuery query = new StringBasedJdbcQuery(method, operations, result -> mock(RowMapper.class),
StringBasedJdbcQuery query = new StringBasedJdbcQuery(method.getDeclaredQuery(), method, operations, result -> mock(RowMapper.class),
converter, evaluationContextProvider);

query.execute(arguments);
Expand Down

0 comments on commit 08daf47

Please # to comment.