From 0b3e93bba2edd1f191bebc42d1c6f62cf6068e9a Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 8 Jun 2021 15:10:17 +0200 Subject: [PATCH] [jOOQ/jOOQ#10048] Add logging to BatchCRUD when the number of generated SQL queries is too high --- jOOQ/src/main/java/org/jooq/impl/AbstractBatch.java | 5 +++-- jOOQ/src/main/java/org/jooq/impl/BatchCRUD.java | 9 +++++++-- jOOQ/src/main/java/org/jooq/impl/BatchMultiple.java | 2 +- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractBatch.java b/jOOQ/src/main/java/org/jooq/impl/AbstractBatch.java index d9b830810a..f319d0acec 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractBatch.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractBatch.java @@ -53,8 +53,9 @@ import org.reactivestreams.Subscriber; * @author Lukas Eder */ abstract class AbstractBatch implements Batch { - final Configuration configuration; - final DSLContext dsl; + + final Configuration configuration; + final DSLContext dsl; AbstractBatch(Configuration configuration) { this.configuration = configuration; diff --git a/jOOQ/src/main/java/org/jooq/impl/BatchCRUD.java b/jOOQ/src/main/java/org/jooq/impl/BatchCRUD.java index 7b8df7c158..ce955d73c7 100644 --- a/jOOQ/src/main/java/org/jooq/impl/BatchCRUD.java +++ b/jOOQ/src/main/java/org/jooq/impl/BatchCRUD.java @@ -54,14 +54,16 @@ import org.jooq.TableRecord; import org.jooq.UpdatableRecord; import org.jooq.exception.ControlFlowSignal; import org.jooq.exception.DataAccessException; +import org.jooq.tools.JooqLogger; /** * @author Lukas Eder */ final class BatchCRUD extends AbstractBatch { - private final TableRecord[] records; - private final Action action; + private static final JooqLogger log = JooqLogger.getLogger(BatchCRUD.class); + private final TableRecord[] records; + private final Action action; BatchCRUD(Configuration configuration, Action action, TableRecord[] records) { super(configuration); @@ -119,6 +121,9 @@ final class BatchCRUD extends AbstractBatch { } } + if (log.isDebugEnabled()) + log.debug("Batch " + action + " of " + records.length + " records using " + queries.size() + " distinct queries (lower is better) with an average number of bind variable sets of " + queries.values().stream().mapToInt(List::size).average().orElse(0.0) + " (higher is better)"); + // Execute one batch statement for each identical SQL statement. Every // SQL statement may have several queries with different bind values. // The order is preserved as much as possible diff --git a/jOOQ/src/main/java/org/jooq/impl/BatchMultiple.java b/jOOQ/src/main/java/org/jooq/impl/BatchMultiple.java index 9acb3cd1b7..6845a5a60f 100644 --- a/jOOQ/src/main/java/org/jooq/impl/BatchMultiple.java +++ b/jOOQ/src/main/java/org/jooq/impl/BatchMultiple.java @@ -58,7 +58,7 @@ import io.r2dbc.spi.ConnectionFactory; */ final class BatchMultiple extends AbstractBatch { - final Query[] queries; + final Query[] queries; public BatchMultiple(Configuration configuration, Query... queries) { super(configuration);