This is an automated email from the ASF dual-hosted git repository. ilyak pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push: new f98b268 IGNITE-12672 Fix incorrect parsing of lower-case statements in Spring Data - Fixes #7420. f98b268 is described below commit f98b2686f389341ed0363309ca501852b93f7a8b Author: Evgeniy Rudenko <erude...@gridgain.com> AuthorDate: Tue Feb 18 13:33:08 2020 +0300 IGNITE-12672 Fix incorrect parsing of lower-case statements in Spring Data - Fixes #7420. Signed-off-by: Ilya Kasnacheev <ilya.kasnach...@gmail.com> --- .../repository/support/IgniteRepositoryFactory.java | 12 +++++++----- .../ignite/springdata/IgniteSpringDataCrudSelfTest.java | 8 ++++---- .../org/apache/ignite/springdata/misc/PersonRepository.java | 12 ++++++------ .../repository/support/IgniteRepositoryFactory.java | 12 +++++++----- .../ignite/springdata/IgniteSpringDataCrudSelfTest.java | 8 ++++---- .../org/apache/ignite/springdata/misc/PersonRepository.java | 12 ++++++------ 6 files changed, 34 insertions(+), 30 deletions(-) diff --git a/modules/spring-data-2.0/src/main/java/org/apache/ignite/springdata20/repository/support/IgniteRepositoryFactory.java b/modules/spring-data-2.0/src/main/java/org/apache/ignite/springdata20/repository/support/IgniteRepositoryFactory.java index f1ce9e3..3382c8a 100644 --- a/modules/spring-data-2.0/src/main/java/org/apache/ignite/springdata20/repository/support/IgniteRepositoryFactory.java +++ b/modules/spring-data-2.0/src/main/java/org/apache/ignite/springdata20/repository/support/IgniteRepositoryFactory.java @@ -198,18 +198,20 @@ public class IgniteRepositoryFactory extends RepositoryFactorySupport { * @return {@code true} if query is SqlFieldsQuery. */ private boolean isFieldQuery(String qry) { - return isStatement(qry) && !qry.matches("^SELECT\\s+(?:\\w+\\.)?+\\*.*"); + String qryUpperCase = qry.toUpperCase(); + + return isStatement(qryUpperCase) && !qryUpperCase.matches("^SELECT\\s+(?:\\w+\\.)?+\\*.*"); } /** * Evaluates if the query starts with a clause.<br> * <code>SELECT, INSERT, UPDATE, MERGE, DELETE</code> * - * @param qry Query string. + * @param qryUpperCase Query string in upper case. * @return {@code true} if query is full SQL statement. */ - private boolean isStatement(String qry) { - return qry.matches("^SELECT.*") || qry.matches("^UPDATE.*") || qry.matches("^DELETE.*") || - qry.matches("^MERGE.*") || qry.matches("^INSERT.*"); + private boolean isStatement(String qryUpperCase ) { + return qryUpperCase.matches("^\\s*SELECT\\b.*") || qryUpperCase.matches("^\\s*UPDATE\\b.*") || qryUpperCase.matches("^\\s*DELETE\\b.*") || + qryUpperCase.matches("^\\s*MERGE\\b.*") || qryUpperCase.matches("^\\s*INSERT\\b.*"); } } diff --git a/modules/spring-data-2.0/src/test/java/org/apache/ignite/springdata/IgniteSpringDataCrudSelfTest.java b/modules/spring-data-2.0/src/test/java/org/apache/ignite/springdata/IgniteSpringDataCrudSelfTest.java index ceaf487..7210d64 100644 --- a/modules/spring-data-2.0/src/test/java/org/apache/ignite/springdata/IgniteSpringDataCrudSelfTest.java +++ b/modules/spring-data-2.0/src/test/java/org/apache/ignite/springdata/IgniteSpringDataCrudSelfTest.java @@ -289,11 +289,11 @@ public class IgniteSpringDataCrudSelfTest extends GridCommonAbstractTest { } /** - * Delete unique record + * Delete unique record using lower case key word */ @Test public void testDeleteQuery() { - repo.deleteBySecondNameQuery("uniqueLastName"); + repo.deleteBySecondNameLowerCase("uniqueLastName"); long countAfter = repo.count(); assertEquals(CACHE_SIZE - 1, countAfter); @@ -321,9 +321,9 @@ public class IgniteSpringDataCrudSelfTest extends GridCommonAbstractTest { * Update with a @Query a record */ @Test - public void testUpdateQuery() { + public void testUpdateQueryMixedCase() { final String newSecondName = "updatedUniqueSecondName"; - int cnt = repo.setFixedSecondNameFor(newSecondName, "uniquePerson"); + int cnt = repo.setFixedSecondNameMixedCase(newSecondName, "uniquePerson"); assertEquals(1, cnt); diff --git a/modules/spring-data-2.0/src/test/java/org/apache/ignite/springdata/misc/PersonRepository.java b/modules/spring-data-2.0/src/test/java/org/apache/ignite/springdata/misc/PersonRepository.java index 90d8123..bb2b93f 100644 --- a/modules/spring-data-2.0/src/test/java/org/apache/ignite/springdata/misc/PersonRepository.java +++ b/modules/spring-data-2.0/src/test/java/org/apache/ignite/springdata/misc/PersonRepository.java @@ -101,17 +101,17 @@ public interface PersonRepository extends IgniteRepository<Person, Integer> { /** Remove Query */ public List<Person> removeByFirstName(String firstName); - /** Delete using @Query */ - @Query("DELETE FROM Person WHERE secondName = ?") - public void deleteBySecondNameQuery(String secondName); + /** Delete using @Query with keyword in lower-case */ + @Query("delete FROM Person WHERE secondName = ?") + public void deleteBySecondNameLowerCase(String secondName); /** Delete using @Query but with errors on the query */ @Query("DELETE FROM Person WHERE firstName = ? AND ERRORS = 'ERRORS'") public void deleteWrongByFirstNameQuery(String firstName); - /** Update using @Query */ - @Query("UPDATE Person SET secondName = ? WHERE firstName = ?") - public int setFixedSecondNameFor(String secondName, String firstName); + /** Update using @Query with keyword in mixed-case */ + @Query("upDATE Person SET secondName = ? WHERE firstName = ?") + public int setFixedSecondNameMixedCase(String secondName, String firstName); /** Update using @Query but with errors on the query */ @Query("UPDATE Person SET secondName = ? WHERE firstName = ? AND ERRORS = 'ERRORS'") diff --git a/modules/spring-data-2.2/src/main/java/org/apache/ignite/springdata22/repository/support/IgniteRepositoryFactory.java b/modules/spring-data-2.2/src/main/java/org/apache/ignite/springdata22/repository/support/IgniteRepositoryFactory.java index 6625ebc..882b305 100644 --- a/modules/spring-data-2.2/src/main/java/org/apache/ignite/springdata22/repository/support/IgniteRepositoryFactory.java +++ b/modules/spring-data-2.2/src/main/java/org/apache/ignite/springdata22/repository/support/IgniteRepositoryFactory.java @@ -198,18 +198,20 @@ public class IgniteRepositoryFactory extends RepositoryFactorySupport { * @return {@code true} if query is SqlFieldsQuery. */ private boolean isFieldQuery(String qry) { - return isStatement(qry) && !qry.matches("^SELECT\\s+(?:\\w+\\.)?+\\*.*"); + String qryUpperCase = qry.toUpperCase(); + + return isStatement(qryUpperCase) && !qryUpperCase.matches("^SELECT\\s+(?:\\w+\\.)?+\\*.*"); } /** * Evaluates if the query starts with a clause.<br> * <code>SELECT, INSERT, UPDATE, MERGE, DELETE</code> * - * @param qry Query string. + * @param qryUpperCase Query string. * @return {@code true} if query is full SQL statement. */ - private boolean isStatement(String qry) { - return qry.matches("^SELECT.*") || qry.matches("^UPDATE.*") || qry.matches("^DELETE.*") || - qry.matches("^MERGE.*") || qry.matches("^INSERT.*"); + private boolean isStatement(String qryUpperCase ) { + return qryUpperCase.matches("^\\s*SELECT\\b.*") || qryUpperCase.matches("^\\s*UPDATE\\b.*") || qryUpperCase.matches("^\\s*DELETE\\b.*") || + qryUpperCase.matches("^\\s*MERGE\\b.*") || qryUpperCase.matches("^\\s*INSERT\\b.*"); } } diff --git a/modules/spring-data-2.2/src/test/java/org/apache/ignite/springdata/IgniteSpringDataCrudSelfTest.java b/modules/spring-data-2.2/src/test/java/org/apache/ignite/springdata/IgniteSpringDataCrudSelfTest.java index 8e9a46c..a4cf8d3 100644 --- a/modules/spring-data-2.2/src/test/java/org/apache/ignite/springdata/IgniteSpringDataCrudSelfTest.java +++ b/modules/spring-data-2.2/src/test/java/org/apache/ignite/springdata/IgniteSpringDataCrudSelfTest.java @@ -289,11 +289,11 @@ public class IgniteSpringDataCrudSelfTest extends GridCommonAbstractTest { } /** - * Delete unique record + * Delete unique record using lower case key word */ @Test public void testDeleteQuery() { - repo.deleteBySecondNameQuery("uniqueLastName"); + repo.deleteBySecondNameLowerCase("uniqueLastName"); long countAfter = repo.count(); assertEquals(CACHE_SIZE - 1, countAfter); @@ -321,9 +321,9 @@ public class IgniteSpringDataCrudSelfTest extends GridCommonAbstractTest { * Update with a @Query a record */ @Test - public void testUpdateQuery() { + public void testUpdateQueryMixedCase() { final String newSecondName = "updatedUniqueSecondName"; - int cnt = repo.setFixedSecondNameFor(newSecondName, "uniquePerson"); + int cnt = repo.setFixedSecondNameMixedCase(newSecondName, "uniquePerson"); assertEquals(1, cnt); diff --git a/modules/spring-data-2.2/src/test/java/org/apache/ignite/springdata/misc/PersonRepository.java b/modules/spring-data-2.2/src/test/java/org/apache/ignite/springdata/misc/PersonRepository.java index b90d14c..88c3ae7 100644 --- a/modules/spring-data-2.2/src/test/java/org/apache/ignite/springdata/misc/PersonRepository.java +++ b/modules/spring-data-2.2/src/test/java/org/apache/ignite/springdata/misc/PersonRepository.java @@ -101,17 +101,17 @@ public interface PersonRepository extends IgniteRepository<Person, Integer> { /** Remove Query */ public long removeByFirstName(String firstName); - /** Delete using @Query */ - @Query("DELETE FROM Person WHERE secondName = ?") - public void deleteBySecondNameQuery(String secondName); + /** Delete using @Query with keyword in lower-case */ + @Query("delete FROM Person WHERE secondName = ?") + public void deleteBySecondNameLowerCase(String secondName); /** Delete using @Query but with errors on the query */ @Query("DELETE FROM Person WHERE firstName = ? AND ERRORS = 'ERRORS'") public void deleteWrongByFirstNameQuery(String firstName); - /** Update using @Query */ - @Query("UPDATE Person SET secondName = ? WHERE firstName = ?") - public int setFixedSecondNameFor(String secondName, String firstName); + /** Update using @Query with keyword in mixed-case */ + @Query("upDATE Person SET secondName = ? WHERE firstName = ?") + public int setFixedSecondNameMixedCase(String secondName, String firstName); /** Update using @Query but with errors on the query */ @Query("UPDATE Person SET secondName = ? WHERE firstName = ? AND ERRORS = 'ERRORS'")