package org.mariadb.jdbc; import org.junit.Test; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import static org.junit.Assert.*; public class RePrepareTest extends BaseTest { @Test public void rePrepareTestSelectError() throws SQLException { createTable("rePrepareTestSelectError", "test int"); try (Statement stmt = sharedConnection.createStatement()) { stmt.execute("INSERT INTO rePrepareTestSelectError(test) VALUES (1)"); try (PreparedStatement preparedStatement = sharedConnection.prepareStatement("SELECT * FROM rePrepareTestSelectError where test = ?")) { preparedStatement.setInt(1, 1); ResultSet rs = preparedStatement.executeQuery(); assertTrue(rs.next()); assertEquals(1, rs.getInt(1)); assertFalse(rs.next()); stmt.execute("ALTER TABLE rePrepareTestSelectError" + " CHANGE COLUMN `test` `test` VARCHAR(50) NULL DEFAULT NULL FIRST," + "ADD COLUMN `test2` VARCHAR(50) NULL DEFAULT NULL AFTER `test`;"); ResultSet rs2 = preparedStatement.executeQuery(); preparedStatement.setInt(1, 1); assertTrue(rs2.next()); assertEquals("1", rs2.getString(1)); assertFalse(rs2.next()); } } } @Test public void rePrepareTestInsertError() throws SQLException { createTable("rePrepareTestInsertError", "test int"); try (Statement stmt = sharedConnection.createStatement()) { try (PreparedStatement preparedStatement = sharedConnection.prepareStatement("INSERT INTO rePrepareTestInsertError(test) values (?)")) { preparedStatement.setInt(1, 1); preparedStatement.execute(); stmt.execute("ALTER TABLE rePrepareTestInsertError" + " CHANGE COLUMN `test` `test` VARCHAR(50) NULL DEFAULT NULL FIRST;"); preparedStatement.setInt(1, 2); preparedStatement.execute(); stmt.execute("ALTER TABLE rePrepareTestInsertError" + " CHANGE COLUMN `test` `test` VARCHAR(100) NULL DEFAULT NULL FIRST," + "ADD COLUMN `test2` VARCHAR(50) NULL DEFAULT NULL AFTER `test`;"); stmt.execute("flush tables with read lock"); stmt.execute("unlock tables"); preparedStatement.setInt(1, 3); preparedStatement.execute(); } } } @Test public void cannotRePrepare() throws SQLException { createTable("cannotRePrepare", "test int"); try (Statement stmt = sharedConnection.createStatement()) { try (PreparedStatement preparedStatement = sharedConnection.prepareStatement("INSERT INTO cannotRePrepare(test) values (?)")) { preparedStatement.setInt(1, 1); preparedStatement.execute(); stmt.execute("ALTER TABLE cannotRePrepare" + " CHANGE COLUMN `test` `otherName` VARCHAR(50) NULL DEFAULT NULL FIRST;"); preparedStatement.setInt(1, 2); try { preparedStatement.execute(); fail(); } catch (SQLException sqle) { assertTrue(sqle.getMessage().contains("Unknown column 'test' in 'field list'")); } } } } }