diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultExecuteContext.java b/jOOQ/src/main/java/org/jooq/impl/DefaultExecuteContext.java index 21fe906b17..f6805e9596 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultExecuteContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultExecuteContext.java @@ -37,6 +37,7 @@ */ package org.jooq.impl; +import static java.lang.Boolean.FALSE; import static java.lang.Boolean.TRUE; // ... import static org.jooq.conf.SettingsTools.renderLocale; @@ -352,7 +353,7 @@ class DefaultExecuteContext implements ExecuteContext { // [#7569] The original configuration is attached to Record and Result instances this.creationTime = configuration.clock().instant(); this.connectionProvider = configuration.connectionProvider(); - this.originalConfiguration = configuration; + this.originalConfiguration = initCaches(configuration); this.derivedConfiguration = configuration.derive(new ExecuteContextConnectionProvider()); this.data = new DataMap(); this.batchMode = batchMode; @@ -368,6 +369,20 @@ class DefaultExecuteContext implements ExecuteContext { clean(); } + /** + * [#18078] Some caches may have to be initialised in the global + * configuration, prior to creating the per-execution derived configuration. + */ + private static Configuration initCaches(Configuration configuration) { + if (configuration.settings().getDiagnosticsConnection() == DiagnosticsConnection.ON) { + if (!FALSE.equals(configuration.settings().isDiagnosticsDuplicateStatements())) { + org.jooq.impl.DiagnosticsConnection.duplicateSql0(configuration); + } + } + + return configuration; + } + @Override public final ConverterContext converterContext() { return converterContext; diff --git a/jOOQ/src/main/java/org/jooq/impl/DiagnosticsConnection.java b/jOOQ/src/main/java/org/jooq/impl/DiagnosticsConnection.java index f6df4e1703..bdf529be2f 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DiagnosticsConnection.java +++ b/jOOQ/src/main/java/org/jooq/impl/DiagnosticsConnection.java @@ -206,8 +206,12 @@ final class DiagnosticsConnection extends DefaultConnection { return DiagnosticsListeners.check(configuration.settings(), test); } - @SuppressWarnings("unchecked") final Map> duplicateSql() { + return duplicateSql0(configuration); + } + + @SuppressWarnings("unchecked") + static final Map> duplicateSql0(Configuration configuration) { return (Map>) configuration.data().computeIfAbsent( "org.jooq.diagnostics.duplicate-sql", k -> synchronizedMap(new LRU<>(LRU_SIZE_GLOBAL))