diff --git a/core/src/test/java/com/vladmihalcea/book/high_performance_java_persistence/jdbc/batch/generatedkeys/sequence/AbstractSequenceGeneratedKeysBatchPreparedStatementTest.java b/core/src/test/java/com/vladmihalcea/book/high_performance_java_persistence/jdbc/batch/generatedkeys/sequence/AbstractSequenceGeneratedKeysBatchPreparedStatementTest.java index cdaa131..c8d43f2 100644 --- a/core/src/test/java/com/vladmihalcea/book/high_performance_java_persistence/jdbc/batch/generatedkeys/sequence/AbstractSequenceGeneratedKeysBatchPreparedStatementTest.java +++ b/core/src/test/java/com/vladmihalcea/book/high_performance_java_persistence/jdbc/batch/generatedkeys/sequence/AbstractSequenceGeneratedKeysBatchPreparedStatementTest.java @@ -3,18 +3,43 @@ import com.vladmihalcea.book.high_performance_java_persistence.jdbc.batch.providers.SequenceBatchEntityProvider; import com.vladmihalcea.hibernate.masterclass.laboratory.util.AbstractTest; import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; import java.sql.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.concurrent.TimeUnit; /** * AbstractSequenceGeneratedKeysBatchPreparedStatementTest - Base class for testing JDBC PreparedStatement generated keys for Sequences * * @author Vlad Mihalcea */ +@RunWith(Parameterized.class) public abstract class AbstractSequenceGeneratedKeysBatchPreparedStatementTest extends AbstractTest { private SequenceBatchEntityProvider entityProvider = new SequenceBatchEntityProvider(); + private int allocationSize = 1; + + public AbstractSequenceGeneratedKeysBatchPreparedStatementTest(int allocationSize) { + this.allocationSize = allocationSize; + } + + @Parameterized.Parameters + public static Collection rdbmsDataSourceProvider() { + List providers = new ArrayList<>(); + providers.add(new Integer[]{1}); + providers.add(new Integer[]{5}); + providers.add(new Integer[]{10}); + providers.add(new Integer[]{15}); + providers.add(new Integer[]{20}); + providers.add(new Integer[]{25}); + return providers; + } + @Override protected Class[] entities() { return entityProvider.entities(); @@ -26,7 +51,7 @@ public void testBatch() { } protected int getPostCount() { - return 10; + return 5 * 1000; } protected int getBatchSize() { @@ -34,7 +59,7 @@ protected int getBatchSize() { } protected int getAllocationSize() { - return 1; + return allocationSize; } protected void batchInsert(Connection connection) throws SQLException { @@ -46,6 +71,8 @@ protected void batchInsert(Connection connection) throws SQLException { int count = 0; + long startNanos = System.nanoTime(); + try(PreparedStatement postStatement = connection.prepareStatement( "insert into Post (id, title, version) " + "values (?, ?, ?)")) { @@ -61,7 +88,6 @@ protected void batchInsert(Connection connection) throws SQLException { callSequenceSyntax())) { resultSet.next(); id = resultSet.getLong(1); - LOGGER.info("Generated id {}", id); } } @@ -75,6 +101,12 @@ protected void batchInsert(Connection connection) throws SQLException { } postStatement.executeBatch(); } + + LOGGER.info("{}.testInsert for {} using allocation size {} took {} millis", + getClass().getSimpleName(), + getDataSourceProvider().getClass().getSimpleName(), + getAllocationSize(), + TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startNanos)); } protected abstract String callSequenceSyntax(); diff --git a/core/src/test/java/com/vladmihalcea/book/high_performance_java_persistence/jdbc/batch/generatedkeys/sequence/OracleSequenceGeneratedKeysBatchPreparedStatementTest.java b/core/src/test/java/com/vladmihalcea/book/high_performance_java_persistence/jdbc/batch/generatedkeys/sequence/OracleSequenceGeneratedKeysBatchPreparedStatementTest.java index 8601302..c7d5ba5 100644 --- a/core/src/test/java/com/vladmihalcea/book/high_performance_java_persistence/jdbc/batch/generatedkeys/sequence/OracleSequenceGeneratedKeysBatchPreparedStatementTest.java +++ b/core/src/test/java/com/vladmihalcea/book/high_performance_java_persistence/jdbc/batch/generatedkeys/sequence/OracleSequenceGeneratedKeysBatchPreparedStatementTest.java @@ -7,6 +7,10 @@ */ public class OracleSequenceGeneratedKeysBatchPreparedStatementTest extends AbstractSequenceGeneratedKeysBatchPreparedStatementTest { + public OracleSequenceGeneratedKeysBatchPreparedStatementTest(int allocationSize) { + super(allocationSize); + } + @Override protected String callSequenceSyntax() { return "select post_seq.NEXTVAL from dual"; diff --git a/core/src/test/java/com/vladmihalcea/book/high_performance_java_persistence/jdbc/batch/generatedkeys/sequence/PostgreSQLSequenceGeneratedKeysBatchPreparedStatementTest.java b/core/src/test/java/com/vladmihalcea/book/high_performance_java_persistence/jdbc/batch/generatedkeys/sequence/PostgreSQLSequenceGeneratedKeysBatchPreparedStatementTest.java index 8bd643d..676dca4 100644 --- a/core/src/test/java/com/vladmihalcea/book/high_performance_java_persistence/jdbc/batch/generatedkeys/sequence/PostgreSQLSequenceGeneratedKeysBatchPreparedStatementTest.java +++ b/core/src/test/java/com/vladmihalcea/book/high_performance_java_persistence/jdbc/batch/generatedkeys/sequence/PostgreSQLSequenceGeneratedKeysBatchPreparedStatementTest.java @@ -1,12 +1,16 @@ package com.vladmihalcea.book.high_performance_java_persistence.jdbc.batch.generatedkeys.sequence; /** - * GeneratedKeysBatchPreparedStatementTest - PostgreSQL class for testing JDBC PreparedStatement generated keys for Sequences + * PostgreSQLSequenceGeneratedKeysBatchPreparedStatementTest - PostgreSQL class for testing JDBC PreparedStatement generated keys for Sequences * * @author Vlad Mihalcea */ public class PostgreSQLSequenceGeneratedKeysBatchPreparedStatementTest extends AbstractSequenceGeneratedKeysBatchPreparedStatementTest { + public PostgreSQLSequenceGeneratedKeysBatchPreparedStatementTest(int allocationSize) { + super(allocationSize); + } + @Override protected String callSequenceSyntax() { return "select nextval('post_seq')"; diff --git a/core/src/test/java/com/vladmihalcea/book/high_performance_java_persistence/jdbc/batch/generatedkeys/sequence/SQLServerSequenceGeneratedKeysBatchPreparedStatementTest.java b/core/src/test/java/com/vladmihalcea/book/high_performance_java_persistence/jdbc/batch/generatedkeys/sequence/SQLServerSequenceGeneratedKeysBatchPreparedStatementTest.java index 7d8beaa..2049c3e 100644 --- a/core/src/test/java/com/vladmihalcea/book/high_performance_java_persistence/jdbc/batch/generatedkeys/sequence/SQLServerSequenceGeneratedKeysBatchPreparedStatementTest.java +++ b/core/src/test/java/com/vladmihalcea/book/high_performance_java_persistence/jdbc/batch/generatedkeys/sequence/SQLServerSequenceGeneratedKeysBatchPreparedStatementTest.java @@ -7,6 +7,10 @@ */ public class SQLServerSequenceGeneratedKeysBatchPreparedStatementTest extends AbstractSequenceGeneratedKeysBatchPreparedStatementTest { + public SQLServerSequenceGeneratedKeysBatchPreparedStatementTest(int allocationSize) { + super(allocationSize); + } + @Override protected String callSequenceSyntax() { return "select NEXT VALUE FOR post_seq"; diff --git a/core/src/test/resources/logback.xml b/core/src/test/resources/logback.xml index a2b74f7..25f885a 100644 --- a/core/src/test/resources/logback.xml +++ b/core/src/test/resources/logback.xml @@ -22,7 +22,7 @@ - +