You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by il...@apache.org on 2020/03/25 13:13:07 UTC
[ignite] branch ignite-2.8.1 updated: IGNITE-12672 Fix incorrect
parsing of lower-case statements in Spring Data.
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 <er...@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'")