diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultExecuteContext.java b/jOOQ/src/main/java/org/jooq/impl/DefaultExecuteContext.java index 9300a4c305..d5d98ae214 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultExecuteContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultExecuteContext.java @@ -80,6 +80,7 @@ import org.jooq.Routine; import org.jooq.SQLDialect; import org.jooq.Scope; import org.jooq.Update; +import org.jooq.conf.DiagnosticsConnection; import org.jooq.conf.Settings; import org.jooq.tools.JooqLogger; import org.jooq.tools.jdbc.JDBCUtils; @@ -120,7 +121,7 @@ class DefaultExecuteContext implements ExecuteContext { ConnectionProvider connectionProvider; private Connection connection; - private SettingsEnabledConnection wrappedConnection; + private Connection wrappedConnection; private PreparedStatement statement; private int statementExecutionCount; private ResultSet resultSet; @@ -631,12 +632,19 @@ class DefaultExecuteContext implements ExecuteContext { if (c != null) { LOCAL_CONNECTION.set(c); connection = c; - wrappedConnection = wrapConnection(provider, c); + wrappedConnection = wrap(provider, c); } } - private final SettingsEnabledConnection wrapConnection(ConnectionProvider provider, Connection c) { - return new SettingsEnabledConnection(new ProviderEnabledConnection(provider, c), derivedConfiguration.settings(), this); + private final Connection wrap(ConnectionProvider provider, Connection c) { + return wrap0(new SettingsEnabledConnection(new ProviderEnabledConnection(provider, c), derivedConfiguration.settings(), this)); + } + + private final Connection wrap0(Connection c) { + if (derivedConfiguration.settings().getDiagnosticsConnection() == DiagnosticsConnection.ON) + return new org.jooq.impl.DiagnosticsConnection(derivedConfiguration, c); + else + return c; } final void incrementStatementExecutionCount() { @@ -770,7 +778,7 @@ class DefaultExecuteContext implements ExecuteContext { if (connection == null) DefaultExecuteContext.this.connection(); - return wrapConnection(this, connection); + return wrap(this, connection); } @Override diff --git a/jOOQ/src/main/java/org/jooq/impl/DiagnosticsConnection.java b/jOOQ/src/main/java/org/jooq/impl/DiagnosticsConnection.java index 5afc35bd27..c7c407691d 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DiagnosticsConnection.java +++ b/jOOQ/src/main/java/org/jooq/impl/DiagnosticsConnection.java @@ -48,6 +48,7 @@ import static org.jooq.impl.DSL.count; import static org.jooq.impl.DSL.noCondition; import java.sql.CallableStatement; +import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Statement; @@ -70,7 +71,6 @@ import org.jooq.Query; import org.jooq.QueryPart; import org.jooq.RenderContext; // ... -// ... import org.jooq.Select; import org.jooq.conf.Settings; import org.jooq.impl.QOM.Eq; @@ -93,9 +93,16 @@ final class DiagnosticsConnection extends DefaultConnection { final RenderContext normalisingRenderer; final Parser parser; final DiagnosticsListeners listeners; + final boolean release; DiagnosticsConnection(Configuration configuration) { - super(configuration.connectionProvider().acquire()); + this(configuration, null); + } + + DiagnosticsConnection(Configuration configuration, Connection c) { + super(c != null ? c : configuration.connectionProvider().acquire()); + + this.release = c == null; // [#7527] The Settings.diagnosticsPattern flag overrides the Settings.transformPatterns flag. this.configuration = configuration; @@ -176,7 +183,9 @@ final class DiagnosticsConnection extends DefaultConnection { @Override public final void close() throws SQLException { repeatedSQL.clear(); - configuration.connectionProvider().release(getDelegate()); + + if (release) + configuration.connectionProvider().release(getDelegate()); } final boolean checkPattern(Predicate test) {