[jOOQ/jOOQ#18078] DiagnosticsListener::duplicateStatements event isn't

triggered for DiagnosticsConnection.ON setting
This commit is contained in:
Lukas Eder 2025-03-05 14:22:12 +01:00
parent 8ddf0fecd4
commit bbb6c53f2d
2 changed files with 21 additions and 2 deletions

View File

@ -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;

View File

@ -206,8 +206,12 @@ final class DiagnosticsConnection extends DefaultConnection {
return DiagnosticsListeners.check(configuration.settings(), test);
}
@SuppressWarnings("unchecked")
final Map<String, Set<String>> duplicateSql() {
return duplicateSql0(configuration);
}
@SuppressWarnings("unchecked")
static final Map<String, Set<String>> duplicateSql0(Configuration configuration) {
return (Map<String, Set<String>>) configuration.data().computeIfAbsent(
"org.jooq.diagnostics.duplicate-sql",
k -> synchronizedMap(new LRU<>(LRU_SIZE_GLOBAL))