From eaf72e2638daf66686ce62836f5e140d590962e4 Mon Sep 17 00:00:00 2001 From: "jason.bodnar@blackbaud.com" Date: Thu, 5 Feb 2026 11:33:42 -0600 Subject: [PATCH 1/4] RED: isCountQuery() should return true for queries in text blocks --- .../support/StringBasedCosmosQueryUnitTest.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/sdk/spring/azure-spring-data-cosmos/src/test/java/com/azure/spring/data/cosmos/repository/support/StringBasedCosmosQueryUnitTest.java b/sdk/spring/azure-spring-data-cosmos/src/test/java/com/azure/spring/data/cosmos/repository/support/StringBasedCosmosQueryUnitTest.java index 081296b18a7e..17d937423c20 100644 --- a/sdk/spring/azure-spring-data-cosmos/src/test/java/com/azure/spring/data/cosmos/repository/support/StringBasedCosmosQueryUnitTest.java +++ b/sdk/spring/azure-spring-data-cosmos/src/test/java/com/azure/spring/data/cosmos/repository/support/StringBasedCosmosQueryUnitTest.java @@ -48,4 +48,16 @@ public void testStripExtraWhitespaceFromString() throws NoSuchMethodException, I String result3 = (String) method.invoke(sbcq, args3); assertThat(result3).isEqualTo(expectedResult); } + + @Test + public void testTextBlockCountQuery() { + String countQuery = """ + SELECT VALUE COUNT(1) + FROM a + WHERE a.city = @city + AND a.state = @state + """; + boolean result = StringBasedCosmosQuery.isCountQuery(countQuery, long.class); + assertThat(result).isTrue(); + } } From fb3a78d77c4bb57aede7edcb34863d9c2da9baeb Mon Sep 17 00:00:00 2001 From: "jason.bodnar@blackbaud.com" Date: Thu, 5 Feb 2026 11:53:54 -0600 Subject: [PATCH 2/4] GREEN: isCountQuery() should return true for queries in text blocks --- sdk/spring/azure-spring-data-cosmos/CHANGELOG.md | 2 ++ .../data/cosmos/repository/support/StringBasedCosmosQuery.java | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/sdk/spring/azure-spring-data-cosmos/CHANGELOG.md b/sdk/spring/azure-spring-data-cosmos/CHANGELOG.md index 72d01300e8fa..aafc0bd293b9 100644 --- a/sdk/spring/azure-spring-data-cosmos/CHANGELOG.md +++ b/sdk/spring/azure-spring-data-cosmos/CHANGELOG.md @@ -8,6 +8,8 @@ #### Bugs Fixed +* Fixing bug where count query defined in a Java text block in `@Query` causes a class cast exception - See [Bug #47910](https://github.com/Azure/azure-sdk-for-java/issues/47910). + #### Other Changes ### 7.0.0 (2026-02-03) diff --git a/sdk/spring/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/repository/support/StringBasedCosmosQuery.java b/sdk/spring/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/repository/support/StringBasedCosmosQuery.java index 713a7bf1a486..2bd19b11752a 100644 --- a/sdk/spring/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/repository/support/StringBasedCosmosQuery.java +++ b/sdk/spring/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/repository/support/StringBasedCosmosQuery.java @@ -30,7 +30,7 @@ * Cosmos query class to handle the annotated queries. This overrides the execution and runs the query directly */ public class StringBasedCosmosQuery extends AbstractCosmosQuery { - private static final Pattern COUNT_QUERY_PATTERN = Pattern.compile("^\\s*select\\s+value\\s+count.*", Pattern.CASE_INSENSITIVE); + private static final Pattern COUNT_QUERY_PATTERN = Pattern.compile("^\\s*select\\s+value\\s+count.*", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); private static final Pattern SUM_QUERY_PATTERN = Pattern.compile("^\\s*select\\s+value\\s+sum.*", Pattern.CASE_INSENSITIVE); private final String query; From 7bf24cf7a7af94bd93b47a830cab9851f8f38cde Mon Sep 17 00:00:00 2001 From: "jason.bodnar@blackbaud.com" Date: Thu, 5 Feb 2026 13:55:25 -0600 Subject: [PATCH 3/4] RED: isSumQuery() should return true for sum query in java text block --- .../support/StringBasedCosmosQueryUnitTest.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/sdk/spring/azure-spring-data-cosmos/src/test/java/com/azure/spring/data/cosmos/repository/support/StringBasedCosmosQueryUnitTest.java b/sdk/spring/azure-spring-data-cosmos/src/test/java/com/azure/spring/data/cosmos/repository/support/StringBasedCosmosQueryUnitTest.java index 17d937423c20..8de4ade0e9c0 100644 --- a/sdk/spring/azure-spring-data-cosmos/src/test/java/com/azure/spring/data/cosmos/repository/support/StringBasedCosmosQueryUnitTest.java +++ b/sdk/spring/azure-spring-data-cosmos/src/test/java/com/azure/spring/data/cosmos/repository/support/StringBasedCosmosQueryUnitTest.java @@ -60,4 +60,16 @@ SELECT VALUE COUNT(1) boolean result = StringBasedCosmosQuery.isCountQuery(countQuery, long.class); assertThat(result).isTrue(); } + + @Test + public void testTextBlockSumQuery() { + String sumQuery = """ + SELECT VALUE SUM(a.population) + FROM a + WHERE a.city = @city + AND a.state = @state + """; + boolean result = StringBasedCosmosQuery.isSumQuery(sumQuery, long.class); + assertThat(result).isTrue(); + } } From 2a5ce014fc9f76473c03f3e580bf232a10d87750 Mon Sep 17 00:00:00 2001 From: "jason.bodnar@blackbaud.com" Date: Thu, 5 Feb 2026 13:57:28 -0600 Subject: [PATCH 4/4] GREEN: isSumQuery() should return true for sum query in java text block --- sdk/spring/azure-spring-data-cosmos/CHANGELOG.md | 1 + .../data/cosmos/repository/support/StringBasedCosmosQuery.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/sdk/spring/azure-spring-data-cosmos/CHANGELOG.md b/sdk/spring/azure-spring-data-cosmos/CHANGELOG.md index aafc0bd293b9..a1413ed65d9f 100644 --- a/sdk/spring/azure-spring-data-cosmos/CHANGELOG.md +++ b/sdk/spring/azure-spring-data-cosmos/CHANGELOG.md @@ -9,6 +9,7 @@ #### Bugs Fixed * Fixing bug where count query defined in a Java text block in `@Query` causes a class cast exception - See [Bug #47910](https://github.com/Azure/azure-sdk-for-java/issues/47910). +* Also fixed the same bug for sum query. #### Other Changes diff --git a/sdk/spring/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/repository/support/StringBasedCosmosQuery.java b/sdk/spring/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/repository/support/StringBasedCosmosQuery.java index 2bd19b11752a..80b3ca48e591 100644 --- a/sdk/spring/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/repository/support/StringBasedCosmosQuery.java +++ b/sdk/spring/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/repository/support/StringBasedCosmosQuery.java @@ -31,7 +31,7 @@ */ public class StringBasedCosmosQuery extends AbstractCosmosQuery { private static final Pattern COUNT_QUERY_PATTERN = Pattern.compile("^\\s*select\\s+value\\s+count.*", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); - private static final Pattern SUM_QUERY_PATTERN = Pattern.compile("^\\s*select\\s+value\\s+sum.*", Pattern.CASE_INSENSITIVE); + private static final Pattern SUM_QUERY_PATTERN = Pattern.compile("^\\s*select\\s+value\\s+sum.*", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); private final String query;