#220 - Refactor StatementMapper.

Use limit/offset instead of Page and accept Expression objects to declare a select list. Use SqlIdentifier in Update, Query, Criteria and fluent API.

Original pull request: #287.
This commit is contained in:
Mark Paluch
2020-01-24 14:35:58 +01:00
parent 64387d1776
commit 01eccbbbd7
23 changed files with 434 additions and 244 deletions

View File

@@ -96,7 +96,7 @@ public class R2dbcEntityTemplateUnitTests {
StatementRecorder.RecordedStatement statement = recorder.getCreatedStatement(s -> s.startsWith("SELECT"));
assertThat(statement.getSql()).isEqualTo("SELECT person.id FROM person WHERE person.THE_NAME = $1");
assertThat(statement.getSql()).isEqualTo("SELECT person.id FROM person WHERE person.THE_NAME = $1 LIMIT 1");
assertThat(statement.getBindings()).hasSize(1).containsEntry(0, SettableValue.from("Walter"));
}

View File

@@ -185,7 +185,7 @@ public class ReactiveSelectOperationUnitTests {
StatementRecorder.RecordedStatement statement = recorder.getCreatedStatement(s -> s.startsWith("SELECT"));
assertThat(statement.getSql()).isEqualTo("SELECT person.id FROM person WHERE person.THE_NAME = $1");
assertThat(statement.getSql()).isEqualTo("SELECT person.id FROM person WHERE person.THE_NAME = $1 LIMIT 1");
}
@Test // gh-220

View File

