This is an automated email from the ASF dual-hosted git repository.

ilyak pushed a commit to branch ignite-2.8.1
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/ignite-2.8.1 by this push:
     new 5100ec3  IGNITE-12672 Fix incorrect parsing of lower-case statements 
in Spring Data.
5100ec3 is described below

commit 5100ec3e5c4b0380096b3df4a9510457dcc32fdf
Author: Evgeniy Rudenko <erude...@gridgain.com>
AuthorDate: Wed Mar 25 16:12:31 2020 +0300

    IGNITE-12672 Fix incorrect parsing of lower-case statements in Spring Data.
    
    Cherry-picked from f98b2686f389341ed0363309ca501852b93f7a8b
---
 .../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 09c8735..d7fa92e 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
@@ -151,18 +151,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 63897fd..ff7c19c 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
@@ -151,18 +151,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'")

Reply via email to