BulkStmtSplitErrorTest.java

// SPDX-License-Identifier: LGPL-2.1-or-later
// Copyright (c) 2012-2014 Monty Program Ab
// Copyright (c) 2015-2025 MariaDB Corporation Ab
package org.mariadb.jdbc.integration;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import org.junit.jupiter.api.*;
import org.mariadb.jdbc.Statement;

public class BulkStmtSplitErrorTest extends Common {

  @AfterAll
  public static void drop() throws SQLException {
    Statement stmt = sharedConn.createStatement();
    stmt.execute("DROP TABLE IF EXISTS BulkStmtSplitError");
  }

  @BeforeAll
  public static void beforeAll2() throws SQLException {
    drop();
    Statement stmt = sharedConn.createStatement();
    stmt.execute(
        "CREATE TABLE BulkStmtSplitError (t1 int not null primary key, field varchar(300))");
    stmt.execute("FLUSH TABLES");
  }

  @Test
  public void BulkStmtSplitError() throws SQLException {
    Statement stmt = sharedConn.createStatement();
    stmt.execute("INSERT INTO BulkStmtSplitError VALUES (1, 'tt'), (2, 'tt2')");

    try (PreparedStatement prep =
        sharedConn.prepareStatement("insert into BulkStmtSplitError values (?, ?)")) {
      prep.setInt(1, 1);
      prep.setNull(2, Types.VARCHAR);
      prep.addBatch();
      prep.setInt(1, 2);
      prep.setString(2, "Kenny");
      prep.addBatch();
      prep.executeBatch();
    } catch (SQLException e) {
      // eat
    }

    ResultSet rs = stmt.executeQuery("SELECT count(*) FROM BulkStmtSplitError");
    Assertions.assertTrue(rs.next());
    Assertions.assertEquals(2, rs.getInt(1));
  }
}