From 138c6cb16b837864ad543c3ebe154fb9b606ab29 Mon Sep 17 00:00:00 2001 From: Jack Lu Date: Mon, 20 Jul 2020 15:13:04 +0800 Subject: [PATCH 1/8] escaping querying with IN clause #12720 Signed-off-by: Jack Lu --- .../generator/AbstractQueryGenerator.java | 62 +++++++++++-------- .../integration/ProjectRepositoryIT.java | 14 +++++ .../repository/ProjectRepository.java | 7 +++ 3 files changed, 56 insertions(+), 27 deletions(-) diff --git a/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/generator/AbstractQueryGenerator.java b/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/generator/AbstractQueryGenerator.java index e319398c49a0..db37d3ef5f73 100644 --- a/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/generator/AbstractQueryGenerator.java +++ b/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/generator/AbstractQueryGenerator.java @@ -2,12 +2,14 @@ // Licensed under the MIT License. package com.azure.spring.data.cosmos.core.generator; -import com.azure.cosmos.models.SqlParameter; -import com.azure.cosmos.models.SqlQuerySpec; -import com.azure.spring.data.cosmos.core.query.Criteria; -import com.azure.spring.data.cosmos.core.query.CriteriaType; -import com.azure.spring.data.cosmos.core.query.DocumentQuery; -import com.azure.spring.data.cosmos.exception.IllegalQueryException; +import static com.azure.spring.data.cosmos.core.convert.MappingCosmosConverter.toCosmosDbValue; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.stream.Collectors; + import org.javatuples.Pair; import org.springframework.data.domain.Sort; import org.springframework.data.repository.query.parser.Part; @@ -15,12 +17,12 @@ import org.springframework.util.Assert; import org.springframework.util.StringUtils; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.stream.Collectors; - -import static com.azure.spring.data.cosmos.core.convert.MappingCosmosConverter.toCosmosDbValue; +import com.azure.cosmos.models.SqlParameter; +import com.azure.cosmos.models.SqlQuerySpec; +import com.azure.spring.data.cosmos.core.query.Criteria; +import com.azure.spring.data.cosmos.core.query.CriteriaType; +import com.azure.spring.data.cosmos.core.query.DocumentQuery; +import com.azure.spring.data.cosmos.exception.IllegalQueryException; /** * Base class for generating sql query @@ -124,29 +126,35 @@ private String generateClosedQuery(@NonNull String left, @NonNull String right, } @SuppressWarnings("unchecked") - private String generateInQuery(Criteria criteria) { + private String generateInQuery(@NonNull Criteria criteria, @NonNull List> parameters) { Assert.isTrue(criteria.getSubjectValues().size() == 1, "Criteria should have only one subject value"); if (!(criteria.getSubjectValues().get(0) instanceof Collection)) { throw new IllegalQueryException("IN keyword requires Collection type in parameters"); } - final List inRangeValues = new ArrayList<>(); + final Collection values = (Collection) criteria.getSubjectValues().get(0); - - values.forEach(o -> { - if (o instanceof Integer || o instanceof Long) { - inRangeValues.add(String.format("%d", o)); - } else if (o instanceof String) { - inRangeValues.add(String.format("'%s'", (String) o)); - } else if (o instanceof Boolean) { - inRangeValues.add(String.format("%b", (Boolean) o)); + + final StringBuilder builder = new StringBuilder(); + int index = 0; + Iterator iterator = values.iterator(); + while (iterator.hasNext()) { + Object o = iterator.next(); + if (o instanceof String || o instanceof Integer || o instanceof Long || o instanceof Boolean) { + String key = "p" + index; + if (index == 0) { + builder.append("@").append(key); + } else { + builder.append(",@").append(key); + } + parameters.add(Pair.with(key, o)); + index ++; } else { throw new IllegalQueryException("IN keyword Range only support Number and String type."); } - }); - - final String inRange = String.join(",", inRangeValues); - return String.format("r.%s %s (%s)", criteria.getSubject(), criteria.getType().getSqlKeyword(), inRange); + } + + return String.format("r.%s %s (%s)", criteria.getSubject(), criteria.getType().getSqlKeyword(), builder.toString()); } private String generateQueryBody(@NonNull Criteria criteria, @NonNull List> parameters) { @@ -157,7 +165,7 @@ private String generateQueryBody(@NonNull Criteria criteria, @NonNull List projects = null; + projects = this.repository.findAllByNameIn(Arrays.asList(NAME_1, NAME_2)); + assertProjectListEquals(projects, Arrays.asList(PROJECT_1, PROJECT_2)); + projects = this.repository.findAllByStarCountIn(Arrays.asList(STAR_COUNT_0, STAR_COUNT_1)); + assertProjectListEquals(projects, Arrays.asList(PROJECT_0, PROJECT_1, PROJECT_4)); + projects = this.repository.findAllByHasReleasedIn(Collections.singleton(false)); + assertProjectListEquals(projects, Arrays.asList(PROJECT_4)); + projects = this.repository.findAllByNameIn(Collections.singleton("sql) or (r.firstName <> ''")); + assertTrue(projects.isEmpty()); + } } diff --git a/sdk/cosmos/azure-spring-data-cosmos/src/test/java/com/azure/spring/data/cosmos/repository/repository/ProjectRepository.java b/sdk/cosmos/azure-spring-data-cosmos/src/test/java/com/azure/spring/data/cosmos/repository/repository/ProjectRepository.java index 562dab56f24a..3d99657f19d7 100644 --- a/sdk/cosmos/azure-spring-data-cosmos/src/test/java/com/azure/spring/data/cosmos/repository/repository/ProjectRepository.java +++ b/sdk/cosmos/azure-spring-data-cosmos/src/test/java/com/azure/spring/data/cosmos/repository/repository/ProjectRepository.java @@ -83,4 +83,11 @@ List findByNameOrCreatorAndForkCountOrStarCount(String name, String cre List findByNameIsNotNullAndHasReleased(boolean hasReleased); Page findByForkCount(Long forkCount, Pageable pageable); + + + List findAllByNameIn(Collection names); + + List findAllByStarCountIn(Collection startCounts); + + List findAllByHasReleasedIn(Collection releases); } From 84759c099333248aa2632f70e06cfca8ea5a32b0 Mon Sep 17 00:00:00 2001 From: Jack Lu Date: Mon, 20 Jul 2020 15:24:44 +0800 Subject: [PATCH 2/8] modify Signed-off-by: Jack Lu --- .../data/cosmos/core/generator/AbstractQueryGenerator.java | 6 +++--- .../cosmos/repository/integration/ProjectRepositoryIT.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/generator/AbstractQueryGenerator.java b/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/generator/AbstractQueryGenerator.java index db37d3ef5f73..58e6a1050bce 100644 --- a/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/generator/AbstractQueryGenerator.java +++ b/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/generator/AbstractQueryGenerator.java @@ -134,9 +134,9 @@ private String generateInQuery(@NonNull Criteria criteria, @NonNull List values = (Collection) criteria.getSubjectValues().get(0); - + final StringBuilder builder = new StringBuilder(); - int index = 0; + int index = 0; Iterator iterator = values.iterator(); while (iterator.hasNext()) { Object o = iterator.next(); @@ -148,7 +148,7 @@ private String generateInQuery(@NonNull Criteria criteria, @NonNull List ''")); + projects = this.repository.findAllByNameIn(Collections.singleton("sql) or (r.name <> ''")); assertTrue(projects.isEmpty()); } } From af025edd395108e6de9e0633a79408645df24bc7 Mon Sep 17 00:00:00 2001 From: Jack Lu Date: Mon, 20 Jul 2020 17:22:38 +0800 Subject: [PATCH 3/8] modify Signed-off-by: Jack Lu --- .../data/cosmos/core/generator/AbstractQueryGenerator.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/generator/AbstractQueryGenerator.java b/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/generator/AbstractQueryGenerator.java index 58e6a1050bce..ab2aa5b3ef73 100644 --- a/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/generator/AbstractQueryGenerator.java +++ b/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/generator/AbstractQueryGenerator.java @@ -132,7 +132,7 @@ private String generateInQuery(@NonNull Criteria criteria, @NonNull List values = (Collection) criteria.getSubjectValues().get(0); final StringBuilder builder = new StringBuilder(); @@ -153,7 +153,7 @@ private String generateInQuery(@NonNull Criteria criteria, @NonNull List Date: Tue, 21 Jul 2020 09:33:50 +0800 Subject: [PATCH 4/8] modify style --- .../generator/AbstractQueryGenerator.java | 51 ++++++++++--------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/generator/AbstractQueryGenerator.java b/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/generator/AbstractQueryGenerator.java index ab2aa5b3ef73..5b1320af91e1 100644 --- a/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/generator/AbstractQueryGenerator.java +++ b/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/generator/AbstractQueryGenerator.java @@ -2,14 +2,12 @@ // Licensed under the MIT License. package com.azure.spring.data.cosmos.core.generator; -import static com.azure.spring.data.cosmos.core.convert.MappingCosmosConverter.toCosmosDbValue; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.stream.Collectors; - +import com.azure.cosmos.models.SqlParameter; +import com.azure.cosmos.models.SqlQuerySpec; +import com.azure.spring.data.cosmos.core.query.Criteria; +import com.azure.spring.data.cosmos.core.query.CriteriaType; +import com.azure.spring.data.cosmos.core.query.DocumentQuery; +import com.azure.spring.data.cosmos.exception.IllegalQueryException; import org.javatuples.Pair; import org.springframework.data.domain.Sort; import org.springframework.data.repository.query.parser.Part; @@ -17,12 +15,13 @@ import org.springframework.util.Assert; import org.springframework.util.StringUtils; -import com.azure.cosmos.models.SqlParameter; -import com.azure.cosmos.models.SqlQuerySpec; -import com.azure.spring.data.cosmos.core.query.Criteria; -import com.azure.spring.data.cosmos.core.query.CriteriaType; -import com.azure.spring.data.cosmos.core.query.DocumentQuery; -import com.azure.spring.data.cosmos.exception.IllegalQueryException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.stream.Collectors; + +import static com.azure.spring.data.cosmos.core.convert.MappingCosmosConverter.toCosmosDbValue; /** * Base class for generating sql query @@ -69,6 +68,7 @@ private String generateBinaryQuery(@NonNull Criteria criteria, @NonNull List values = (Collection) criteria.getSubjectValues().get(0); + final Collection values = (Collection)criteria.getSubjectValues().get(0); final StringBuilder builder = new StringBuilder(); int index = 0; @@ -154,7 +155,8 @@ private String generateInQuery(@NonNull Criteria criteria, @NonNull List> parameters) { @@ -201,9 +203,8 @@ private String generateQueryBody(@NonNull Criteria criteria, @NonNull List subjects = sort.stream().map(this::getParameter).collect(Collectors.toList()); return queryTail - + " " - + String.join(",", subjects); + + " " + + String.join(",", subjects); } @NonNull @@ -258,9 +259,9 @@ protected SqlQuerySpec generateCosmosQuery(@NonNull DocumentQuery query, final List> parameters = queryBody.getValue1(); List sqlParameters = parameters.stream() - .map(p -> new SqlParameter("@" + p.getValue0(), - toCosmosDbValue(p.getValue1()))) - .collect(Collectors.toList()); + .map(p -> new SqlParameter("@" + p.getValue0(), + toCosmosDbValue(p.getValue1()))) + .collect(Collectors.toList()); return new SqlQuerySpec(queryString, sqlParameters); } From 522546376c9904a8ff9261b3afdcf71ca5d9a2fd Mon Sep 17 00:00:00 2001 From: Jack Lu Date: Tue, 21 Jul 2020 10:13:22 +0800 Subject: [PATCH 5/8] Optimized code --- .../data/cosmos/core/generator/AbstractQueryGenerator.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/generator/AbstractQueryGenerator.java b/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/generator/AbstractQueryGenerator.java index 5b1320af91e1..d05669b0a24c 100644 --- a/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/generator/AbstractQueryGenerator.java +++ b/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/generator/AbstractQueryGenerator.java @@ -17,7 +17,6 @@ import java.util.ArrayList; import java.util.Collection; -import java.util.Iterator; import java.util.List; import java.util.stream.Collectors; @@ -138,9 +137,7 @@ private String generateInQuery(@NonNull Criteria criteria, @NonNull List iterator = values.iterator(); - while (iterator.hasNext()) { - Object o = iterator.next(); + for (Object o : values) { if (o instanceof String || o instanceof Integer || o instanceof Long || o instanceof Boolean) { String key = "p" + index; if (index == 0) { From 3429ad554d799653e66bc3f3d65dee9015c5ea5e Mon Sep 17 00:00:00 2001 From: Jack Lu Date: Tue, 21 Jul 2020 11:17:58 +0800 Subject: [PATCH 6/8] Optimized code --- .../core/generator/AbstractQueryGenerator.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/generator/AbstractQueryGenerator.java b/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/generator/AbstractQueryGenerator.java index d05669b0a24c..0b74c86a626b 100644 --- a/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/generator/AbstractQueryGenerator.java +++ b/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/generator/AbstractQueryGenerator.java @@ -70,8 +70,8 @@ private String generateBinaryQuery(@NonNull Criteria criteria, @NonNull List values = (Collection)criteria.getSubjectValues().get(0); + final Collection values = (Collection) criteria.getSubjectValues().get(0); final StringBuilder builder = new StringBuilder(); int index = 0; @@ -256,9 +256,9 @@ protected SqlQuerySpec generateCosmosQuery(@NonNull DocumentQuery query, final List> parameters = queryBody.getValue1(); List sqlParameters = parameters.stream() - .map(p -> new SqlParameter("@" + p.getValue0(), - toCosmosDbValue(p.getValue1()))) - .collect(Collectors.toList()); + .map(p -> new SqlParameter("@" + p.getValue0(), + toCosmosDbValue(p.getValue1()))) + .collect(Collectors.toList()); return new SqlQuerySpec(queryString, sqlParameters); } From 48eb851ae9025ccf5ea5c6f4301d2ff30828d620 Mon Sep 17 00:00:00 2001 From: Jack Lu Date: Wed, 22 Jul 2020 09:51:32 +0800 Subject: [PATCH 7/8] Optimized code --- .../core/generator/AbstractQueryGenerator.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/generator/AbstractQueryGenerator.java b/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/generator/AbstractQueryGenerator.java index 0b74c86a626b..069f930a7bcb 100644 --- a/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/generator/AbstractQueryGenerator.java +++ b/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/generator/AbstractQueryGenerator.java @@ -70,8 +70,8 @@ private String generateBinaryQuery(@NonNull Criteria criteria, @NonNull List> parameters = queryBody.getValue1(); List sqlParameters = parameters.stream() - .map(p -> new SqlParameter("@" + p.getValue0(), - toCosmosDbValue(p.getValue1()))) - .collect(Collectors.toList()); + .map(p -> new SqlParameter("@" + p.getValue0(), + toCosmosDbValue(p.getValue1()))) + .collect(Collectors.toList()); return new SqlQuerySpec(queryString, sqlParameters); } From c211a02ac5cb614687a6d804d7cf041b57d42856 Mon Sep 17 00:00:00 2001 From: Jack Lu Date: Wed, 22 Jul 2020 11:47:20 +0800 Subject: [PATCH 8/8] Optimized code --- .../generator/AbstractQueryGenerator.java | 14 ++----- .../integration/ProjectRepositoryIT.java | 37 ++++++++----------- 2 files changed, 19 insertions(+), 32 deletions(-) diff --git a/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/generator/AbstractQueryGenerator.java b/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/generator/AbstractQueryGenerator.java index 069f930a7bcb..bb20f8a3ed59 100644 --- a/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/generator/AbstractQueryGenerator.java +++ b/sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/generator/AbstractQueryGenerator.java @@ -135,25 +135,19 @@ private String generateInQuery(@NonNull Criteria criteria, @NonNull List values = (Collection) criteria.getSubjectValues().get(0); - final StringBuilder builder = new StringBuilder(); - int index = 0; + final List paras = new ArrayList<>(); for (Object o : values) { if (o instanceof String || o instanceof Integer || o instanceof Long || o instanceof Boolean) { - String key = "p" + index; - if (index == 0) { - builder.append("@").append(key); - } else { - builder.append(",@").append(key); - } + String key = "p" + parameters.size(); + paras.add("@" + key); parameters.add(Pair.with(key, o)); - index++; } else { throw new IllegalQueryException("IN keyword Range only support Number and String type."); } } return String.format("r.%s %s (%s)", criteria.getSubject(), criteria.getType().getSqlKeyword(), - builder.toString()); + String.join(",", paras)); } private String generateQueryBody(@NonNull Criteria criteria, @NonNull List> parameters) { diff --git a/sdk/cosmos/azure-spring-data-cosmos/src/test/java/com/azure/spring/data/cosmos/repository/integration/ProjectRepositoryIT.java b/sdk/cosmos/azure-spring-data-cosmos/src/test/java/com/azure/spring/data/cosmos/repository/integration/ProjectRepositoryIT.java index dc05eb420bae..f88e03546b3a 100644 --- a/sdk/cosmos/azure-spring-data-cosmos/src/test/java/com/azure/spring/data/cosmos/repository/integration/ProjectRepositoryIT.java +++ b/sdk/cosmos/azure-spring-data-cosmos/src/test/java/com/azure/spring/data/cosmos/repository/integration/ProjectRepositoryIT.java @@ -74,7 +74,7 @@ public class ProjectRepositoryIT { private static final List PROJECTS = Arrays.asList(PROJECT_0, PROJECT_1, PROJECT_2, PROJECT_3, PROJECT_4); private static final CosmosEntityInformation entityInformation = - new CosmosEntityInformation<>(Project.class); + new CosmosEntityInformation<>(Project.class); private static CosmosTemplate staticTemplate; private static boolean isSetupDone; @@ -218,7 +218,7 @@ public void testFindByWithOrOr() { @Test public void testFindByWithOrAndOr() { List projects = repository.findByNameOrCreatorAndForkCountOrStarCount(NAME_1, CREATOR_0, - FORK_COUNT_2, STAR_COUNT_3); + FORK_COUNT_2, STAR_COUNT_3); assertProjectListEquals(projects, Arrays.asList(PROJECT_1, PROJECT_3)); @@ -227,7 +227,7 @@ public void testFindByWithOrAndOr() { assertProjectListEquals(projects, Arrays.asList(PROJECT_0, PROJECT_1, PROJECT_3, PROJECT_4)); projects = repository.findByNameOrCreatorAndForkCountOrStarCount(FAKE_NAME, CREATOR_1, - FORK_COUNT_0, FAKE_COUNT); + FORK_COUNT_0, FAKE_COUNT); Assert.assertTrue(projects.isEmpty()); } @@ -294,7 +294,7 @@ public void testFindByLessThanAndGreaterThan() { @Test public void testFindByLessThanEqualsAndGreaterThanEquals() { List projects = repository.findByForkCountLessThanEqualAndStarCountGreaterThan( - STAR_COUNT_MIN, FORK_COUNT_0); + STAR_COUNT_MIN, FORK_COUNT_0); Assert.assertTrue(projects.isEmpty()); @@ -394,17 +394,17 @@ public void testFindByIn() { @Test public void testFindByInWithAnd() { List projects = repository.findByCreatorInAndStarCountIn(Arrays.asList(CREATOR_0, CREATOR_1), - Arrays.asList(STAR_COUNT_2, STAR_COUNT_3)); + Arrays.asList(STAR_COUNT_2, STAR_COUNT_3)); Assert.assertTrue(projects.isEmpty()); projects = repository.findByCreatorInAndStarCountIn(Arrays.asList(CREATOR_0, CREATOR_1), - Arrays.asList(STAR_COUNT_0, STAR_COUNT_2)); + Arrays.asList(STAR_COUNT_0, STAR_COUNT_2)); assertProjectListEquals(projects, Arrays.asList(PROJECT_0, PROJECT_4)); projects = repository.findByCreatorInAndStarCountIn(Arrays.asList(CREATOR_0, CREATOR_1, CREATOR_2), - Arrays.asList(STAR_COUNT_0, STAR_COUNT_1, STAR_COUNT_2)); + Arrays.asList(STAR_COUNT_0, STAR_COUNT_1, STAR_COUNT_2)); assertProjectListEquals(projects, Arrays.asList(PROJECT_0, PROJECT_1, PROJECT_2, PROJECT_4)); } @@ -412,7 +412,7 @@ public void testFindByInWithAnd() { @Test public void testFindByNotIn() { List projects = repository.findByCreatorNotIn( - Arrays.asList(CREATOR_0, CREATOR_1, CREATOR_2, CREATOR_3)); + Arrays.asList(CREATOR_0, CREATOR_1, CREATOR_2, CREATOR_3)); Assert.assertTrue(projects.isEmpty()); @@ -428,17 +428,17 @@ public void testFindByNotIn() { @Test public void testFindByInWithNotIn() { List projects = repository.findByCreatorInAndStarCountNotIn(Collections.singletonList(FAKE_CREATOR), - Arrays.asList(STAR_COUNT_2, STAR_COUNT_3)); + Arrays.asList(STAR_COUNT_2, STAR_COUNT_3)); Assert.assertTrue(projects.isEmpty()); projects = repository.findByCreatorInAndStarCountNotIn(Arrays.asList(CREATOR_0, CREATOR_1), - Arrays.asList(STAR_COUNT_0, STAR_COUNT_2)); + Arrays.asList(STAR_COUNT_0, STAR_COUNT_2)); assertProjectListEquals(projects, Collections.singletonList(PROJECT_1)); projects = repository.findByCreatorInAndStarCountNotIn(Arrays.asList(CREATOR_0, CREATOR_1, CREATOR_2), - Arrays.asList(STAR_COUNT_1, STAR_COUNT_2)); + Arrays.asList(STAR_COUNT_1, STAR_COUNT_2)); assertProjectListEquals(projects, Arrays.asList(PROJECT_0, PROJECT_4)); } @@ -450,7 +450,7 @@ public void testFindByNameIsNull() { Assert.assertTrue(projects.isEmpty()); final Project nullNameProject = new Project("id-999", null, CREATOR_0, true, STAR_COUNT_0, - FORK_COUNT_0); + FORK_COUNT_0); this.repository.save(nullNameProject); projects = repository.findByNameIsNull(); @@ -479,7 +479,7 @@ public void testFindByNameIsNullWithAnd() { Assert.assertTrue(projects.isEmpty()); final Project nullNameProject = new Project("id-999", null, CREATOR_0, true, STAR_COUNT_0, - FORK_COUNT_0); + FORK_COUNT_0); this.repository.save(nullNameProject); projects = repository.findByNameIsNullAndForkCount(FORK_COUNT_0); @@ -527,17 +527,10 @@ public void testFindAllByPartitionKey() { assertThat(findAll.size()).isEqualTo(1); assertThat(findAll.contains(PROJECT_3)).isTrue(); } - + @Test public void testSqlInjection() { - List projects = null; - projects = this.repository.findAllByNameIn(Arrays.asList(NAME_1, NAME_2)); - assertProjectListEquals(projects, Arrays.asList(PROJECT_1, PROJECT_2)); - projects = this.repository.findAllByStarCountIn(Arrays.asList(STAR_COUNT_0, STAR_COUNT_1)); - assertProjectListEquals(projects, Arrays.asList(PROJECT_0, PROJECT_1, PROJECT_4)); - projects = this.repository.findAllByHasReleasedIn(Collections.singleton(false)); - assertProjectListEquals(projects, Arrays.asList(PROJECT_4)); - projects = this.repository.findAllByNameIn(Collections.singleton("sql) or (r.name <> ''")); + List projects = this.repository.findAllByNameIn(Collections.singleton("sql) or (r.name <> ''")); assertTrue(projects.isEmpty()); } }