@@ -21,9 +21,9 @@ import static org.springframework.data.r2dbc.query.Criteria.*;
import java.util.Arrays;
import org.junit.Test;
import org.springframework.data.r2dbc.query.Criteria;
import org.springframework.data.r2dbc.query.Criteria.Combinator;
import org.springframework.data.r2dbc.query.Criteria.Comparator;
import org.springframework.data.r2dbc.query.Criteria.*;
import org.springframework.data.relational.core.sql.SqlIdentifier;
/**
* Unit tests for {@link Criteria}.
@@ -37,7 +37,7 @@ public class CriteriaUnitTests {
Criteria criteria = where("foo").is("bar").and("baz").isNotNull();
assertThat(criteria.getColumn()).isEqualTo("baz");
assertThat(criteria.getColumn()).isEqualTo(SqlIdentifier.unquoted("baz"));
assertThat(criteria.getComparator()).isEqualTo(Comparator.IS_NOT_NULL);
assertThat(criteria.getValue()).isNull();
assertThat(criteria.getPrevious()).isNotNull();
@@ -45,7 +45,7 @@ public class CriteriaUnitTests {
criteria = criteria.getPrevious();
assertThat(criteria.getColumn()).isEqualTo("foo");
assertThat(criteria.getColumn()).isEqualTo(SqlIdentifier.unquoted("foo"));
assertThat(criteria.getComparator()).isEqualTo(Comparator.EQ);
assertThat(criteria.getValue()).isEqualTo("bar");
}
@@ -55,7 +55,7 @@ public class CriteriaUnitTests {
Criteria criteria = where("foo").is("bar").or("baz").isNotNull();
assertThat(criteria.getColumn()).isEqualTo("baz");
assertThat(criteria.getColumn()).isEqualTo(SqlIdentifier.unquoted("baz"));
assertThat(criteria.getCombinator()).isEqualTo(Combinator.OR);
criteria = criteria.getPrevious();
@@ -69,7 +69,7 @@ public class CriteriaUnitTests {
Criteria criteria = where("foo").is("bar");
assertThat(criteria.getColumn()).isEqualTo("foo");
assertThat(criteria.getColumn()).isEqualTo(SqlIdentifier.unquoted("foo"));
assertThat(criteria.getComparator()).isEqualTo(Comparator.EQ);
assertThat(criteria.getValue()).isEqualTo("bar");
}
@@ -79,7 +79,7 @@ public class CriteriaUnitTests {
Criteria criteria = where("foo").not("bar");
assertThat(criteria.getColumn()).isEqualTo("foo");
assertThat(criteria.getColumn()).isEqualTo(SqlIdentifier.unquoted("foo"));
assertThat(criteria.getComparator()).isEqualTo(Comparator.NEQ);
assertThat(criteria.getValue()).isEqualTo("bar");
}
@@ -89,7 +89,7 @@ public class CriteriaUnitTests {
Criteria criteria = where("foo").in("bar", "baz");
assertThat(criteria.getColumn()).isEqualTo("foo");
assertThat(criteria.getColumn()).isEqualTo(SqlIdentifier.unquoted("foo"));
assertThat(criteria.getComparator()).isEqualTo(Comparator.IN);
assertThat(criteria.getValue()).isEqualTo(Arrays.asList("bar", "baz"));
}
@@ -99,7 +99,7 @@ public class CriteriaUnitTests {
Criteria criteria = where("foo").notIn("bar", "baz");
assertThat(criteria.getColumn()).isEqualTo("foo");
assertThat(criteria.getColumn()).isEqualTo(SqlIdentifier.unquoted("foo"));
assertThat(criteria.getComparator()).isEqualTo(Comparator.NOT_IN);
assertThat(criteria.getValue()).isEqualTo(Arrays.asList("bar", "baz"));
}
@@ -109,7 +109,7 @@ public class CriteriaUnitTests {
Criteria criteria = where("foo").greaterThan(1);
assertThat(criteria.getColumn()).isEqualTo("foo");
assertThat(criteria.getColumn()).isEqualTo(SqlIdentifier.unquoted("foo"));
assertThat(criteria.getComparator()).isEqualTo(Comparator.GT);
assertThat(criteria.getValue()).isEqualTo(1);
}
@@ -119,7 +119,7 @@ public class CriteriaUnitTests {
Criteria criteria = where("foo").greaterThanOrEquals(1);
assertThat(criteria.getColumn()).isEqualTo("foo");
assertThat(criteria.getColumn()).isEqualTo(SqlIdentifier.unquoted("foo"));
assertThat(criteria.getComparator()).isEqualTo(Comparator.GTE);
assertThat(criteria.getValue()).isEqualTo(1);
}
@@ -129,7 +129,7 @@ public class CriteriaUnitTests {
Criteria criteria = where("foo").lessThan(1);
assertThat(criteria.getColumn()).isEqualTo("foo");
assertThat(criteria.getColumn()).isEqualTo(SqlIdentifier.unquoted("foo"));
assertThat(criteria.getComparator()).isEqualTo(Comparator.LT);
assertThat(criteria.getValue()).isEqualTo(1);
}
@@ -139,7 +139,7 @@ public class CriteriaUnitTests {
Criteria criteria = where("foo").lessThanOrEquals(1);
assertThat(criteria.getColumn()).isEqualTo("foo");
assertThat(criteria.getColumn()).isEqualTo(SqlIdentifier.unquoted("foo"));
assertThat(criteria.getComparator()).isEqualTo(Comparator.LTE);
assertThat(criteria.getValue()).isEqualTo(1);
}
@@ -149,7 +149,7 @@ public class CriteriaUnitTests {
Criteria criteria = where("foo").like("hello%");
assertThat(criteria.getColumn()).isEqualTo("foo");
assertThat(criteria.getColumn()).isEqualTo(SqlIdentifier.unquoted("foo"));
assertThat(criteria.getComparator()).isEqualTo(Comparator.LIKE);
assertThat(criteria.getValue()).isEqualTo("hello%");
}
@@ -159,7 +159,7 @@ public class CriteriaUnitTests {
Criteria criteria = where("foo").isNull();
assertThat(criteria.getColumn()).isEqualTo("foo");
assertThat(criteria.getColumn()).isEqualTo(SqlIdentifier.unquoted("foo"));
assertThat(criteria.getComparator()).isEqualTo(Comparator.IS_NULL);
}
@@ -168,7 +168,7 @@ public class CriteriaUnitTests {
Criteria criteria = where("foo").isNotNull();
assertThat(criteria.getColumn()).isEqualTo("foo");
assertThat(criteria.getColumn()).isEqualTo(SqlIdentifier.unquoted("foo"));
assertThat(criteria.getComparator()).isEqualTo(Comparator.IS_NOT_NULL);
}
}

View File

@@ -34,6 +34,7 @@ import org.springframework.data.relational.core.mapping.Column;
import org.springframework.data.relational.core.sql.AssignValue;
import org.springframework.data.relational.core.sql.Expression;
import org.springframework.data.relational.core.sql.SQL;
import org.springframework.data.relational.core.sql.SqlIdentifier;
import org.springframework.data.relational.core.sql.Table;
/**
@@ -54,10 +55,10 @@ public class UpdateMapperUnitTests {
BoundAssignments mapped = map(update);
Map<String, Expression> assignments = mapped.getAssignments().stream().map(it -> (AssignValue) it)
Map<SqlIdentifier, Expression> assignments = mapped.getAssignments().stream().map(it -> (AssignValue) it)
.collect(Collectors.toMap(k -> k.getColumn().getName(), AssignValue::getValue));
assertThat(assignments).containsEntry("another_name", SQL.bindMarker("$1"));
assertThat(assignments).containsEntry(SqlIdentifier.unquoted("another_name"), SQL.bindMarker("$1"));
}
@Test // gh-64
@@ -67,10 +68,10 @@ public class UpdateMapperUnitTests {
BoundAssignments mapped = map(update);
Map<String, Expression> assignments = mapped.getAssignments().stream().map(it -> (AssignValue) it)
Map<SqlIdentifier, Expression> assignments = mapped.getAssignments().stream().map(it -> (AssignValue) it)
.collect(Collectors.toMap(k -> k.getColumn().getName(), AssignValue::getValue));
assertThat(assignments).containsEntry("another_name", SQL.bindMarker("$1"));
assertThat(assignments).containsEntry(SqlIdentifier.unquoted("another_name"), SQL.bindMarker("$1"));
mapped.getBindings().apply(bindTarget);
verify(bindTarget).bindNull(0, String.class);
@@ -87,7 +88,7 @@ public class UpdateMapperUnitTests {
assertThat(mapped.getAssignments().get(0).toString()).isEqualTo("person.another_name = NULL");
mapped.getBindings().apply(bindTarget);
verifyZeroInteractions(bindTarget);
verifyNoInteractions(bindTarget);
}
@Test // gh-195
@@ -97,12 +98,12 @@ public class UpdateMapperUnitTests {
BoundAssignments mapped = map(update);
Map<String, Expression> assignments = mapped.getAssignments().stream().map(it -> (AssignValue) it)
Map<SqlIdentifier, Expression> assignments = mapped.getAssignments().stream().map(it -> (AssignValue) it)
.collect(Collectors.toMap(k -> k.getColumn().getName(), AssignValue::getValue));
assertThat(update.getAssignments()).hasSize(3);
assertThat(assignments).hasSize(3).containsEntry("c1", SQL.bindMarker("$1")).containsEntry("c2",
SQL.bindMarker("$2"));
assertThat(assignments).hasSize(3).containsEntry(SqlIdentifier.unquoted("c1"), SQL.bindMarker("$1"))
.containsEntry(SqlIdentifier.unquoted("c2"), SQL.bindMarker("$2"));
}
private BoundAssignments map(Update update) {