Skip to content

Commit 903ff6f

Browse files
committed
[CONJ-1192] add a technical option for 3.3 compatibility
1 parent 5e2c3af commit 903ff6f

File tree

6 files changed

+45
-1
lines changed

6 files changed

+45
-1
lines changed

src/main/java/org/mariadb/jdbc/ClientPreparedStatement.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
import java.sql.*;
99
import java.util.*;
10+
import org.mariadb.jdbc.client.ColumnDecoder;
11+
import org.mariadb.jdbc.client.result.CompleteResult;
1012
import org.mariadb.jdbc.client.result.Result;
1113
import org.mariadb.jdbc.client.util.ClosableLock;
1214
import org.mariadb.jdbc.export.ExceptionFactory;
@@ -257,6 +259,13 @@ public ResultSet executeQuery() throws SQLException {
257259
if (currResult instanceof Result) {
258260
return (Result) currResult;
259261
}
262+
if (Boolean.parseBoolean(
263+
con.getContext().getConf().nonMappedOptions().getProperty("permitNoResults", "false"))) {
264+
// for compatibility with pre 3.4.0 version
265+
return new CompleteResult(
266+
new ColumnDecoder[0], new byte[0][], con.getContext(), resultSetType);
267+
}
268+
260269
throw new SQLException(
261270
"PrepareStatement.executeQuery() command does NOT return a result-set as expected. Either"
262271
+ " use PrepareStatement.execute(), PrepareStatement.executeUpdate(), or correct"

src/main/java/org/mariadb/jdbc/ServerPreparedStatement.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
import java.sql.*;
99
import java.util.*;
1010
import java.util.regex.Pattern;
11+
import org.mariadb.jdbc.client.ColumnDecoder;
1112
import org.mariadb.jdbc.client.Completion;
13+
import org.mariadb.jdbc.client.result.CompleteResult;
1214
import org.mariadb.jdbc.client.result.Result;
1315
import org.mariadb.jdbc.client.util.ClosableLock;
1416
import org.mariadb.jdbc.client.util.Parameters;
@@ -382,6 +384,13 @@ public ResultSet executeQuery() throws SQLException {
382384
if ((currResult instanceof Result)) {
383385
return (Result) currResult;
384386
}
387+
if (Boolean.parseBoolean(
388+
con.getContext().getConf().nonMappedOptions().getProperty("permitNoResults", "false"))) {
389+
// for compatibility with pre 3.4.0 version
390+
return new CompleteResult(
391+
new ColumnDecoder[0], new byte[0][], con.getContext(), resultSetType);
392+
}
393+
385394
throw new SQLException(
386395
"PrepareStatement.executeQuery() command does NOT return a result-set as expected. Either"
387396
+ " use PrepareStatement.execute(), PrepareStatement.executeUpdate(), or correct"

src/main/java/org/mariadb/jdbc/Statement.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import java.util.*;
1111
import java.util.regex.Matcher;
1212
import java.util.regex.Pattern;
13+
import org.mariadb.jdbc.client.ColumnDecoder;
1314
import org.mariadb.jdbc.client.Completion;
1415
import org.mariadb.jdbc.client.DataType;
1516
import org.mariadb.jdbc.client.result.CompleteResult;
@@ -168,6 +169,12 @@ public ResultSet executeQuery(String sql) throws SQLException {
168169
if (currResult instanceof Result) {
169170
return (Result) currResult;
170171
}
172+
if (Boolean.parseBoolean(
173+
con.getContext().getConf().nonMappedOptions().getProperty("permitNoResults", "false"))) {
174+
// for compatibility with pre 3.4.0 version
175+
return new CompleteResult(
176+
new ColumnDecoder[0], new byte[0][], con.getContext(), resultSetType);
177+
}
171178
throw new SQLException(
172179
"Statement.executeQuery() command does NOT return a result-set as expected. Either use"
173180
+ " Statement.execute(), Statement.executeUpdate(), or correct command");

src/main/java/org/mariadb/jdbc/client/result/CompleteResult.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ private CompleteResult(ColumnDecoder[] metadataList, CompleteResult prev) {
121121
* @param context connection context
122122
* @param resultSetType result set type
123123
*/
124-
private CompleteResult(
124+
public CompleteResult(
125125
ColumnDecoder[] metadataList, byte[][] data, Context context, int resultSetType) {
126126
super(metadataList, data, context, resultSetType);
127127
}

src/test/java/org/mariadb/jdbc/integration/ProcedureTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ public void settingParameterBeforeOutRegistration() throws SQLException {
6767
cstmt.setLong(1, 44L);
6868
cstmt.execute();
6969
assertEquals(88, cstmt.getLong(1));
70+
ResultSet rs = cstmt.executeQuery();
71+
assertFalse(rs.next());
7072
}
7173
}
7274
}

src/test/java/org/mariadb/jdbc/integration/StatementTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,15 @@ public void ensureJdbcErrorWhenNoResultset() throws SQLException {
9393
+ " command");
9494
ps.execute();
9595
}
96+
try (Connection con = createCon("&permitNoResults=true")) {
97+
try (PreparedStatement ps = con.prepareStatement("DO ?", Statement.RETURN_GENERATED_KEYS)) {
98+
ps.setInt(1, 1);
99+
ps.execute();
100+
ResultSet rs = ps.executeQuery();
101+
assertFalse(rs.next());
102+
ps.execute();
103+
}
104+
}
96105
try (PreparedStatement ps =
97106
sharedConnBinary.prepareStatement("DO ?", Statement.RETURN_GENERATED_KEYS)) {
98107
ps.setInt(1, 1);
@@ -105,6 +114,14 @@ public void ensureJdbcErrorWhenNoResultset() throws SQLException {
105114
+ " command");
106115
ps.execute();
107116
}
117+
try (Connection con = createCon("permitNoResults=true&useServerPrepStmts=true")) {
118+
try (PreparedStatement ps = con.prepareStatement("DO ?", Statement.RETURN_GENERATED_KEYS)) {
119+
ps.setInt(1, 1);
120+
ps.execute();
121+
ResultSet rs = ps.executeQuery();
122+
assertFalse(rs.next());
123+
}
124+
}
108125
}
109126

110127
@Test

0 commit comments

Comments
 (0)