Skip to content

Commit 6b9f927

Browse files
committed
Refine default cursor preference when using FOR JSON/FOR XML.
We now no longer prefer cursor usage by default when the statement ends with a FOR XML/JSON clause to avoid server side errors reporting that cursor usage is not supported. [resolves #209] Signed-off-by: Mark Paluch <[email protected]>
1 parent 5dd4e9b commit 6b9f927

File tree

3 files changed

+8
-3
lines changed

3 files changed

+8
-3
lines changed

src/main/java/io/r2dbc/mssql/SimpleMssqlStatement.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -174,9 +174,14 @@ static boolean prefersCursors(String sql) {
174174
return false;
175175
}
176176

177+
String lc = sql.trim().toLowerCase(Locale.ENGLISH);
178+
if (lc.contains("for xml") || lc.contains("for json")) {
179+
return false;
180+
}
181+
177182
char c = sql.charAt(0);
178183

179-
return (c == 's' || c == 'S') && sql.toLowerCase(Locale.ENGLISH).startsWith("select");
184+
return (c == 's' || c == 'S') && lc.startsWith("select");
180185
}
181186

182187
}

src/test/java/io/r2dbc/mssql/JsonIntegrationTests.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class JsonIntegrationTests extends IntegrationTestSupport {
3030
@Test
3131
void shouldExecuteForJsonSimple() {
3232

33-
connection.createStatement("select 1 as a for json path").fetchSize(0).execute()
33+
connection.createStatement("select 1 as a for json path").execute()
3434
.flatMap(result -> result.map((row, rowMetadata) -> row.get(0)))
3535
.as(StepVerifier::create)
3636
.expectNext("[{\"a\":1}]")

src/test/java/io/r2dbc/mssql/XmlIntegrationTests.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class XmlIntegrationTests extends IntegrationTestSupport {
3030
@Test
3131
void shouldExecuteForXmlSimple() {
3232

33-
connection.createStatement("select 1 as a for xml path").fetchSize(0).execute()
33+
connection.createStatement("select 1 as a for xml path").execute()
3434
.flatMap(result -> result.map((row, rowMetadata) -> row.get(0)))
3535
.as(StepVerifier::create)
3636
.expectNext("<row><a>1</a></row>")

0 commit comments

Comments
 (0)