Skip to content

Commit

Permalink
[CONJ-473] when useServerPrepStmts is not set, the PREPARE statement …
Browse files Browse the repository at this point in the history
…must not be cached.
  • Loading branch information
rusher committed Jun 15, 2017
1 parent f85aacb commit 95ee9c7
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 20 deletions.
Expand Up @@ -70,7 +70,7 @@ public MariaDbParameterMetaData(ColumnInformation[] parametersInformation) {
}

private void checkAvailable() throws SQLException {
if(this.parametersInformation == null) {
if (this.parametersInformation == null) {
throw new SQLException("Parameter metadata not available for these statement", "S1C00");
}
}
Expand Down
Expand Up @@ -647,6 +647,9 @@ private static Options parse(HaMode haMode, Properties properties, Options optio
//disable use server prepare id using client rewrite
if (options.rewriteBatchedStatements) {
options.useServerPrepStmts = false;
}

if (!options.useServerPrepStmts) {
options.cachePrepStmts = false;
}

Expand Down
55 changes: 37 additions & 18 deletions src/test/java/org/mariadb/jdbc/DriverTest.java
Expand Up @@ -60,10 +60,8 @@

import java.math.BigDecimal;
import java.sql.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.sql.Date;
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
Expand Down Expand Up @@ -199,13 +197,7 @@ public void preparedTest() throws SQLException {
public void parameterMetaDataNotPreparable() throws SQLException {
Assume.assumeFalse(sharedUsePrepare());
Statement stmt = sharedConnection.createStatement();
ResultSet rs = stmt.executeQuery("SHOW SESSION STATUS WHERE Variable_name in ('Prepared_stmt_count','Com_stmt_prepare', 'Com_stmt_close')");
rs.next();
int preparedStmtCount = rs.getInt(2);
rs.next();
int comStmtPrepare = rs.getInt(2);
rs.next();
int comStmtClose = rs.getInt(2);
Map<String, Integer> initValues = loadVariables(stmt);

//statement that cannot be prepared
try (PreparedStatement pstmt = sharedConnection.prepareStatement(
Expand All @@ -217,16 +209,43 @@ public void parameterMetaDataNotPreparable() throws SQLException {
} catch (SQLException sqle) {
assertEquals("S1C00", sqle.getSQLState());
}
rs = stmt.executeQuery("SHOW SESSION STATUS WHERE Variable_name in ('Prepared_stmt_count','Com_stmt_prepare', 'Com_stmt_close')");
rs.next();
assertEquals(preparedStmtCount, rs.getInt(2));
rs.next();
assertEquals(comStmtPrepare + 1, rs.getInt(2));
rs.next();
assertEquals(comStmtClose, rs.getInt(2));
}
Map<String, Integer> endingValues = loadVariables(stmt);
assertEquals(initValues.get("Prepared_stmt_count"), endingValues.get("Prepared_stmt_count"));
assertEquals((Integer) (initValues.get("Com_stmt_prepare") + 1), endingValues.get("Com_stmt_prepare"));
assertEquals(initValues.get("Com_stmt_close"), endingValues.get("Com_stmt_close"));
}

private Map<String, Integer> loadVariables(Statement stmt) throws SQLException {
Map<String, Integer> variables = new HashMap<String, Integer>();
ResultSet rs = stmt.executeQuery("SHOW SESSION STATUS WHERE Variable_name in ('Prepared_stmt_count','Com_stmt_prepare', 'Com_stmt_close')");
rs.next();
variables.put(rs.getString(1), rs.getInt(2));
rs.next();
variables.put(rs.getString(1), rs.getInt(2));
rs.next();
variables.put(rs.getString(1), rs.getInt(2));
return variables;
}

@Test
public void parameterMetaDataPreparable() throws SQLException {
Assume.assumeFalse(sharedUsePrepare());
Statement stmt = sharedConnection.createStatement();
Map<String, Integer> initValues = loadVariables(stmt);

//statement that cannot be prepared
try (PreparedStatement pstmt = sharedConnection.prepareStatement(
"select ?")) {
ParameterMetaData parameterMetaData = pstmt.getParameterMetaData();
parameterMetaData.getParameterCount();
}
Map<String, Integer> endingValues = loadVariables(stmt);
assertEquals(initValues.get("Prepared_stmt_count"), endingValues.get("Prepared_stmt_count"));
assertEquals((Integer) (initValues.get("Com_stmt_prepare") + 1), endingValues.get("Com_stmt_prepare"));
assertEquals((Integer) (initValues.get("Com_stmt_close") + 1), endingValues.get("Com_stmt_close"));

}

@Test
public void streamingResultSet() throws Exception {
Expand Down
2 changes: 1 addition & 1 deletion src/test/resources/logback-test.xml
Expand Up @@ -59,7 +59,7 @@
</encoder>
</appender>

<logger name="org.mariadb.jdbc" level="debug" additivity="false">
<logger name="org.mariadb.jdbc" level="trace" additivity="false">
<appender-ref ref="STDOUT"/>
</logger>

Expand Down

0 comments on commit 95ee9c7

Please sign in to comment.