Changeset: e7baa1ae0b92 for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java/rev/e7baa1ae0b92
Modified Files:
src/test/java/JDBC_API_Tester.java
src/test/java/org/monetdb/jdbc/ApiTests.java
Branch: default
Log Message:
Convert Test_Sbatching() -> ApiTests#testBatching()
diffs (199 lines):
diff --git a/src/test/java/JDBC_API_Tester.java
b/src/test/java/JDBC_API_Tester.java
--- a/src/test/java/JDBC_API_Tester.java
+++ b/src/test/java/JDBC_API_Tester.java
@@ -2657,132 +2657,6 @@ public final class JDBC_API_Tester exten
}
@Test
- public void Test_Sbatching() {
- sb.setLength(0); // clear the output log buffer
-
- Statement stmt = null;
- PreparedStatement pstmt = null;
- ResultSet rs = null;
- try {
- con.setAutoCommit(false);
- // >> false: auto commit should be off now
- sb.append("0.
false\t").append(con.getAutoCommit()).append("\n");
-
- stmt = con.createStatement();
-
- sb.append("1. create...");
- if (stmt.executeUpdate("CREATE TABLE Test_Sbatching (
id int )") != 0)
- sb.append("Wrong return status\n");
- else
- sb.append("passed\n");
-
- // for large batches of DML always set sys.optimizer =
'minimal_pipe'. It makes a big difference in performance.
- stmt.execute("SET sys.optimizer = 'minimal_pipe'");
-
- // start batching a large amount of inserts
- for (int i = 1; i <= 3432; i++) {
- stmt.addBatch("INSERT INTO Test_Sbatching
VALUES (" + i + ")");
- if (i % 1500 == 0) {
- sb.append("2. executing batch (1500
inserts)...");
- int[] cnts = stmt.executeBatch();
- sb.append("passed\n");
- sb.append("3. checking number of update
counts...");
- if (cnts.length != 1500)
- sb.append("Invalid size:
").append(cnts.length);
- sb.append(cnts.length).append("
passed\n");
- sb.append("4. checking update counts
(should all be 1)...");
- for (int j = 0; j < cnts.length; j++) {
- if (cnts[j] != 1)
- sb.append("Unexpected
value: ").append(cnts[j]);
- }
- sb.append("passed\n");
- con.commit();
- }
- }
- sb.append("5. executing final batch...");
- stmt.executeBatch();
- con.commit();
- sb.append("passed\n");
-
- pstmt = con.prepareStatement("INSERT INTO
Test_Sbatching VALUES (?)");
- // start batching a large amount of prepared inserts
using JDBC 4.2 executeLargeBatch()
- for (int i = 1; i <= 3568; i++) {
- pstmt.setInt(1, i);
- pstmt.addBatch();
- if (i % 3000 == 0) {
- sb.append("2. executing batch (3000
inserts)...");
- long[] cnts = pstmt.executeLargeBatch();
- sb.append("passed\n");
- sb.append("3. checking number of update
counts...");
- if (cnts.length != 3000)
- sb.append("Invalid size:
").append(cnts.length);
- sb.append(cnts.length).append("
passed\n");
- sb.append("4. checking update counts
(should all be 1)...");
- for (int j = 0; j < cnts.length; j++) {
- if (cnts[j] != 1)
- sb.append("Unexpected
value: ").append(cnts[j]);
- }
- sb.append("passed\n");
- con.commit();
- }
- }
- sb.append("5. executing final Largebatch...");
- pstmt.executeLargeBatch();
- con.commit();
- sb.append("passed\n");
-
- sb.append("6. clearing the batch...");
- stmt.clearBatch();
- pstmt.clearBatch();
- sb.append("passed\n");
-
- sb.append("7. checking table count...");
- rs = stmt.executeQuery("SELECT COUNT(*) FROM
Test_Sbatching");
- rs.next();
- sb.append(rs.getInt(1)).append(" passed\n");
-
- sb.append("8. drop table...");
- if (stmt.executeUpdate("DROP TABLE Test_Sbatching") !=
0)
- sb.append("Wrong return status\n");
- else
- sb.append("passed\n");
-
- // rs.close();
- stmt.close();
- pstmt.close();
-
- con.commit();
- con.setAutoCommit(true);
- // >> true: auto commit should be on by default
- sb.append("0.
true\t").append(con.getAutoCommit()).append("\n");
- } catch (SQLException e) {
- sb.append("FAILED:
").append(e.getMessage()).append("\n");
- }
-
- closeStmtResSet(stmt, rs);
- closeStmtResSet(pstmt, null);
-
- compareExpectedOutput("Test_Sbatching",
- "0. false false\n" +
- "1. create...passed\n" +
- "2. executing batch (1500 inserts)...passed\n" +
- "3. checking number of update counts...1500 passed\n" +
- "4. checking update counts (should all be
1)...passed\n" +
- "2. executing batch (1500 inserts)...passed\n" +
- "3. checking number of update counts...1500 passed\n" +
- "4. checking update counts (should all be
1)...passed\n" +
- "5. executing final batch...passed\n" +
- "2. executing batch (3000 inserts)...passed\n" +
- "3. checking number of update counts...3000 passed\n" +
- "4. checking update counts (should all be
1)...passed\n" +
- "5. executing final Largebatch...passed\n" +
- "6. clearing the batch...passed\n" +
- "7. checking table count...7000 passed\n" +
- "8. drop table...passed\n" +
- "0. true true\n");
- }
-
- @Test
public void Test_SgeneratedKeys() {
sb.setLength(0); // clear the output log buffer
diff --git a/src/test/java/org/monetdb/jdbc/ApiTests.java
b/src/test/java/org/monetdb/jdbc/ApiTests.java
--- a/src/test/java/org/monetdb/jdbc/ApiTests.java
+++ b/src/test/java/org/monetdb/jdbc/ApiTests.java
@@ -1169,4 +1169,59 @@ public class ApiTests {
conn.setAutoCommit(true);
}
}
+
+ @Test
+ public void testBatching() throws SQLException {
+ final int n1 = 3432;
+ final int n2 = 3568;
+ int i;
+ stmt.execute("DROP TABLE IF EXISTS testbatching");
+ stmt.execute("CREATE TABLE testbatching(id INT)");
+
+ // Test regular statement with executeBatch
+ for (i = 1; i <= n1; i++) {
+ stmt.addBatch("INSERT INTO testbatching VALUES (" + i +
")");
+ if (i % 1500 == 0)
+ testBatching_execute(stmt, false, 1500);
+ }
+ testBatching_execute(stmt, false, n1 % 1500);
+ stmt.clearBatch();
+
+ // Test prepared statement with executeLargeBatch
+ pstmt = conn.prepareStatement("INSERT INTO testbatching VALUES
(?)");
+ for (i = 1; i <= n2; i++) {
+ pstmt.setInt(1, 1);
+ pstmt.addBatch();
+ if (i % 3000 == 0)
+ testBatching_execute(pstmt, true, 3000);
+ }
+ testBatching_execute(pstmt, true, n2 % 3000);
+ pstmt.clearBatch();
+
+ // Check row count
+ assertEquals(n1 + n2, queryInt("SELECT COUNT(*) FROM
testbatching"));
+ }
+
+ private void testBatching_execute(Statement s, boolean large, int
expected) throws SQLException {
+ int[] ints = null;
+ long[] longs = null;
+ int resultCount;
+
+ if (large) {
+ longs = s.executeLargeBatch();
+ resultCount = longs.length;
+ } else {
+ ints = s.executeBatch();
+ resultCount = ints.length;
+ }
+
+ assertEquals(expected, resultCount);
+
+ for (int i = 0; i < resultCount; i++)
+ assertEquals(
+ 1L,
+ large ? longs[i] : (long)ints[i],
+ "result #" + i + " is wrong"
+ );
+ }
}
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]