diff --git a/src/main/java/org/springframework/data/jpa/repository/query/DeclaredQuery.java b/src/main/java/org/springframework/data/jpa/repository/query/DeclaredQuery.java index 500e64d1a..4821865de 100644 --- a/src/main/java/org/springframework/data/jpa/repository/query/DeclaredQuery.java +++ b/src/main/java/org/springframework/data/jpa/repository/query/DeclaredQuery.java @@ -105,7 +105,7 @@ interface DeclaredQuery { /** * Return whether the query is a native query of not. - * + * * @return true if native query otherwise false */ default boolean isNativeQuery() { diff --git a/src/main/java/org/springframework/data/jpa/repository/query/QueryUtils.java b/src/main/java/org/springframework/data/jpa/repository/query/QueryUtils.java index 69d4ec711..e40faca2f 100644 --- a/src/main/java/org/springframework/data/jpa/repository/query/QueryUtils.java +++ b/src/main/java/org/springframework/data/jpa/repository/query/QueryUtils.java @@ -604,7 +604,7 @@ public abstract class QueryUtils { String replacement = useVariable ? SIMPLE_COUNT_VALUE : complexCountValue; - if (nativeQuery && (variable.contains(",") || "*".equals(variable))) { + if (variable != null && (nativeQuery && (variable.contains(",") || "*".equals(variable)))) { replacement = "1"; } else { diff --git a/src/test/java/org/springframework/data/jpa/repository/query/DefaultQueryUtilsUnitTests.java b/src/test/java/org/springframework/data/jpa/repository/query/DefaultQueryUtilsUnitTests.java index 89dba5b88..2409a9b2d 100644 --- a/src/test/java/org/springframework/data/jpa/repository/query/DefaultQueryUtilsUnitTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/query/DefaultQueryUtilsUnitTests.java @@ -70,6 +70,15 @@ class DefaultQueryUtilsUnitTests { "select count(distinct u) from User u where u.foo = ?"); } + @Test // GH-2812 + void createsCountQueryForDeleteQuery() { + + String result = createCountQueryFor("delete from some_table where id in :ids", null, true); + + // ح(•̀ж•́)ง † + assertThat(result).isEqualTo("deleteselect count(where) from some_table where id in :ids"); + } + @Test void createsCountQueryForConstructorQueries() { diff --git a/src/test/java/org/springframework/data/jpa/repository/query/QueryEnhancerUnitTests.java b/src/test/java/org/springframework/data/jpa/repository/query/QueryEnhancerUnitTests.java index 2a5e73e6f..d0d5eec24 100644 --- a/src/test/java/org/springframework/data/jpa/repository/query/QueryEnhancerUnitTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/query/QueryEnhancerUnitTests.java @@ -15,9 +15,7 @@ */ package org.springframework.data.jpa.repository.query; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.assertj.core.api.Assertions.*; import java.util.Arrays; import java.util.Collections; @@ -236,6 +234,15 @@ class QueryEnhancerUnitTests { assertCountQuery("select p.lastname,p.firstname from Person p", "select count(1) from Person p", true); } + @Test // GH-2812 + void createCountQueryFromDeleteQuery() { + + StringQuery query = new StringQuery("delete from some_table where id in :ids", true); + + assertThat(getEnhancer(query).createCountQueryFor("p.lastname")) + .isEqualToIgnoringCase("delete from some_table where id in :ids"); + } + @Test // DATAJPA-456 void createCountQueryFromTheGivenCountProjection() {