package org.mariadb.jdbc; import org.junit.Test; import java.sql.*; import static org.junit.Assert.*; public class CheckDataTest extends BaseTest { @Test public void testStatementExecuteAutoincrement() throws SQLException { createTable("CheckDataTest1", "id int not null primary key auto_increment, test varchar(10)"); Statement stmt = sharedConnection.createStatement(); int insert = stmt.executeUpdate("INSERT INTO CheckDataTest1 (test) VALUES ('test1')", Statement.RETURN_GENERATED_KEYS); assertEquals(1, insert); ResultSet rs = stmt.getGeneratedKeys(); assertTrue(rs.next()); assertEquals(1, rs.getInt(1)); assertFalse(rs.next()); rs = stmt.executeQuery("SELECT * FROM CheckDataTest1"); assertTrue(rs.next()); assertEquals(1, rs.getInt(1)); assertEquals("test1", rs.getString(2)); assertFalse(rs.next()); } @Test public void testStatementBatch() throws SQLException { createTable("CheckDataTest2", "id int not null primary key auto_increment, test varchar(10)"); Statement stmt = sharedConnection.createStatement(); stmt.addBatch("INSERT INTO CheckDataTest2 (id, test) VALUES (5, 'test1')"); stmt.addBatch("INSERT INTO CheckDataTest2 (test) VALUES ('test2')"); stmt.addBatch("UPDATE CheckDataTest2 set test = CONCAT(test, 'tt')"); stmt.addBatch("INSERT INTO CheckDataTest2 (id, test) VALUES (9, 'test3')"); int[] res = stmt.executeBatch(); assertEquals(4, res.length); assertEquals(1, res[0]); assertEquals(1, res[1]); assertEquals(2, res[2]); assertEquals(1, res[3]); ResultSet rs = stmt.getGeneratedKeys(); assertTrue(rs.next()); assertEquals(5, rs.getInt(1)); assertTrue(rs.next()); assertEquals(6, rs.getInt(1)); assertTrue(rs.next()); assertEquals(9, rs.getInt(1)); assertFalse(rs.next()); rs = stmt.executeQuery("SELECT * FROM CheckDataTest2"); assertTrue(rs.next()); assertEquals(5, rs.getInt(1)); assertEquals("test1tt", rs.getString(2)); assertTrue(rs.next()); assertEquals(6, rs.getInt(1)); assertEquals("test2tt", rs.getString(2)); assertTrue(rs.next()); assertEquals(9, rs.getInt(1)); assertEquals("test3", rs.getString(2)); assertFalse(rs.next()); } @Test public void testPrepareStatementExecuteAutoincrement() throws SQLException { createTable("CheckDataTest3", "id int not null primary key auto_increment, test varchar(10)"); PreparedStatement stmt = sharedConnection.prepareStatement("INSERT INTO CheckDataTest3 (test) VALUES (?)", Statement.RETURN_GENERATED_KEYS); stmt.setString(1, "test1"); int insert = stmt.executeUpdate(); assertEquals(1, insert); ResultSet rs = stmt.getGeneratedKeys(); assertTrue(rs.next()); assertEquals(1, rs.getInt(1)); assertFalse(rs.next()); //without addBatch -> no execution int[] noBatch = stmt.executeBatch(); assertEquals(0, noBatch.length); //with addBatch stmt.addBatch(); int[] nbBatch = stmt.executeBatch(); assertEquals(1, nbBatch.length); if (sharedIsRewrite()) { assertEquals(Statement.SUCCESS_NO_INFO, nbBatch[0]); } else { assertEquals(1, nbBatch[0]); } rs = stmt.getGeneratedKeys(); assertTrue(rs.next()); assertEquals(2, rs.getInt(1)); assertFalse(rs.next()); rs = stmt.executeQuery("SELECT * FROM CheckDataTest3"); assertTrue(rs.next()); assertEquals(1, rs.getInt(1)); assertEquals("test1", rs.getString(2)); assertTrue(rs.next()); assertEquals(2, rs.getInt(1)); assertEquals("test1", rs.getString(2)); assertFalse(rs.next()); } @Test public void testPrepareStatementBatch() throws SQLException { createTable("CheckDataTest4", "id int not null primary key auto_increment, test varchar(10)"); PreparedStatement stmt = sharedConnection.prepareStatement("INSERT INTO CheckDataTest4 (test) VALUES (?)", Statement.RETURN_GENERATED_KEYS); stmt.setString(1, "test1"); stmt.addBatch(); stmt.setString(1, "test2"); stmt.addBatch(); stmt.addBatch(); int[] res = stmt.executeBatch(); assertEquals(3, res.length); if (sharedIsRewrite()) { assertEquals(Statement.SUCCESS_NO_INFO, res[0]); assertEquals(Statement.SUCCESS_NO_INFO, res[1]); assertEquals(Statement.SUCCESS_NO_INFO, res[2]); } else { assertEquals(1, res[0]); assertEquals(1, res[1]); assertEquals(1, res[2]); } ResultSet rs = stmt.getGeneratedKeys(); assertTrue(rs.next()); assertEquals(1, rs.getInt(1)); assertTrue(rs.next()); assertEquals(2, rs.getInt(1)); assertTrue(rs.next()); assertEquals(3, rs.getInt(1)); assertFalse(rs.next()); rs = stmt.executeQuery("SELECT * FROM CheckDataTest4"); assertTrue(rs.next()); assertEquals(1, rs.getInt(1)); assertEquals("test1", rs.getString(2)); assertTrue(rs.next()); assertEquals(2, rs.getInt(1)); assertEquals("test2", rs.getString(2)); assertTrue(rs.next()); assertEquals(3, rs.getInt(1)); assertEquals("test2", rs.getString(2)); assertFalse(rs.next()); } }