From 0fb8c29b1a373d98c39bfb19e5172797eef10602 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Thu, 5 Apr 2018 21:46:44 +0300 Subject: [PATCH] [#4277] Fixed ConnectionProvider regression on exceptions --- .../java/org/jooq/impl/DefaultExecuteContext.java | 6 +++--- jOOQ/src/main/java/org/jooq/impl/Tools.java | 11 ++++++----- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultExecuteContext.java b/jOOQ/src/main/java/org/jooq/impl/DefaultExecuteContext.java index 029cc5c749..e637074358 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultExecuteContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultExecuteContext.java @@ -101,7 +101,7 @@ class DefaultExecuteContext implements ExecuteContext { private final int[] batchRows; // Transient attributes (created afresh per execution) - private transient ConnectionProvider connectionProvider; + transient ConnectionProvider connectionProvider; private transient Connection connection; private transient SettingsEnabledConnection wrappedConnection; private transient PreparedStatement statement; @@ -763,8 +763,8 @@ class DefaultExecuteContext implements ExecuteContext { public final Connection acquire() { // [#4277] Connections are acquired lazily in parent ExecuteContext. A child ExecuteContext - // may well need a Connection earlier than the parent, in case of which acquisition is - // forced in the parent as well. + // may well need a Connection earlier than the parent, in case of which acquisition is + // forced in the parent as well. if (connection == null) DefaultExecuteContext.this.connection(); diff --git a/jOOQ/src/main/java/org/jooq/impl/Tools.java b/jOOQ/src/main/java/org/jooq/impl/Tools.java index 4d5c7a2a30..9a5f4f7546 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Tools.java +++ b/jOOQ/src/main/java/org/jooq/impl/Tools.java @@ -2332,9 +2332,8 @@ final class Tools { ctx.resultSet(null); PreparedStatement statement = ctx.statement(); - if (statement != null) { + if (statement != null) consumeWarnings(ctx, listener); - } // [#385] Close statements only if not requested to keep open if (!keepStatement) { @@ -2348,9 +2347,11 @@ final class Tools { else { Connection connection = localConnection(); - if (connection != null) { - ctx.configuration().connectionProvider().release(connection); - } + // [#4277] We must release the connection on the ExecuteContext's + // ConnectionProvider, as the ctx.configuration().connectionProvider() + // is replaced by a ExecuteContextConnectionProvider instance. + if (connection != null && ((DefaultExecuteContext) ctx).connectionProvider != null) + ((DefaultExecuteContext) ctx).connectionProvider.release(connection); } }