package org.mariadb.jdbc;
import org.junit.BeforeClass;
import org.junit.Test;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import static org.junit.Assert.*;
public class AllowMultiQueriesTest extends BaseTest {
/**
* Tables initialisation.
*
* @throws SQLException exception
*/
@BeforeClass()
public static void initClass() throws SQLException {
createTable("AllowMultiQueriesTest", "id int not null primary key auto_increment, test varchar(10)");
createTable("AllowMultiQueriesTest2", "id int not null primary key auto_increment, test varchar(10)");
if (testSingleHost) {
try (Statement stmt = sharedConnection.createStatement()) {
stmt.execute("INSERT INTO AllowMultiQueriesTest(test) VALUES ('a'), ('b')");
}
}
}
@Test
public void allowMultiQueriesSingleTest() throws SQLException {
try (Connection connection = setConnection("&allowMultiQueries=true")) {
try (Statement statement = connection.createStatement()) {
statement.execute("SELECT 1; SELECT 2; SELECT 3;");
int counter = 1;
do {
ResultSet resultSet = statement.getResultSet();
assertEquals(-1, statement.getUpdateCount());
assertTrue(resultSet.next());
assertEquals(counter++, resultSet.getInt(1));
} while (statement.getMoreResults());
assertEquals(4, counter);
}
}
}
@Test
public void allowMultiQueriesFetchTest() throws SQLException {
try (Connection connection = setConnection("&allowMultiQueries=true")) {
try (Statement statement = connection.createStatement()) {
statement.setFetchSize(1);
statement.execute("SELECT * from AllowMultiQueriesTest;SELECT * from AllowMultiQueriesTest;");
do {
ResultSet resultSet = statement.getResultSet();
assertEquals(-1, statement.getUpdateCount());
assertTrue(resultSet.next());
assertEquals("a", resultSet.getString(2));
} while (statement.getMoreResults());
}
try (Statement statement = connection.createStatement()) {
statement.execute("SELECT 1");
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void allowMultiQueriesFetchKeepTest() throws SQLException {
try (Connection connection = setConnection("&allowMultiQueries=true")) {
try (Statement statement = connection.createStatement()) {
statement.setFetchSize(1);
statement.execute("SELECT * from AllowMultiQueriesTest;SELECT 3;");
ResultSet rs1 = statement.getResultSet();
assertTrue(statement.getMoreResults(Statement.KEEP_CURRENT_RESULT));
assertTrue(rs1.next());
assertEquals("a", rs1.getString(2));
ResultSet rs = statement.getResultSet();
assertTrue(rs.next());
assertEquals(3, rs.getInt(1));
}
}
}
@Test
public void allowMultiQueriesFetchCloseTest() throws SQLException {
try (Connection connection = setConnection("&allowMultiQueries=true")) {
try (Statement statement = connection.createStatement()) {
statement.setFetchSize(1);
statement.execute("SELECT * from AllowMultiQueriesTest;SELECT * from AllowMultiQueriesTest;SELECT 3;");
ResultSet rs1 = statement.getResultSet();
assertTrue(statement.getMoreResults(Statement.CLOSE_CURRENT_RESULT));
try {
rs1.next();
fail("Must have thrown exception, since closed");
} catch (SQLException sqle) {
assertTrue(sqle.getMessage().contains("Operation not permit on a closed resultSet"));
}
rs1 = statement.getResultSet();
assertTrue(statement.getMoreResults(Statement.KEEP_CURRENT_RESULT));
assertTrue(rs1.next());
assertEquals("a", rs1.getString(2));
ResultSet rs = statement.getResultSet();
assertTrue(rs.next());
assertEquals(3, rs.getInt(1));
}
}
}
@Test
public void allowMultiQueriesFetchInsertSelectTest() throws SQLException {
try (Connection connection = setConnection("&allowMultiQueries=true")) {
try (Statement statement = connection.createStatement()) {
statement.setFetchSize(1);
statement.execute("INSERT INTO AllowMultiQueriesTest2(test) VALUES ('a'), ('b');SELECT * from AllowMultiQueriesTest;SELECT 3;");
}
}
}
}