From badf78f66820023a3b83bd9ad592512dbc855c37 Mon Sep 17 00:00:00 2001 From: Auzel Date: Tue, 30 Nov 2021 13:34:41 -0600 Subject: [PATCH 1/3] fixed flaky tests in PartTreeR2dbcQueryUnitTests.java --- .../query/PartTreeR2dbcQueryUnitTests.java | 192 +++++++++++------- 1 file changed, 124 insertions(+), 68 deletions(-) diff --git a/src/test/java/org/springframework/data/r2dbc/repository/query/PartTreeR2dbcQueryUnitTests.java b/src/test/java/org/springframework/data/r2dbc/repository/query/PartTreeR2dbcQueryUnitTests.java index 6144c5fd..9efdcd0a 100644 --- a/src/test/java/org/springframework/data/r2dbc/repository/query/PartTreeR2dbcQueryUnitTests.java +++ b/src/test/java/org/springframework/data/r2dbc/repository/query/PartTreeR2dbcQueryUnitTests.java @@ -27,6 +27,8 @@ import java.lang.reflect.Method; import java.util.Collection; import java.util.Collections; +import java.util.List; +import java.util.ArrayList; import java.util.Date; import org.junit.jupiter.api.BeforeEach; @@ -108,8 +110,8 @@ void createsQueryToFindAllEntitiesByStringAttribute() throws Exception { dataAccessStrategy); PreparedOperation preparedOperation = createQuery(queryMethod, r2dbcQuery, "John"); - assertThat(preparedOperation.get()) - .isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name = $1"); + assertThat(formatOperation(preparedOperation)) + .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name = $1")); } @Test // gh-282 @@ -120,8 +122,8 @@ void createsQueryWithIsNullCondition() throws Exception { dataAccessStrategy); PreparedOperation preparedOperation = createQuery(queryMethod, r2dbcQuery, new Object[] { null }); - assertThat(preparedOperation.get()) - .isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name IS NULL"); + assertThat(formatOperation(preparedOperation)) + .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name IS NULL")); } @Test // gh-282 @@ -145,8 +147,8 @@ void createsQueryToFindAllEntitiesByTwoStringAttributes() throws Exception { PreparedOperation preparedOperation = createQuery(r2dbcQuery, getAccessor(queryMethod, new Object[] { "Doe", "John" })); - assertThat(preparedOperation.get()).isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE - + ".last_name = $1 AND (" + TABLE + ".first_name = $2)"); + assertThat(formatOperation(preparedOperation)).isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + + ".last_name = $1 AND (" + TABLE + ".first_name = $2)")); } @Test // gh-282 @@ -158,8 +160,8 @@ void createsQueryToFindAllEntitiesByOneOfTwoStringAttributes() throws Exception PreparedOperation preparedOperation = createQuery(r2dbcQuery, getAccessor(queryMethod, new Object[] { "Doe", "John" })); - assertThat(preparedOperation.get()).isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE - + ".last_name = $1 OR (" + TABLE + ".first_name = $2)"); + assertThat(formatOperation(preparedOperation)).isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + + ".last_name = $1 OR (" + TABLE + ".first_name = $2)")); } @Test // gh-282, gh-349 @@ -173,8 +175,8 @@ void createsQueryToFindAllEntitiesByDateAttributeBetween() throws Exception { RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { from, to }); PreparedOperation preparedOperation = createQuery(r2dbcQuery, accessor); - assertThat(preparedOperation.get()) - .isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".date_of_birth BETWEEN $1 AND $2"); + assertThat(formatOperation(preparedOperation)) + .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".date_of_birth BETWEEN $1 AND $2")); BindTarget bindTarget = mock(BindTarget.class); preparedOperation.bindTo(bindTarget); @@ -192,8 +194,8 @@ void createsQueryToFindAllEntitiesByIntegerAttributeLessThan() throws Exception RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { 30 }); PreparedOperation preparedOperation = createQuery(r2dbcQuery, accessor); - assertThat(preparedOperation.get()) - .isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age < $1"); + assertThat(formatOperation(preparedOperation)) + .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age < $1")); } @Test // gh-282 @@ -205,8 +207,8 @@ void createsQueryToFindAllEntitiesByIntegerAttributeLessThanEqual() throws Excep RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { 30 }); PreparedOperation preparedOperation = createQuery(r2dbcQuery, accessor); - assertThat(preparedOperation.get()) - .isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age <= $1"); + assertThat(formatOperation(preparedOperation)) + .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age <= $1")); } @Test // gh-282 @@ -218,8 +220,8 @@ void createsQueryToFindAllEntitiesByIntegerAttributeGreaterThan() throws Excepti RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { 30 }); PreparedOperation preparedOperation = createQuery(r2dbcQuery, accessor); - assertThat(preparedOperation.get()) - .isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age > $1"); + assertThat(formatOperation(preparedOperation)) + .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age > $1")); } @Test // gh-282 @@ -231,8 +233,8 @@ void createsQueryToFindAllEntitiesByIntegerAttributeGreaterThanEqual() throws Ex RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { 30 }); PreparedOperation preparedOperation = createQuery(r2dbcQuery, accessor); - assertThat(preparedOperation.get()) - .isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age >= $1"); + assertThat(formatOperation(preparedOperation)) + .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age >= $1")); } @Test // gh-282 @@ -244,8 +246,8 @@ void createsQueryToFindAllEntitiesByDateAttributeAfter() throws Exception { RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { new Date() }); PreparedOperation preparedOperation = createQuery(r2dbcQuery, accessor); - assertThat(preparedOperation.get()) - .isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".date_of_birth > $1"); + assertThat(formatOperation(preparedOperation)) + .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".date_of_birth > $1")); } @Test // gh-282 @@ -256,8 +258,8 @@ void createsQueryToFindAllEntitiesByDateAttributeBefore() throws Exception { RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { new Date() }); PreparedOperation preparedOperation = createQuery(r2dbcQuery, accessor); - assertThat(preparedOperation.get()) - .isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".date_of_birth < $1"); + assertThat(formatOperation(preparedOperation)) + .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".date_of_birth < $1")); } @Test // gh-282 @@ -269,8 +271,8 @@ void createsQueryToFindAllEntitiesByIntegerAttributeIsNull() throws Exception { RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[0]); PreparedOperation preparedOperation = createQuery(r2dbcQuery, accessor); - assertThat(preparedOperation.get()) - .isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age IS NULL"); + assertThat(formatOperation(preparedOperation)) + .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age IS NULL")); } @Test // gh-282 @@ -282,8 +284,8 @@ void createsQueryToFindAllEntitiesByIntegerAttributeIsNotNull() throws Exception RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[0]); PreparedOperation preparedOperation = createQuery(r2dbcQuery, accessor); - assertThat(preparedOperation.get()) - .isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age IS NOT NULL"); + assertThat(formatOperation(preparedOperation)) + .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age IS NOT NULL")); } @Test // gh-282 @@ -295,8 +297,8 @@ void createsQueryToFindAllEntitiesByStringAttributeLike() throws Exception { RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "%John%" }); PreparedOperation preparedOperation = createQuery(r2dbcQuery, accessor); - assertThat(preparedOperation.get()) - .isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name LIKE $1"); + assertThat(formatOperation(preparedOperation)) + .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name LIKE $1")); } @Test // gh-282 @@ -308,8 +310,8 @@ void createsQueryToFindAllEntitiesByStringAttributeNotLike() throws Exception { RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "%John%" }); PreparedOperation preparedOperation = createQuery(r2dbcQuery, accessor); - assertThat(preparedOperation.get()) - .isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name NOT LIKE $1"); + assertThat(formatOperation(preparedOperation)) + .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name NOT LIKE $1")); } @Test // gh-282 @@ -321,8 +323,8 @@ void createsQueryToFindAllEntitiesByStringAttributeStartingWith() throws Excepti RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "Jo" }); PreparedOperation preparedOperation = createQuery(r2dbcQuery, accessor); - assertThat(preparedOperation.get()) - .isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name LIKE $1"); + assertThat(formatOperation(preparedOperation)) + .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name LIKE $1")); } @Test // gh-282 @@ -348,8 +350,8 @@ void createsQueryToFindAllEntitiesByStringAttributeEndingWith() throws Exception RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "hn" }); PreparedOperation preparedOperation = createQuery(r2dbcQuery, accessor); - assertThat(preparedOperation.get()) - .isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name LIKE $1"); + assertThat(formatOperation(preparedOperation)) + .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name LIKE $1")); } @Test // gh-282 @@ -375,8 +377,8 @@ void createsQueryToFindAllEntitiesByStringAttributeContaining() throws Exception RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "oh" }); PreparedOperation preparedOperation = createQuery(r2dbcQuery, accessor); - assertThat(preparedOperation.get()) - .isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name LIKE $1"); + assertThat(formatOperation(preparedOperation)) + .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name LIKE $1")); } @Test // gh-282 @@ -402,8 +404,8 @@ void createsQueryToFindAllEntitiesByStringAttributeNotContaining() throws Except RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "oh" }); PreparedOperation preparedOperation = createQuery(r2dbcQuery, accessor); - assertThat(preparedOperation.get()) - .isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name NOT LIKE $1"); + assertThat(formatOperation(preparedOperation)) + .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name NOT LIKE $1")); } @Test // gh-282 @@ -429,9 +431,9 @@ void createsQueryToFindAllEntitiesByIntegerAttributeWithDescendingOrderingByStri RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "oh" }); PreparedOperation preparedOperation = createQuery(r2dbcQuery, accessor); - assertThat(preparedOperation.get()) + assertThat(formatOperation(preparedOperation)) .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 @@ -442,9 +444,9 @@ void createsQueryToFindAllEntitiesByIntegerAttributeWithAscendingOrderingByStrin RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "oh" }); PreparedOperation preparedOperation = createQuery(r2dbcQuery, accessor); - assertThat(preparedOperation.get()) + assertThat(formatOperation(preparedOperation)) .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 @@ -455,8 +457,8 @@ void createsQueryToFindAllEntitiesByStringAttributeNot() throws Exception { RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "Doe" }); PreparedOperation preparedOperation = createQuery(r2dbcQuery, accessor); - assertThat(preparedOperation.get()) - .isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".last_name != $1"); + assertThat(formatOperation(preparedOperation)) + .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".last_name != $1")); } @Test // gh-282 @@ -469,8 +471,8 @@ void createsQueryToFindAllEntitiesByIntegerAttributeIn() throws Exception { new Object[] { Collections.singleton(25) }); PreparedOperation preparedOperation = createQuery(r2dbcQuery, accessor); - assertThat(preparedOperation.get()) - .isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age IN ($1)"); + assertThat(formatOperation(preparedOperation)) + .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age IN ($1)")); } @Test // gh-282 @@ -482,8 +484,8 @@ void createsQueryToFindAllEntitiesByIntegerAttributeNotIn() throws Exception { new Object[] { Collections.singleton(25) }); PreparedOperation preparedOperation = createQuery(r2dbcQuery, accessor); - assertThat(preparedOperation.get()) - .isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age NOT IN ($1)"); + assertThat(formatOperation(preparedOperation)) + .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".age NOT IN ($1)")); } @Test // gh-282 @@ -495,8 +497,8 @@ void createsQueryToFindAllEntitiesByBooleanAttributeTrue() throws Exception { RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[0]); PreparedOperation preparedOperation = createQuery(r2dbcQuery, accessor); - assertThat(preparedOperation.get()) - .isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".active = TRUE"); + assertThat(formatOperation(preparedOperation)) + .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".active = TRUE")); } @Test // gh-282 @@ -508,8 +510,8 @@ void createsQueryToFindAllEntitiesByBooleanAttributeFalse() throws Exception { RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[0]); PreparedOperation preparedOperation = createQuery(r2dbcQuery, accessor); - assertThat(preparedOperation.get()) - .isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".active = FALSE"); + assertThat(formatOperation(preparedOperation)) + .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".active = FALSE")); } @Test // gh-282 @@ -521,8 +523,8 @@ void createsQueryToFindAllEntitiesByStringAttributeIgnoringCase() throws Excepti RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "John" }); PreparedOperation preparedOperation = createQuery(r2dbcQuery, accessor); - assertThat(preparedOperation.get()) - .isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE UPPER(" + TABLE + ".first_name) = UPPER($1)"); + assertThat(formatOperation(preparedOperation)) + .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE UPPER(" + TABLE + ".first_name) = UPPER($1)")); } @Test // gh-282 @@ -585,8 +587,8 @@ void createsQueryWithLimitToFindEntitiesByStringAttribute() throws Exception { RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "John" }); PreparedOperation preparedOperation = createQuery(r2dbcQuery, accessor); - assertThat(preparedOperation.get()) - .isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name = $1 LIMIT 3"); + assertThat(formatOperation(preparedOperation)) + .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name = $1 LIMIT 3")); } @Test // gh-282 @@ -598,8 +600,8 @@ void createsQueryToFindFirstEntityByStringAttribute() throws Exception { RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "John" }); PreparedOperation preparedOperation = createQuery(r2dbcQuery, accessor); - assertThat(preparedOperation.get()) - .isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name = $1 LIMIT 1"); + assertThat(formatOperation(preparedOperation)) + .isEqualTo(formatQuery("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name = $1 LIMIT 1")); } @Test // gh-341 @@ -622,8 +624,8 @@ void createsQueryToFindAllEntitiesByStringAttributeWithDistinct() throws Excepti dataAccessStrategy); PreparedOperation preparedOperation = createQuery(queryMethod, r2dbcQuery, "John"); - assertThat(preparedOperation.get()).isEqualTo("SELECT " + DISTINCT + " " + TABLE + ".first_name, " + TABLE - + ".foo FROM " + TABLE + " WHERE " + TABLE + ".first_name = $1"); + assertThat(formatOperation(preparedOperation)).isEqualTo(formatQuery("SELECT " + DISTINCT + " " + TABLE + ".first_name, " + TABLE + + ".foo FROM " + TABLE + " WHERE " + TABLE + ".first_name = $1")); } @Test // gh-475 @@ -634,9 +636,9 @@ void createsQueryToFindByOpenProjection() throws Exception { dataAccessStrategy); PreparedOperation preparedOperation = createQuery(queryMethod, r2dbcQuery); - assertThat(preparedOperation.get()).isEqualTo( - "SELECT users.id, users.first_name, users.last_name, users.date_of_birth, users.age, users.active FROM " - + TABLE); + assertThat(formatOperation(preparedOperation)).isEqualTo( + formatQuery("SELECT users.id, users.first_name, users.last_name, users.date_of_birth, users.age, users.active FROM " + + TABLE)); } @Test // gh-475 @@ -647,9 +649,9 @@ void createsDtoProjectionQuery() throws Exception { dataAccessStrategy); PreparedOperation preparedOperation = createQuery(queryMethod, r2dbcQuery); - assertThat(preparedOperation.get()).isEqualTo( - "SELECT users.id, users.first_name, users.last_name, users.date_of_birth, users.age, users.active FROM " - + TABLE); + assertThat(formatOperation(preparedOperation)).isEqualTo( + formatQuery("SELECT users.id, users.first_name, users.last_name, users.date_of_birth, users.age, users.active FROM " + + TABLE)); } @Test // gh-363 @@ -681,9 +683,63 @@ private R2dbcQueryMethod getQueryMethod(String methodName, Class... parameter } private RelationalParametersParameterAccessor getAccessor(R2dbcQueryMethod queryMethod, Object[] values) { - 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 sortedFieldsList = new ArrayList<>(); + StringBuilder fieldBuilder = new StringBuilder(); + StringBuilder sortedFields = new StringBuilder(); + + for(int i=0;i { @@ -767,7 +823,7 @@ interface UserRepository extends Repository { @Table("users") @Data private static class User { - + private @Id Long id; private String firstName; private String lastName; From 5095ac1c228e9bb6c0c291f4f5b3ed83f62dc02d Mon Sep 17 00:00:00 2001 From: Auzel Date: Tue, 30 Nov 2021 15:27:39 -0600 Subject: [PATCH 2/3] This commit fixes the flaky tests that results from the undeterministic behavior of getDeclaredFields. --- .../query/PartTreeR2dbcQueryUnitTests.java | 94 +++++++++---------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/src/test/java/org/springframework/data/r2dbc/repository/query/PartTreeR2dbcQueryUnitTests.java b/src/test/java/org/springframework/data/r2dbc/repository/query/PartTreeR2dbcQueryUnitTests.java index 9efdcd0a..7776805d 100644 --- a/src/test/java/org/springframework/data/r2dbc/repository/query/PartTreeR2dbcQueryUnitTests.java +++ b/src/test/java/org/springframework/data/r2dbc/repository/query/PartTreeR2dbcQueryUnitTests.java @@ -66,6 +66,7 @@ * @author Mark Paluch * @author Mingyuan Wu * @author Myeonghyeon Lee + * @author Philmon Roberts */ @ExtendWith(MockitoExtension.class) @MockitoSettings(strictness = Strictness.LENIENT) @@ -683,61 +684,60 @@ private R2dbcQueryMethod getQueryMethod(String methodName, Class... parameter } private RelationalParametersParameterAccessor getAccessor(R2dbcQueryMethod queryMethod, Object[] values) { - return new RelationalParametersParameterAccessor(queryMethod, values); + return new RelationalParametersParameterAccessor(queryMethod, values); } private static String formatOperation(PreparedOperation preparedOperation){ - return formatQuery(preparedOperation.get()); + 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(); + 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 sortedFieldsList = new ArrayList<>(); - StringBuilder fieldBuilder = new StringBuilder(); - StringBuilder sortedFields = new StringBuilder(); - - for(int i=0;i sortedFieldsList = new ArrayList<>(); + StringBuilder fieldBuilder = new StringBuilder(); + StringBuilder sortedFields = new StringBuilder(); + + for(int i=0;i { @Table("users") @Data private static class User { - + private @Id Long id; private String firstName; private String lastName; From 89760661bd7508ee7dcdb773ff184f9e0bdf0071 Mon Sep 17 00:00:00 2001 From: Auzel Date: Tue, 30 Nov 2021 15:34:00 -0600 Subject: [PATCH 3/3] This commit fixes the flaky tests that results from the undeterministic behavior of the getDeclaredFields method. --- .../r2dbc/repository/query/PartTreeR2dbcQueryUnitTests.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/org/springframework/data/r2dbc/repository/query/PartTreeR2dbcQueryUnitTests.java b/src/test/java/org/springframework/data/r2dbc/repository/query/PartTreeR2dbcQueryUnitTests.java index 7776805d..b84206d3 100644 --- a/src/test/java/org/springframework/data/r2dbc/repository/query/PartTreeR2dbcQueryUnitTests.java +++ b/src/test/java/org/springframework/data/r2dbc/repository/query/PartTreeR2dbcQueryUnitTests.java @@ -823,7 +823,7 @@ interface UserRepository extends Repository { @Table("users") @Data private static class User { - + private @Id Long id; private String firstName; private String lastName;