From 505a424ef0fa9e9fd01697138db15cb444b48fb5 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Tue, 7 Feb 2017 15:58:41 +0100 Subject: [PATCH] [#5666] Add support for Oracle 12c result sets returned from procedures --- .../org/jooq/impl/AbstractResultQuery.java | 32 +++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java b/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java index 90a08f9689..1c3313f110 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java @@ -40,6 +40,7 @@ import static java.util.Arrays.asList; import static java.util.concurrent.Executors.newSingleThreadExecutor; // ... import static org.jooq.SQLDialect.CUBRID; +// ... import static org.jooq.SQLDialect.POSTGRES; // ... import static org.jooq.impl.DSL.field; @@ -251,6 +252,9 @@ abstract class AbstractResultQuery extends AbstractQuery imple protected final int execute(ExecuteContext ctx, ExecuteListener listener) throws SQLException { listener.executeStart(ctx); + // [#5666] Avoid calling Statement.getUpdateCount() twice + Integer updateCount = null; + // [#4511] [#4753] PostgreSQL doesn't like fetchSize with autoCommit == true int f = SettingsTools.getFetchSize(fetchSize, ctx.settings()); if (ctx.family() == POSTGRES && f != 0 && ctx.connection().getAutoCommit()) @@ -265,6 +269,28 @@ abstract class AbstractResultQuery extends AbstractQuery imple + + + + + + + + + + + + + + + + + + + + + + if (ctx.statement().execute()) { ctx.resultSet(ctx.statement().getResultSet()); } @@ -281,9 +307,9 @@ abstract class AbstractResultQuery extends AbstractQuery imple // not a result set. if (ctx.resultSet() == null) { DSLContext dsl = DSL.using(ctx.configuration()); - Field updateCount = field(name("UPDATE_COUNT"), int.class); - Result> r = dsl.newResult(updateCount); - r.add(dsl.newRecord(updateCount).values(ctx.statement().getUpdateCount())); + Field c = field(name("UPDATE_COUNT"), int.class); + Result> r = dsl.newResult(c); + r.add(dsl.newRecord(c).values(updateCount != null ? updateCount : ctx.statement().getUpdateCount())); ctx.resultSet(new MockResultSet(r)); }