Browse Source

Fixes flaky tests in PartTreeR2dbcQueryUnitTests.java

The order of selected columns depended on the nondeterministic behavior of getDeclaredFields.

Original pull request spring-projects/spring-data-r2dbc/pull/691
pull/1188/head
Auzel 4 years ago committed by Jens Schauder
parent
commit
15f46e42c2
No known key found for this signature in database
GPG Key ID: 45CC872F17423DBF
  1. 188
      spring-data-r2dbc/src/test/java/org/springframework/data/r2dbc/repository/query/PartTreeR2dbcQueryUnitTests.java

188
spring-data-r2dbc/src/test/java/org/springframework/data/r2dbc/repository/query/PartTreeR2dbcQueryUnitTests.java

@ -27,6 +27,8 @@ import reactor.core.publisher.Mono;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
@ -66,6 +68,7 @@ import org.springframework.r2dbc.core.binding.BindTarget;
* @author Mingyuan Wu * @author Mingyuan Wu
* @author Myeonghyeon Lee * @author Myeonghyeon Lee
* @author Diego Krupitza * @author Diego Krupitza
* @author Philmon Roberts
*/ */
@ExtendWith(MockitoExtension.class) @ExtendWith(MockitoExtension.class)
@MockitoSettings(strictness = Strictness.LENIENT) @MockitoSettings(strictness = Strictness.LENIENT)
@ -110,8 +113,8 @@ class PartTreeR2dbcQueryUnitTests {
dataAccessStrategy); dataAccessStrategy);
PreparedOperation<?> preparedOperation = createQuery(queryMethod, r2dbcQuery, "John"); PreparedOperation<?> preparedOperation = createQuery(queryMethod, r2dbcQuery, "John");
assertThat(preparedOperation.get()) assertThat(formatOperation(preparedOperation))
.isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name = $1"); .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name = $1"));
} }
@Test // GH-282 @Test // GH-282
@ -122,8 +125,8 @@ class PartTreeR2dbcQueryUnitTests {
dataAccessStrategy); dataAccessStrategy);
PreparedOperation<?> preparedOperation = createQuery(queryMethod, r2dbcQuery, new Object[] { null }); PreparedOperation<?> preparedOperation = createQuery(queryMethod, r2dbcQuery, new Object[] { null });
assertThat(preparedOperation.get()) assertThat(formatOperation(preparedOperation))
.isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name IS NULL"); .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name IS NULL"));
} }
@Test // GH-282 @Test // GH-282
@ -147,8 +150,8 @@ class PartTreeR2dbcQueryUnitTests {
PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery,
getAccessor(queryMethod, new Object[] { "Doe", "John" })); getAccessor(queryMethod, new Object[] { "Doe", "John" }));
assertThat(preparedOperation.get()).isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE assertThat(formatOperation(preparedOperation)).isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE
+ ".last_name = $1 AND (" + TABLE + ".first_name = $2)"); + ".last_name = $1 AND (" + TABLE + ".first_name = $2)"));
} }
@Test // GH-282 @Test // GH-282
@ -160,8 +163,8 @@ class PartTreeR2dbcQueryUnitTests {
PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery,
getAccessor(queryMethod, new Object[] { "Doe", "John" })); getAccessor(queryMethod, new Object[] { "Doe", "John" }));
assertThat(preparedOperation.get()).isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE assertThat(formatOperation(preparedOperation)).isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE
+ ".last_name = $1 OR (" + TABLE + ".first_name = $2)"); + ".last_name = $1 OR (" + TABLE + ".first_name = $2)"));
} }
@Test // GH-282, gh-349 @Test // GH-282, gh-349
@ -175,8 +178,8 @@ class PartTreeR2dbcQueryUnitTests {
RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { from, to }); RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { from, to });
PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor); PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor);
assertThat(preparedOperation.get()) assertThat(formatOperation(preparedOperation))
.isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".date_of_birth BETWEEN $1 AND $2"); .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".date_of_birth BETWEEN $1 AND $2"));
BindTarget bindTarget = mock(BindTarget.class); BindTarget bindTarget = mock(BindTarget.class);
preparedOperation.bindTo(bindTarget); preparedOperation.bindTo(bindTarget);
@ -194,8 +197,8 @@ class PartTreeR2dbcQueryUnitTests {
RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { 30 }); RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { 30 });
PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor); PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor);
assertThat(preparedOperation.get()) assertThat(formatOperation(preparedOperation))
.isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age < $1"); .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age < $1"));
} }
@Test // GH-282 @Test // GH-282
@ -207,8 +210,8 @@ class PartTreeR2dbcQueryUnitTests {
RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { 30 }); RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { 30 });
PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor); PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor);
assertThat(preparedOperation.get()) assertThat(formatOperation(preparedOperation))
.isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age <= $1"); .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age <= $1"));
} }
@Test // GH-282 @Test // GH-282
@ -220,8 +223,8 @@ class PartTreeR2dbcQueryUnitTests {
RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { 30 }); RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { 30 });
PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor); PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor);
assertThat(preparedOperation.get()) assertThat(formatOperation(preparedOperation))
.isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age > $1"); .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age > $1"));
} }
@Test // GH-282 @Test // GH-282
@ -233,8 +236,8 @@ class PartTreeR2dbcQueryUnitTests {
RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { 30 }); RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { 30 });
PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor); PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor);
assertThat(preparedOperation.get()) assertThat(formatOperation(preparedOperation))
.isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age >= $1"); .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age >= $1"));
} }
@Test // GH-282 @Test // GH-282
@ -246,8 +249,8 @@ class PartTreeR2dbcQueryUnitTests {
RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { new Date() }); RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { new Date() });
PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor); PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor);
assertThat(preparedOperation.get()) assertThat(formatOperation(preparedOperation))
.isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".date_of_birth > $1"); .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".date_of_birth > $1"));
} }
@Test // GH-282 @Test // GH-282
@ -258,8 +261,8 @@ class PartTreeR2dbcQueryUnitTests {
RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { new Date() }); RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { new Date() });
PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor); PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor);
assertThat(preparedOperation.get()) assertThat(formatOperation(preparedOperation))
.isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".date_of_birth < $1"); .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".date_of_birth < $1"));
} }
@Test // GH-282 @Test // GH-282
@ -271,8 +274,8 @@ class PartTreeR2dbcQueryUnitTests {
RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[0]); RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[0]);
PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor); PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor);
assertThat(preparedOperation.get()) assertThat(formatOperation(preparedOperation))
.isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age IS NULL"); .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age IS NULL"));
} }
@Test // GH-282 @Test // GH-282
@ -284,8 +287,8 @@ class PartTreeR2dbcQueryUnitTests {
RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[0]); RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[0]);
PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor); PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor);
assertThat(preparedOperation.get()) assertThat(formatOperation(preparedOperation))
.isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age IS NOT NULL"); .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age IS NOT NULL"));
} }
@Test // GH-282 @Test // GH-282
@ -297,8 +300,8 @@ class PartTreeR2dbcQueryUnitTests {
RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "%John%" }); RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "%John%" });
PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor); PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor);
assertThat(preparedOperation.get()) assertThat(formatOperation(preparedOperation))
.isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name LIKE $1"); .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name LIKE $1"));
} }
@Test // GH-282 @Test // GH-282
@ -310,8 +313,8 @@ class PartTreeR2dbcQueryUnitTests {
RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "%John%" }); RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "%John%" });
PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor); PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor);
assertThat(preparedOperation.get()) assertThat(formatOperation(preparedOperation))
.isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name NOT LIKE $1"); .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name NOT LIKE $1"));
} }
@Test // GH-282 @Test // GH-282
@ -323,8 +326,8 @@ class PartTreeR2dbcQueryUnitTests {
RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "Jo" }); RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "Jo" });
PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor); PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor);
assertThat(preparedOperation.get()) assertThat(formatOperation(preparedOperation))
.isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name LIKE $1"); .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name LIKE $1"));
} }
@Test // GH-282 @Test // GH-282
@ -350,8 +353,8 @@ class PartTreeR2dbcQueryUnitTests {
RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "hn" }); RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "hn" });
PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor); PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor);
assertThat(preparedOperation.get()) assertThat(formatOperation(preparedOperation))
.isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name LIKE $1"); .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name LIKE $1"));
} }
@Test // GH-282 @Test // GH-282
@ -377,8 +380,8 @@ class PartTreeR2dbcQueryUnitTests {
RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "oh" }); RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "oh" });
PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor); PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor);
assertThat(preparedOperation.get()) assertThat(formatOperation(preparedOperation))
.isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name LIKE $1"); .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name LIKE $1"));
} }
@Test // GH-282 @Test // GH-282
@ -404,8 +407,8 @@ class PartTreeR2dbcQueryUnitTests {
RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "oh" }); RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "oh" });
PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor); PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor);
assertThat(preparedOperation.get()) assertThat(formatOperation(preparedOperation))
.isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name NOT LIKE $1"); .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name NOT LIKE $1"));
} }
@Test // GH-282 @Test // GH-282
@ -431,9 +434,9 @@ class PartTreeR2dbcQueryUnitTests {
RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "oh" }); RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "oh" });
PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor); PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor);
assertThat(preparedOperation.get()) assertThat(formatOperation(preparedOperation))
.isEqualTo( .isEqualTo(
"SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age = $1 ORDER BY users.last_name DESC"); formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age = $1 ORDER BY users.last_name DESC"));
} }
@Test // GH-282 @Test // GH-282
@ -444,9 +447,9 @@ class PartTreeR2dbcQueryUnitTests {
RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "oh" }); RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "oh" });
PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor); PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor);
assertThat(preparedOperation.get()) assertThat(formatOperation(preparedOperation))
.isEqualTo( .isEqualTo(
"SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age = $1 ORDER BY users.last_name ASC"); formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age = $1 ORDER BY users.last_name ASC"));
} }
@Test // GH-282 @Test // GH-282
@ -457,8 +460,8 @@ class PartTreeR2dbcQueryUnitTests {
RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "Doe" }); RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "Doe" });
PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor); PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor);
assertThat(preparedOperation.get()) assertThat(formatOperation(preparedOperation))
.isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".last_name != $1"); .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".last_name != $1"));
} }
@Test // GH-282 @Test // GH-282
@ -471,8 +474,8 @@ class PartTreeR2dbcQueryUnitTests {
new Object[] { Collections.singleton(25) }); new Object[] { Collections.singleton(25) });
PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor); PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor);
assertThat(preparedOperation.get()) assertThat(formatOperation(preparedOperation))
.isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age IN ($1)"); .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age IN ($1)"));
} }
@Test // GH-282 @Test // GH-282
@ -484,8 +487,8 @@ class PartTreeR2dbcQueryUnitTests {
new Object[] { Collections.singleton(25) }); new Object[] { Collections.singleton(25) });
PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor); PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor);
assertThat(preparedOperation.get()) assertThat(formatOperation(preparedOperation))
.isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age NOT IN ($1)"); .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age NOT IN ($1)"));
} }
@Test // GH-282, gh-698 @Test // GH-282, gh-698
@ -497,8 +500,8 @@ class PartTreeR2dbcQueryUnitTests {
RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[0]); RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[0]);
PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor); PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor);
assertThat(preparedOperation.get()) assertThat(formatOperation(preparedOperation))
.isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".active = $1"); .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".active = $1"));
} }
@Test // GH-282, gh-698 @Test // GH-282, gh-698
@ -510,8 +513,8 @@ class PartTreeR2dbcQueryUnitTests {
RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[0]); RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[0]);
PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor); PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor);
assertThat(preparedOperation.get()) assertThat(formatOperation(preparedOperation))
.isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".active = $1"); .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".active = $1"));
} }
@Test // GH-282 @Test // GH-282
@ -523,8 +526,8 @@ class PartTreeR2dbcQueryUnitTests {
RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "John" }); RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "John" });
PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor); PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor);
assertThat(preparedOperation.get()) assertThat(formatOperation(preparedOperation))
.isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE UPPER(" + TABLE + ".first_name) = UPPER($1)"); .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE UPPER(" + TABLE + ".first_name) = UPPER($1)"));
} }
@Test // GH-282 @Test // GH-282
@ -587,8 +590,8 @@ class PartTreeR2dbcQueryUnitTests {
RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "John" }); RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "John" });
PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor); PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor);
assertThat(preparedOperation.get()) assertThat(formatOperation(preparedOperation))
.isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name = $1 LIMIT 3"); .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name = $1 LIMIT 3"));
} }
@Test // GH-282 @Test // GH-282
@ -600,8 +603,8 @@ class PartTreeR2dbcQueryUnitTests {
RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "John" }); RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "John" });
PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor); PreparedOperation<?> preparedOperation = createQuery(r2dbcQuery, accessor);
assertThat(preparedOperation.get()) assertThat(formatOperation(preparedOperation))
.isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name = $1 LIMIT 1"); .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name = $1 LIMIT 1"));
} }
@Test // GH-341 @Test // GH-341
@ -624,8 +627,8 @@ class PartTreeR2dbcQueryUnitTests {
dataAccessStrategy); dataAccessStrategy);
PreparedOperation<?> preparedOperation = createQuery(queryMethod, r2dbcQuery, "John"); PreparedOperation<?> preparedOperation = createQuery(queryMethod, r2dbcQuery, "John");
assertThat(preparedOperation.get()).isEqualTo("SELECT " + DISTINCT + " " + TABLE + ".first_name, " + TABLE assertThat(formatOperation(preparedOperation)).isEqualTo(formatQuery("SELECT " + DISTINCT + " " + TABLE + ".first_name, " + TABLE
+ ".foo FROM " + TABLE + " WHERE " + TABLE + ".first_name = $1"); + ".foo FROM " + TABLE + " WHERE " + TABLE + ".first_name = $1"));
} }
@Test // GH-475 @Test // GH-475
@ -636,9 +639,9 @@ class PartTreeR2dbcQueryUnitTests {
dataAccessStrategy); dataAccessStrategy);
PreparedOperation<?> preparedOperation = createQuery(queryMethod, r2dbcQuery); PreparedOperation<?> preparedOperation = createQuery(queryMethod, r2dbcQuery);
assertThat(preparedOperation.get()).isEqualTo( assertThat(formatOperation(preparedOperation)).isEqualTo(
"SELECT users.id, users.first_name, users.last_name, users.date_of_birth, users.age, users.active FROM " formatQuery("SELECT users.id, users.first_name, users.last_name, users.date_of_birth, users.age, users.active FROM "
+ TABLE); + TABLE));
} }
@Test // GH-475 @Test // GH-475
@ -649,9 +652,9 @@ class PartTreeR2dbcQueryUnitTests {
dataAccessStrategy); dataAccessStrategy);
PreparedOperation<?> preparedOperation = createQuery(queryMethod, r2dbcQuery); PreparedOperation<?> preparedOperation = createQuery(queryMethod, r2dbcQuery);
assertThat(preparedOperation.get()).isEqualTo( assertThat(formatOperation(preparedOperation)).isEqualTo(
"SELECT users.id, users.first_name, users.last_name, users.date_of_birth, users.age, users.active FROM " formatQuery("SELECT users.id, users.first_name, users.last_name, users.date_of_birth, users.age, users.active FROM "
+ TABLE); + TABLE));
} }
@Test // GH-363 @Test // GH-363
@ -716,6 +719,59 @@ class PartTreeR2dbcQueryUnitTests {
return new RelationalParametersParameterAccessor(queryMethod, values); return new RelationalParametersParameterAccessor(queryMethod, values);
} }
private static String formatOperation(PreparedOperation<?> preparedOperation){
return formatQuery(preparedOperation.get());
}
private static String formatQuery(String query){
String firstKeyword = "SELECT";
String lastKeyword = "FROM";
int indexOfFirstKeyWord = query.toUpperCase().indexOf(firstKeyword);
int indexOfLastKeyWord = query.toUpperCase().indexOf(lastKeyword);
if(indexOfFirstKeyWord!=0 || indexOfFirstKeyWord>=indexOfLastKeyWord){
return query;
}
String fields = query.substring(firstKeyword.length(), indexOfLastKeyWord);
String sortedFields = sortFields(fields);
StringBuilder formattedQuery = new StringBuilder();
formattedQuery.append(firstKeyword);
formattedQuery.append(" ");
formattedQuery.append(sortedFields);
formattedQuery.append(" ");
formattedQuery.append(query.substring(indexOfLastKeyWord, query.length()));
return formattedQuery.toString();
}
private static String sortFields(String fields){
List<String> sortedFieldsList = new ArrayList<>();
StringBuilder fieldBuilder = new StringBuilder();
StringBuilder sortedFields = new StringBuilder();
for(int i=0;i<fields.length();i++){
if(fields.charAt(i)==','){
sortedFieldsList.add(fieldBuilder.toString().trim());
fieldBuilder = new StringBuilder();
}else{
fieldBuilder.append(fields.charAt(i));
}
}
sortedFieldsList.add(fieldBuilder.toString().trim());
Collections.sort(sortedFieldsList);
for(String sortedField: sortedFieldsList){
if(sortedFieldsList.get(0)!=sortedField){
sortedFields.append(", ");
}
sortedFields.append(sortedField);
}
return sortedFields.toString();
}
@SuppressWarnings("ALL") @SuppressWarnings("ALL")
interface UserRepository extends Repository<User, Long> { interface UserRepository extends Repository<User, Long> {

Loading…
Cancel
Save